diff --git a/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMM.c b/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMM.c
index 994a24b9ad862ca68dc4a667b1b46a3449f29f09..7c39cb028e4435ea405c076729871081d7c3db82 100644
--- a/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMM.c
+++ b/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMM.c
@@ -232,12 +232,14 @@ static void RFCOMM_ProcessSABM(const RFCOMM_Address_t* const FrameAddress, Bluet
 		/* If the channel's DLCI is zero, the channel state entry is free */
 		if (!(CurrRFCOMMChannel->DLCI))
 		{
-			CurrRFCOMMChannel->DLCI         = FrameAddress->DLCI;
-			CurrRFCOMMChannel->State        = RFCOMM_Channel_Open;
-			CurrRFCOMMChannel->Priority     = 7 + (CurrRFCOMMChannel->DLCI >> 3) + ((CurrRFCOMMChannel->DLCI >> 3) * 7);
-			CurrRFCOMMChannel->MTU          = 0xFFFF;
-			CurrRFCOMMChannel->Signals      = 0;
-			CurrRFCOMMChannel->BreakSignals = 0;
+			CurrRFCOMMChannel->DLCI     = FrameAddress->DLCI;
+			CurrRFCOMMChannel->State    = RFCOMM_Channel_Open;
+			CurrRFCOMMChannel->Priority = 7 + (CurrRFCOMMChannel->DLCI >> 3) + ((CurrRFCOMMChannel->DLCI >> 3) * 7);
+			CurrRFCOMMChannel->MTU      = 0xFFFF;
+			CurrRFCOMMChannel->Remote.Signals     = 0 | (1 << 0);
+			CurrRFCOMMChannel->Remote.BreakSignal = 0 | (1 << 0);
+			CurrRFCOMMChannel->Local.Signals      = RFCOMM_SIGNAL_RTC | RFCOMM_SIGNAL_RTR | RFCOMM_SIGNAL_DV | (1 << 0);
+			CurrRFCOMMChannel->Local.BreakSignal  = 0 | (1 << 0);
 		
 			BT_RFCOMM_DEBUG(1, ">> UA Sent");
 			RFCOMM_SendFrame(FrameAddress->DLCI, true, (RFCOMM_Frame_UA | FRAME_POLL_FINAL), 0, NULL, Channel);
diff --git a/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMM.h b/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMM.h
index d37c068d98e5ef872e5da7ee6a2e47d51ad18081..7b1f45b3076c3063599aa7e80e15a137907391c1 100644
--- a/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMM.h
+++ b/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMM.h
@@ -86,9 +86,16 @@
 			uint8_t  State;
 			uint8_t  Priority;
 			uint16_t MTU;
-			uint8_t  StatusFlags;
-			uint8_t  Signals;
-			uint8_t  BreakSignals;
+			struct
+			{
+				uint8_t  Signals;
+				uint8_t  BreakSignal;
+			} Remote;
+			struct
+			{
+				uint8_t  Signals;
+				uint8_t  BreakSignal;
+			} Local;
 		} RFCOMM_Channel_t;
 		
 	/* External Variables: */
diff --git a/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMMControl.c b/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMMControl.c
index 1d1863348515e29830f672c76dd0d323e109ddd3..01fab788f9fa544341a619d050e763f63eb5ea94 100644
--- a/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMMControl.c
+++ b/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMMControl.c
@@ -88,7 +88,7 @@ static void RFCOMM_ProcessTestCommand(const RFCOMM_Command_t* const CommandHeade
 	} TestResponse;
 
 	/* Fill out the Test response data */
-	TestResponse.CommandHeader = (RFCOMM_Command_t){.Command = RFCOMM_Control_Test, .EA = true};
+	TestResponse.CommandHeader = (RFCOMM_Command_t){.Command = RFCOMM_Control_Test, .EA = true, .CR = false};
 	TestResponse.Length        = (CommandDataLen << 1) | 0x01;
 	memcpy(TestResponse.TestData, Params, CommandDataLen);
 	
@@ -130,11 +130,11 @@ static void RFCOMM_ProcessMSCommand(const RFCOMM_Command_t* const CommandHeader,
 	  return;
 	  
 	/* Save the new channel signals to the channel state structure */
-	RFCOMMChannel->Signals = Params->Signals;
+	RFCOMMChannel->Remote.Signals = Params->Signals;
 	
 	/* If the command contains the optional break signals field, store the value */
 	if (CommandDataLen == sizeof(RFCOMM_MS_Parameters_t))
-	  RFCOMMChannel->BreakSignals = Params->BreakSignals;
+	  RFCOMMChannel->Remote.BreakSignal = Params->BreakSignal;
 	  
 	struct
 	{
@@ -144,14 +144,15 @@ static void RFCOMM_ProcessMSCommand(const RFCOMM_Command_t* const CommandHeader,
 	} MSResponse;
 
 	/* Fill out the MS response data */
-	MSResponse.CommandHeader = (RFCOMM_Command_t){.Command = RFCOMM_Control_ModemStatus, .EA = true};
-	MSResponse.Length        = (CommandDataLen << 1) | 0x01;
-	MSResponse.Params        = *Params;
+	MSResponse.CommandHeader  = (RFCOMM_Command_t){.Command = RFCOMM_Control_ModemStatus, .EA = true, .CR = false};
+	MSResponse.Length         = (CommandDataLen << 1) | 0x01;
+	memcpy(&MSResponse.Params, Params, sizeof(RFCOMM_MS_Parameters_t));
 	
 	BT_RFCOMM_DEBUG(1, ">> MS Response");
 
 	/* Send the PDN response to acknowledge the command */
-	RFCOMM_SendFrame(RFCOMM_CONTROL_DLCI, false, RFCOMM_Frame_UIH, sizeof(MSResponse), &MSResponse, Channel);
+	RFCOMM_SendFrame(RFCOMM_CONTROL_DLCI, false, RFCOMM_Frame_UIH,
+	                 (sizeof(MSResponse) - sizeof(MSResponse.Params) + CommandDataLen), &MSResponse, Channel);
 }
 
 static void RFCOMM_ProcessRPNCommand(const RFCOMM_Command_t* const CommandHeader, const uint8_t* CommandData,
@@ -190,10 +191,13 @@ static void RFCOMM_ProcessDPNCommand(const RFCOMM_Command_t* const CommandHeader
 			/* If the channel's DLCI is zero, the channel state entry is free */
 			if (!(RFCOMM_Channels[i].DLCI))
 			{
-				RFCOMMChannel               = &RFCOMM_Channels[i];
-				RFCOMMChannel->DLCI         = Params->DLCI;
-				RFCOMMChannel->Signals      = 0;
-				RFCOMMChannel->BreakSignals = 0;
+				RFCOMMChannel       = &RFCOMM_Channels[i];
+				RFCOMMChannel->DLCI = Params->DLCI;
+				RFCOMMChannel->MTU  = 0xFFFF;
+				RFCOMMChannel->Remote.Signals     = 0 | (1 << 0);
+				RFCOMMChannel->Remote.BreakSignal = 0 | (1 << 0);
+				RFCOMMChannel->Local.Signals      = RFCOMM_SIGNAL_RTC | RFCOMM_SIGNAL_RTR | RFCOMM_SIGNAL_DV | (1 << 0);
+				RFCOMMChannel->Local.BreakSignal  = 0 | (1 << 0);
 				break;
 			}
 		}
@@ -207,9 +211,9 @@ static void RFCOMM_ProcessDPNCommand(const RFCOMM_Command_t* const CommandHeader
 	}
 	
 	/* Save the new channel configuration */
-	RFCOMMChannel->State       = RFCOMM_Channel_Open;
-	RFCOMMChannel->Priority    = Params->Priority;
-	RFCOMMChannel->MTU         = Params->MaximumFrameSize;
+	RFCOMMChannel->State    = RFCOMM_Channel_Open;
+	RFCOMMChannel->Priority = Params->Priority;
+	RFCOMMChannel->MTU      = Params->MaximumFrameSize;
 	
 	struct
 	{
@@ -219,9 +223,9 @@ static void RFCOMM_ProcessDPNCommand(const RFCOMM_Command_t* const CommandHeader
 	} DPNResponse;
 	
 	/* Fill out the DPN response data */
-	DPNResponse.CommandHeader           = (RFCOMM_Command_t){.Command = RFCOMM_Control_DLCParameterNegotiation, .EA = true};
+	DPNResponse.CommandHeader           = (RFCOMM_Command_t){.Command = RFCOMM_Control_DLCParameterNegotiation, .EA = true, .CR = false};
 	DPNResponse.Length                  = (sizeof(DPNResponse.Params) << 1) | 0x01;
-	DPNResponse.Params                  = *Params;
+	memcpy(&DPNResponse.Params, Params, sizeof(RFCOMM_DPN_Parameters_t));
 	DPNResponse.Params.ConvergenceLayer = 0x00; // TODO: Enable credit based transaction support
 	
 	BT_RFCOMM_DEBUG(1, ">> DPN Response");
diff --git a/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMMControl.h b/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMMControl.h
index b992c27cb8028b3f64f3ece350aecb7c03fea382..adad4332ff74013ff61741ce8e6b17c7de8bf6e8 100644
--- a/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMMControl.h
+++ b/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMMControl.h
@@ -50,11 +50,11 @@
 		#include "RFCOMM.h"
 		
 	/* Macros: */
-		#define RFCOMM_STATUSFLAG_FC     (1 << 1)
-		#define RFCOMM_STATUSFLAG_RTC    (1 << 2)
-		#define RFCOMM_STATUSFLAG_RTR    (1 << 3)
-		#define RFCOMM_STATUSFLAG_IC     (1 << 6)
-		#define RFCOMM_STATUSFLAG_DV     (1 << 7)
+		#define RFCOMM_SIGNAL_FC     (1 << 1)
+		#define RFCOMM_SIGNAL_RTC    (1 << 2)
+		#define RFCOMM_SIGNAL_RTR    (1 << 3)
+		#define RFCOMM_SIGNAL_IC     (1 << 6)
+		#define RFCOMM_SIGNAL_DV     (1 << 7)
 
 	/* Enums: */
 		enum RFCOMM_Control_Commands_t
@@ -106,7 +106,7 @@
 		{
 			RFCOMM_Address_t Channel;
 			uint8_t          Signals;
-			uint8_t          BreakSignals;
+			uint8_t          BreakSignal;
 		} RFCOMM_MS_Parameters_t;
 
 	/* Function Prototypes: */