}
                }
 
-               /* Load the next byte from the USART transmit buffer into the USART */
-               if (!(RingBuffer_IsEmpty(&USBtoUSART_Buffer)))
+               /* Load the next byte from the USART transmit buffer into the USART if transmit buffer space is available */
+               if (Serial_IsSendReady() && !(RingBuffer_IsEmpty(&USBtoUSART_Buffer)))
                  Serial_SendByte(RingBuffer_Remove(&USBtoUSART_Buffer));
 
                CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
 {
        uint8_t ReceivedByte = UDR1;
 
-       if (USB_DeviceState == DEVICE_STATE_Configured)
+       if ((USB_DeviceState == DEVICE_STATE_Configured) && !(RingBuffer_IsFull(&USARTtoUSB_Buffer)))
          RingBuffer_Insert(&USARTtoUSB_Buffer, ReceivedByte);
 }