diff --git a/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c b/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c
index 0ad8c013e9bbb53e16aca5b047b65769d170082c..28b9d777468cc5a502395eb5d19fcbf2ef751d52 100644
--- a/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c
+++ b/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c
@@ -34,7 +34,11 @@ const struct
 {
 	uint8_t  Header;
 	uint32_t Data;
-} PROGMEM SDP_Attribute_ServiceHandle = {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit), SWAPENDIAN_32(0x00010000)};
+} PROGMEM SDP_Attribute_ServiceHandle =
+	{
+		(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit),
+		SWAPENDIAN_32(0x00010000),
+	};
 
 const struct
 {
@@ -43,12 +47,29 @@ const struct
 	ItemUUID_t UUIDList[];
 } PROGMEM SDP_Attribute_ServiceClassIDs =
 	{
-		.Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
-		.Size   = SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
-		.UUIDList =
+		(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
+		SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
+		{
+			{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x10, 0x00}}}
+		}
+	};
+
+const struct
+{
+	uint8_t        Header;
+	uint16_t       Size;
+	ItemProtocol_t ProtocolList[];
+} PROGMEM SDP_Attribute_ProtocolDescriptor =
+	{
+		(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
+		SWAPENDIAN_16(sizeof(ItemProtocol_t) * 1),
+		{
 			{
-				{.Header = (SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), .UUID = {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x10, 0x00}},}
+				(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
+				sizeof(UUID_t),
+				{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x01, 0x00}}},
 			}
+		}
 	};
 
 const struct
@@ -58,12 +79,11 @@ const struct
 	Item16Bit_t VersionList[];
 } PROGMEM SDP_Attribute_Version =
 	{
-		.Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
-		.Size   = (sizeof(Item16Bit_t) * 1),
-		.VersionList =
-			{
-				{.Header = (SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), .Value = SWAPENDIAN_16(0x0100)}
-			}
+		(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
+		(sizeof(Item16Bit_t) * 1),
+		{
+			{(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)}
+		}
 	};
 
 const struct
@@ -73,9 +93,9 @@ const struct
 	char    Text[];
 } PROGMEM SDP_Attribute_ServiceName =
 	{
-		.Header = (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
-		.Size   = sizeof("SDP") - 1,
-		.Text   = "SDP",
+		(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
+		(sizeof("SDP") - 1),
+		"SDP",
 	};
 
 const struct
@@ -85,19 +105,20 @@ const struct
 	char    Text[];
 } PROGMEM SDP_Attribute_ServiceDescription =
 	{
-		.Header = (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
-		.Size   = sizeof("Service Discovery Protocol Server") - 1,
-		.Text   = "Service Discovery Protocol Server",
+		(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
+		(sizeof("Service Discovery Protocol Server") - 1),
+		"Service Discovery Protocol Server",
 	};
 
 /** Service Discovery Protocol attribute table, listing all supported attributes of the service. */
 const ServiceAttributeTable_t SDP_Attribute_Table[] PROGMEM =
 	{
-		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &SDP_Attribute_ServiceHandle      },
-		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS,     .Data = &SDP_Attribute_ServiceClassIDs    },
-		{.AttributeID = SDP_ATTRIBUTE_ID_VERSION,             .Data = &SDP_Attribute_Version            },
-		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME,         .Data = &SDP_Attribute_ServiceName        },
-		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION,  .Data = &SDP_Attribute_ServiceDescription },
+		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE,    .Data = &SDP_Attribute_ServiceHandle      },
+		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS,        .Data = &SDP_Attribute_ServiceClassIDs    },
+//		{.AttributeID = SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST, .Data = &SDP_Attribute_ProtocolDescriptor },
+		{.AttributeID = SDP_ATTRIBUTE_ID_VERSION,                .Data = &SDP_Attribute_Version            },
+		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME,            .Data = &SDP_Attribute_ServiceName        },
+		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION,     .Data = &SDP_Attribute_ServiceDescription },
 
 		SERVICE_ATTRIBUTE_TABLE_TERMINATOR
 	};
@@ -106,7 +127,11 @@ const struct
 {
 	uint8_t  Header;
 	uint32_t Data;
-} PROGMEM RFCOMM_Attribute_ServiceHandle = {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit), SWAPENDIAN_32(0x00010001)};
+} PROGMEM RFCOMM_Attribute_ServiceHandle =
+	{
+		(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit),
+		SWAPENDIAN_32(0x00010001),
+	};
 
 const struct
 {
@@ -115,12 +140,11 @@ const struct
 	ItemUUID_t UUIDList[];
 } PROGMEM RFCOMM_Attribute_ServiceClassIDs =
 	{
-		.Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
-		.Size   = SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
-		.UUIDList =
-			{
-				{.Header = (SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), .UUID = {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x11, 0x01}},}
-			}
+		(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
+		SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
+		{
+			{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x11, 0x01}}}
+		}
 	};
 
 const struct
