diff --git a/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.c b/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.c
index fbacc2537323e988c7ae63176a0e7392ecf00bfd..d2bd07589e18644043ae4fe1eb6e8e08575eb0f8 100644
--- a/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.c
+++ b/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.c
@@ -251,8 +251,8 @@ void Bluetooth_PacketReceived(uint16_t* PacketLength, Bluetooth_Channel_t* Chann
 	Pipe_Read_Stream_LE(&DataPayload, *PacketLength);
 	*PacketLength = 0;
 
-	printf_P(PSTR("L2CAP Packet Recetion on channel %02X:\r\n"), Channel->LocalNumber);
-	for (uint16_t Byte = 0; Byte < *PacketLength; Byte++)
+	printf_P(PSTR("Packet Received (Channel 0x%04X, PSM: 0x%02x):\r\n"), Channel->LocalNumber, Channel->PSM);
+	for (uint16_t Byte = 0; Byte < sizeof(DataPayload); Byte++)
 	  printf_P(PSTR("0x%02X "), DataPayload[Byte]);
 	puts_P(PSTR("\r\n"));
 }
diff --git a/Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothACLPackets.c b/Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothACLPackets.c
index 50fba7c5d63cc48292e030082cc0e08058f7bce6..df831fd0d3bd7f275e02b19ca2f3b2cfc1394fe6 100644
--- a/Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothACLPackets.c
+++ b/Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothACLPackets.c
@@ -360,34 +360,35 @@ static inline void Bluetooth_Signal_ConfigurationReq(BT_ACL_Header_t*        ACL
                                                      BT_Signal_Header_t*     SignalCommandHeader)
 {
 	BT_Signal_ConfigurationReq_t ConfigurationRequest;
-	uint8_t OptionsLen;
+	uint8_t OptionsLen = (SignalCommandHeader->Length - sizeof(ConfigurationRequest));
+	uint8_t Options[OptionsLen];
 
-	Pipe_Read_Stream_LE(&ConfigurationRequest, sizeof(ConfigurationRequest));
-	OptionsLen = (DataHeader->PayloadLength - sizeof(*SignalCommandHeader));
-	
-	Bluetooth_Channel_t* ChannelData = Bluetooth_GetChannelData(ConfigurationRequest.DestinationChannel, false);
-
-	while (OptionsLen)
-	{
-		BT_Config_Option_Header_t OptionHeader;
-		
-		Pipe_Read_Stream_LE(&OptionHeader, sizeof(OptionHeader));
-	
-		if ((OptionHeader.Type == BT_CONFIG_OPTION_MTU) && (ChannelData != NULL))
-		  Pipe_Read_Stream_LE(&ChannelData->RemoteMTU, sizeof(ChannelData->RemoteMTU));
-		else
-		  Pipe_Discard_Stream(OptionHeader.Length);
-
-		OptionsLen -= (sizeof(OptionHeader) + OptionHeader.Length);
-	}
+	Pipe_Read_Stream_LE(&ConfigurationRequest, sizeof(ConfigurationRequest));	
+	Pipe_Read_Stream_LE(&Options, sizeof(Options));
 
 	Pipe_ClearIN();
 	Pipe_Freeze();
 
+	Bluetooth_Channel_t* ChannelData = Bluetooth_GetChannelData(ConfigurationRequest.DestinationChannel, false);
+
 	BT_ACL_DEBUG(1, "<< L2CAP Configuration Request", NULL);
 	BT_ACL_DEBUG(2, "-- Destination Channel: 0x%04X", ConfigurationRequest.DestinationChannel);
-	BT_ACL_DEBUG(2, "-- Options Len: 0x%04X", (DataHeader->PayloadLength - sizeof(*SignalCommandHeader)));
 	BT_ACL_DEBUG(2, "-- Remote MTU: 0x%04X", ChannelData->RemoteMTU);
+	BT_ACL_DEBUG(2, "-- Options Len: 0x%04X", OptionsLen);
+
+	uint8_t OptionPos = 0;
+	while (OptionPos < OptionsLen)
+	{
+		BT_Config_Option_Header_t* OptionHeader = (BT_Config_Option_Header_t*)&Options[OptionPos];
+
+		BT_ACL_DEBUG(2, "-- Option Type: 0x%04X", OptionHeader->Type);
+		BT_ACL_DEBUG(2, "-- Option Length: 0x%04X", (sizeof(*OptionHeader) + OptionHeader->Length));
+		
+		if ((OptionHeader->Type == BT_CONFIG_OPTION_MTU) && (ChannelData != NULL))
+		  ChannelData->RemoteMTU = *((uint16_t*)&Options[OptionPos + sizeof(*OptionHeader)]);
+
+		OptionPos += (sizeof(*OptionHeader) + OptionHeader->Length);
+	}
 	
 	struct
 	{