diff --git a/Demos/Device/ClassDriver/Keyboard/Descriptors.c b/Demos/Device/ClassDriver/Keyboard/Descriptors.c
index bf4b16d01f6d96c88f160466296723610c5d6574..d2e52b5190f400d6fd6a97ef5a6d603f58c74a29 100644
--- a/Demos/Device/ClassDriver/Keyboard/Descriptors.c
+++ b/Demos/Device/ClassDriver/Keyboard/Descriptors.c
@@ -183,9 +183,9 @@ USB_Descriptor_String_t PROGMEM LanguageString =
  */
 USB_Descriptor_String_t PROGMEM ManufacturerString =
 {
-	.Header                 = {.Size = USB_STRING_LEN(16), .Type = DTYPE_String},
+	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
 		
-	.UnicodeString          = L"Denver Gingerich"
+	.UnicodeString          = L"Dean Camera"
 };
 
 /** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
diff --git a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
index d56a7f7bce5e6318c43126e3a2d863e9b5ac741a..c3e54ab3a1d05c0ebab1ea04331c870d409e947b 100644
--- a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
+++ b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
@@ -43,7 +43,7 @@ TMC_Capabilities_t Capabilities =
 			{
 				.ListenOnly             = false,
 				.TalkOnly               = false,
-				.PulseIndicateSupported = true,
+				.PulseIndicateSupported = false,
 			},
 
 		.Device     =
@@ -52,6 +52,15 @@ TMC_Capabilities_t Capabilities =
 			},
 	};
 
+/** Current TMC control request that is being processed */
+uint8_t RequestInProgess = 0;
+
+/** Stream callback abort flag for bulk IN data */
+bool IsTMCBulkINReset    = false;
+
+/** Stream callback abort flag for bulk OUT data */
+bool IsTMCBulkOUTReset   = false;
+
 
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
@@ -122,42 +131,154 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 		case Req_InitiateAbortBulkOut:
 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT))
 			{
-			
+				Endpoint_ClearSETUP();
+				
+				/* Check to see if a split request is already being processed before starting a new one */
+				if (RequestInProgess != 0)
+				{
+					Endpoint_Write_Byte(TMC_REQUEST_STATUS_SPLIT_IN_PROGRESS);				
+				}
+				else
+				{
+					/* Indicate that all in-progress/pending data OUT requests should be aborted */
+					IsTMCBulkOUTReset = true;
+					
+					/* Save the split request for later checking when a new request is received */
+					RequestInProgess = Req_InitiateAbortBulkOut;
+
+					Endpoint_Write_Byte(TMC_REQUEST_STATUS_SUCCESS);
+				}
+				
+				Endpoint_ClearIN();
+				Endpoint_ClearStatusStage();
 			}
 			
 			break;
 		case Req_CheckAbortBulkOutStatus:
 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT))
 			{
-			
+				Endpoint_ClearSETUP();
+				
+				/* Check to see the correct split request is in progress before the status can be retrieved */
+				if (RequestInProgess != Req_InitiateAbortBulkOut)
+				{
+					Endpoint_Write_Byte(TMC_REQUEST_STATUS_SPLIT_NOT_IN_PROGRESS);				
+				}
+				else
+				{
+					// TODO: CLEAR BULK OUT
+				
+					/* Clear the pending split request value so that a new request can be made */
+					RequestInProgess = 0;
+
+					Endpoint_Write_Byte(TMC_REQUEST_STATUS_SUCCESS);
+				}
+				
+				Endpoint_ClearIN();
+				Endpoint_ClearStatusStage();				
 			}
 			
 			break;
 		case Req_InitiateAbortBulkIn:
 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT))
 			{
-			
+				Endpoint_ClearSETUP();
+				
+				/* Check to see if a split request is already being processed before starting a new one */
+				if (RequestInProgess != 0)
+				{
+					Endpoint_Write_Byte(TMC_REQUEST_STATUS_SPLIT_IN_PROGRESS);				
+				}
+				else
+				{
+					/* Indicate that all in-progress/pending data IN requests should be aborted */
+					IsTMCBulkINReset  = true;
+					
+					/* Save the split request for later checking when a new request is received */
+					RequestInProgess = Req_InitiateAbortBulkIn;
+
+					Endpoint_Write_Byte(TMC_REQUEST_STATUS_SUCCESS);
+				}
+				
+				Endpoint_ClearIN();
+				Endpoint_ClearStatusStage();
 			}
 			
 			break;
 		case Req_CheckAbortBulkInStatus:
 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT))
 			{
-			
+				Endpoint_ClearSETUP();
+				
+				/* Check to see the correct split request is in progress before the status can be retrieved */
+				if (RequestInProgess != Req_InitiateAbortBulkIn)
+				{
+					Endpoint_Write_Byte(TMC_REQUEST_STATUS_SPLIT_NOT_IN_PROGRESS);				
+				}
+				else
+				{
+					// TODO: CLEAR BULK IN
+				
+					/* Clear the pending split request value so that a new request can be made */
+					RequestInProgess = 0;
+
+					Endpoint_Write_Byte(TMC_REQUEST_STATUS_SUCCESS);
+				}
+				
+				Endpoint_ClearIN();
+				Endpoint_ClearStatusStage();				
 			}
 			
 			break;
 		case Req_InitiateClear:
 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
 			{
-			
+				Endpoint_ClearSETUP();
+				
+				/* Check to see if a split request is already being processed before starting a new one */
+				if (RequestInProgess != 0)
+				{
+					Endpoint_Write_Byte(TMC_REQUEST_STATUS_SPLIT_IN_PROGRESS);				
+				}
+				else
+				{
+					/* Indicate that all in-progress/pending data IN and OUT requests should be aborted */
+					IsTMCBulkINReset  = true;
+					IsTMCBulkOUTReset = true;
+					
+					/* Save the split request for later checking when a new request is received */
+					RequestInProgess = Req_InitiateClear;
+
+					Endpoint_Write_Byte(TMC_REQUEST_STATUS_SUCCESS);
+				}
+				
+				Endpoint_ClearIN();
+				Endpoint_ClearStatusStage();
 			}
 			
 			break;
 		case Req_CheckClearStatus:
 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
 			{
-			
+				Endpoint_ClearSETUP();
+				
+				/* Check to see the correct split request is in progress before the status can be retrieved */
+				if (RequestInProgess != Req_InitiateClear)
+				{
+					Endpoint_Write_Byte(TMC_REQUEST_STATUS_SPLIT_NOT_IN_PROGRESS);				
+				}
+				else
+				{
+					// TODO: CLEAR STATUS
+				
+					/* Clear the pending split request value so that a new request can be made */
+					RequestInProgess = 0;
+
+					Endpoint_Write_Byte(TMC_REQUEST_STATUS_SUCCESS);
+				}
+				
+				Endpoint_ClearIN();
+				Endpoint_ClearStatusStage();				
 			}
 			
 			break;
