diff --git a/Bootloaders/CDC/BootloaderCDC.c b/Bootloaders/CDC/BootloaderCDC.c
index cb6619edbe7230a3b8c44b6ace95ac55e068a658..99e0ccb4fdf43e490a2374a46d46a9465f2fe5a3 100644
--- a/Bootloaders/CDC/BootloaderCDC.c
+++ b/Bootloaders/CDC/BootloaderCDC.c
@@ -39,22 +39,22 @@
 /** Contains the current baud rate and other settings of the first virtual serial port. This must be retained as some
  *  operating systems will not open the port unless the settings can be set successfully.
  */
-CDC_Line_Coding_t LineEncoding = { .BaudRateBPS = 0,
-                                   .CharFormat  = OneStopBit,
-                                   .ParityType  = Parity_None,
-                                   .DataBits    = 8            };
+static CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 0,
+                                           .CharFormat  = CDC_LINEENCODING_OneStopBit,
+                                           .ParityType  = CDC_PARITY_None,
+                                           .DataBits    = 8                            };
 
 /** Current address counter. This stores the current address of the FLASH or EEPROM as set by the host,
  *  and is used when reading or writing to the AVRs memory (either FLASH or EEPROM depending on the issued
  *  command.)
  */
-uint32_t CurrAddress;
+static uint32_t CurrAddress;
 
 /** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
  *  via a watchdog reset. When cleared the bootloader will exit, starting the watchdog and entering an infinite
  *  loop until the AVR restarts and the application runs.
  */
-bool RunBootloader = true;
+static bool RunBootloader = true;
 
 
 /** Main program entry point. This routine configures the hardware required by the bootloader, then continuously
@@ -137,24 +137,24 @@ void EVENT_USB_Device_ControlRequest(void)
 	/* Process CDC specific control requests */
 	switch (USB_ControlRequest.bRequest)
 	{
-		case REQ_GetLineEncoding:
+		case CDC_REQ_GetLineEncoding:
 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
 			{
 				Endpoint_ClearSETUP();
 
 				/* Write the line coding data to the control endpoint */
-				Endpoint_Write_Control_Stream_LE(&LineEncoding, sizeof(CDC_Line_Coding_t));
+				Endpoint_Write_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t));
 				Endpoint_ClearOUT();
 			}
 
 			break;
-		case REQ_SetLineEncoding:
+		case CDC_REQ_SetLineEncoding:
 			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
 			{
 				Endpoint_ClearSETUP();
 
 				/* Read the line coding data in from the host into the global struct */
-				Endpoint_Read_Control_Stream_LE(&LineEncoding, sizeof(CDC_Line_Coding_t));
+				Endpoint_Read_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t));
 				Endpoint_ClearIN();
 			}
 
diff --git a/Bootloaders/CDC/BootloaderCDC.h b/Bootloaders/CDC/BootloaderCDC.h
index b4459137cbc3cf32d4a1fb2ad2e0f73bbf86cd84..b6bea11e45073fce9c8dfa1dcca5c5ebed166bfd 100644
--- a/Bootloaders/CDC/BootloaderCDC.h
+++ b/Bootloaders/CDC/BootloaderCDC.h
@@ -65,50 +65,10 @@
 		/** Eight character bootloader firmware identifier reported to the host when requested */
 		#define SOFTWARE_IDENTIFIER          "LUFACDC"
 
-		/** CDC Class specific request to get the current virtual serial port configuration settings. */
-		#define REQ_GetLineEncoding          0x21
-
-		/** CDC Class specific request to set the current virtual serial port configuration settings. */
-		#define REQ_SetLineEncoding          0x20
-
 	/* Type Defines: */
-		/** Type define for the virtual serial port line encoding settings, for storing the current USART configuration
-		 *  as set by the host via a class specific request.
-		 */
-		typedef struct
-		{
-			uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second */
-			uint8_t  CharFormat; /**< Character format of the virtual serial port, a value from the
-			                      *   CDCDevice_CDC_LineCodingFormats_t enum
-			                      */
-			uint8_t  ParityType; /**< Parity setting of the virtual serial port, a value from the
-			                      *   CDCDevice_LineCodingParity_t enum
-			                      */
-			uint8_t  DataBits; /**< Bits of data per character of the virtual serial port */
-		} CDC_Line_Coding_t;
-
 		/** Type define for a non-returning pointer to the start of the loaded application in flash memory. */
 		typedef void (*AppPtr_t)(void) ATTR_NO_RETURN;
 
-	/* Enums: */
-		/** Enum for the possible line encoding formats of a virtual serial port. */
-		enum CDCDevice_CDC_LineCodingFormats_t
-		{
-			OneStopBit          = 0, /**< Each frame contains one stop bit */
-			OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */
-			TwoStopBits         = 2, /**< Each frame contains two stop bits */
-		};
-
-		/** Enum for the possible line encoding parity settings of a virtual serial port. */
-		enum CDCDevice_LineCodingParity_t
-		{
-			Parity_None         = 0, /**< No parity bit mode on each frame */
-			Parity_Odd          = 1, /**< Odd parity bit mode on each frame */
-			Parity_Even         = 2, /**< Even parity bit mode on each frame */
-			Parity_Mark         = 3, /**< Mark parity bit mode on each frame */
-			Parity_Space        = 4, /**< Space parity bit mode on each frame */
-		};
-
 	/* Function Prototypes: */
 		void CDC_Task(void);
 		void SetupHardware(void);
diff --git a/Bootloaders/DFU/BootloaderDFU.c b/Bootloaders/DFU/BootloaderDFU.c
index 41b3e37baa4be78e6914e2853f4dd16a3e3e4531..717c934e59033fa979aa09efe15c53ab2d00f398 100644
--- a/Bootloaders/DFU/BootloaderDFU.c
+++ b/Bootloaders/DFU/BootloaderDFU.c
@@ -40,57 +40,57 @@
  *  other than erase. This is initially set to the value set by SECURE_MODE, and cleared by the bootloader
  *  once a memory erase has completed in a bootloader session.
  */
-bool IsSecure = SECURE_MODE;
+static bool IsSecure = SECURE_MODE;
 
 /** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
  *  via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application
  *  jumped to via an indirect jump to location 0x0000 (or other location specified by the host).
  */
-bool RunBootloader = true;
+static bool RunBootloader = true;
 
 /** Flag to indicate if the bootloader is waiting to exit. When the host requests the bootloader to exit and
  *  jump to the application address it specifies, it sends two sequential commands which must be properly
  *  acknowledged. Upon reception of the first the RunBootloader flag is cleared and the WaitForExit flag is set,
  *  causing the bootloader to wait for the final exit command before shutting down.
  */
-bool WaitForExit = false;
+static bool WaitForExit = false;
 
 /** Current DFU state machine state, one of the values in the DFU_State_t enum. */
-uint8_t DFU_State = dfuIDLE;
+static uint8_t DFU_State = dfuIDLE;
 
 /** Status code of the last executed DFU command. This is set to one of the values in the DFU_Status_t enum after
  *  each operation, and returned to the host when a Get Status DFU request is issued.
  */
-uint8_t DFU_Status = OK;
+static uint8_t DFU_Status = OK;
 
 /** Data containing the DFU command sent from the host. */
-DFU_Command_t SentCommand;
+static DFU_Command_t SentCommand;
 
 /** Response to the last issued Read Data DFU command. Unlike other DFU commands, the read command
  *  requires a single byte response from the bootloader containing the read data when the next DFU_UPLOAD command
  *  is issued by the host.
  */
-uint8_t ResponseByte;
+static uint8_t ResponseByte;
 
 /** Pointer to the start of the user application. By default this is 0x0000 (the reset vector), however the host
  *  may specify an alternate address when issuing the application soft-start command.
  */
-AppPtr_t AppStartPtr = (AppPtr_t)0x0000;
+static AppPtr_t AppStartPtr = (AppPtr_t)0x0000;
 
 /** 64-bit flash page number. This is concatenated with the current 16-bit address on USB AVRs containing more than
  *  64KB of flash memory.
  */
-uint8_t Flash64KBPage = 0;
+static uint8_t Flash64KBPage = 0;
 
 /** Memory start address, indicating the current address in the memory being addressed (either FLASH or EEPROM
  *  depending on the issued command from the host).
  */
-uint16_t StartAddr = 0x0000;
+static uint16_t StartAddr = 0x0000;
 
 /** Memory end address, indicating the end address to read to/write from in the memory being addressed (either FLASH
  *  of EEPROM depending on the issued command from the host).
  */
-uint16_t EndAddr = 0x0000;
+static uint16_t EndAddr = 0x0000;
 
 
 /** Main program entry point. This routine configures the hardware required by the bootloader, then continuously
@@ -180,7 +180,7 @@ void EVENT_USB_Device_ControlRequest(void)
 
 	switch (USB_ControlRequest.bRequest)
 	{
-		case REQ_DFU_DNLOAD:
+		case DFU_REQ_DNLOAD:
 			Endpoint_ClearSETUP();
 
 			/* Check if bootloader is waiting to terminate */