@@ -130,12 +154,11 @@ const struct
 	Item16Bit_t OffsetList[];
 } PROGMEM RFCOMM_Attribute_LangOffset =
 	{
-		.Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
-		.Size   = (sizeof(Item16Bit_t) * 1),
-		.OffsetList =
-			{
-				{.Header = (SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), .Value = SWAPENDIAN_16(0x0100)}
-			}
+		(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
+		(sizeof(Item16Bit_t) * 1),
+		{
+			{(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)}
+		}
 	};
 
 const struct
@@ -145,9 +168,9 @@ const struct
 	char    Text[];
 } PROGMEM RFCOMM_Attribute_ServiceName =
 	{
-		.Header = (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
-		.Size   = sizeof("Serial Port") - 1,
-		.Text   = "Serial Port",
+		(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
+		sizeof("Serial Port") - 1,
+		"Serial Port",
 	};
 
 const struct
@@ -157,17 +180,17 @@ const struct
 	char    Text[];
 } PROGMEM RFCOMM_Attribute_ServiceDescription =
 	{
-		.Header = (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
-		.Size   = sizeof("Wireless Serial Port Service") - 1,
-		.Text   = "Wireless Serial Port Service",
+		(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
+		sizeof("Wireless Serial Port Service") - 1,
+		"Wireless Serial Port Service",
 	};
 
 const ServiceAttributeTable_t RFCOMM_Attribute_Table[] PROGMEM =
 	{
-		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &RFCOMM_Attribute_ServiceHandle      },
-		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS,     .Data = &RFCOMM_Attribute_ServiceClassIDs    },
-		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME,         .Data = &RFCOMM_Attribute_ServiceName        },
-		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION,  .Data = &RFCOMM_Attribute_ServiceDescription },
+		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE,    .Data = &RFCOMM_Attribute_ServiceHandle      },
+		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS,        .Data = &RFCOMM_Attribute_ServiceClassIDs    },
+		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME,            .Data = &RFCOMM_Attribute_ServiceName        },
+		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION,     .Data = &RFCOMM_Attribute_ServiceDescription },
 
 		SERVICE_ATTRIBUTE_TABLE_TERMINATOR
 	};
diff --git a/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.h b/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.h
index 5ca010c525ef6a2ca1edb8b394516590dd4cb204..61fd5939048e3ec44fb86f82c11b78d3d99d560f 100644
--- a/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.h
+++ b/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.h
@@ -48,6 +48,7 @@
 		
 		#define SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE    0x0000
 		#define SDP_ATTRIBUTE_ID_SERVICECLASSIDS        0x0001
+		#define SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST 0x0004
 		#define SDP_ATTRIBUTE_ID_VERSION                0x0200
 		#define SDP_ATTRIBUTE_ID_SERVICENAME            0x0100
 		#define SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION     0x0101
@@ -87,13 +88,6 @@
 			const void* AttributeTable; /**< Pointer to the UUID's attribute table, located in PROGMEM memory space */
 		} ServiceTable_t;
 
-		/** Structure for a list of Data Elements containing UUIDs, for service attributes requiring UUID lists. */
-		typedef struct
-		{
-			uint8_t Header; /**< Data Element header, should be (SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit) */
-			UUID_t  UUID; /**< UUID to store in the list Data Element */
-		} ItemUUID_t;
-
 		/** Structure for a list of Data Elements containing 8-bit integers, for service attributes requiring such lists. */
 		typedef struct
 		{
@@ -115,6 +109,24 @@
 			uint32_t Value; /**< Value to store in the list Data Element */
 		} Item32Bit_t;
 
+		/** Structure for a list of Data Elements containing UUIDs, for service attributes requiring UUID lists. */
+		typedef struct
+		{
+			uint8_t Header; /**< Data Element header, should be (SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit) */
+			UUID_t  UUID; /**< UUID to store in the list Data Element */
+		} ItemUUID_t;
+		
+		/** Structure for a list of Data Elements Sequences containing UUID Data Elements, for service attributes requiring
+		 *  protocol lists.
+		 */
+		typedef struct
+		{
+			uint8_t     Header; /**< Data Element header, should be (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit) */
+			uint8_t     Size; /**< Size of the inner Data Element sequence */
+			
+			ItemUUID_t  UUID; /**< UUID to store in the protocol list Data Element sequence */
+		} ItemProtocol_t;
+		
 	/* External Variables: */
 		extern const ServiceAttributeTable_t SDP_Attribute_Table[];
 		extern const ServiceAttributeTable_t RFCOMM_Attribute_Table[];