{
                                Endpoint_ClearSETUP();
 
-                               while (!(Endpoint_IsOUTReceived()));
-
+                               while (!(Endpoint_IsOUTReceived()))
+                               {
+                                       if (USB_DeviceState == DEVICE_STATE_Unattached)
+                                         return;
+                               }
+                               
                                CDCInterfaceInfo->State.LineEncoding.BaudRateBPS = Endpoint_Read_32_LE();
                                CDCInterfaceInfo->State.LineEncoding.CharFormat  = Endpoint_Read_8();
                                CDCInterfaceInfo->State.LineEncoding.ParityType  = Endpoint_Read_8();
          return;
 
        #if !defined(NO_CLASS_DRIVER_AUTOFLUSH)
-       CDC_Device_Flush(CDCInterfaceInfo);
+       Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address);
+       
+       if (Endpoint_IsINReady())
+         CDC_Device_Flush(CDCInterfaceInfo);
        #endif
 }