@@ -333,7 +333,7 @@ void EVENT_USB_Device_ControlRequest(void)
 			Endpoint_ClearStatusStage();
 
 			break;
-		case REQ_DFU_UPLOAD:
+		case DFU_REQ_UPLOAD:
 			Endpoint_ClearSETUP();
 
 			while (!(Endpoint_IsINReady()))
@@ -432,7 +432,7 @@ void EVENT_USB_Device_ControlRequest(void)
 
 			Endpoint_ClearStatusStage();
 			break;
-		case REQ_DFU_GETSTATUS:
+		case DFU_REQ_GETSTATUS:
 			Endpoint_ClearSETUP();
 
 			/* Write 8-bit status value */
@@ -452,7 +452,7 @@ void EVENT_USB_Device_ControlRequest(void)
 
 			Endpoint_ClearStatusStage();
 			break;
-		case REQ_DFU_CLRSTATUS:
+		case DFU_REQ_CLRSTATUS:
 			Endpoint_ClearSETUP();
 
 			/* Reset the status value variable to the default OK status */
@@ -460,7 +460,7 @@ void EVENT_USB_Device_ControlRequest(void)
 
 			Endpoint_ClearStatusStage();
 			break;
-		case REQ_DFU_GETSTATE:
+		case DFU_REQ_GETSTATE:
 			Endpoint_ClearSETUP();
 
 			/* Write the current device state to the endpoint */
@@ -470,7 +470,7 @@ void EVENT_USB_Device_ControlRequest(void)
 
 			Endpoint_ClearStatusStage();
 			break;
-		case REQ_DFU_ABORT:
+		case DFU_REQ_ABORT:
 			Endpoint_ClearSETUP();
 
 			/* Reset the current state variable to the default idle state */
diff --git a/Bootloaders/DFU/BootloaderDFU.h b/Bootloaders/DFU/BootloaderDFU.h
index 545548d842d21b8812c25f66fc65638b5c0fad94..1c1ebba6cf9bac4fe16acc02c4cbaad23f25f705 100644
--- a/Bootloaders/DFU/BootloaderDFU.h
+++ b/Bootloaders/DFU/BootloaderDFU.h
@@ -103,25 +103,25 @@
 		#define DFU_FILLER_BYTES_SIZE    26
 
 		/** DFU class command request to detach from the host. */
-		#define REQ_DFU_DETATCH          0x00
+		#define DFU_REQ_DETATCH          0x00
 
 		/** DFU class command request to send data from the host to the bootloader. */
-		#define REQ_DFU_DNLOAD           0x01
+		#define DFU_REQ_DNLOAD           0x01
 
 		/** DFU class command request to send data from the bootloader to the host. */
-		#define REQ_DFU_UPLOAD           0x02
+		#define DFU_REQ_UPLOAD           0x02
 
 		/** DFU class command request to get the current DFU status and state from the bootloader. */
-		#define REQ_DFU_GETSTATUS        0x03
+		#define DFU_REQ_GETSTATUS        0x03
 
 		/** DFU class command request to reset the current DFU status and state variables to their defaults. */
-		#define REQ_DFU_CLRSTATUS        0x04
+		#define DFU_REQ_CLRSTATUS        0x04
 
 		/** DFU class command request to get the current DFU state of the bootloader. */
-		#define REQ_DFU_GETSTATE         0x05
+		#define DFU_REQ_GETSTATE         0x05
 
 		/** DFU class command request to abort the current multi-request transfer and return to the dfuIDLE state. */
-		#define REQ_DFU_ABORT            0x06
+		#define DFU_REQ_ABORT            0x06
 
 		/** DFU command to begin programming the device's memory. */
 		#define COMMAND_PROG_START       0x01
diff --git a/Bootloaders/HID/BootloaderHID.c b/Bootloaders/HID/BootloaderHID.c
index 9c6b3e051a89f39f0c6a7225edf450d98dee08ff..174041e4560388de55bb2624f62708b78c9cd106 100644
--- a/Bootloaders/HID/BootloaderHID.c
+++ b/Bootloaders/HID/BootloaderHID.c
@@ -39,7 +39,7 @@
  *  via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application
  *  started via a forced watchdog reset.
  */
-bool RunBootloader = true;
+static bool RunBootloader = true;
 
 /** Main program entry point. This routine configures the hardware required by the bootloader, then continuously 
  *  runs the bootloader processing routine until instructed to soft-exit.
@@ -127,7 +127,7 @@ void EVENT_USB_Device_ControlRequest(void)
 				boot_spm_busy_wait();
 				
 				/* Write each of the FLASH page's bytes in sequence */
-				for (uint16_t PageByte = 0; PageByte < SPM_PAGESIZE; PageByte += 2)				
+				for (uint8_t PageWord = 0; PageWord < (SPM_PAGESIZE / 2); PageWord++)				
 				{
 					/* Check if endpoint is empty - if so clear it and wait until ready for next packet */
 					if (!(Endpoint_BytesInEndpoint()))
@@ -137,7 +137,7 @@ void EVENT_USB_Device_ControlRequest(void)
 					}
 
 					/* Write the next data word to the FLASH page */
-					boot_page_fill(PageAddress + PageByte, Endpoint_Read_Word_LE());
+					boot_page_fill(PageAddress + ((uint16_t)PageWord << 1), Endpoint_Read_Word_LE());
 				}
 
 				/* Write the filled FLASH page to memory */
diff --git a/Bootloaders/HID/BootloaderHID.txt b/Bootloaders/HID/BootloaderHID.txt
index 9b47ff3c636483baef9387b93e0b5b44851c0b67..51dceb8319d072bf53df238f5a477bec7d411d1e 100644
--- a/Bootloaders/HID/BootloaderHID.txt
+++ b/Bootloaders/HID/BootloaderHID.txt
@@ -51,9 +51,10 @@
  *  from PJRC, used with permission. This bootloader is delibertely non-compatible with the properietary HalfKay
  *  bootloader GUI; only the command line interface software accompanying this bootloader will work with it.
  *  
- *  Out of the box this bootloader builds for the USB1287, and will fit into 4KB of bootloader space. If
- *  you wish to enlarge this space and/or change the AVR model, you will need to edit the BOOT_START and MCU
- *  values in the accompanying makefile.
+ *  Out of the box this bootloader builds for the USB1287, and will fit into 2KB of bootloader space for the
+ *  Series 2 USB AVRs (ATMEGAxxU2, AT90USBxx2) or 4KB of bootloader space for all other models. If you wish to
+ *  enlarge this space and/or change the AVR model, you will need to edit the BOOT_START and MCU values in the
+ *  accompanying makefile.
  *
  *  \section SSec_Options Project Options
  *
diff --git a/Bootloaders/HID/Descriptors.c b/Bootloaders/HID/Descriptors.c
index 0a63b79255b2285254adcfe0c3aa797a2e870b59..f79d34686fd0f7b3f40af24dd34ef4d759839be8 100644
--- a/Bootloaders/HID/Descriptors.c
+++ b/Bootloaders/HID/Descriptors.c
@@ -43,12 +43,12 @@
  *  the device will send, and what it may be sent back from the host. Refer to the HID specification for
  *  more details on HID report descriptors.
  */