@@ -193,3 +314,29 @@ void TMC_Task(void)
 		Endpoint_ClearOUT();
 	}
 }
+
+/** Stream callback function for the Endpoint stream write functions. This callback will abort the current stream transfer
+ *  if a TMC Abort Bulk IN request has been issued to the control endpoint.
+ */
+uint8_t StreamCallback_AbortINOnRequest(void)
+{	
+	/* Abort if a TMC Bulk Data IN abort was received */
+	if (IsTMCBulkINReset)
+	  return STREAMCALLBACK_Abort;
+	
+	/* Continue with the current stream operation */
+	return STREAMCALLBACK_Continue;
+}
+
+/** Stream callback function for the Endpoint stream read functions. This callback will abort the current stream transfer
+ *  if a TMC Abort Bulk OUT request has been issued to the control endpoint.
+ */
+uint8_t StreamCallback_AbortOUTOnRequest(void)
+{	
+	/* Abort if a TMC Bulk Data IN abort was received */
+	if (IsTMCBulkOUTReset)
+	  return STREAMCALLBACK_Abort;
+	
+	/* Continue with the current stream operation */
+	return STREAMCALLBACK_Continue;
+}
diff --git a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h
index bd9aee6890561aa8b97226bd950d0659b1ecc3b7..53f65a1bddd801887344507cd75bce1d8bab5014 100644
--- a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h
+++ b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h
@@ -65,12 +65,12 @@
 		#define Req_GetCapabilities                   0x07
 		#define Req_IndicatorPulse                    0x40
 		
