{
                /* Turn off the watchdog */
                MCUSR &= ~(1<<WDRF);
-               wdt_disable(); 
+               wdt_disable();
 
                /* Clear the boot key and jump to the user application */
                MagicBootKey = 0;
        /* Shut down the USB and other board hardware drivers */
        USB_Disable();
        LEDs_Disable();
-       
+
        /* Disable Bootloader active LED toggle timer */
        TIMSK1 = 0;
        TCCR1B = 0;
                case DFU_REQ_GETSTATUS:
                        Endpoint_ClearSETUP();
 
+                       while (!(Endpoint_IsINReady()))
+                       {
+                               if (USB_DeviceState == DEVICE_STATE_Unattached)
+                                 return;
+                       }
+
                        /* Write 8-bit status value */
                        Endpoint_Write_8(DFU_Status);
 
                case DFU_REQ_GETSTATE:
                        Endpoint_ClearSETUP();
 
+                       while (!(Endpoint_IsINReady()))
+                       {
+                               if (USB_DeviceState == DEVICE_STATE_Unattached)
+                                 return;
+                       }
+
                        /* Write the current device state to the endpoint */
                        Endpoint_Write_8(DFU_State);
 
 
                                        "CLS:PRINTER";
 
                                Endpoint_ClearSETUP();
+
+                               while (!(Endpoint_IsINReady()))
+                               {
+                                       if (USB_DeviceState == DEVICE_STATE_Unattached)
+                                         return;
+                               }
+
                                Endpoint_Write_16_BE(sizeof(PrinterIDString));
                                Endpoint_Write_Control_Stream_LE(PrinterIDString, strlen(PrinterIDString));
                                Endpoint_ClearStatusStage();
                        if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
                        {
                                Endpoint_ClearSETUP();
+
+                               while (!(Endpoint_IsINReady()))
+                               {
+                                       if (USB_DeviceState == DEVICE_STATE_Unattached)
+                                         return;
+                               }
+
                                Endpoint_Write_8(PRNT_PORTSTATUS_NOTERROR | PRNT_PORTSTATUS_SELECT);
                                Endpoint_ClearStatusStage();
                        }
 
   *     unknown SCSI command
   *   - Fixed incorrect HID report descriptor generated for 16-bit axis ranges by the HID_DESCRIPTOR_MOUSE() and HID_DESCRIPTOR_JOYSTICK()
   *     macros (thanks to Armory)
+  *   - Fixed race condition in the DFU class bootloader causing failed device reprogramming in some circumstances (thanks to Luis Mendes)
   *
   *  \section Sec_ChangeLog130303 Version 130303
   *  <b>New:</b>