diff --git a/ChangeLog b/ChangeLog
index 97cf7356..daea7b05 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-02-22  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+
+	* usb_libusb.c (usbdev_recv_frame): Fix a bug where a new recv
+	request was issued even though all desired data had aldready
+	been received.
+
 2014-02-21  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
 
 	* serial.h: Change the second parameter of the ser_open method
diff --git a/usb_libusb.c b/usb_libusb.c
index 8b512da7..b8e412a0 100644
--- a/usb_libusb.c
+++ b/usb_libusb.c
@@ -460,7 +460,7 @@ static int usbdev_recv_frame(union filedescriptor *fd, unsigned char *buf, size_
       n += rv;
       nbytes -= rv;
     }
-  while (rv == fd->usb.max_xfer);
+  while (nbytes > 0 && rv == fd->usb.max_xfer);
 
   if (nbytes < 0)
     return -1;