-USB_Descriptor_HIDReport_Datatype_t HIDReport[] =
+const USB_Descriptor_HIDReport_Datatype_t HIDReport[] =
 {
-	HID_RI_USAGE_PAGE(16, 0xFF00), /* Vendor Page 1 */
-	HID_RI_USAGE(8, 0x01), /* Vendor Usage 1 */
+	HID_RI_USAGE_PAGE(16, 0xFFDC), /* Vendor Page 0xDC */
+	HID_RI_USAGE(8, 0xFB), /* Vendor Usage 0xFB */
 	HID_RI_COLLECTION(8, 0x01), /* Vendor Usage 1 */
-	    HID_RI_USAGE(8, 0x03), /* Vendor Usage 3 */
+	    HID_RI_USAGE(8, 0x02), /* Vendor Usage 2 */
 	    HID_RI_LOGICAL_MINIMUM(8, 0x00),
 	    HID_RI_LOGICAL_MAXIMUM(8, 0xFF),
 	    HID_RI_REPORT_SIZE(8, 0x08),
@@ -62,7 +62,7 @@ USB_Descriptor_HIDReport_Datatype_t HIDReport[] =
  *  number of device configurations. The descriptor is read out by the USB host when the enumeration
  *  process begins.
  */
-USB_Descriptor_Device_t DeviceDescriptor =
+const USB_Descriptor_Device_t DeviceDescriptor =
 {
 	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 
@@ -89,7 +89,7 @@ USB_Descriptor_Device_t DeviceDescriptor =
  *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
  *  a configuration so that the host may correctly communicate with the USB device.
  */
-USB_Descriptor_Configuration_t ConfigurationDescriptor =
+const USB_Descriptor_Configuration_t ConfigurationDescriptor =
 {
 	.Config = 
 		{
@@ -154,33 +154,23 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                     const uint8_t wIndex,
                                     const void** const DescriptorAddress)
 {
-	const uint8_t DescriptorType   = (wValue >> 8);
+	const uint8_t DescriptorType = (wValue >> 8);
 
 	const void* Address = NULL;
 	uint16_t    Size    = NO_DESCRIPTOR;
 	
-	/* If/Else If chain compiles slightly smaller than a switch case */
 	if (DescriptorType == DTYPE_Device)
-	{
-		Address = &DeviceDescriptor;
-		Size    = sizeof(USB_Descriptor_Device_t);	
-	}
+	  Address = &DeviceDescriptor;
 	else if (DescriptorType == DTYPE_Configuration)
-	{
-		Address = &ConfigurationDescriptor;
-		Size    = sizeof(USB_Descriptor_Configuration_t);	
-	}
+	  Address = &ConfigurationDescriptor;
 	else if (DescriptorType == HID_DTYPE_HID)
-	{
-		Address = &ConfigurationDescriptor.HID_VendorHID;
-		Size    = sizeof(USB_HID_Descriptor_HID_t);
-	}
+	  Address = &ConfigurationDescriptor.HID_VendorHID;
 	else
-	{
-		Address = &HIDReport;
-		Size    = sizeof(HIDReport);
-	}
+	  Address = &HIDReport;
 
+	if (Address != NULL)
+	  Size = (Address == &HIDReport) ? sizeof(HIDReport) : ((USB_Descriptor_Header_t*)Address)->Size;
+	
 	*DescriptorAddress = Address;
 	return Size;
 }
diff --git a/Bootloaders/HID/makefile b/Bootloaders/HID/makefile
index 81561c3712c926df1c38334df0722f8a8c40c713..338bafa015529bdcad6141e5d790c2258556b50a 100644
--- a/Bootloaders/HID/makefile
+++ b/Bootloaders/HID/makefile
@@ -91,7 +91,7 @@ F_CLOCK = $(F_CPU)
 # Note that the bootloader size and start address given in AVRStudio is in words and not
 # bytes, and so will need to be doubled to obtain the byte address needed by AVR-GCC.
 FLASH_SIZE_KB        = 128
-BOOT_SECTION_SIZE_KB = 2
+BOOT_SECTION_SIZE_KB = 4
 BOOT_START           = 0x$(shell echo "obase=16; ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024" | bc)
 
 
@@ -124,6 +124,7 @@ LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENAB
 LUFA_OPTS += -D NO_INTERNAL_SERIAL
 LUFA_OPTS += -D NO_DEVICE_SELF_POWER
 LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP
+LUFA_OPTS += -D NO_SOF_EVENTS
 
 
 # Create the LUFA source path variables by including the LUFA root makefile
diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.c b/Demos/Device/ClassDriver/AudioInput/AudioInput.c
index 9c9b79daea07ff3299bcdddd9310792d5f9b5518..b197588a8efc988820ee105c19372aaeb293abed 100644
--- a/Demos/Device/ClassDriver/AudioInput/AudioInput.c
+++ b/Demos/Device/ClassDriver/AudioInput/AudioInput.c
@@ -51,6 +51,7 @@ USB_ClassInfo_Audio_Device_t Microphone_Audio_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
index 1ad146e166f1d60a51205bfb4caf0c62dd4bb74d..dbfd10b8bbca0d89468b10dd4a6444e9343a51e0 100644
--- a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
+++ b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
@@ -51,6 +51,7 @@ USB_ClassInfo_Audio_Device_t Speaker_Audio_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.c b/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.c
index e2cf4f0b2031ff67bd60f7b053e63fa8155324ec..a50e77e3f701e0f457df27d80325d9de0901133d 100644
--- a/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.c
+++ b/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.c
@@ -86,6 +86,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial2_CDC_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/ClassDriver/GenericHID/GenericHID.c b/Demos/Device/ClassDriver/GenericHID/GenericHID.c
index 657c2bfa917972340bec10072cb840cf9b8754fd..c6b857042557f4acc9dd51b1379a9f3a4cd340c1 100644
--- a/Demos/Device/ClassDriver/GenericHID/GenericHID.c
+++ b/Demos/Device/ClassDriver/GenericHID/GenericHID.c
@@ -37,10 +37,10 @@
 #include "GenericHID.h"
 
 /** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */
-uint8_t PrevHIDReportBuffer[GENERIC_REPORT_SIZE];
+static uint8_t PrevHIDReportBuffer[GENERIC_REPORT_SIZE];
 
 /** Structure to contain reports from the host, so that they can be echoed back upon request */
-struct
+static struct
 {
 	uint8_t  ReportID;
 	uint16_t ReportSize;
@@ -66,6 +66,7 @@ USB_ClassInfo_HID_Device_t Generic_HID_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/ClassDriver/Joystick/Joystick.c b/Demos/Device/ClassDriver/Joystick/Joystick.c
index 6e9f4ee7214a61b349cedf4709bdf0b31fa62ebf..3a8897fa86bed5018af57f19986349433b100de1 100644
--- a/Demos/Device/ClassDriver/Joystick/Joystick.c
+++ b/Demos/Device/ClassDriver/Joystick/Joystick.c
@@ -37,7 +37,7 @@
 #include "Joystick.h"
 
 /** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */
-uint8_t PrevJoystickHIDReportBuffer[sizeof(USB_JoystickReport_Data_t)];
+static uint8_t PrevJoystickHIDReportBuffer[sizeof(USB_JoystickReport_Data_t)];
 
 /** LUFA HID Class driver interface configuration and state information. This structure is
  *  passed to all HID Class driver functions, so that multiple instances of the same class
@@ -58,6 +58,7 @@ USB_ClassInfo_HID_Device_t Joystick_HID_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/ClassDriver/Keyboard/Keyboard.c b/Demos/Device/ClassDriver/Keyboard/Keyboard.c
index 7777b6f1bae65bf77f6ecdfdf445136ce5f0eb15..42ea12d805985f93a46f5f0b175163ccb8b9c67f 100644
--- a/Demos/Device/ClassDriver/Keyboard/Keyboard.c
+++ b/Demos/Device/ClassDriver/Keyboard/Keyboard.c
@@ -37,7 +37,7 @@
 #include "Keyboard.h"
 
 /** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */
-uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
+static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
 
 /** LUFA HID Class driver interface configuration and state information. This structure is
  *  passed to all HID Class driver functions, so that multiple instances of the same class
@@ -58,6 +58,7 @@ USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =
 			},
     };
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
index 5563cda727e60f3e1fbd2035c087807bbeb340c7..8b30c463e4a4b47aef5ddd8b806ce40d811ec81b 100644
--- a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
+++ b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
@@ -37,10 +37,10 @@
 #include "KeyboardMouse.h"
 
 /** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */
-uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
+static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
 
 /** Buffer to hold the previously generated Mouse HID report, for comparison purposes inside the HID class driver. */
-uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)];
+static uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)];
 
 /** LUFA HID Class driver interface configuration and state information. This structure is
  *  passed to all HID Class driver functions, so that multiple instances of the same class
@@ -81,6 +81,7 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.c b/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.c
index e936443b2432265a7a6778a64a6ab752e35664d6..307e330d3a99a6e550565be6fe9f2baf77772999 100644
--- a/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.c
+++ b/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.c
@@ -37,7 +37,7 @@
 #include "KeyboardMouseMultiReport.h"
 
 /** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */
-uint8_t PrevHIDReportBuffer[MAX(sizeof(USB_KeyboardReport_Data_t), sizeof(USB_MouseReport_Data_t))];
+static uint8_t PrevHIDReportBuffer[MAX(sizeof(USB_KeyboardReport_Data_t), sizeof(USB_MouseReport_Data_t))];
 
 /** LUFA HID Class driver interface configuration and state information. This structure is
  *  passed to all HID Class driver functions, so that multiple instances of the same class
@@ -58,6 +58,7 @@ USB_ClassInfo_HID_Device_t Device_HID_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/ClassDriver/MIDI/MIDI.c b/Demos/Device/ClassDriver/MIDI/MIDI.c
index da2e7c132171361db1acb2dc63981ca02c536fee..cbf119869906ab7b65953da3423d739014dbd879 100644
--- a/Demos/Device/ClassDriver/MIDI/MIDI.c
+++ b/Demos/Device/ClassDriver/MIDI/MIDI.c
@@ -56,6 +56,7 @@ USB_ClassInfo_MIDI_Device_t Keyboard_MIDI_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c b/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c
index be6a7903a023d48b9e5fcd315b2bfc589fc4a2fd..14421dfdc4802d7fef0b6ceedbeca54923f15cfc 100644
--- a/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c
+++ b/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c
@@ -41,7 +41,7 @@
 /** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
  *  features and capabilities.
  */
