};\r
 \r
 /** Current TMC control request that is being processed */\r
-uint8_t RequestInProgress   = 0;\r
+uint8_t RequestInProgress = 0;\r
 \r
 /** Stream callback abort flag for bulk IN data */\r
-bool IsTMCBulkINReset      = false;\r
+bool IsTMCBulkINReset = false;\r
 \r
 /** Stream callback abort flag for bulk OUT data */\r
-bool IsTMCBulkOUTReset     = false;\r
+bool IsTMCBulkOUTReset = false;\r
 \r
 /** Last used tag value for data transfers */\r
 uint8_t CurrentTransferTag = 0;\r
 
                        static inline void Serial_Init(const uint32_t BaudRate,
                                                       const bool DoubleSpeed)
                        {
+                               UBRR1  = (DoubleSpeed ? SERIAL_2X_UBBRVAL(BaudRate) : SERIAL_UBBRVAL(BaudRate));
+
+                               UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
                                UCSR1A = (DoubleSpeed ? (1 << U2X1) : 0);
                                UCSR1B = ((1 << TXEN1)  | (1 << RXEN1));
-                               UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
                                
-                               DDRD  |= (1 << 3);      
+                               DDRD  |= (1 << 3);
                                PORTD |= (1 << 2);
-                               
-                               UBRR1  = (DoubleSpeed ? SERIAL_2X_UBBRVAL(BaudRate) : SERIAL_UBBRVAL(BaudRate));
                        }
 
                        /** Turns off the USART driver, disabling and returning used hardware to their default configuration. */
                        static inline void Serial_ShutDown(void)
                        {
-                               UCSR1A = 0;
                                UCSR1B = 0;
+                               UCSR1A = 0;
                                UCSR1C = 0;
+
+                               UBRR1  = 0;
                                
-                               DDRD  &= ~(1 << 3);     
+                               DDRD  &= ~(1 << 3);
                                PORTD &= ~(1 << 2);
-                               
-                               UBRR1  = 0;
                        }
 
                        /** Indicates whether a character has been received through the USART.
                                UDR1 = DataByte;
                        }
 
-                       /** Receives a byte from the USART.
+                       /** Receives a byte from the USART. This function blocks until a byte has been
+                        *  received; if non-blocking behaviour is required, test for a received character
+                        *  beforehand with \ref Serial_IsCharReceived().
                         *
                         *  \return Byte received from the USART.
                         */
 
   *  - Fixed MIDI_Device_SendEventPacket() not correctly waiting for the endpoint to become ready (thanks to Robin Green)
   *  - Fixed Benito and USBtoSerial projects not turning off the USART before reconfiguring it, which could cause incorrect
   *    operation to occur (thanks to Bob Paddock)
+  *  - Fixed Serial peripheral driver not turning off the USART before reconfiguring it, which would cause incorrect operation
+  *    to occur (thanks to Bob Paddock)
   *
   *  \section Sec_ChangeLog100513 Version 100513
   *  <b>New:</b>
 
                if (!(ReceivedByte < 0) && !(RingBuffer_IsFull(&USBtoUSART_Buffer)))
                  RingBuffer_AtomicInsert(&USBtoUSART_Buffer, (uint8_t)ReceivedByte);           
                
-               /* Check if the software USART flush timer has expired */
+               /* Check if the UART receive buffer flush timer has expired */
                if (TIFR0 & (1 << TOV0))
                {
                        TIFR0 |= (1 << TOV0);
 
        if (!(ReceivedByte < 0) && !(RingBuffer_IsFull(&USBtoUART_Buffer)))
          RingBuffer_AtomicInsert(&USBtoUART_Buffer, CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface));
        
-       /* Check if the software UART flush timer has expired */
+       /* Check if the UART receive buffer flush timer has expired */
        if (TIFR0 & (1 << TOV0))
        {
                TIFR0 |= (1 << TOV0);