-                       if (!(BUFF_STATICSIZE - USBtoUSART_Buffer.Elements))
-                         break;
-                         
-                       Buffer_StoreElement(&USBtoUSART_Buffer, CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface));
+                       int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
+
+                       /* Read bytes from the USB OUT endpoint into the USART transmit buffer */
+                       if (!(ReceivedByte < 0))
+                         RingBuffer_Insert(&USBtoUSART_Buffer, ReceivedByte);
+               }
+
+               /* Check if the UART receive buffer flush timer has expired or the buffer is nearly full */
+               uint16_t BufferCount = RingBuffer_GetCount(&USARTtoUSB_Buffer);
+               if ((TIFR0 & (1 << TOV0)) || (BufferCount > (uint8_t)(sizeof(USARTtoUSB_Buffer_Data) * .75)))
+               {
+                       /* Clear flush timer expiry flag */
+                       TIFR0 |= (1 << TOV0);
+
+                       /* Read bytes from the USART receive buffer into the USB IN endpoint */
+                       while (BufferCount--)
+                       {
+                               /* Try to send the next byte of data to the host, abort if there is an error without dequeuing */
+                               if (CDC_Device_SendByte(&VirtualSerial_CDC_Interface,
+                                                       RingBuffer_Peek(&USARTtoUSB_Buffer)) != ENDPOINT_READYWAIT_NoError)
+                               {
+                                       break;
+                               }
+
+                               /* Dequeue the already sent byte from the buffer now we have confirmed that no transmission error occurred */
+                               RingBuffer_Remove(&USARTtoUSB_Buffer);
+                       }