diff --git a/devices/geiger/gqgmc.go b/devices/geiger/gqgmc.go
index 07b1031de74d540537012dcbf32a9ff805bd3d5b..1200de166e7c4dfa93931aca2fb94696cdd923aa 100644
--- a/devices/geiger/gqgmc.go
+++ b/devices/geiger/gqgmc.go
@@ -190,27 +190,24 @@ func (gc *GQGMCCounter) SerialNum() (string, error) {
 	return "", nil
 }
 
-// GetCPM returns CPM
-func (gc *GQGMCCounter) GetCPM() (uint16, error) {
-	buf, err := gc.communicate([]byte(cmdGetCPM), 2)
+func (gc *GQGMCCounter) getReading(what string) (uint16, error) {
+	buf, err := gc.communicate([]byte(what), 2)
 	if err != nil {
 		return 0, err
 	}
-	cpm := ((uint16(buf[0]) << 8) & 0x3f00)
-	cpm |= (uint16(buf[1]) & 0x00ff)
-	return cpm, nil
+	reading := ((uint16(buf[0]) << 8) & 0x3f00)
+	reading |= (uint16(buf[1]) & 0x00ff)
+	return reading, nil
+}
+
+// GetCPM returns CPM
+func (gc *GQGMCCounter) GetCPM() (uint16, error) {
+	return gc.getReading(cmdGetCPM)
 }
 
 // GetCPS returns CPS
 func (gc *GQGMCCounter) GetCPS() (uint16, error) {
-	//uint32_t cpssize = 2;          // 2 bytes of returned data
-	//communicate(get_cps_cmd, cps_char, cpssize);
-	// 1st byte is MSB, but note that upper two bits are reserved bits.
-	// Note that shifting and bitmasking performed in uP register, so
-	// endianess is irrevelant.
-	//cps_int |= ((uint16_t(cps_char[0]) << 8) & 0x3f00);
-	//cps_int |=  (uint16_t(cps_char[1]) & 0x00ff);
-	return 0, nil
+	return gc.getReading(cmdGetCPM)
 }
 
 // GetVoltage returns current battery voltage