-SCSI_Inquiry_Response_t InquiryData =
+static const SCSI_Inquiry_Response_t InquiryData =
 	{
 		.DeviceType          = DEVICE_TYPE_BLOCK,
 		.PeripheralQualifier = 0,
@@ -73,7 +73,7 @@ SCSI_Inquiry_Response_t InquiryData =
 /** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE
  *  command is issued. This gives information on exactly why the last command failed to complete.
  */
-SCSI_Request_Sense_Response_t SenseData =
+static SCSI_Request_Sense_Response_t SenseData =
 	{
 		.ResponseCode        = 0x70,
 		.AdditionalLength    = 0x0A,
diff --git a/Demos/Device/ClassDriver/MassStorage/MassStorage.c b/Demos/Device/ClassDriver/MassStorage/MassStorage.c
index b19279873f90413e84c0da315d904604e2a960b5..87b8500de096cf09f6034a448f775347a99fc9d5 100644
--- a/Demos/Device/ClassDriver/MassStorage/MassStorage.c
+++ b/Demos/Device/ClassDriver/MassStorage/MassStorage.c
@@ -58,6 +58,7 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/SCSI.c b/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/SCSI.c
index 83719bf786aef9caa85abccc938fbae40001b7e7..eec83086ca7e9503f3be2c36ddb94a8e1d299d31 100644
--- a/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/SCSI.c
+++ b/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/SCSI.c
@@ -41,7 +41,7 @@
 /** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
  *  features and capabilities.
  */
-SCSI_Inquiry_Response_t InquiryData =
+static const SCSI_Inquiry_Response_t InquiryData =
 	{
 		.DeviceType          = DEVICE_TYPE_BLOCK,
 		.PeripheralQualifier = 0,
@@ -73,7 +73,7 @@ SCSI_Inquiry_Response_t InquiryData =
 /** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE
  *  command is issued. This gives information on exactly why the last command failed to complete.
  */
-SCSI_Request_Sense_Response_t SenseData =
+static SCSI_Request_Sense_Response_t SenseData =
 	{
 		.ResponseCode        = 0x70,
 		.AdditionalLength    = 0x0A,
diff --git a/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c b/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c
index 6a081963786bf57693daee053e5da06df518c0f6..f891ec9143975e3433ff46efce590458bbd503d8 100644
--- a/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c
+++ b/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c
@@ -60,7 +60,7 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface =
 	};
 
 /** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */
-uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
+static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
 
 /** LUFA HID Class driver interface configuration and state information. This structure is
  *  passed to all HID Class driver functions, so that multiple instances of the same class
diff --git a/Demos/Device/ClassDriver/Mouse/Mouse.c b/Demos/Device/ClassDriver/Mouse/Mouse.c
index b09c4cb5b3990a9b4f47bb8585a91242e69f245e..bc0153f0808c9a8b0a866853cc17a0ab19af6e01 100644
--- a/Demos/Device/ClassDriver/Mouse/Mouse.c
+++ b/Demos/Device/ClassDriver/Mouse/Mouse.c
@@ -37,7 +37,7 @@
 #include "Mouse.h"
 
 /** Buffer to hold the previously generated Mouse HID report, for comparison purposes inside the HID class driver. */
-uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)];
+static uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)];
 
 /** LUFA HID Class driver interface configuration and state information. This structure is
  *  passed to all HID Class driver functions, so that multiple instances of the same class
@@ -58,6 +58,7 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c b/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c
index 585604672f7ecb83a92f7e3ac2c3a4dd905fd5d6..e14f3f1de6de158bc4202d9283413a4ec9f0db0a 100644
--- a/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c
+++ b/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c
@@ -63,6 +63,7 @@ USB_ClassInfo_RNDIS_Device_t Ethernet_RNDIS_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.c b/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.c
index 6dac7b9b01d98836b8a0a07dd9cfc7f4975ff159..c532f4f9dd8a141309b769fa1950ab573c29f8ab 100644
--- a/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.c
+++ b/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.c
@@ -65,6 +65,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
  */
 static FILE USBSerialStream;
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.c b/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.c
index 30e9cdff0b2ad6e55c4d63b8010d335b5c776473..849e0634c591883673746a0fd1fc900de348ddd3 100644
--- a/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.c
+++ b/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.c
@@ -61,7 +61,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
 	};
 
 /** Buffer to hold the previously generated Mouse HID report, for comparison purposes inside the HID class driver. */
-uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)];
+static uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)];
 
 /** LUFA HID Class driver interface configuration and state information. This structure is
  *  passed to all HID Class driver functions, so that multiple instances of the same class
@@ -82,6 +82,7 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
index a2f3cca865de3b40c59bf89857614046595674e8..c393da8ae574b4cf9204332d14c48e1e7ed2d2d5 100644
--- a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
+++ b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
@@ -53,19 +53,19 @@ TMC_Capabilities_t Capabilities =
 	};
 
 /** Current TMC control request that is being processed */
-uint8_t RequestInProgress = 0;
+static uint8_t RequestInProgress = 0;
 
 /** Stream callback abort flag for bulk IN data */
-bool IsTMCBulkINReset = false;
+static bool IsTMCBulkINReset = false;
 
 /** Stream callback abort flag for bulk OUT data */
-bool IsTMCBulkOUTReset = false;
+static bool IsTMCBulkOUTReset = false;
 
 /** Last used tag value for data transfers */
-uint8_t CurrentTransferTag = 0;
+static uint8_t CurrentTransferTag = 0;
 
 /** Length of last data transfer, for reporting to the host in case an in-progress transfer is aborted */
-uint32_t LastTransferLength = 0;
+static uint32_t LastTransferLength = 0;
 
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.c b/Demos/Device/LowLevel/AudioInput/AudioInput.c
index ab5af7364d7bb347c3e78984620cedb05fd98099..ac819c1b0e0410eecd02f651c14a6c8c567c855a 100644
--- a/Demos/Device/LowLevel/AudioInput/AudioInput.c
+++ b/Demos/Device/LowLevel/AudioInput/AudioInput.c
@@ -37,7 +37,8 @@
 #include "AudioInput.h"
 
 /** Flag to indicate if the streaming audio alternative interface has been selected by the host. */
-bool StreamingAudioInterfaceSelected = false;
+static bool StreamingAudioInterfaceSelected = false;
+
 
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
index 82607323053d46eed15b10d0c6808119b069fcad..64a297315b0015021c9611252e4db98c0c84d9c9 100644
--- a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
+++ b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
@@ -37,7 +37,8 @@
 #include "AudioOutput.h"
 
 /** Flag to indicate if the streaming audio alternative interface has been selected by the host. */
-bool StreamingAudioInterfaceSelected = false;
+static bool StreamingAudioInterfaceSelected = false;
+
 
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
diff --git a/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.c b/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.c
index 14aa0be7152774ccbc6546e0d34e7a311d08906e..b9391296bb988820b60b208c21b038536b2b7522 100644
--- a/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.c
+++ b/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.c
@@ -44,10 +44,10 @@
  *  It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical
  *  serial link characteristics and instead sends and receives data in endpoint streams.
  */
-CDC_LineEncoding_t LineEncoding1 = { .BaudRateBPS = 0,
-                                     .CharFormat  = CDC_LINEENCODING_OneStopBit,
-                                     .ParityType  = CDC_PARITY_None,
-                                     .DataBits    = 8                            };
+static CDC_LineEncoding_t LineEncoding1 = { .BaudRateBPS = 0,
+                                            .CharFormat  = CDC_LINEENCODING_OneStopBit,
+                                            .ParityType  = CDC_PARITY_None,
+                                            .DataBits    = 8                            };
 
 /** Contains the current baud rate and other settings of the second virtual serial port. While this demo does not use
  *  the physical USART and thus does not use these settings, they must still be retained and returned to the host
@@ -57,10 +57,10 @@ CDC_LineEncoding_t LineEncoding1 = { .BaudRateBPS = 0,
  *  It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical
  *  serial link characteristics and instead sends and receives data in endpoint streams.
  */
-CDC_LineEncoding_t LineEncoding2 = { .BaudRateBPS = 0,
-                                     .CharFormat  = CDC_LINEENCODING_OneStopBit,
-                                     .ParityType  = CDC_PARITY_None,
-                                     .DataBits    = 8                            };
+static CDC_LineEncoding_t LineEncoding2 = { .BaudRateBPS = 0,
+                                            .CharFormat  = CDC_LINEENCODING_OneStopBit,
+                                            .ParityType  = CDC_PARITY_None,
+                                            .DataBits    = 8                            };
 
 
 /** Main program entry point. This routine configures the hardware required by the application, then
diff --git a/Demos/Device/LowLevel/Keyboard/Keyboard.c b/Demos/Device/LowLevel/Keyboard/Keyboard.c
index 94f0f7deba52878127827fc091e2418607be971f..5ff724778226682e2150c99de747198d51f8ceed 100644
--- a/Demos/Device/LowLevel/Keyboard/Keyboard.c
+++ b/Demos/Device/LowLevel/Keyboard/Keyboard.c
@@ -40,18 +40,18 @@
 /** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot
  *  protocol reporting mode.
  */