-		#define TMC_REQUEST_STATUS_SUCCESS            0x01
-		#define TMC_REQUEST_STATUS_PENDING            0x02
-		#define TMC_REQUEST_STATUS_FAILED             0x80
-		#define TMC_REQUEST_STATUS_NOTRANSFER         0x81
-		#define TMC_REQUEST_STATUS_NOCHECKINITIATED   0x82
-		#define TMC_REQUEST_STATUS_CHECKINPROGRESS    0x83
+		#define TMC_REQUEST_STATUS_SUCCESS                   0x01
+		#define TMC_REQUEST_STATUS_PENDING                   0x02
+		#define TMC_REQUEST_STATUS_FAILED                    0x80
+		#define TMC_REQUEST_STATUS_TRANSFER_NOT_IN_PROGRESS  0x81
+		#define TMC_REQUEST_STATUS_SPLIT_NOT_IN_PROGRESS     0x82
+		#define TMC_REQUEST_STATUS_SPLIT_IN_PROGRESS         0x83
 
 	/* Type Defines */
 		typedef struct
@@ -107,4 +107,7 @@
 		void EVENT_USB_Device_ConfigurationChanged(void);
 		void EVENT_USB_Device_UnhandledControlRequest(void);
 
+		uint8_t StreamCallback_AbortINOnRequest(void);
+		uint8_t StreamCallback_AbortOUTOnRequest(void);
+
 #endif
diff --git a/Demos/Device/Incomplete/TestAndMeasurement/makefile b/Demos/Device/Incomplete/TestAndMeasurement/makefile
index 3e3b6eabc808ced119649f0909f274496f9562be..43f8b8fbd882c06f0a220b1b8fa75ed1411eea6c 100644
--- a/Demos/Device/Incomplete/TestAndMeasurement/makefile
+++ b/Demos/Device/Incomplete/TestAndMeasurement/makefile
@@ -121,7 +121,6 @@ LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
 LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
 LUFA_OPTS += -D USE_FLASH_DESCRIPTORS
 LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
-LUFA_OPTS += -D NO_STREAM_CALLBACKS
 
 
 # Create the LUFA source path variables by including the LUFA root makefile
diff --git a/Demos/Device/LowLevel/Keyboard/Descriptors.c b/Demos/Device/LowLevel/Keyboard/Descriptors.c
index 6a2dfb5c764387092b6e45159eb2f46936877cf4..4963c7b1a662e47173761ee345ce1f9ad989a149 100644
--- a/Demos/Device/LowLevel/Keyboard/Descriptors.c
+++ b/Demos/Device/LowLevel/Keyboard/Descriptors.c
@@ -194,9 +194,9 @@ USB_Descriptor_String_t PROGMEM LanguageString =
  */
 USB_Descriptor_String_t PROGMEM ManufacturerString =
 {
-	.Header                 = {.Size = USB_STRING_LEN(16), .Type = DTYPE_String},
+	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
 		
-	.UnicodeString          = L"Denver Gingerich"
+	.UnicodeString          = L"Dean Camera"
 };
 
 /** Product descriptor string. This is a Unicode string containing the product's details in human readable form,