diff --git a/devices/geiger/gqgmc.go b/devices/geiger/gqgmc.go
index 924661bdf926d85edbf839174a6e7c53b71b7ca7..3bc99756d67a269b44206a911d63cc82d7f94366 100644
--- a/devices/geiger/gqgmc.go
+++ b/devices/geiger/gqgmc.go
@@ -450,20 +450,22 @@ func (gc *GQGMCCounter) recv(length int) ([]byte, error) {
 	if err != nil {
 		return nil, err
 	}
+	read := n
 	if n != length {
 		for i := 0; i < 20; i++ {
-			fmt.Printf("%d(%d) ", n, len(buf))
-			n, err = gc.port.Read(buf[len(buf):])
+			fmt.Printf("%d(%d) ", n, read)
+			n, err = gc.port.Read(buf[read:])
 			if err != nil {
 				return nil, err
 			}
-			if len(buf) == length {
+			read += n
+			if read == length {
 				break
 			}
 		}
-		fmt.Printf("%d(%d)\n", n, len(buf))
+		fmt.Printf("%d(%d)\n", n, read)
 	}
-	if len(buf) != length {
+	if read != length {
 		fmt.Printf("Short read: %+v\n", buf)
 		return nil, fmt.Errorf("Short read (got: %d, wanted: %d)", n, length)
 	}