-bool UsingReportProtocol = true;
+static bool UsingReportProtocol = true;
 
 /** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports
  *  for either the entire idle duration, or until the report status changes (e.g. the user presses a key).
  */
-uint16_t IdleCount = 500;
+static uint16_t IdleCount = 500;
 
 /** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle
  *  milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request
  *  the current idle period via a Get Idle HID class request, thus its value must be preserved.
  */
-uint16_t IdleMSRemaining = 0;
+static uint16_t IdleMSRemaining = 0;
 
 
 /** Main program entry point. This routine configures the hardware required by the application, then
diff --git a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c
index fbb742ca498b9fc2c1cbd04c25b5079b65cdedd5..ca061eef812b79ade1648e8dd2301197b538adde 100644
--- a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c
+++ b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c
@@ -38,10 +38,10 @@
 #include "KeyboardMouse.h"
 
 /** Global structure to hold the current keyboard interface HID report, for transmission to the host */
-USB_KeyboardReport_Data_t KeyboardReportData;
+static USB_KeyboardReport_Data_t KeyboardReportData;
 
 /** Global structure to hold the current mouse interface HID report, for transmission to the host */
-USB_MouseReport_Data_t MouseReportData;
+static USB_MouseReport_Data_t MouseReportData;
 
 
 /** Main program entry point. This routine configures the hardware required by the application, then
diff --git a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c
index 0400cc2c6e2304278a243dc2407ebc9f0876527f..770d0f7bcd2ce8323f38f8eb285c57e5a31ae5ec 100644
--- a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c
+++ b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c
@@ -41,7 +41,7 @@
 /** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
  *  features and capabilities.
  */
-SCSI_Inquiry_Response_t InquiryData =
+static const SCSI_Inquiry_Response_t InquiryData =
 	{
 		.DeviceType          = DEVICE_TYPE_BLOCK,
 		.PeripheralQualifier = 0,
@@ -73,7 +73,7 @@ SCSI_Inquiry_Response_t InquiryData =
 /** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE
  *  command is issued. This gives information on exactly why the last command failed to complete.
  */
-SCSI_Request_Sense_Response_t SenseData =
+static SCSI_Request_Sense_Response_t SenseData =
 	{
 		.ResponseCode        = 0x70,
 		.AdditionalLength    = 0x0A,
diff --git a/Demos/Device/LowLevel/Mouse/Mouse.c b/Demos/Device/LowLevel/Mouse/Mouse.c
index 808cf50b0d05f9747f8553d58e06ba53f2d3ce7a..ef6c911cc90314f929e3c4e65c0df9b794a2a36c 100644
--- a/Demos/Device/LowLevel/Mouse/Mouse.c
+++ b/Demos/Device/LowLevel/Mouse/Mouse.c
@@ -39,18 +39,18 @@
 /** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot
  *  protocol reporting mode.
  */
-bool UsingReportProtocol = true;
+static bool UsingReportProtocol = true;
 
 /** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports
  *  for either the entire idle duration, or until the report status changes (e.g. the user moves the mouse).
  */
-uint16_t IdleCount = 0;
+static uint16_t IdleCount = 0;
 
 /** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle
  *  milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request
  *  the current idle period via a Get Idle HID class request, thus its value must be preserved.
  */
-uint16_t IdleMSRemaining = 0;
+static uint16_t IdleMSRemaining = 0;
 
 
 /** Main program entry point. This routine configures the hardware required by the application, then
diff --git a/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.c b/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.c
index e841ab530f3fdf137bf6d1ded5c18616ea7e343e..f4d3d4dd2954f0edb5764907b68935d34b9bf820 100644
--- a/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.c
+++ b/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.c
@@ -44,10 +44,11 @@
  *  It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical
  *  serial link characteristics and instead sends and receives data in endpoint streams.
  */
-CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 0,
-                                    .CharFormat  = CDC_LINEENCODING_OneStopBit,
-                                    .ParityType  = CDC_PARITY_None,
-                                    .DataBits    = 8                            };
+static CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 0,
+                                           .CharFormat  = CDC_LINEENCODING_OneStopBit,
+                                           .ParityType  = CDC_PARITY_None,
+                                           .DataBits    = 8                            };
+
 
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
diff --git a/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c b/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c
index 664839ca20c6574874d9d659d94a9640cd0ba640..74c4b090860a392848e0847217508ad21424d295 100644
--- a/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c
+++ b/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c
@@ -37,7 +37,7 @@
 #include "DeviceFunctions.h"
 
 /** Buffer to hold the previously generated Mouse Device HID report, for comparison purposes inside the HID class driver. */
-uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)];
+static uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)];
 
 /** LUFA HID Class driver interface configuration and state information. This structure is
  *  passed to all HID Class driver functions, so that multiple instances of the same class
diff --git a/Demos/Host/ClassDriver/JoystickHostWithParser/JoystickHostWithParser.c b/Demos/Host/ClassDriver/JoystickHostWithParser/JoystickHostWithParser.c
index 4a53b7c7a22e5418c2b522d54c74a73ae7b1b91a..4ed0bfb8b8ac409a8b62c8269ce4895f41595548 100644
--- a/Demos/Host/ClassDriver/JoystickHostWithParser/JoystickHostWithParser.c
+++ b/Demos/Host/ClassDriver/JoystickHostWithParser/JoystickHostWithParser.c
@@ -37,7 +37,7 @@
 #include "JoystickHostWithParser.h"
 
 /** Processed HID report descriptor items structure, containing information on each HID report element */
-HID_ReportInfo_t HIDReportInfo;
+static HID_ReportInfo_t HIDReportInfo;
 
 /** LUFA HID Class driver interface configuration and state information. This structure is
  *  passed to all HID Class driver functions, so that multiple instances of the same class
diff --git a/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.c b/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.c
index 4ad083e036e106e64278d2e11d3bdf1b041e0807..abb391ceef2ed71f9926bccec664c25ab0a858e9 100644
--- a/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.c
+++ b/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.c
@@ -37,7 +37,7 @@
 #include "KeyboardHostWithParser.h"
 
 /** Processed HID report descriptor items structure, containing information on each HID report element */
-HID_ReportInfo_t HIDReportInfo;
+static HID_ReportInfo_t HIDReportInfo;
 
 /** LUFA HID Class driver interface configuration and state information. This structure is
  *  passed to all HID Class driver functions, so that multiple instances of the same class
diff --git a/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c b/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c
index c9db1ec029b9b7ca28b8034c16c2f70d69189a78..8fd49f2a7d767992cfaf68f9645e7bd28c2617b5 100644
--- a/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c
+++ b/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c
@@ -37,7 +37,7 @@
 #include "MouseHostWithParser.h"
 
 /** Processed HID report descriptor items structure, containing information on each HID report element */
-HID_ReportInfo_t HIDReportInfo;
+static HID_ReportInfo_t HIDReportInfo;
 
 /** LUFA HID Class driver interface configuration and state information. This structure is
  *  passed to all HID Class driver functions, so that multiple instances of the same class
diff --git a/Demos/Host/ClassDriver/PrinterHost/PrinterHost.c b/Demos/Host/ClassDriver/PrinterHost/PrinterHost.c
index 3fb2b29d13a8ad58ec5b8eadc5ac736d41345a85..8d51165e661f67fe1c1b9ddd1725160995b61d6a 100644
--- a/Demos/Host/ClassDriver/PrinterHost/PrinterHost.c
+++ b/Demos/Host/ClassDriver/PrinterHost/PrinterHost.c
@@ -52,6 +52,7 @@ USB_ClassInfo_PRNT_Host_t Printer_PRNT_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine configures the hardware required by the application, then
  *  enters a loop to run the application tasks in sequence.
  */
diff --git a/Demos/Host/ClassDriver/RNDISEthernetHost/RNDISEthernetHost.c b/Demos/Host/ClassDriver/RNDISEthernetHost/RNDISEthernetHost.c
index d59325b8a9ac3fe428e3f5191423fd1696143ca7..d19e5a4f05f39b7a5124af6328c6be34fb8f302d 100644
--- a/Demos/Host/ClassDriver/RNDISEthernetHost/RNDISEthernetHost.c
+++ b/Demos/Host/ClassDriver/RNDISEthernetHost/RNDISEthernetHost.c
@@ -37,7 +37,7 @@
 #include "RNDISEthernetHost.h"
 
 /** Buffer to hold incoming and outgoing Ethernet packets. */
