diff --git a/gyro_board/src/libusb-driver/libusb_wrap.cc b/gyro_board/src/libusb-driver/libusb_wrap.cc
index a297a9b..83cf245 100644
--- a/gyro_board/src/libusb-driver/libusb_wrap.cc
+++ b/gyro_board/src/libusb-driver/libusb_wrap.cc
@@ -163,4 +163,29 @@
   callback_(this, user_data_);
 }
 
+IsochronousTransfer::IsochronousTransfer(size_t packet_length,
+                                         int num_packets,
+                                         void (*callback)(Transfer *, void *),
+                                         void *user_data)
+    : Transfer(packet_length * num_packets, callback, user_data),
+      num_packets_(num_packets) {
+}
+
+void IsochronousTransfer::FillIsochronous(LibUSBDeviceHandle *device,
+                               unsigned char endpoint,
+                               unsigned int timeout) {
+  (void)device;
+  (void)endpoint;
+  (void)timeout;
+  /*libusb_fill_iso_transfer(transfer_,
+                           device->dev_handle_,
+                           endpoint,
+                           data_,
+                           data_length_,
+                           num_packets_,
+                           StaticTransferCallback,
+                           this,
+                           timeout);*/
+}
+
 }  // namespace libusb
diff --git a/gyro_board/src/libusb-driver/libusb_wrap.h b/gyro_board/src/libusb-driver/libusb_wrap.h
index 9713534..261cded 100644
--- a/gyro_board/src/libusb-driver/libusb_wrap.h
+++ b/gyro_board/src/libusb-driver/libusb_wrap.h
@@ -8,6 +8,7 @@
 class LibUSBDeviceHandle;
 namespace libusb {
 class Transfer;
+class IsochronousTransfer;
 }
 
 class LibUSB {
@@ -41,6 +42,7 @@
  private:
   friend class LibUSB; // For constructor
   friend class libusb::Transfer;  // for access to dev_handle_
+  friend class libusb::IsochronousTransfer;  // for access to dev_handle_
   // Takes ownership of the device handle and frees it when destructed.
   explicit LibUSBDeviceHandle(libusb_device_handle *dev_handle);
   libusb_device_handle *dev_handle_;
@@ -74,10 +76,12 @@
 
   const uint8_t *data() { return data_; }
 
- private:
+ protected:
   static void StaticTransferCallback(libusb_transfer *self) {
     static_cast<Transfer *>(self->user_data)->TransferCallback();
   }
+
+ private:
   void TransferCallback();
 
   libusb_transfer *const transfer_;
@@ -91,6 +95,21 @@
   DISALLOW_COPY_AND_ASSIGN(Transfer);
 };
 
+class IsochronousTransfer : public Transfer {
+ public:
+  IsochronousTransfer(size_t packet_length,
+                      int num_packets,
+                      void (*callback)(Transfer *, void *),
+                      void *user_data);
+
+  void FillIsochronous(LibUSBDeviceHandle *device,
+                       unsigned char endpoint,
+                       unsigned int timeout);
+
+ private:
+  const int num_packets_;
+};
+
 }  // namespace libusb
 
 #endif  // LIBUSB_H_
diff --git a/gyro_board/src/usb/LPCUSB/USB_SENSOR_STREAM.c b/gyro_board/src/usb/LPCUSB/USB_SENSOR_STREAM.c
index 576977f..4609c96 100644
--- a/gyro_board/src/usb/LPCUSB/USB_SENSOR_STREAM.c
+++ b/gyro_board/src/usb/LPCUSB/USB_SENSOR_STREAM.c
@@ -38,19 +38,24 @@
 
 #include "LPC17xx.h"
 
+#include "analog.h"
+
 #define usbMAX_SEND_BLOCK    ( 20 / portTICK_RATE_MS )
 #define usbRXBUFFER_LEN      ( 80 )
 #define usbTXBUFFER_LEN      ( 600 )
 
-#define INT_IN_EP    0x81 //read manual for picking these...
+#define INT_IN_EP     0x81 //read manual for picking these...
 #define INT_OUT_EP    0x04
 #define BULK_IN_EP    0x82
-#define BULK_OUT_EP    0x05
+#define BULK_OUT_EP   0x05
+#define ISOC_IN_EP    0x83
 
 #define MAX_PACKET_SIZE  64
 
 #define LE_WORD(x)    ((x)&0xFF),((x)>>8)
 
+static struct DataStruct usbPacket;
+
 static xQueueHandle xRxedChars = NULL, xCharsForTx = NULL;
 
 static const unsigned char abDescriptors[] = {
@@ -85,7 +90,7 @@
   DESC_INTERFACE,
   0x00,        // bInterfaceNumber
   0x00,        // bAlternateSetting
-  0x04,        // bNumEndPoints
+  0x05,        // bNumEndPoints
   0x0A,        // bInterfaceClass = data
   0x00,        // bInterfaceSubClass
   0x00,        // bInterfaceProtocol
@@ -118,6 +123,14 @@
   0x03,        // bmAttributes = intr
   LE_WORD(MAX_PACKET_SIZE),  // wMaxPacketSize
   0x01,        // bInterval
+  
+  // isoc data EP IN
+  0x07,
+  DESC_ENDPOINT,
+  ISOC_IN_EP,            // bEndpointAddress
+  0x0D,              // bmAttributes = isoc, synchronous, data endpoint
+  LE_WORD(MAX_PACKET_SIZE),  // wMaxPacketSize
+  0x01,            // bInterval  
 
   // string descriptors
   0x04,
@@ -217,11 +230,10 @@
     iLen = USBHwEPRead(bEP, abDataBuf, sizeof(abDataBuf));
     portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
 }
-#include "analog.h"
-static struct DataStruct usbPacket;
+
 static void DataIn(unsigned char bEP, unsigned char bEPStatus) {
     long lHigherPriorityTaskWoken = pdFALSE;
-  fillSensorPacket(&usbPacket);
+  	fillSensorPacket(&usbPacket);
     USBHwEPWrite(bEP, (unsigned char *)&usbPacket, sizeof(usbPacket));
     portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
 }
@@ -248,7 +260,7 @@
 
     // Don't block if not connected to USB.
     if (xQueueSend(xCharsForTx, &cc,
-                     USBIsConnected() ? usbMAX_SEND_BLOCK : 0) == pdPASS) {
+                   USBIsConnected() ? usbMAX_SEND_BLOCK : 0) == pdPASS) {
         return c;
     } else {
         return EOF;
@@ -271,7 +283,6 @@
     return -1;
 }
 
-
 /**
  * Interrupt handler
  *
@@ -281,21 +292,22 @@
   USBHwISR();
 }
 
-
 static void USBFrameHandler(unsigned short wFrame) {
   (void) wFrame;
-  if(uxQueueMessagesWaitingFromISR(xCharsForTx) > 0){
-    // data available, enable NAK interrupt on bulk in
+  if (uxQueueMessagesWaitingFromISR(xCharsForTx) > 0) {
+    // data available, enable interrupt instead of NAK on bulk in too
     USBHwNakIntEnable(INACK_BI | INACK_II);
-  }else{
+  } else {
     USBHwNakIntEnable(INACK_II);
   }
+
+  fillSensorPacket(&usbPacket);
+  USBHwEPWrite(ISOC_IN_EP, (unsigned char *)&usbPacket, sizeof(usbPacket));
 }
 
 void vUSBTask(void *pvParameters) {
   portTickType xLastFlashTime;
 
-  /* Just to prevent compiler warnings about the unused parameter. */
   (void) pvParameters;
   DBG("Initialising USB stack\n");
 
