while (Length || LastPacketFull)
        {
-               if (Endpoint_IsSETUPReceived())
-                 return ENDPOINT_RWCSTREAM_HostAborted;
-
-               if (Endpoint_IsOUTReceived())
-                 break;
+               uint8_t USB_DeviceState_LCL = USB_DeviceState;
                
-               if (USB_DeviceState == DEVICE_STATE_Unattached)
+               if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
                  return ENDPOINT_RWCSTREAM_DeviceDisconnected;
-               else if (USB_DeviceState == DEVICE_STATE_Suspended)
+               else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
                  return ENDPOINT_RWCSTREAM_BusSuspended;
-                 
+               else if (Endpoint_IsSETUPReceived())
+                 return ENDPOINT_RWCSTREAM_HostAborted;
+               else if (Endpoint_IsOUTReceived())
+                 break;
+
                if (Endpoint_IsINReady())
                {
                        uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint();
        
        while (!(Endpoint_IsOUTReceived()))
        {
-               if (USB_DeviceState == DEVICE_STATE_Unattached)
+               uint8_t USB_DeviceState_LCL = USB_DeviceState;
+
+               if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
                  return ENDPOINT_RWCSTREAM_DeviceDisconnected;
-               else if (USB_DeviceState == DEVICE_STATE_Suspended)
+               else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
                  return ENDPOINT_RWCSTREAM_BusSuspended;
        }