-uint8_t PacketBuffer[1024];
+static int8_t PacketBuffer[1024];
 
 /** LUFA RNDIS Class driver interface configuration and state information. This structure is
  *  passed to all RNDIS Class driver functions, so that multiple instances of the same class
@@ -60,6 +60,7 @@ USB_ClassInfo_RNDIS_Host_t Ethernet_RNDIS_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine configures the hardware required by the application, then
  *  enters a loop to run the application tasks in sequence.
  */
diff --git a/Demos/Host/ClassDriver/StillImageHost/StillImageHost.c b/Demos/Host/ClassDriver/StillImageHost/StillImageHost.c
index 643374db02d09347cc957eeebfeeeaa48d5cb396..91c482af86180f81023373da4d41fb99f478f656 100644
--- a/Demos/Host/ClassDriver/StillImageHost/StillImageHost.c
+++ b/Demos/Host/ClassDriver/StillImageHost/StillImageHost.c
@@ -55,6 +55,7 @@ USB_ClassInfo_SI_Host_t DigitalCamera_SI_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine configures the hardware required by the application, then
  *  enters a loop to run the application tasks in sequence.
  */
diff --git a/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.c b/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.c
index 5d259ced2ad9e0fe037b54bff4d514ad3f759935..4668908521b98d94c1360853c30e07154a40b712 100644
--- a/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.c
+++ b/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.c
@@ -55,6 +55,7 @@ USB_ClassInfo_CDC_Host_t VirtualSerial_CDC_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine configures the hardware required by the application, then
  *  enters a loop to run the application tasks in sequence.
  */
diff --git a/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c b/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c
index ffd949ed3bec3cd72c45c7a513daa359f8b56c00..f9cec416838a65c7234ad2cf71e81a66566d6628 100644
--- a/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c
+++ b/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c
@@ -48,7 +48,7 @@ bool    USB_RemoteWakeupEnabled;
 
 void USB_Device_ProcessControlRequest(void)
 {
-	uint8_t* RequestHeader  = (uint8_t*)&USB_ControlRequest;
+	uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest;
 
 	for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++)
 	  *(RequestHeader++) = Endpoint_Read_Byte();
@@ -123,10 +123,10 @@ static void USB_Device_SetAddress(void)
 
 		while (!(Endpoint_IsINReady()));
 
-		USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default;
-
 		USB_Device_SetDeviceAddress(DeviceAddress);
 	}
+	
+	USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default;
 }
 
 static void USB_Device_SetConfiguration(void)
diff --git a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
index b7e21602a440de1499b9a07b421843a159a088d7..fdcfef27263fb682fc389a2f8daa86285518cdc9 100644
--- a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
+++ b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
@@ -55,19 +55,19 @@ void USB_INT_DisableAllInterrupts(void)
 void USB_INT_ClearAllInterrupts(void)
 {
 	#if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
-	USBINT  = 0;
+	USBINT = 0;
 	#endif
 
 	#if defined(USB_CAN_BE_BOTH)
-	OTGINT  = 0;
+	OTGINT = 0;
 	#endif
 
 	#if defined(USB_CAN_BE_HOST)
-	UHINT   = 0;
+	UHINT  = 0;
 	#endif
 
 	#if defined(USB_CAN_BE_DEVICE)
-	UDINT   = 0;
+	UDINT  = 0;
 	#endif
 }
 
diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c
index 7e8695503bb165f36d01623d05c668f9001a8697..373e191497d6e0f604d04fba97b25ea303a88262 100644
--- a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c
+++ b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c
@@ -108,10 +108,10 @@ static uint16_t TimerCompareFromSCKDuration[] PROGMEM =
 bool HardwareSPIMode = true;
 
 /** Software SPI data register for sending and receiving */
-volatile uint8_t SoftSPI_Data;
+static volatile uint8_t SoftSPI_Data;
 
 /** Number of bits left to transfer in the software SPI driver */
-volatile uint8_t SoftSPI_BitsRemaining;
+static volatile uint8_t SoftSPI_BitsRemaining;
 
 
 /** ISR to handle software SPI transmission and reception */
diff --git a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c
index 7a2c986cad6ebd669d54f39d56cf28998d821677..3c1a88130a0b98099893bc688ddc8f49fe2dff8a 100644
--- a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c
+++ b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c
@@ -37,7 +37,7 @@
 #include "V2ProtocolParams.h"
 
 /* Non-Volatile Parameter Values for EEPROM storage */
-uint8_t EEMEM EEPROM_Rest_Polarity = 0x00;
+static uint8_t EEMEM EEPROM_Rest_Polarity = 0x00;
 
 /* Volatile Parameter Values for RAM storage */
 static ParameterItem_t ParameterTable[] =
diff --git a/Projects/Benito/Benito.c b/Projects/Benito/Benito.c
index 26b5ad2b8053ebed57fa04ec7d55a0977e834e52..9db6a3f843125dfb35a82c6d7bd2be363a8e577e 100644
--- a/Projects/Benito/Benito.c
+++ b/Projects/Benito/Benito.c
@@ -37,10 +37,10 @@
 #include "Benito.h"
 
 /** Circular buffer to hold data from the serial port before it is sent to the host. */
-RingBuffer_t USARTtoUSB_Buffer;
+static RingBuffer_t USARTtoUSB_Buffer;
 
 /** Underlying data buffer for \ref USARTtoUSB_Buffer, where the stored bytes are located. */
-uint8_t      USARTtoUSB_Buffer_Data[128];
+static uint8_t      USARTtoUSB_Buffer_Data[128];
 
 /** Pulse generation counters to keep track of the number of milliseconds remaining for each pulse type */
 volatile struct
diff --git a/Projects/Incomplete/StandaloneProgrammer/DiskDevice.c b/Projects/Incomplete/StandaloneProgrammer/DiskDevice.c
index 0eca0d799b772be13d0a534e11c28e8ff93cff9d..8a8c97760ffa5f980f16edbe7a1035459e062968 100644
--- a/Projects/Incomplete/StandaloneProgrammer/DiskDevice.c
+++ b/Projects/Incomplete/StandaloneProgrammer/DiskDevice.c
@@ -53,6 +53,7 @@ USB_ClassInfo_MS_Device_t DiskDevice_MS_Interface =
 			},
 	};
 
+
 void DiskDevice_USBTask(void)
 {
 	MS_Device_USBTask(&DiskDevice_MS_Interface);
diff --git a/Projects/Incomplete/StandaloneProgrammer/DiskHost.c b/Projects/Incomplete/StandaloneProgrammer/DiskHost.c
index 9ba22542c3708dc17dbf8988c643ef7e9afe2a19..a0e2521c066afd3e05130398063ba586d64820ef 100644
--- a/Projects/Incomplete/StandaloneProgrammer/DiskHost.c
+++ b/Projects/Incomplete/StandaloneProgrammer/DiskHost.c
@@ -47,6 +47,7 @@ USB_ClassInfo_MS_Host_t DiskHost_MS_Interface =
 			},
 	};
 
