diff --git a/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c b/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c
index bf85750844c262d47c46b44bed79924aa54965b8..c0a9575f403d51a1eac56dd09f1a4130db365b3d 100644
--- a/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c
+++ b/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c
@@ -80,20 +80,24 @@ void SImage_SendBlockHeader(void)
 }
 
 /** Function to receive a PIMA event container from the attached still image device. */
-void SImage_RecieveEventHeader(void)
+uint8_t SImage_RecieveEventHeader(void)
 {
+	uint8_t ErrorCode;
+
 	/* Unfreeze the events pipe */
 	Pipe_SelectPipe(SIMAGE_EVENTS_PIPE);
 	Pipe_Unfreeze();
 	
 	/* Read in the event data into the global structure */
-	Pipe_Read_Stream_LE(&PIMA_EventBlock, sizeof(PIMA_EventBlock));
+	ErrorCode = Pipe_Read_Stream_LE(&PIMA_EventBlock, sizeof(PIMA_EventBlock));
 	
 	/* Clear the pipe after read complete to prepare for next event */
 	Pipe_ClearIN();
 	
 	/* Freeze the event pipe again after use */
 	Pipe_Freeze();
+	
+	return ErrorCode;
 }
 
 /** Function to receive a PIMA response container from the attached still image device. */
@@ -193,20 +197,24 @@ uint8_t SImage_RecieveBlockHeader(void)
  *  \param[in] Buffer  Source data buffer to send to the device
  *  \param[in] Bytes   Number of bytes to send
  */
-void SImage_SendData(void* Buffer, uint16_t Bytes)
+uint8_t SImage_SendData(void* Buffer, uint16_t Bytes)
 {
+	uint8_t ErrorCode;
+
 	/* Unfreeze the data OUT pipe */
 	Pipe_SelectPipe(SIMAGE_DATA_OUT_PIPE);
 	Pipe_Unfreeze();
 	
 	/* Write the data contents to the pipe */
-	Pipe_Write_Stream_LE(Buffer, Bytes);
+	ErrorCode = Pipe_Write_Stream_LE(Buffer, Bytes);
 
 	/* Send the last packet to the attached device */
 	Pipe_ClearOUT();
 
 	/* Freeze the pipe again after use */
 	Pipe_Freeze();
+	
+	return ErrorCode;
 }
 
 /** Function to receive the given data to the device, after a response block has been received.
diff --git a/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.h b/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.h
index 2674b6aa56ae6400dc0c1347cb89373b863a1574..6000510513c430a185d64323b6f63f511df68e3b 100644
--- a/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.h
+++ b/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.h
@@ -50,6 +50,12 @@
 
 		/** Pipe number of the Still Image events pipe */
 		#define SIMAGE_EVENTS_PIPE             0x03
+		
+		/** Length in bytes of a given Unicode string's character length
+		 *
+		 *  \param[in] chars  Total number of Unicode characters in the string
+		 */
+		#define UNICODE_STRING_LENGTH(chars)   (chars << 1)
 
 		/** Timeout period between the issuing of a command to a device, and the reception of the first packet */
 		#define COMMAND_DATA_TIMEOUT_MS        5000
@@ -101,8 +107,8 @@
 	/* Function Prototypes: */
 		void    SImage_SendBlockHeader(void);
 		uint8_t SImage_RecieveBlockHeader(void);
-		void    SImage_RecieveEventHeader(void);
-		void    SImage_SendData(void* Buffer, uint16_t Bytes);
+		uint8_t SImage_RecieveEventHeader(void);
+		uint8_t SImage_SendData(void* Buffer, uint16_t Bytes);
 		uint8_t SImage_ReadData(void* Buffer, uint16_t Bytes);
 		bool    SImage_IsEventReceived(void);
 		uint8_t SImage_ClearPipeStall(const uint8_t EndpointNum);
diff --git a/Demos/Host/LowLevel/StillImageHost/StillImageHost.c b/Demos/Host/LowLevel/StillImageHost/StillImageHost.c
index f10de4c3165d5067c25da58a35d8d1f3c51951ae..dfc7cb7c197110ccfa259b0a9b4df7017d767965 100644
--- a/Demos/Host/LowLevel/StillImageHost/StillImageHost.c
+++ b/Demos/Host/LowLevel/StillImageHost/StillImageHost.c
@@ -216,28 +216,28 @@ void StillImage_Task(void)
 			uint8_t* DeviceInfoPos = DeviceInfo;
 			
 			/* Skip over the data before the unicode device information strings */
