--- apcupsd-3.10.17a/src/drivers/usb/linux/linux-usb.c	2005-03-02 19:14:43.000000000 -0500
+++ apcupsd-3.10.17a.adk/src/drivers/usb/linux/linux-usb.c	2005-06-12 14:42:34.000000000 -0400
@@ -286,6 +286,10 @@
     return 1;
 }
 
+#define TV_DIFF_MS(a,b) \
+   ((b).tv_sec - (a).tv_sec) * 1000 + ((b).tv_usec - (a).tv_usec) / 1000;
+
+#define URB_DELAY_MS    100
 
 /*
  * Get a field value
@@ -298,10 +302,20 @@
     USB_INFO *info;
     USB_VALUE val;
     int exponent;
-
+    static struct timeval prev = {0};
+    struct timeval now;
+    int diff;
+    
     if (!ups->UPS_Cap[ci] || !my_data->info[ci]) {
 	return false;		      /* UPS does not have capability */
     }
+    
+    gettimeofday(&now, NULL);
+    diff = TV_DIFF_MS(prev, now);
+    if (diff < URB_DELAY_MS)
+       usleep((URB_DELAY_MS-diff)*1000);
+    gettimeofday(&prev, NULL);
+    
     info = my_data->info[ci];	      /* point to our info structure */
     rinfo.report_type = info->uref.report_type;
     rinfo.report_id = info->uref.report_id;
