-                       while (USARTtoUSB_Buffer.Count)
-                         CDC_Device_SendByte(&VirtualSerial_CDC_Interface, RingBuffer_AtomicRemove(&USARTtoUSB_Buffer));
+                       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);
+                       }