-			DeviceInfoPos += 8;                                      // Skip to VendorExtensionDesc String
-			DeviceInfoPos += ((*DeviceInfoPos << 1) + 1);            // Skip over VendorExtensionDesc String
-			DeviceInfoPos += 2;                                      // Skip over FunctionalMode
-			DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over OperationCode Array
-			DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over EventCode Array
-			DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over DevicePropCode Array
-			DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over ObjectFormatCode Array
-			DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over ObjectFormatCode Array
+			DeviceInfoPos +=  8;                                          // Skip to VendorExtensionDesc String
+			DeviceInfoPos += (1 + UNICODE_STRING_LENGTH(*DeviceInfoPos)); // Skip over VendorExtensionDesc String
+			DeviceInfoPos +=  2;                                          // Skip over FunctionalMode
+			DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1));      // Skip over OperationCode Array
+			DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1));      // Skip over EventCode Array
+			DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1));      // Skip over DevicePropCode Array
+			DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1));      // Skip over ObjectFormatCode Array
+			DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1));      // Skip over ObjectFormatCode Array
 			
 			/* Extract and convert the Manufacturer Unicode string to ASCII and print it through the USART */
 			char Manufacturer[*DeviceInfoPos];
 			UnicodeToASCII(DeviceInfoPos, Manufacturer);
 			printf_P(PSTR("   Manufacturer: %s\r\n"), Manufacturer);
 
-			DeviceInfoPos += ((*DeviceInfoPos << 1) + 1);            // Skip over Manufacturer String
+			DeviceInfoPos += 1 + UNICODE_STRING_LENGTH(*DeviceInfoPos);   // Skip over Manufacturer String
 
 			/* Extract and convert the Model Unicode string to ASCII and print it through the USART */
 			char Model[*DeviceInfoPos];
 			UnicodeToASCII(DeviceInfoPos, Model);
 			printf_P(PSTR("   Model: %s\r\n"), Model);
 
-			DeviceInfoPos += ((*DeviceInfoPos << 1) + 1);            // Skip over Model String
+			DeviceInfoPos += 1 + UNICODE_STRING_LENGTH(*DeviceInfoPos);   // Skip over Model String
 
 			/* Extract and convert the Device Version Unicode string to ASCII and print it through the USART */
 			char DeviceVersion[*DeviceInfoPos];
diff --git a/Demos/OTG/TestApp/TestApp.c b/Demos/OTG/TestApp/TestApp.c
index ef903f0898a47ab127225786bcd0e4c887b8c5e8..562348bf801908201ea99019acf3ba4daeabe2ed 100644
--- a/Demos/OTG/TestApp/TestApp.c
+++ b/Demos/OTG/TestApp/TestApp.c
@@ -51,7 +51,7 @@ int main(void)
 		CheckButton();
 		CheckTemperature();
 
-		/* Clear output-compare flag (logic 1 clears the flag) */
+		/* Clear millisecond timer's Output Compare flag (logic 1 clears the flag) */
 		TIFR0 |= (1 << OCF0A);
 		
 		USB_USBTask();
@@ -114,11 +114,12 @@ void CheckTemperature(void)
 {
 	static uint16_t MSElapsed = 0;
 
+	/* Timer 0's compare flag is set every millisecond */
 	if (TIFR0 & (1 << OCF0A))
 	  MSElapsed++;
 
 	/* Task runs every 10000 ticks, 10 seconds for this demo */
-	if (MSElapsed == 1000)
+	if (MSElapsed == 10000)
 	{
 		printf_P(PSTR("Current temperature: %d Degrees Celcius\r\n\r\n"),
 		         (int8_t)Temperature_GetTemperature());
@@ -135,6 +136,7 @@ void CheckButton(void)
 	static uint16_t DebounceMSElapsed = 0;
 	static bool     IsPressed;
 	
+	/* Timer 0's compare flag is set every millisecond */
 	if (TIFR0 & (1 << OCF0A))
 	  DebounceMSElapsed++;