+
 void DiskHost_USBTask(void)
 {
 	if (USB_HostState == HOST_STATE_Addressed)
diff --git a/Projects/Incomplete/StandaloneProgrammer/Lib/SCSI.c b/Projects/Incomplete/StandaloneProgrammer/Lib/SCSI.c
index a221a2f6f0024d6193e9763b09b47986252ed960..d36d887432e1cdc627f967fabe0e1f56361bfadb 100644
--- a/Projects/Incomplete/StandaloneProgrammer/Lib/SCSI.c
+++ b/Projects/Incomplete/StandaloneProgrammer/Lib/SCSI.c
@@ -42,7 +42,7 @@
 /** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
  *  features and capabilities.
  */
-SCSI_Inquiry_Response_t InquiryData =
+static const SCSI_Inquiry_Response_t InquiryData =
 	{
 		.DeviceType          = DEVICE_TYPE_BLOCK,
 		.PeripheralQualifier = 0,
@@ -74,7 +74,7 @@ SCSI_Inquiry_Response_t InquiryData =
 /** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE
  *  command is issued. This gives information on exactly why the last command failed to complete.
  */
-SCSI_Request_Sense_Response_t SenseData =
+static SCSI_Request_Sense_Response_t SenseData =
 	{
 		.ResponseCode        = 0x70,
 		.AdditionalLength    = 0x0A,
diff --git a/Projects/Incomplete/StandaloneProgrammer/StandaloneProgrammer.c b/Projects/Incomplete/StandaloneProgrammer/StandaloneProgrammer.c
index 86007daa5e8bc1185b4ed196044240cd6c435418..3f5d48b00b5ce0c41dd568f350bd73bbbdf488d3 100644
--- a/Projects/Incomplete/StandaloneProgrammer/StandaloneProgrammer.c
+++ b/Projects/Incomplete/StandaloneProgrammer/StandaloneProgrammer.c
@@ -43,6 +43,7 @@ FILE DiskStream = FDEV_SETUP_STREAM(NULL, Disk_getchar, _FDEV_SETUP_READ);
 /** Petite FAT Fs structure to hold the internal state of the FAT driver for the Dataflash contents. */
 FATFS DiskFATState;
 
+
 /** Stream character fetching routine for the FAT driver so that characters from the currently open file can be
  *  read in sequence when applied to a stdio stream.
  */
diff --git a/Projects/MIDIToneGenerator/MIDIToneGenerator.c b/Projects/MIDIToneGenerator/MIDIToneGenerator.c
index f9234865e5dedc1885e7a6918d878aadd01fddac..a4e2764c0163bbed8e09b797e3c036cd4fe6924d 100644
--- a/Projects/MIDIToneGenerator/MIDIToneGenerator.c
+++ b/Projects/MIDIToneGenerator/MIDIToneGenerator.c
@@ -57,7 +57,7 @@ USB_ClassInfo_MIDI_Device_t Keyboard_MIDI_Interface =
 	};
 
 /** 8-bit 256 entry Sine Wave lookup table */
-const uint8_t SineTable[256] =
+static const uint8_t SineTable[256] =
 {
 	128, 131, 134, 137, 140, 143, 146, 149, 152, 156, 159, 162, 165, 168, 171, 174,
 	176, 179, 182, 185, 188, 191, 193, 196, 199, 201, 204, 206, 209, 211, 213, 216,
@@ -78,7 +78,8 @@ const uint8_t SineTable[256] =
 };
 
 /** Array of structures describing each note being generated */
-DDSNoteData NoteData[MAX_SIMULTANEOUS_NOTES];
+static DDSNoteData NoteData[MAX_SIMULTANEOUS_NOTES];
+
 
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
diff --git a/Projects/Magstripe/Magstripe.c b/Projects/Magstripe/Magstripe.c
index 2bb16145d0501afb828701160ed05d852e4c4348..2b8fe2760feed6a6188ec82e242918dabe97da09 100644
--- a/Projects/Magstripe/Magstripe.c
+++ b/Projects/Magstripe/Magstripe.c
@@ -40,13 +40,13 @@
 /** Bit buffers to hold the read bits for each of the three magnetic card tracks before they are transmitted
  *  to the host as keyboard presses.
  */
-BitBuffer_t TrackDataBuffers[TOTAL_TRACKS];
+static BitBuffer_t TrackDataBuffers[TOTAL_TRACKS];
 
 /** Pointer to the current track buffer being sent to the host. */
-BitBuffer_t* CurrentTrackBuffer = &TrackDataBuffers[TOTAL_TRACKS];
+static BitBuffer_t* CurrentTrackBuffer = &TrackDataBuffers[TOTAL_TRACKS];
 
 /** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */
-uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
+static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
 
 /** LUFA HID Class driver interface configuration and state information. This structure is
  *  passed to all HID Class driver functions, so that multiple instances of the same class
@@ -67,6 +67,7 @@ USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Projects/MissileLauncher/MissileLauncher.c b/Projects/MissileLauncher/MissileLauncher.c
index b085ed54a785a5437741b0dd736c2735803a8a21..6a98b54596360b16578f4cf7e9b0d4d2b6b8cf9c 100644
--- a/Projects/MissileLauncher/MissileLauncher.c
+++ b/Projects/MissileLauncher/MissileLauncher.c
@@ -46,46 +46,46 @@
 #include "MissileLauncher.h"
 
 /** Launcher first init command report data sequence */
-uint8_t CMD_INITA[8]     = {  85, 83, 66, 67,  0,  0,  4,  0  };
+static const uint8_t CMD_INITA[8]     = {  85, 83, 66, 67,  0,  0,  4,  0  };
 
 /** Launcher second init command report data sequence */
-uint8_t CMD_INITB[8]     = {  85, 83, 66, 67,  0, 64,  2,  0  };
+static const uint8_t CMD_INITB[8]     = {  85, 83, 66, 67,  0, 64,  2,  0  };
 
 /** Launcher command report data sequence to stop all movement */
-uint8_t CMD_STOP[8]      = {   0,  0,  0,  0,  0,  0,  8,  8  };
+static const uint8_t CMD_STOP[8]      = {   0,  0,  0,  0,  0,  0,  8,  8  };
 
 /** Launcher command report data sequence to move left */
-uint8_t CMD_LEFT[8]      = {   0,  1,  0,  0,  0,  0,  8,  8  };
+static const uint8_t CMD_LEFT[8]      = {   0,  1,  0,  0,  0,  0,  8,  8  };
 
 /** Launcher command report data sequence to move right */
-uint8_t CMD_RIGHT[8]     = {   0,  0,  1,  0,  0,  0,  8,  8  };
+static const uint8_t CMD_RIGHT[8]     = {   0,  0,  1,  0,  0,  0,  8,  8  };
 
 /** Launcher command report data sequence to move up */
-uint8_t CMD_UP[8]        = {   0,  0,  0,  1,  0,  0,  8,  8  };
+static const uint8_t CMD_UP[8]        = {   0,  0,  0,  1,  0,  0,  8,  8  };
 
 /** Launcher command report data sequence to move down */
-uint8_t CMD_DOWN[8]      = {   0,  0,  0,  0,  1,  0,  8,  8  };
+static const uint8_t CMD_DOWN[8]      = {   0,  0,  0,  0,  1,  0,  8,  8  };
 
 /** Launcher command report data sequence to move left and up */
-uint8_t CMD_LEFTUP[8]    = {   0,  1,  0,  1,  0,  0,  8,  8  };
+static const uint8_t CMD_LEFTUP[8]    = {   0,  1,  0,  1,  0,  0,  8,  8  };
 
 /** Launcher command report data sequence to move right and up */
-uint8_t CMD_RIGHTUP[8]   = {   0,  0,  1,  1,  0,  0,  8,  8  };
+static const uint8_t CMD_RIGHTUP[8]   = {   0,  0,  1,  1,  0,  0,  8,  8  };
 
 /** Launcher command report data sequence to move left and down */
-uint8_t CMD_LEFTDOWN[8]  = {   0,  1,  0,  0,  1,  0,  8,  8  };
+static const uint8_t CMD_LEFTDOWN[8]  = {   0,  1,  0,  0,  1,  0,  8,  8  };
 
 /** Launcher command report data sequence to move right and down */
-uint8_t CMD_RIGHTDOWN[8] = {   0,  0,  1,  0,  1,  0,  8,  8  };
+static const uint8_t CMD_RIGHTDOWN[8] = {   0,  0,  1,  0,  1,  0,  8,  8  };
 
 /** Launcher command report data sequence to fire a missile */
-uint8_t CMD_FIRE[8]      = {   0,  0,  0,  0,  0,  1,  8,  8  };
+static const uint8_t CMD_FIRE[8]      = {   0,  0,  0,  0,  0,  1,  8,  8  };
 
 /** Last command sent to the launcher, to determine what new command (if any) must be sent */
-uint8_t* CmdState;
+static const uint8_t* CmdState;
 
 /** Buffer to hold a command to send to the launcher */
-uint8_t  CmdBuffer[LAUNCHER_CMD_BUFFER_SIZE];
+static uint8_t CmdBuffer[LAUNCHER_CMD_BUFFER_SIZE];
 
 
 /** Main program entry point. This routine configures the hardware required by the application, then
@@ -151,7 +151,7 @@ void Read_Joystick_Status(void)
  *  \param[in] Report  Report data to send.
  *  \param[in] ReportSize  Report length in bytes.
  */
-void Send_Command_Report(uint8_t* const Report,
+void Send_Command_Report(const uint8_t* const Report,
                          const uint16_t ReportSize)
 {
 	memcpy(CmdBuffer, Report, 8);
@@ -162,7 +162,7 @@ void Send_Command_Report(uint8_t* const Report,
  *
  *  \param[in] Command  One of the command constants.
  */
-void Send_Command(uint8_t* const Command)
+void Send_Command(const uint8_t* const Command)
 {
 	if ((CmdState == CMD_STOP && Command != CMD_STOP) ||
 		(CmdState != CMD_STOP && Command == CMD_STOP))
diff --git a/Projects/MissileLauncher/MissileLauncher.h b/Projects/MissileLauncher/MissileLauncher.h
index d6cc63771c7d5acc31bd9d7558072b68e4eff947..7363f0fabc416688cf6b126403b1bb1e9551440c 100644
--- a/Projects/MissileLauncher/MissileLauncher.h
+++ b/Projects/MissileLauncher/MissileLauncher.h
@@ -73,9 +73,9 @@
 		void SetupHardware(void);
 
 		void Read_Joystick_Status(void);
-        void Send_Command_Report(uint8_t* const Report,
+        void Send_Command_Report(const uint8_t* const Report,
 		                         const uint16_t ReportSize);
-        void Send_Command(uint8_t* const Command);
+        void Send_Command(const uint8_t* const Command);
 
 		void HID_Host_Task(void);
 
diff --git a/Projects/TempDataLogger/Lib/SCSI.c b/Projects/TempDataLogger/Lib/SCSI.c
index 31f62eef2d7e3c097f6db741754429f57ca44561..b317bce2a78ab07e9d277d134b713f9759b9d694 100644
--- a/Projects/TempDataLogger/Lib/SCSI.c
+++ b/Projects/TempDataLogger/Lib/SCSI.c
@@ -41,7 +41,7 @@
 /** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
  *  features and capabilities.
  */
-SCSI_Inquiry_Response_t InquiryData =
+static const SCSI_Inquiry_Response_t InquiryData =
 	{
 		.DeviceType          = DEVICE_TYPE_BLOCK,
 		.PeripheralQualifier = 0,
@@ -73,7 +73,7 @@ SCSI_Inquiry_Response_t InquiryData =
 /** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE
  *  command is issued. This gives information on exactly why the last command failed to complete.
  */
-SCSI_Request_Sense_Response_t SenseData =
+static SCSI_Request_Sense_Response_t SenseData =
 	{
 		.ResponseCode        = 0x70,
 		.AdditionalLength    = 0x0A,
diff --git a/Projects/TempDataLogger/TempDataLogger.c b/Projects/TempDataLogger/TempDataLogger.c
index ec39029085f1ce0df8f15ccb2e27534e1238ca96..ecea2fb1a6cea91a9e60801208f4296707f94191 100644
--- a/Projects/TempDataLogger/TempDataLogger.c
+++ b/Projects/TempDataLogger/TempDataLogger.c
@@ -59,7 +59,7 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface =
 	};
 
 /** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */
-uint8_t PrevHIDReportBuffer[GENERIC_REPORT_SIZE];
+static uint8_t PrevHIDReportBuffer[GENERIC_REPORT_SIZE];
 
 /** LUFA HID Class driver interface configuration and state information. This structure is
  *  passed to all HID Class driver functions, so that multiple instances of the same class
@@ -81,19 +81,19 @@ USB_ClassInfo_HID_Device_t Generic_HID_Interface =
 	};
 
 /** Non-volatile Logging Interval value in EEPROM, stored as a number of 500ms ticks */
-uint8_t EEMEM LoggingInterval500MS_EEPROM = DEFAULT_LOG_INTERVAL;
+static uint8_t EEMEM LoggingInterval500MS_EEPROM = DEFAULT_LOG_INTERVAL;
 
 /** SRAM Logging Interval value fetched from EEPROM, stored as a number of 500ms ticks */
-uint8_t LoggingInterval500MS_SRAM;
+static uint8_t LoggingInterval500MS_SRAM;
 
 /** Total number of 500ms logging ticks elapsed since the last log value was recorded */
-uint16_t CurrentLoggingTicks;
+static uint16_t CurrentLoggingTicks;
 
 /** FAT Fs structure to hold the internal state of the FAT driver for the Dataflash contents. */
-FATFS DiskFATState;
+static FATFS DiskFATState;
 
 /** FAT Fs structure to hold a FAT file handle for the log data write destination. */
-FIL TempLogFile;
+static FIL TempLogFile;
 
 
 /** ISR to handle the 500ms ticks for sampling and data logging */
diff --git a/Projects/USBtoSerial/USBtoSerial.c b/Projects/USBtoSerial/USBtoSerial.c
index 9ce00bf1310b5969c970362519396f2cc5900b93..fe685d6e45a55cd436641b0d0676758b75d20461 100644
--- a/Projects/USBtoSerial/USBtoSerial.c
+++ b/Projects/USBtoSerial/USBtoSerial.c
@@ -37,17 +37,16 @@
 #include "USBtoSerial.h"
 
 /** Circular buffer to hold data from the host before it is sent to the device via the serial port. */
-RingBuffer_t USBtoUSART_Buffer;
+static RingBuffer_t USBtoUSART_Buffer;
 
 /** Underlying data buffer for \ref USBtoUSART_Buffer, where the stored bytes are located. */
-uint8_t      USBtoUSART_Buffer_Data[128];
+static uint8_t      USBtoUSART_Buffer_Data[128];
 
 /** Circular buffer to hold data from the serial port before it is sent to the host. */
-RingBuffer_t USARTtoUSB_Buffer;
+static RingBuffer_t USARTtoUSB_Buffer;
 
 /** Underlying data buffer for \ref USARTtoUSB_Buffer, where the stored bytes are located. */
-uint8_t      USARTtoUSB_Buffer_Data[128];
-
+static uint8_t      USARTtoUSB_Buffer_Data[128];
 
 /** LUFA CDC Class driver interface configuration and state information. This structure is
  *  passed to all CDC Class driver functions, so that multiple instances of the same class
@@ -73,6 +72,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
 			},
 	};
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
diff --git a/Projects/Webserver/Lib/SCSI.c b/Projects/Webserver/Lib/SCSI.c
index 31f62eef2d7e3c097f6db741754429f57ca44561..b317bce2a78ab07e9d277d134b713f9759b9d694 100644
--- a/Projects/Webserver/Lib/SCSI.c
+++ b/Projects/Webserver/Lib/SCSI.c
@@ -41,7 +41,7 @@
 /** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
  *  features and capabilities.
  */
-SCSI_Inquiry_Response_t InquiryData =
+static const SCSI_Inquiry_Response_t InquiryData =
 	{
 		.DeviceType          = DEVICE_TYPE_BLOCK,
 		.PeripheralQualifier = 0,
@@ -73,7 +73,7 @@ SCSI_Inquiry_Response_t InquiryData =
 /** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE
  *  command is issued. This gives information on exactly why the last command failed to complete.
  */
-SCSI_Request_Sense_Response_t SenseData =
+static SCSI_Request_Sense_Response_t SenseData =
 	{
 		.ResponseCode        = 0x70,
 		.AdditionalLength    = 0x0A,
diff --git a/Projects/Webserver/Lib/uIPManagement.c b/Projects/Webserver/Lib/uIPManagement.c
index dc1d23932c08434dae224ff7dea3b0b47600359f..a99e8be938777f26bd1e1f017c4797ecb7724073 100644
--- a/Projects/Webserver/Lib/uIPManagement.c
+++ b/Projects/Webserver/Lib/uIPManagement.c
@@ -38,17 +38,19 @@
 #include "uIPManagement.h"
 
 /** Connection timer, to retain the time elapsed since the last time the uIP connections were managed. */
-struct timer ConnectionTimer;
+static struct timer ConnectionTimer;
 
 /** ARP timer, to retain the time elapsed since the ARP cache was last updated. */
-struct timer ARPTimer;
+static struct timer ARPTimer;
 
-/** MAC address of the RNDIS device, when enumerated */
+/** MAC address of the RNDIS device, when enumerated. */
 struct uip_eth_addr MACAddress;
 
+/** Indicates if an IP configuration has been set in the device. */
 bool HaveIPConfiguration;
 
-/** Configures the uIP stack ready for network traffic. */
+
+/** Configures the uIP stack ready for network traffic processing. */
 void uIPManagement_Init(void)
 {
 	/* uIP Timing Initialization */
diff --git a/Projects/XPLAINBridge/Lib/SoftUART.c b/Projects/XPLAINBridge/Lib/SoftUART.c
index 1da2236764e706c2666c1b52c8ea56945a5cb4c2..ddd983a91ae2958e7a9547ac8e8ea144ca201b5c 100644
--- a/Projects/XPLAINBridge/Lib/SoftUART.c
+++ b/Projects/XPLAINBridge/Lib/SoftUART.c
@@ -51,6 +51,7 @@ static uint8_t RX_BitsRemaining;
 /** Temporary data variable to hold the byte being received as it is shifted in */
 static uint8_t RX_Data;
 
+
 /** Initialises the software UART, ready for data transmission and reception into the global ring buffers. */
 void SoftUART_Init(void)
 {
diff --git a/Projects/XPLAINBridge/XPLAINBridge.c b/Projects/XPLAINBridge/XPLAINBridge.c
index 25307d3c0dfdf30cac84ab2e88cca0e3fe2ee533..a2afbbc3c1c74f1b1db94d059a9251d7976fc6a7 100644
--- a/Projects/XPLAINBridge/XPLAINBridge.c
+++ b/Projects/XPLAINBridge/XPLAINBridge.c
@@ -67,13 +67,13 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
 RingBuffer_t USBtoUART_Buffer;
 
 /** Underlying data buffer for \ref USBtoUART_Buffer, where the stored bytes are located. */
-uint8_t      USBtoUART_Buffer_Data[128];
+static uint8_t      USBtoUART_Buffer_Data[128];
 
 /** Circular buffer to hold data from the serial port before it is sent to the host. */
 RingBuffer_t UARTtoUSB_Buffer;
 
 /** Underlying data buffer for \ref UARTtoUSB_Buffer, where the stored bytes are located. */
-uint8_t      UARTtoUSB_Buffer_Data[128];
+static uint8_t      UARTtoUSB_Buffer_Data[128];
 
 
 /** Main program entry point. This routine contains the overall program flow, including initial