{
                                USB_MouseReport_Data_t MouseReportData;
 
-                               Endpoint_ClearSETUP();
-
                                /* Create the next mouse report for transmission to the host */
                                CreateMouseReport(&MouseReportData);
-       
+
+                               Endpoint_ClearSETUP();
+
                                /* Write the report data to the control endpoint */
                                Endpoint_Write_Control_Stream_LE(&MouseReportData, sizeof(MouseReportData));
-                               
+                               Endpoint_ClearOUT();
+
                                /* Clear the report data afterwards */
                                memset(&MouseReportData, 0, sizeof(MouseReportData));
-
-                               /* Finalize the stream transfer to send the last packet or clear the host abort */
-                               Endpoint_ClearOUT();
                        }
                
                        break;
                                /* Write the current protocol flag to the host */
                                Endpoint_Write_Byte(UsingReportProtocol);
                                
-                               /* Send the flag to the host */
                                Endpoint_ClearIN();
-
                                Endpoint_ClearStatusStage();
                        }
                        
                        if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
                        {
                                Endpoint_ClearSETUP();
-                               
+                               Endpoint_ClearStatusStage();
+
                                /* Set or clear the flag depending on what the host indicates that the current Protocol should be */
                                UsingReportProtocol = (USB_ControlRequest.wValue != 0);
-                               
-                               Endpoint_ClearStatusStage();
                        }
                        
                        break;
                        if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
                        {
                                Endpoint_ClearSETUP();
-                               
+                               Endpoint_ClearStatusStage();
+
                                /* Get idle period in MSB, must multiply by 4 to get the duration in milliseconds */
                                IdleCount = ((USB_ControlRequest.wValue & 0xFF00) >> 6);
-                               
-                               Endpoint_ClearStatusStage();
                        }
                        
                        break;
                                
                                /* Write the current idle duration to the host, must be divided by 4 before sent to host */
                                Endpoint_Write_Byte(IdleCount >> 2);
-                               
-                               /* Send the flag to the host */
-                               Endpoint_ClearIN();
 
+                               Endpoint_ClearIN();
                                Endpoint_ClearStatusStage();
                        }