diff --git a/Bootloaders/CDC/Descriptors.c b/Bootloaders/CDC/Descriptors.c
index bbf4e762100527c16b86636d11e0f4274c44e7be..2b85b01264afd2b8fae1e9d8b9db21d8d9e086ed 100644
--- a/Bootloaders/CDC/Descriptors.c
+++ b/Bootloaders/CDC/Descriptors.c
@@ -90,7 +90,7 @@ const USB_Descriptor_Configuration_t ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -141,7 +141,7 @@ const USB_Descriptor_Configuration_t ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Bootloaders/CDC/Descriptors.h b/Bootloaders/CDC/Descriptors.h
index 24d1a398efce97e429c6d2ee7556d3b878f7ba77..f35a4d1f8f4095762925f7110112b570265f5e04 100644
--- a/Bootloaders/CDC/Descriptors.h
+++ b/Bootloaders/CDC/Descriptors.h
@@ -127,15 +127,25 @@
 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */
+			INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Bootloaders/DFU/BootloaderDFU.h b/Bootloaders/DFU/BootloaderDFU.h
index 3d6d906494ffaadb14427d6b7238a06e4297e01b..949f7e8a5198e7326646b8ea03150f656358f843 100644
--- a/Bootloaders/DFU/BootloaderDFU.h
+++ b/Bootloaders/DFU/BootloaderDFU.h
@@ -170,7 +170,7 @@
 			dfuMANIFEST                  = 7,
 			dfuMANIFEST_WAIT_RESET       = 8,
 			dfuUPLOAD_IDLE               = 9,
-			dfuERROR	                 = 10
+			dfuERROR                     = 10
 		};
 
 		/** DFU command status error codes. Refer to the DFU class specification for information on each error code. */
@@ -191,7 +191,7 @@
 			errUSBR                      = 12,
 			errPOR                       = 13,
 			errUNKNOWN                   = 14,
-			errSTALLEDPKT	             = 15
+			errSTALLEDPKT                = 15
 		};
 
 	/* Function Prototypes: */
diff --git a/Bootloaders/DFU/Descriptors.c b/Bootloaders/DFU/Descriptors.c
index 5901dad128ee42e16ea798844f8cc4f77a14763e..9cd74cfd20ccdc1cb8a2ba6003158eaedee2ec32 100644
--- a/Bootloaders/DFU/Descriptors.c
+++ b/Bootloaders/DFU/Descriptors.c
@@ -90,7 +90,7 @@ const USB_Descriptor_Configuration_t ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_DFU,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 0,
diff --git a/Bootloaders/DFU/Descriptors.h b/Bootloaders/DFU/Descriptors.h
index c33e388c048e3ea9940e26e1ae28c6552fe00d13..8bd46793efa00945fae211294beb8bea0628dab3 100644
--- a/Bootloaders/DFU/Descriptors.h
+++ b/Bootloaders/DFU/Descriptors.h
@@ -164,15 +164,24 @@
 			USB_Descriptor_DFU_Functional_t       DFU_Functional;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_DFU = 0, /**< DFU interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Bootloaders/HID/Descriptors.c b/Bootloaders/HID/Descriptors.c
index ac27b760b81f33c6f3c0c0ced147ac45f2d3f9e4..6754d81d4a6e07a1d45740a746e3aff17393b537 100644
--- a/Bootloaders/HID/Descriptors.c
+++ b/Bootloaders/HID/Descriptors.c
@@ -110,7 +110,7 @@ const USB_Descriptor_Configuration_t ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_Printer,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
diff --git a/Bootloaders/HID/Descriptors.h b/Bootloaders/HID/Descriptors.h
index 4ef30ed8f664ffb7e41d5b596b707f3044952284..c10b51678e140375739963f937be0b38e3e27a4c 100644
--- a/Bootloaders/HID/Descriptors.h
+++ b/Bootloaders/HID/Descriptors.h
@@ -51,9 +51,18 @@
 			// Generic HID Interface
 			USB_Descriptor_Interface_t            HID_Interface;
 			USB_HID_Descriptor_HID_t              HID_VendorHID;
-	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
+			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_Printer = 0, /**< Printer interface descriptor ID */
+		};
+
 	/* Macros: */
 		/** Endpoint address of the HID data IN endpoint. */
 		#define HID_IN_EPADDR                (ENDPOINT_DIR_IN | 1)
diff --git a/Bootloaders/MassStorage/BootloaderMassStorage.c b/Bootloaders/MassStorage/BootloaderMassStorage.c
index 1b6eda43872f52587c4f2518b5db991893de159b..9d15a81affacad2cc130b9f579df7bb3d56b46d0 100644
--- a/Bootloaders/MassStorage/BootloaderMassStorage.c
+++ b/Bootloaders/MassStorage/BootloaderMassStorage.c
@@ -44,7 +44,7 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber           = 0,
+				.InterfaceNumber           = INTERFACE_ID_MassStorage,
 				.DataINEndpoint            =
 					{
 						.Address           = MASS_STORAGE_IN_EPADDR,
diff --git a/Bootloaders/MassStorage/Descriptors.c b/Bootloaders/MassStorage/Descriptors.c
index 7ae0a7da9eda6669faa80cae4578025d1ef9c7d8..1186ea0794ad526cc14c2b6d4d04df470db6ead4 100644
--- a/Bootloaders/MassStorage/Descriptors.c
+++ b/Bootloaders/MassStorage/Descriptors.c
@@ -91,7 +91,7 @@ const USB_Descriptor_Configuration_t ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_MassStorage,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Bootloaders/MassStorage/Descriptors.h b/Bootloaders/MassStorage/Descriptors.h
index 2e97c6d8a235c2cf3c99b2dcabde7728ece78d2e..ea89cb27b63d7181d951c4f5e366c65719d26472 100644
--- a/Bootloaders/MassStorage/Descriptors.h
+++ b/Bootloaders/MassStorage/Descriptors.h
@@ -68,6 +68,16 @@
 			USB_Descriptor_Endpoint_t             MS_DataOutEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_MassStorage = 0, /**< Mass storage interface descriptor ID */
+		};
+
 	/* Function Prototypes: */
 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 		                                    const uint8_t wIndex,
diff --git a/Bootloaders/Printer/BootloaderPrinter.c b/Bootloaders/Printer/BootloaderPrinter.c
index 1e60cdd6d565198ab8be9acc946aa86a9dfa20e6..3fec7217d4b0e8eaeecb3726dbe4d2981db6883d 100644
--- a/Bootloaders/Printer/BootloaderPrinter.c
+++ b/Bootloaders/Printer/BootloaderPrinter.c
@@ -43,7 +43,7 @@ USB_ClassInfo_PRNT_Device_t TextOnly_Printer_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber          = 0,
+				.InterfaceNumber          = INTERFACE_ID_Printer,
 				.DataINEndpoint           =
 					{
 						.Address          = PRINTER_IN_EPADDR,
diff --git a/Bootloaders/Printer/Descriptors.c b/Bootloaders/Printer/Descriptors.c
index 0fbb3ae7e4aa5e61bc375a129fd6199671f5f63f..5329afc864e19bba484f94d5c611f20675ad8f81 100644
--- a/Bootloaders/Printer/Descriptors.c
+++ b/Bootloaders/Printer/Descriptors.c
@@ -91,7 +91,7 @@ const USB_Descriptor_Configuration_t ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_Printer,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Bootloaders/Printer/Descriptors.h b/Bootloaders/Printer/Descriptors.h
index fba326a9355841df77ee73f0e5651376b2cde942..d5c9b71ee2bdb4b6d7e3011ac4efa0736525025f 100644
--- a/Bootloaders/Printer/Descriptors.h
+++ b/Bootloaders/Printer/Descriptors.h
@@ -66,15 +66,24 @@
 			USB_Descriptor_Endpoint_t             Printer_DataOutEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each string descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_Printer      = 0, /**< Printer interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.c b/Demos/Device/ClassDriver/AudioInput/AudioInput.c
index 9eec39ca25463efc248fe7dd5aeb3996f7f0a0b2..02bd1e45a7532aa859a60607749ba291a1ecf2c1 100644
--- a/Demos/Device/ClassDriver/AudioInput/AudioInput.c
+++ b/Demos/Device/ClassDriver/AudioInput/AudioInput.c
@@ -44,8 +44,8 @@ USB_ClassInfo_Audio_Device_t Microphone_Audio_Interface =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber   = 0,
-				.StreamingInterfaceNumber = 1,
+				.ControlInterfaceNumber   = INTERFACE_ID_AudioControl,
+				.StreamingInterfaceNumber = INTERFACE_ID_AudioStream,
 				.DataINEndpoint           =
 					{
 						.Address          = AUDIO_STREAM_EPADDR,
diff --git a/Demos/Device/ClassDriver/AudioInput/Descriptors.c b/Demos/Device/ClassDriver/AudioInput/Descriptors.c
index eb4c21c020847215f3cbe33c7e1169d60420eebf..a487387352a201fb10856d59984be603d1dfb49a 100644
--- a/Demos/Device/ClassDriver/AudioInput/Descriptors.c
+++ b/Demos/Device/ClassDriver/AudioInput/Descriptors.c
@@ -90,7 +90,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 0,
+			.InterfaceNumber          = INTERFACE_ID_AudioControl,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 0,
@@ -150,7 +150,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 1,
+			.InterfaceNumber          = INTERFACE_ID_AudioStream,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 0,
@@ -166,7 +166,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 1,
+			.InterfaceNumber          = INTERFACE_ID_AudioStream,
 			.AlternateSetting         = 1,
 
 			.TotalEndpoints           = 1,
diff --git a/Demos/Device/ClassDriver/AudioInput/Descriptors.h b/Demos/Device/ClassDriver/AudioInput/Descriptors.h
index 1bb38ff65e1dca07f24c639c1f191949673c61e8..fe099570feaae7b48a4c1c9113f1deb1ec577623 100644
--- a/Demos/Device/ClassDriver/AudioInput/Descriptors.h
+++ b/Demos/Device/ClassDriver/AudioInput/Descriptors.h
@@ -75,15 +75,25 @@
 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */
+			INTERFACE_ID_AudioStream  = 1, /**< Audio stream interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
index 81fd95b1693db9d1f92a894046d26bd1127cdcbe..432f5e0fa24df491a1c8af419a27f551e43969ba 100644
--- a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
+++ b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
@@ -44,8 +44,8 @@ USB_ClassInfo_Audio_Device_t Speaker_Audio_Interface =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber   = 0,
-				.StreamingInterfaceNumber = 1,
+				.ControlInterfaceNumber   = INTERFACE_ID_AudioControl,
+				.StreamingInterfaceNumber = INTERFACE_ID_AudioStream,
 				.DataOUTEndpoint          =
 					{
 						.Address          = AUDIO_STREAM_EPADDR,
diff --git a/Demos/Device/ClassDriver/AudioOutput/Descriptors.c b/Demos/Device/ClassDriver/AudioOutput/Descriptors.c
index 4ced7a0eb5bf97974c60c153d0a425e8e6c1d1e0..aec2c5f517487ee45b381c0b67da335dcf0d0b24 100644
--- a/Demos/Device/ClassDriver/AudioOutput/Descriptors.c
+++ b/Demos/Device/ClassDriver/AudioOutput/Descriptors.c
@@ -90,7 +90,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 0,
+			.InterfaceNumber          = INTERFACE_ID_AudioControl,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 0,
@@ -150,7 +150,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 1,
+			.InterfaceNumber          = INTERFACE_ID_AudioStream,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 0,
@@ -166,7 +166,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 1,
+			.InterfaceNumber          = INTERFACE_ID_AudioStream,
 			.AlternateSetting         = 1,
 
 			.TotalEndpoints           = 1,
diff --git a/Demos/Device/ClassDriver/AudioOutput/Descriptors.h b/Demos/Device/ClassDriver/AudioOutput/Descriptors.h
index 80f1426839c45444f307510ea972b2148041b752..cb67f02ec1f8958ae191c05e2a03575fcb0334a9 100644
--- a/Demos/Device/ClassDriver/AudioOutput/Descriptors.h
+++ b/Demos/Device/ClassDriver/AudioOutput/Descriptors.h
@@ -75,15 +75,25 @@
 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */
+			INTERFACE_ID_AudioStream  = 1, /**< Audio stream interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.c b/Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.c
index d0992de4bc9336b2f364e466b75dd9b5eeaacdb9..2452318523b12e332dfb39cff31232b3625512e1 100644
--- a/Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.c
+++ b/Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.c
@@ -105,7 +105,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC1_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -156,7 +156,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC1_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
@@ -206,7 +206,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 2,
+			.InterfaceNumber        = INTERFACE_ID_CDC2_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -257,7 +257,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 3,
+			.InterfaceNumber        = INTERFACE_ID_CDC2_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.h b/Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.h
index 1105ab7b33df05466c01b19be5c63c70ea45f96e..98170269af8cb9f5305524084e58e3c4f4363c8f 100644
--- a/Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.h
+++ b/Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.h
@@ -102,15 +102,27 @@
 			USB_Descriptor_Endpoint_t                CDC2_DataInEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC1_CCI = 0, /**< CDC1 CCI interface descriptor ID */
+			INTERFACE_ID_CDC1_DCI = 1, /**< CDC1 DCI interface descriptor ID */
+			INTERFACE_ID_CDC2_CCI = 2, /**< CDC2 CCI interface descriptor ID */
+			INTERFACE_ID_CDC2_DCI = 3, /**< CDC2 DCI interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.c b/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.c
index eaba6185abc5db0172ee05e430aeafbe6c40ae1e..070ebc79190203c3cfce16f464d50f377c66683c 100644
--- a/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.c
+++ b/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.c
@@ -45,7 +45,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial1_CDC_Interface =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber   = 0,
+				.ControlInterfaceNumber   = INTERFACE_ID_CDC1_CCI,
 				.DataINEndpoint           =
 					{
 						.Address          = CDC1_TX_EPADDR,
@@ -76,7 +76,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial2_CDC_Interface =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber   = 2,
+				.ControlInterfaceNumber   = INTERFACE_ID_CDC2_CCI,
 				.DataINEndpoint           =
 					{
 						.Address          = CDC2_TX_EPADDR,
diff --git a/Demos/Device/ClassDriver/GenericHID/Descriptors.c b/Demos/Device/ClassDriver/GenericHID/Descriptors.c
index 57c3502b9ff9cb0123536f7c56f3dd7fd4e370b5..b070d864049d99d502131261359266921384ccc2 100644
--- a/Demos/Device/ClassDriver/GenericHID/Descriptors.c
+++ b/Demos/Device/ClassDriver/GenericHID/Descriptors.c
@@ -108,7 +108,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_GenericHID,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
diff --git a/Demos/Device/ClassDriver/GenericHID/Descriptors.h b/Demos/Device/ClassDriver/GenericHID/Descriptors.h
index b598e9889c11729a05ec369dbfc0154a61a3e56f..4500f2c101bc74b1bbb2e093bfdeb7b4aefa8ae1 100644
--- a/Demos/Device/ClassDriver/GenericHID/Descriptors.h
+++ b/Demos/Device/ClassDriver/GenericHID/Descriptors.h
@@ -55,18 +55,27 @@
 			// Generic HID Interface
 			USB_Descriptor_Interface_t            HID_Interface;
 			USB_HID_Descriptor_HID_t              HID_GenericHID;
-	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
+			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_GenericHID = 0, /**< GenericHID interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Macros: */
diff --git a/Demos/Device/ClassDriver/GenericHID/GenericHID.c b/Demos/Device/ClassDriver/GenericHID/GenericHID.c
index 182aa5a586469a53766e17772523c79cb7cd5dd1..8f5b861319e3dfcfcfce29121fdebfef75975e6c 100644
--- a/Demos/Device/ClassDriver/GenericHID/GenericHID.c
+++ b/Demos/Device/ClassDriver/GenericHID/GenericHID.c
@@ -47,7 +47,7 @@ USB_ClassInfo_HID_Device_t Generic_HID_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber              = 0,
+				.InterfaceNumber              = INTERFACE_ID_GenericHID,
 				.ReportINEndpoint             =
 					{
 						.Address              = GENERIC_IN_EPADDR,
diff --git a/Demos/Device/ClassDriver/Joystick/Descriptors.c b/Demos/Device/ClassDriver/Joystick/Descriptors.c
index 8a6ef2052a46140698168480a442b86e98413f24..2d416528bb316619819cdd5ab228c38e136a7720 100644
--- a/Demos/Device/ClassDriver/Joystick/Descriptors.c
+++ b/Demos/Device/ClassDriver/Joystick/Descriptors.c
@@ -108,7 +108,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_Joystick,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
diff --git a/Demos/Device/ClassDriver/Joystick/Descriptors.h b/Demos/Device/ClassDriver/Joystick/Descriptors.h
index 89c0584d9ac7f9d07d37259c870c9e0952efa04a..839cd28eb1a670135af3dfa5e20646468307d6d8 100644
--- a/Demos/Device/ClassDriver/Joystick/Descriptors.h
+++ b/Demos/Device/ClassDriver/Joystick/Descriptors.h
@@ -56,15 +56,24 @@
 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_Joystick = 0, /**< Joystick interface desciptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Macros: */
diff --git a/Demos/Device/ClassDriver/Joystick/Joystick.c b/Demos/Device/ClassDriver/Joystick/Joystick.c
index 809c4106082866581f9f9604293803452a881f38..bbe85584a5a7098272f7b1d488457a66fae46dec 100644
--- a/Demos/Device/ClassDriver/Joystick/Joystick.c
+++ b/Demos/Device/ClassDriver/Joystick/Joystick.c
@@ -47,7 +47,7 @@ USB_ClassInfo_HID_Device_t Joystick_HID_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber              = 0,
+				.InterfaceNumber              = INTERFACE_ID_Joystick,
 				.ReportINEndpoint             =
 					{
 						.Address              = JOYSTICK_EPADDR,
diff --git a/Demos/Device/ClassDriver/Keyboard/Descriptors.c b/Demos/Device/ClassDriver/Keyboard/Descriptors.c
index f40e3b932cf5eab8b2fef10778ac88b89aac86b1..4340ec657cc39bd283d465db4bc5e0129ec55bd1 100644
--- a/Demos/Device/ClassDriver/Keyboard/Descriptors.c
+++ b/Demos/Device/ClassDriver/Keyboard/Descriptors.c
@@ -104,7 +104,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_Keyboard,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
diff --git a/Demos/Device/ClassDriver/Keyboard/Descriptors.h b/Demos/Device/ClassDriver/Keyboard/Descriptors.h
index abaf9c62a38d7d3ccaa33a25d6a18c04892678c0..ce029bb75cfd283f8f54370f69a4efccd7a5e934 100644
--- a/Demos/Device/ClassDriver/Keyboard/Descriptors.h
+++ b/Demos/Device/ClassDriver/Keyboard/Descriptors.h
@@ -56,15 +56,24 @@
 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_Keyboard = 0, /**< Keyboard interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Macros: */
diff --git a/Demos/Device/ClassDriver/Keyboard/Keyboard.c b/Demos/Device/ClassDriver/Keyboard/Keyboard.c
index b3cc67e1e621e752e5c47b9c0093a333d978c93f..68e3fbe1bfd81520a0bd811c799774fc5d2f2c9f 100644
--- a/Demos/Device/ClassDriver/Keyboard/Keyboard.c
+++ b/Demos/Device/ClassDriver/Keyboard/Keyboard.c
@@ -47,7 +47,7 @@ USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =
  	{
 		.Config =
 			{
-				.InterfaceNumber              = 0,
+				.InterfaceNumber              = INTERFACE_ID_Keyboard,
 				.ReportINEndpoint             =
 					{
 						.Address              = KEYBOARD_EPADDR,
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.c b/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.c
index c3b2e2c7b4c750aa71ff032987d93f32ba81aa86..0d350c7641383724b517b515e60ab5f2dd56e4ec 100644
--- a/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.c
+++ b/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.c
@@ -120,7 +120,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_Keyboard,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
@@ -157,7 +157,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x01,
+			.InterfaceNumber        = INTERFACE_ID_Mouse,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
@@ -269,28 +269,30 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 
 			break;
 		case HID_DTYPE_HID:
-			if (!(wIndex))
+			switch (wIndex)
 			{
-				Address = &ConfigurationDescriptor.HID1_KeyboardHID;
-				Size    = sizeof(USB_HID_Descriptor_HID_t);
-			}
-			else
-			{
-				Address = &ConfigurationDescriptor.HID2_MouseHID;
-				Size    = sizeof(USB_HID_Descriptor_HID_t);
+				case INTERFACE_ID_Keyboard:
+					Address = &ConfigurationDescriptor.HID1_KeyboardHID;
+					Size    = sizeof(USB_HID_Descriptor_HID_t);
+					break;
+				case INTERFACE_ID_Mouse:
+					Address = &ConfigurationDescriptor.HID2_MouseHID;
+					Size    = sizeof(USB_HID_Descriptor_HID_t);
+					break;
 			}
 
 			break;
 		case HID_DTYPE_Report:
-			if (!(wIndex))
+			switch (wIndex)
 			{
-				Address = &KeyboardReport;
-				Size    = sizeof(KeyboardReport);
-			}
-			else
-			{
-				Address = &MouseReport;
-				Size    = sizeof(MouseReport);
+				case INTERFACE_ID_Keyboard:
+					Address = &KeyboardReport;
+					Size    = sizeof(KeyboardReport);
+					break;
+				case INTERFACE_ID_Mouse:
+					Address = &MouseReport;
+					Size    = sizeof(MouseReport);
+					break;
 			}
 
 			break;
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.h b/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.h
index 27120eb34d0afbeef97e7e2339e1761384e3109e..1a45f74bd72dca918d9ec6e81ef88d89d0936e15 100644
--- a/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.h
+++ b/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.h
@@ -61,15 +61,25 @@
 			USB_Descriptor_Endpoint_t             HID2_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_Keyboard = 0, /**< Keyboard interface descriptor ID */
+			INTERFACE_ID_Mouse    = 1, /**< Mouse interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Macros: */
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
index f663f1683d598165e1c9f2c7b2278bf967504016..789fc215d68b703eecadff15a28b443a258fd4c9 100644
--- a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
+++ b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
@@ -51,7 +51,7 @@ USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber              = 0,
+				.InterfaceNumber              = INTERFACE_ID_Keyboard,
 				.ReportINEndpoint             =
 					{
 						.Address              = KEYBOARD_IN_EPADDR,
@@ -72,7 +72,7 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber              = 1,
+				.InterfaceNumber              = INTERFACE_ID_Mouse,
 				.ReportINEndpoint             =
 					{
 						.Address              = MOUSE_IN_EPADDR,
diff --git a/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.c b/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.c
index a361473216749a7734bc96aaa31305c8f7c86c4b..477cad0a41346bc4c251e555156239abc156c41c 100644
--- a/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.c
+++ b/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.c
@@ -167,7 +167,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_KeyboardAndMouse,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
diff --git a/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.h b/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.h
index a47d18577f91b264d5842b3a94cdfe9dbfbe3929..f5d68be69dc89de765d18877ddfce19608b6cc9c 100644
--- a/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.h
+++ b/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.h
@@ -56,15 +56,24 @@
 			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_KeyboardAndMouse = 0, /**< Combined keyboard and mouse interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Macros: */
diff --git a/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.c b/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.c
index f15d134ffccc44cbe33e171ad4107b75318ef798..0ec878894165d49779a0c8288888815ca4e8def3 100644
--- a/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.c
+++ b/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.c
@@ -47,7 +47,7 @@ USB_ClassInfo_HID_Device_t Device_HID_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber              = 0,
+				.InterfaceNumber              = INTERFACE_ID_KeyboardAndMouse,
 				.ReportINEndpoint             =
 					{
 						.Address              = HID_IN_EPADDR,
diff --git a/Demos/Device/ClassDriver/MIDI/Descriptors.c b/Demos/Device/ClassDriver/MIDI/Descriptors.c
index 5413f27f56896c31ffb6a87376baeeb52f6ae88a..746bcc4845299b16e17a396e55982d6b34331bcf 100644
--- a/Demos/Device/ClassDriver/MIDI/Descriptors.c
+++ b/Demos/Device/ClassDriver/MIDI/Descriptors.c
@@ -90,7 +90,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 0,
+			.InterfaceNumber          = INTERFACE_ID_MidiAudioControl,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 0,
@@ -118,7 +118,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 1,
+			.InterfaceNumber          = INTERFACE_ID_MidiAudioStreaming,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 2,
diff --git a/Demos/Device/ClassDriver/MIDI/Descriptors.h b/Demos/Device/ClassDriver/MIDI/Descriptors.h
index 92c6c38d96587dd34800c3febe17a50e8ba2b2b1..d6f230a8de2ae694317c47fb37a19bbc6fc8ed15 100644
--- a/Demos/Device/ClassDriver/MIDI/Descriptors.h
+++ b/Demos/Device/ClassDriver/MIDI/Descriptors.h
@@ -77,15 +77,25 @@
 			USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_MidiAudioControl   = 0, /**< MIDI audio control interface descriptor ID */
+			INTERFACE_ID_MidiAudioStreaming = 1, /**< MIDI audio streaming interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/ClassDriver/MIDI/MIDI.c b/Demos/Device/ClassDriver/MIDI/MIDI.c
index bec442883fce34d9830fc05f989bc39b5c563411..79a8317627704f1a8007e954f7285731885b583f 100644
--- a/Demos/Device/ClassDriver/MIDI/MIDI.c
+++ b/Demos/Device/ClassDriver/MIDI/MIDI.c
@@ -44,7 +44,7 @@ USB_ClassInfo_MIDI_Device_t Keyboard_MIDI_Interface =
 	{
 		.Config =
 			{
-				.StreamingInterfaceNumber = 1,
+				.StreamingInterfaceNumber = INTERFACE_ID_MidiAudioStreaming,
 				.DataINEndpoint           =
 					{
 						.Address          = MIDI_STREAM_IN_EPADDR,
diff --git a/Demos/Device/ClassDriver/MassStorage/Descriptors.c b/Demos/Device/ClassDriver/MassStorage/Descriptors.c
index d069bcece490cc39881e4758ced3410d7ce37082..2be052b070a3ff4a1e523cfbc625d7f021a4cafc 100644
--- a/Demos/Device/ClassDriver/MassStorage/Descriptors.c
+++ b/Demos/Device/ClassDriver/MassStorage/Descriptors.c
@@ -91,7 +91,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_MassStorage,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Demos/Device/ClassDriver/MassStorage/Descriptors.h b/Demos/Device/ClassDriver/MassStorage/Descriptors.h
index 3b9a96c8aa93d44ea87378a75dbda53ec20e193f..674bd29600c77b616cb062a25f06708fbf977f68 100644
--- a/Demos/Device/ClassDriver/MassStorage/Descriptors.h
+++ b/Demos/Device/ClassDriver/MassStorage/Descriptors.h
@@ -68,15 +68,24 @@
 			USB_Descriptor_Endpoint_t             MS_DataOutEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_MassStorage = 0, /**< Mass storage interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/ClassDriver/MassStorage/MassStorage.c b/Demos/Device/ClassDriver/MassStorage/MassStorage.c
index 82f02b918e282e9035ff71f020ce43ecd3b5d44b..32b4c2634ceec11cb449038606f92c6de3503b30 100644
--- a/Demos/Device/ClassDriver/MassStorage/MassStorage.c
+++ b/Demos/Device/ClassDriver/MassStorage/MassStorage.c
@@ -44,7 +44,7 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber           = 0,
+				.InterfaceNumber           = INTERFACE_ID_MassStorage,
 				.DataINEndpoint            =
 					{
 						.Address           = MASS_STORAGE_IN_EPADDR,
diff --git a/Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.c b/Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.c
index 2209d5144b9c97805aa05fd4a3fb8193e5d115c5..5749b365f59df1129baf697cd32a4c8884aaec8c 100644
--- a/Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.c
+++ b/Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.c
@@ -106,7 +106,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_MassStorage,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
@@ -142,7 +142,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_Keyboard,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
diff --git a/Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.h b/Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.h
index 2b70e11b4256365da38e452e5b212575867b4961..606e47d9163e2af55f65c3c0b56ec301292cbd88 100644
--- a/Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.h
+++ b/Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.h
@@ -80,15 +80,25 @@
 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_MassStorage = 0, /**< Mass storage interface descriptor ID */
+			INTERFACE_ID_Keyboard    = 1, /**< Keyboard interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c b/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c
index 2ed3f411b414a2b1fee04dd9d33de1690ae4fa49..8ed0d3b6473615f361ed8ac7d79718fdb62b533e 100644
--- a/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c
+++ b/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c
@@ -45,7 +45,7 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber           = 0,
+				.InterfaceNumber           = INTERFACE_ID_MassStorage,
 				.DataINEndpoint            =
 					{
 						.Address           = MASS_STORAGE_IN_EPADDR,
@@ -73,7 +73,7 @@ USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =
  	{
 		.Config =
 			{
-				.InterfaceNumber              = 1,
+				.InterfaceNumber              = INTERFACE_ID_Keyboard,
 				.ReportINEndpoint             =
 					{
 						.Address              = KEYBOARD_EPADDR,
diff --git a/Demos/Device/ClassDriver/Mouse/Descriptors.c b/Demos/Device/ClassDriver/Mouse/Descriptors.c
index c21a8cc654f200ac936b055db6514d78a9202b78..09278a79071db65622fa3e7de22e11ea36265521 100644
--- a/Demos/Device/ClassDriver/Mouse/Descriptors.c
+++ b/Demos/Device/ClassDriver/Mouse/Descriptors.c
@@ -109,7 +109,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_Mouse,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
diff --git a/Demos/Device/ClassDriver/Mouse/Descriptors.h b/Demos/Device/ClassDriver/Mouse/Descriptors.h
index a5380a11a6194534e7fc46566c0ab7d71ba59121..3b637e21fc96471ab49deddffb5d707504f05ba8 100644
--- a/Demos/Device/ClassDriver/Mouse/Descriptors.h
+++ b/Demos/Device/ClassDriver/Mouse/Descriptors.h
@@ -60,18 +60,27 @@
 			// Mouse HID Interface
 			USB_Descriptor_Interface_t            HID_Interface;
 			USB_HID_Descriptor_HID_t              HID_MouseHID;
-	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
+			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_Mouse = 0, /**< Mouse interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/ClassDriver/Mouse/Mouse.c b/Demos/Device/ClassDriver/Mouse/Mouse.c
index 8432b65a92c68a5ed6a5c2849e86bfa787a37e6b..1e8f7ab93fd1e73e38ab1886afe7365cf80a9754 100644
--- a/Demos/Device/ClassDriver/Mouse/Mouse.c
+++ b/Demos/Device/ClassDriver/Mouse/Mouse.c
@@ -47,7 +47,7 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber              = 0,
+				.InterfaceNumber              = INTERFACE_ID_Mouse,
 				.ReportINEndpoint             =
 					{
 						.Address              = MOUSE_EPADDR,
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.c b/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.c
index ca70633be3f6c81d338f10b9fa115617c93d134b..7474e549934a6776b25be7cf2c8692bfbc0183cf 100644
--- a/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.c
+++ b/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.c
@@ -90,7 +90,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -141,7 +141,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.h b/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.h
index be501572596c7742263707dacb8dcdb2af27dc4f..c782a5ea765ec3900899adb734adeb910c200e41 100644
--- a/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.h
+++ b/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.h
@@ -81,15 +81,25 @@
 			USB_Descriptor_Endpoint_t             RNDIS_DataInEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */
+			INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c b/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c
index 54d551142899ba03b51f4e6d8b08ac79ef4dc7b9..e38dfec267008249080fbe7dc8d243e90eebaf2f 100644
--- a/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c
+++ b/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c
@@ -44,7 +44,7 @@ USB_ClassInfo_RNDIS_Device_t Ethernet_RNDIS_Interface =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber         = 0,
+				.ControlInterfaceNumber         = INTERFACE_ID_CDC_CCI,
 				.DataINEndpoint                 =
 					{
 						.Address                = CDC_TX_EPADDR,
diff --git a/Demos/Device/ClassDriver/VirtualSerial/Descriptors.c b/Demos/Device/ClassDriver/VirtualSerial/Descriptors.c
index 9432562cc7fdf94d0811051d6778b5491f864613..33f63371d922d69fda3d1b359bead09abd1fb743 100644
--- a/Demos/Device/ClassDriver/VirtualSerial/Descriptors.c
+++ b/Demos/Device/ClassDriver/VirtualSerial/Descriptors.c
@@ -91,7 +91,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -142,7 +142,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Demos/Device/ClassDriver/VirtualSerial/Descriptors.h b/Demos/Device/ClassDriver/VirtualSerial/Descriptors.h
index e2d09b2181835547ff29d9c97e481cf70303eebe..20caec05c9e0a4a521d67b336e843eba6615ac78 100644
--- a/Demos/Device/ClassDriver/VirtualSerial/Descriptors.h
+++ b/Demos/Device/ClassDriver/VirtualSerial/Descriptors.h
@@ -79,15 +79,25 @@
 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */
+			INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.c b/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.c
index 0079acbfaa3b4f0a177b3d42a4e54af0fb9bb908..56b248d3c9b4da570230f9c26279afe6f11fffd1 100644
--- a/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.c
+++ b/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.c
@@ -44,7 +44,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber   = 0,
+				.ControlInterfaceNumber   = INTERFACE_ID_CDC_CCI,
 				.DataINEndpoint           =
 					{
 						.Address          = CDC_TX_EPADDR,
diff --git a/Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.c b/Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.c
index e41a91a189b4ac04a9b1a0807d8d647995cf85f9..b8a07f4c22b70583c96dd44c49ccb403d921cb20 100644
--- a/Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.c
+++ b/Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.c
@@ -105,7 +105,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -156,7 +156,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
@@ -192,7 +192,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 2,
+			.InterfaceNumber        = INTERFACE_ID_MassStorage,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.h b/Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.h
index 25d31bff8580a4ea470a3e1d717b679d0d481a8a..ac6e4fa8e530d2e3517b36afd6dabe809c99719f 100644
--- a/Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.h
+++ b/Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.h
@@ -96,15 +96,26 @@
 			USB_Descriptor_Endpoint_t                MS_DataOutEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC_CCI     = 0, /**< CDC CCI interface descriptor ID */
+			INTERFACE_ID_CDC_DCI     = 1, /**< CDC DCI interface descriptor ID */
+			INTERFACE_ID_MassStorage = 2, /**< Mass storage interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/ClassDriver/VirtualSerialMassStorage/VirtualSerialMassStorage.c b/Demos/Device/ClassDriver/VirtualSerialMassStorage/VirtualSerialMassStorage.c
index 03f422b45ce52f2f11d96399f27d436eafdc525d..6dc1ab66280ff08fc968e8970cc0c2655c48d376 100644
--- a/Demos/Device/ClassDriver/VirtualSerialMassStorage/VirtualSerialMassStorage.c
+++ b/Demos/Device/ClassDriver/VirtualSerialMassStorage/VirtualSerialMassStorage.c
@@ -44,7 +44,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber         = 0,
+				.ControlInterfaceNumber         = INTERFACE_ID_CDC_CCI,
 				.DataINEndpoint                 =
 					{
 						.Address                = CDC_TX_EPADDR,
@@ -74,7 +74,7 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber                = 2,
+				.InterfaceNumber                = INTERFACE_ID_MassStorage,
 				.DataINEndpoint                 =
 					{
 						.Address                = MASS_STORAGE_IN_EPADDR,
diff --git a/Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.c b/Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.c
index 42c77dde828be235961d240cca2f53802a6bf2a8..43c849b79ff1f7d3988215d6d18c21afdb740c96 100644
--- a/Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.c
+++ b/Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.c
@@ -124,7 +124,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -175,7 +175,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
@@ -211,7 +211,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 2,
+			.InterfaceNumber        = INTERFACE_ID_Mouse,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
diff --git a/Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.h b/Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.h
index 1bce49627499e2e158ba3c78953218a22f1109a9..7ac638bd6e7094d487fae720fb9ac0c1bbb088ae 100644
--- a/Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.h
+++ b/Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.h
@@ -91,15 +91,26 @@
 	        USB_Descriptor_Endpoint_t                HID_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */
+			INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */
+			INTERFACE_ID_Mouse   = 2, /**< Mouse interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.c b/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.c
index 73f9e387597e41e9924355c038ed4584000d9c3d..d4aba48512b685dac0a176cafd03ec037ec63ef6 100644
--- a/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.c
+++ b/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.c
@@ -44,7 +44,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber         = 0,
+				.ControlInterfaceNumber         = INTERFACE_ID_CDC_CCI,
 				.DataINEndpoint                 =
 					{
 						.Address                = CDC_TX_EPADDR,
@@ -77,7 +77,7 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber                = 2,
+				.InterfaceNumber                = INTERFACE_ID_Mouse,
 				.ReportINEndpoint               =
 					{
 						.Address                = MOUSE_EPADDR,
diff --git a/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.c b/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.c
index 8bf92371de2fa825ad696a8db3fa6623a9a5cbde..6b27db8b35796fd1c61c1c921ed79a05f47384d8 100644
--- a/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.c
+++ b/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.c
@@ -92,7 +92,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_TestAndMeasurement,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 3,
diff --git a/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.h b/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.h
index 9beb3d272d09eca8e4b95f7edfc5961eed4b8946..07464486d8d8ddbbb03943c9256b734c72e2fb91 100644
--- a/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.h
+++ b/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.h
@@ -74,15 +74,24 @@
 			USB_Descriptor_Endpoint_t             TM_NotificationEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_TestAndMeasurement = 0, /**< Test and measurement interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/LowLevel/AudioInput/Descriptors.c b/Demos/Device/LowLevel/AudioInput/Descriptors.c
index b3490d005b8e787e1e5ce7500626720bd4b9e4d8..444f16046a981d94d4b2fb3722d75c61f39060d8 100644
--- a/Demos/Device/LowLevel/AudioInput/Descriptors.c
+++ b/Demos/Device/LowLevel/AudioInput/Descriptors.c
@@ -90,7 +90,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 0,
+			.InterfaceNumber          = INTERFACE_ID_AudioControl,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 0,
@@ -150,7 +150,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 1,
+			.InterfaceNumber          = INTERFACE_ID_AudioStream,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 0,
@@ -166,7 +166,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 1,
+			.InterfaceNumber          = INTERFACE_ID_AudioStream,
 			.AlternateSetting         = 1,
 
 			.TotalEndpoints           = 1,
diff --git a/Demos/Device/LowLevel/AudioInput/Descriptors.h b/Demos/Device/LowLevel/AudioInput/Descriptors.h
index a3d3ec3ef2e9c1b745b17affc40414304ed71bbd..7dbb9aa2204928446f5bf98551c6131fa74f7e06 100644
--- a/Demos/Device/LowLevel/AudioInput/Descriptors.h
+++ b/Demos/Device/LowLevel/AudioInput/Descriptors.h
@@ -75,15 +75,25 @@
 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */
+			INTERFACE_ID_AudioStream  = 1, /**< Audio stream interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/LowLevel/AudioOutput/Descriptors.c b/Demos/Device/LowLevel/AudioOutput/Descriptors.c
index 43f717549ea615dd0c4ca0546254d404a63d0682..7879c34637103abb3bab5c678f4a545c1792f00e 100644
--- a/Demos/Device/LowLevel/AudioOutput/Descriptors.c
+++ b/Demos/Device/LowLevel/AudioOutput/Descriptors.c
@@ -90,7 +90,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 0,
+			.InterfaceNumber          = INTERFACE_ID_AudioControl,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 0,
@@ -150,7 +150,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 1,
+			.InterfaceNumber          = INTERFACE_ID_AudioStream,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 0,
@@ -166,7 +166,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 1,
+			.InterfaceNumber          = INTERFACE_ID_AudioStream,
 			.AlternateSetting         = 1,
 
 			.TotalEndpoints           = 1,
diff --git a/Demos/Device/LowLevel/AudioOutput/Descriptors.h b/Demos/Device/LowLevel/AudioOutput/Descriptors.h
index b8ae901d76352e7427f4ec760a830f1cc335f2e5..07d1becbdc54b6405e22d56c1b81afda9b4d2173 100644
--- a/Demos/Device/LowLevel/AudioOutput/Descriptors.h
+++ b/Demos/Device/LowLevel/AudioOutput/Descriptors.h
@@ -75,15 +75,25 @@
 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */
+			INTERFACE_ID_AudioStream  = 1, /**< Audio stream interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.c b/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.c
index d0992de4bc9336b2f364e466b75dd9b5eeaacdb9..2452318523b12e332dfb39cff31232b3625512e1 100644
--- a/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.c
+++ b/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.c
@@ -105,7 +105,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC1_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -156,7 +156,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC1_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
@@ -206,7 +206,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 2,
+			.InterfaceNumber        = INTERFACE_ID_CDC2_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -257,7 +257,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 3,
+			.InterfaceNumber        = INTERFACE_ID_CDC2_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.h b/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.h
index a5a87dc3df9d061a373c50bf1a3f6233c3f69b43..dc19cfe3469665979f34d56ffbdc3e8196ccdc89 100644
--- a/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.h
+++ b/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.h
@@ -102,15 +102,27 @@
 			USB_Descriptor_Endpoint_t                CDC2_DataInEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC1_CCI = 0, /**< CDC1 CCI interface descriptor ID */
+			INTERFACE_ID_CDC1_DCI = 1, /**< CDC1 DCI interface descriptor ID */
+			INTERFACE_ID_CDC2_CCI = 2, /**< CDC2 CCI interface descriptor ID */
+			INTERFACE_ID_CDC2_DCI = 3, /**< CDC2 DCI interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/LowLevel/GenericHID/Descriptors.c b/Demos/Device/LowLevel/GenericHID/Descriptors.c
index bcbb386cefe8d501935bb746c6e59d8608fb51bd..2e753600134ea448307d866f7a25945a1379abea 100644
--- a/Demos/Device/LowLevel/GenericHID/Descriptors.c
+++ b/Demos/Device/LowLevel/GenericHID/Descriptors.c
@@ -116,7 +116,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_GenericHID,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 2,
diff --git a/Demos/Device/LowLevel/GenericHID/Descriptors.h b/Demos/Device/LowLevel/GenericHID/Descriptors.h
index 884233445c5c5430e087043adffa885fd807193d..c37c68b135395f765fc4b9d4b19a6eb3773e2ccb 100644
--- a/Demos/Device/LowLevel/GenericHID/Descriptors.h
+++ b/Demos/Device/LowLevel/GenericHID/Descriptors.h
@@ -55,19 +55,28 @@
 			// Generic HID Interface
 			USB_Descriptor_Interface_t            HID_Interface;
 			USB_HID_Descriptor_HID_t              HID_GenericHID;
-	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
-	        USB_Descriptor_Endpoint_t             HID_ReportOUTEndpoint;
+			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
+			USB_Descriptor_Endpoint_t             HID_ReportOUTEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_GenericHID = 0, /**< GenericHID interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Macros: */
diff --git a/Demos/Device/LowLevel/Joystick/Descriptors.c b/Demos/Device/LowLevel/Joystick/Descriptors.c
index 376238708731536d696a9c4fc321dcc9081fa674..2f9eb0099681cfc6acc780d9eab76791da8facd7 100644
--- a/Demos/Device/LowLevel/Joystick/Descriptors.c
+++ b/Demos/Device/LowLevel/Joystick/Descriptors.c
@@ -128,7 +128,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_Joystick,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
diff --git a/Demos/Device/LowLevel/Joystick/Descriptors.h b/Demos/Device/LowLevel/Joystick/Descriptors.h
index f06b3cae3d383c18288fdceb1770333c842d3ee6..2600e0cac1ab230052f0467654a15b089b665d2a 100644
--- a/Demos/Device/LowLevel/Joystick/Descriptors.h
+++ b/Demos/Device/LowLevel/Joystick/Descriptors.h
@@ -53,18 +53,27 @@
 			// Joystick HID Interface
 			USB_Descriptor_Interface_t            HID_Interface;
 			USB_HID_Descriptor_HID_t              HID_JoystickHID;
-	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
+			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_Joystick = 0, /**< Joystick interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Macros: */
diff --git a/Demos/Device/LowLevel/Keyboard/Descriptors.c b/Demos/Device/LowLevel/Keyboard/Descriptors.c
index e3da4b6a9dd7bb9bfa286139abf4bb30c4b0f34b..6a644d80cdcc4982ac4512ab97c5d802ae3ced56 100644
--- a/Demos/Device/LowLevel/Keyboard/Descriptors.c
+++ b/Demos/Device/LowLevel/Keyboard/Descriptors.c
@@ -133,7 +133,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_Keyboard,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 2,
diff --git a/Demos/Device/LowLevel/Keyboard/Descriptors.h b/Demos/Device/LowLevel/Keyboard/Descriptors.h
index f9d54243a2234b3fd6a74bc63d09be4c2a56ebd7..dcd757233b8c68e5ba2e88694a222138e3cdf087 100644
--- a/Demos/Device/LowLevel/Keyboard/Descriptors.h
+++ b/Demos/Device/LowLevel/Keyboard/Descriptors.h
@@ -54,19 +54,28 @@
 			// Keyboard HID Interface
 			USB_Descriptor_Interface_t            HID_Interface;
 			USB_HID_Descriptor_HID_t              HID_KeyboardHID;
-	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
-	        USB_Descriptor_Endpoint_t             HID_ReportOUTEndpoint;
+			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
+			USB_Descriptor_Endpoint_t             HID_ReportOUTEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_Keyboard = 0, /**< Keyboard interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Macros: */
diff --git a/Demos/Device/LowLevel/KeyboardMouse/Descriptors.c b/Demos/Device/LowLevel/KeyboardMouse/Descriptors.c
index d45cd593f9ad8a18b188fa832756e1e9aa1f216d..4a339f415521c3b91ff01bf158ddfc061bdcbaf0 100644
--- a/Demos/Device/LowLevel/KeyboardMouse/Descriptors.c
+++ b/Demos/Device/LowLevel/KeyboardMouse/Descriptors.c
@@ -168,7 +168,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_Keyboard,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 2,
@@ -215,7 +215,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x01,
+			.InterfaceNumber        = INTERFACE_ID_Mouse,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
@@ -327,27 +327,29 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 
 			break;
 		case HID_DTYPE_HID:
-			if (!(wIndex))
+			switch (wIndex)
 			{
-				Address = &ConfigurationDescriptor.HID1_KeyboardHID;
-				Size    = sizeof(USB_HID_Descriptor_HID_t);
-			}
-			else
-			{
-				Address = &ConfigurationDescriptor.HID2_MouseHID;
-				Size    = sizeof(USB_HID_Descriptor_HID_t);
+				case (INTERFACE_ID_Keyboard):
+					Address = &ConfigurationDescriptor.HID1_KeyboardHID;
+					Size    = sizeof(USB_HID_Descriptor_HID_t);
+					break;
+				case (INTERFACE_ID_Mouse):
+					Address = &ConfigurationDescriptor.HID2_MouseHID;
+					Size    = sizeof(USB_HID_Descriptor_HID_t);
+					break;
 			}
 			break;
 		case HID_DTYPE_Report:
-			if (!(wIndex))
+			switch (wIndex)
 			{
-				Address = &KeyboardReport;
-				Size    = sizeof(KeyboardReport);
-			}
-			else
-			{
-				Address = &MouseReport;
-				Size    = sizeof(MouseReport);
+				case INTERFACE_ID_Keyboard:
+					Address = &KeyboardReport;
+					Size    = sizeof(KeyboardReport);
+					break;
+				case INTERFACE_ID_Mouse:
+					Address = &MouseReport;
+					Size    = sizeof(MouseReport);
+					break;
 			}
 
 			break;
diff --git a/Demos/Device/LowLevel/KeyboardMouse/Descriptors.h b/Demos/Device/LowLevel/KeyboardMouse/Descriptors.h
index 6d2543ac236902d0c9cdcfa2474045a94b60d54c..99f423e1bfda2a5f7914ba4b50d8afb3e94a2d1f 100644
--- a/Demos/Device/LowLevel/KeyboardMouse/Descriptors.h
+++ b/Demos/Device/LowLevel/KeyboardMouse/Descriptors.h
@@ -63,15 +63,25 @@
 			USB_Descriptor_Endpoint_t             HID2_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_Keyboard = 0, /**< Keyboard interface descriptor ID */
+			INTERFACE_ID_Mouse    = 1, /**< Mouse interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Macros: */
diff --git a/Demos/Device/LowLevel/MIDI/Descriptors.c b/Demos/Device/LowLevel/MIDI/Descriptors.c
index 5413f27f56896c31ffb6a87376baeeb52f6ae88a..220d37dff7ccd551bf83985ec33c92379411f0c9 100644
--- a/Demos/Device/LowLevel/MIDI/Descriptors.c
+++ b/Demos/Device/LowLevel/MIDI/Descriptors.c
@@ -90,7 +90,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 0,
+			.InterfaceNumber          = INTERFACE_ID_AudioControl,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 0,
@@ -118,7 +118,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 1,
+			.InterfaceNumber          = INTERFACE_ID_AudioStream,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 2,
diff --git a/Demos/Device/LowLevel/MIDI/Descriptors.h b/Demos/Device/LowLevel/MIDI/Descriptors.h
index 1572b1cbccf7cef6a6fdd7d8eb4d2ce991649d63..649b2acb6a3bba2f0ae3feef285008d95766ecee 100644
--- a/Demos/Device/LowLevel/MIDI/Descriptors.h
+++ b/Demos/Device/LowLevel/MIDI/Descriptors.h
@@ -77,15 +77,25 @@
 			USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */
+			INTERFACE_ID_AudioStream  = 1, /**< Audio stream interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/LowLevel/MassStorage/Descriptors.c b/Demos/Device/LowLevel/MassStorage/Descriptors.c
index d069bcece490cc39881e4758ced3410d7ce37082..2be052b070a3ff4a1e523cfbc625d7f021a4cafc 100644
--- a/Demos/Device/LowLevel/MassStorage/Descriptors.c
+++ b/Demos/Device/LowLevel/MassStorage/Descriptors.c
@@ -91,7 +91,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_MassStorage,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Demos/Device/LowLevel/MassStorage/Descriptors.h b/Demos/Device/LowLevel/MassStorage/Descriptors.h
index dc6748f85583fa00c5b5e35602dc7fdb00637dfd..7c3196b933b2b3ecaec441fb583dd4ee1008d89f 100644
--- a/Demos/Device/LowLevel/MassStorage/Descriptors.h
+++ b/Demos/Device/LowLevel/MassStorage/Descriptors.h
@@ -68,15 +68,24 @@
 			USB_Descriptor_Endpoint_t             MS_DataOutEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_MassStorage = 0, /**< Mass storage interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/LowLevel/Mouse/Descriptors.c b/Demos/Device/LowLevel/Mouse/Descriptors.c
index 99780a44d4ac23607be43071508b7b0d1c7be6e0..23e8d7f445caf12204a00009dee9289a2dde0c16 100644
--- a/Demos/Device/LowLevel/Mouse/Descriptors.c
+++ b/Demos/Device/LowLevel/Mouse/Descriptors.c
@@ -128,7 +128,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_Mouse,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
diff --git a/Demos/Device/LowLevel/Mouse/Descriptors.h b/Demos/Device/LowLevel/Mouse/Descriptors.h
index a5380a11a6194534e7fc46566c0ab7d71ba59121..3b637e21fc96471ab49deddffb5d707504f05ba8 100644
--- a/Demos/Device/LowLevel/Mouse/Descriptors.h
+++ b/Demos/Device/LowLevel/Mouse/Descriptors.h
@@ -60,18 +60,27 @@
 			// Mouse HID Interface
 			USB_Descriptor_Interface_t            HID_Interface;
 			USB_HID_Descriptor_HID_t              HID_MouseHID;
-	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
+			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_Mouse = 0, /**< Mouse interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Descriptors.c b/Demos/Device/LowLevel/RNDISEthernet/Descriptors.c
index ca70633be3f6c81d338f10b9fa115617c93d134b..7474e549934a6776b25be7cf2c8692bfbc0183cf 100644
--- a/Demos/Device/LowLevel/RNDISEthernet/Descriptors.c
+++ b/Demos/Device/LowLevel/RNDISEthernet/Descriptors.c
@@ -90,7 +90,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -141,7 +141,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Descriptors.h b/Demos/Device/LowLevel/RNDISEthernet/Descriptors.h
index 763bc0c7cfdabe458618aa4ccf50c6543c07eace..9db67965ffb37cfb0274d45ace39e4f156fce88a 100644
--- a/Demos/Device/LowLevel/RNDISEthernet/Descriptors.h
+++ b/Demos/Device/LowLevel/RNDISEthernet/Descriptors.h
@@ -81,15 +81,25 @@
 			USB_Descriptor_Endpoint_t             RNDIS_DataInEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */
+			INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/LowLevel/VirtualSerial/Descriptors.c b/Demos/Device/LowLevel/VirtualSerial/Descriptors.c
index 9432562cc7fdf94d0811051d6778b5491f864613..33f63371d922d69fda3d1b359bead09abd1fb743 100644
--- a/Demos/Device/LowLevel/VirtualSerial/Descriptors.c
+++ b/Demos/Device/LowLevel/VirtualSerial/Descriptors.c
@@ -91,7 +91,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -142,7 +142,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Demos/Device/LowLevel/VirtualSerial/Descriptors.h b/Demos/Device/LowLevel/VirtualSerial/Descriptors.h
index a704614a6b242421c7b8eda2f6103b83574f8deb..8ece697fde1eb902b4dd29312c0d3f12c304d6b0 100644
--- a/Demos/Device/LowLevel/VirtualSerial/Descriptors.h
+++ b/Demos/Device/LowLevel/VirtualSerial/Descriptors.h
@@ -79,15 +79,25 @@
 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */
+			INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.c b/Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.c
index 6b714eb7d15425d16bdec2d08adc272a41865e6f..13c6cbcc733fac3dde310fddf0501b1955173c35 100644
--- a/Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.c
+++ b/Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.c
@@ -109,7 +109,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_Mouse,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
diff --git a/Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.h b/Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.h
index eca1e7981a883a0049db9ff606a7e7bf7f7f2879..a19b612671d1237fe36d841abbd0bfd854412b58 100644
--- a/Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.h
+++ b/Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.h
@@ -53,18 +53,27 @@
 			// Mouse HID Interface
 			USB_Descriptor_Interface_t            HID_Interface;
 			USB_HID_Descriptor_HID_t              HID_MouseHID;
-	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
+			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_Mouse = 0, /**< Mouse interface descriptor ID (must be zero) */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Macros: */
diff --git a/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c b/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c
index ef9280ce8e48158186b916fe1aa7bbb5edb3d3f3..2bbeb2dee864e5bbd71c8859794bcf75c42fb415 100644
--- a/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c
+++ b/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c
@@ -47,7 +47,7 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Device_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber            = 0,
+				.InterfaceNumber            = INTERFACE_ID_Mouse,
 				.ReportINEndpoint           =
 					{
 						.Address            = MOUSE_EPADDR,
diff --git a/Projects/AVRISP-MKII/AVRISPDescriptors.c b/Projects/AVRISP-MKII/AVRISPDescriptors.c
index cb19051f444d43fdc0cd82306385cb657fd2c99d..c185cb9f4c6ceeb3e5ce2eec70d3818257760053 100644
--- a/Projects/AVRISP-MKII/AVRISPDescriptors.c
+++ b/Projects/AVRISP-MKII/AVRISPDescriptors.c
@@ -101,7 +101,7 @@ AVRISP_USB_Descriptor_Configuration_t AVRISP_ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_AVRISP,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Projects/AVRISP-MKII/AVRISPDescriptors.h b/Projects/AVRISP-MKII/AVRISPDescriptors.h
index 2f1192384a56bb3137f00c8db65a018b06841242..68bb103598bc3c4c0c5142c7ce6f4346078c1359 100644
--- a/Projects/AVRISP-MKII/AVRISPDescriptors.h
+++ b/Projects/AVRISP-MKII/AVRISPDescriptors.h
@@ -86,16 +86,25 @@
 			USB_Descriptor_Endpoint_t                AVRISP_DataOutEndpoint;
 		} AVRISP_USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_AVRISP = 0, /**< AVRISP interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum AVRISP_StringDescriptors_t
 		{
-		    AVRISP_STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    AVRISP_STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    AVRISP_STRING_ID_Product       = 2, /**< Product string ID */
-		    AVRISP_STRING_ID_Serial        = 3, /**< Serial number string ID */
+			AVRISP_STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			AVRISP_STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			AVRISP_STRING_ID_Product      = 2, /**< Product string ID */
+			AVRISP_STRING_ID_Serial       = 3, /**< Serial number string ID */
 		};
 
 	/* External Variables: */
diff --git a/Projects/Benito/Benito.c b/Projects/Benito/Benito.c
index a89e6caf6370cc26ca7f427d08c63b10a649135f..2ecee07119f58ee1ca8369522a915b50e25b050b 100644
--- a/Projects/Benito/Benito.c
+++ b/Projects/Benito/Benito.c
@@ -62,7 +62,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber   = 0,
+				.ControlInterfaceNumber   = INTERFACE_ID_CDC_CCI,
 				.DataINEndpoint           =
 					{
 						.Address          = CDC_TX_EPADDR,
diff --git a/Projects/Benito/Descriptors.c b/Projects/Benito/Descriptors.c
index ebb11cac5afa2008cbb9b42673a1de3134191fa8..8bd0907d53d993ec191dd654f9a9ceb6bb422b7d 100644
--- a/Projects/Benito/Descriptors.c
+++ b/Projects/Benito/Descriptors.c
@@ -90,7 +90,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -141,7 +141,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Projects/Benito/Descriptors.h b/Projects/Benito/Descriptors.h
index 12be7bf9c416f168c0da2f725050575116de48a0..5c67e71742b6f4d8721a3e11e39687ac4cecfda1 100644
--- a/Projects/Benito/Descriptors.h
+++ b/Projects/Benito/Descriptors.h
@@ -81,15 +81,25 @@
 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */
+			INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Projects/LEDNotifier/Descriptors.c b/Projects/LEDNotifier/Descriptors.c
index 1875bba0147ad29bc7c69d430304ac16026ff3b3..f228c69ef0f4451126af3aaf2f80f264ce657602 100644
--- a/Projects/LEDNotifier/Descriptors.c
+++ b/Projects/LEDNotifier/Descriptors.c
@@ -91,7 +91,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -142,7 +142,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Projects/LEDNotifier/Descriptors.h b/Projects/LEDNotifier/Descriptors.h
index 363951c5b67e47d4e22297e0505a2ad164e21a19..ed19d84f823895a5fe4c3685cd944b9be105424c 100644
--- a/Projects/LEDNotifier/Descriptors.h
+++ b/Projects/LEDNotifier/Descriptors.h
@@ -79,15 +79,25 @@
 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */
+			INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Projects/LEDNotifier/LEDNotifier.c b/Projects/LEDNotifier/LEDNotifier.c
index d6a8fdca30ff2eeebe480586c05063ed95660e0c..e1d5dd97f7ec57397bc64026a8de9383e5addfd5 100644
--- a/Projects/LEDNotifier/LEDNotifier.c
+++ b/Projects/LEDNotifier/LEDNotifier.c
@@ -44,7 +44,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber   = 0,
+				.ControlInterfaceNumber   = INTERFACE_ID_CDC_CCI,
 				.DataINEndpoint           =
 					{
 						.Address          = CDC_TX_EPADDR,
diff --git a/Projects/MIDIToneGenerator/Descriptors.c b/Projects/MIDIToneGenerator/Descriptors.c
index 5413f27f56896c31ffb6a87376baeeb52f6ae88a..220d37dff7ccd551bf83985ec33c92379411f0c9 100644
--- a/Projects/MIDIToneGenerator/Descriptors.c
+++ b/Projects/MIDIToneGenerator/Descriptors.c
@@ -90,7 +90,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 0,
+			.InterfaceNumber          = INTERFACE_ID_AudioControl,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 0,
@@ -118,7 +118,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber          = 1,
+			.InterfaceNumber          = INTERFACE_ID_AudioStream,
 			.AlternateSetting         = 0,
 
 			.TotalEndpoints           = 2,
diff --git a/Projects/MIDIToneGenerator/Descriptors.h b/Projects/MIDIToneGenerator/Descriptors.h
index cb87891874694651d0abb75412b5de6f63d9530a..dab2fd5a68a59fe31e2e69923cfcd77e54d50cee 100644
--- a/Projects/MIDIToneGenerator/Descriptors.h
+++ b/Projects/MIDIToneGenerator/Descriptors.h
@@ -79,15 +79,25 @@
 			USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */
+			INTERFACE_ID_AudioStream  = 1, /**< Audio stream interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Projects/MIDIToneGenerator/MIDIToneGenerator.c b/Projects/MIDIToneGenerator/MIDIToneGenerator.c
index 662c815bc768ae7e98beca8d0e6f3fb9e3710317..ed2d3342090a036702e1bb637a050f45164866ac 100644
--- a/Projects/MIDIToneGenerator/MIDIToneGenerator.c
+++ b/Projects/MIDIToneGenerator/MIDIToneGenerator.c
@@ -44,7 +44,7 @@ USB_ClassInfo_MIDI_Device_t Keyboard_MIDI_Interface =
 	{
 		.Config =
 			{
-				.StreamingInterfaceNumber = 1,
+				.StreamingInterfaceNumber = INTERFACE_ID_AudioStream,
 				.DataINEndpoint           =
 					{
 						.Address          = MIDI_STREAM_IN_EPADDR,
diff --git a/Projects/Magstripe/Descriptors.c b/Projects/Magstripe/Descriptors.c
index 680944092f39422480d7f88d74578c57ff6ed453..c707c1cf6fcab34556f57164308c286db29cbdce 100644
--- a/Projects/Magstripe/Descriptors.c
+++ b/Projects/Magstripe/Descriptors.c
@@ -105,7 +105,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_Keyboard,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
diff --git a/Projects/Magstripe/Descriptors.h b/Projects/Magstripe/Descriptors.h
index 0f4869fb790baee3850c8f5c3fa0c08a5d6f7c5a..46218fc2c5338d9ea842d72d966b562b48d3ac22 100644
--- a/Projects/Magstripe/Descriptors.h
+++ b/Projects/Magstripe/Descriptors.h
@@ -56,18 +56,27 @@
 			// Keyboard HID Interface
 			USB_Descriptor_Interface_t            HID_Interface; /**< Keyboard interface descriptor */
 			USB_HID_Descriptor_HID_t              HID_KeyboardHID; /**< Keyboard HID descriptor */
-	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; /**< Keyboard key report endpoint descriptor */
+			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; /**< Keyboard key report endpoint descriptor */
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_Keyboard = 0, /**< Keyboard interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Macros: */
diff --git a/Projects/Magstripe/Magstripe.c b/Projects/Magstripe/Magstripe.c
index 8dba7370beb9111f1a47dcc7ea2ebe1c3d00f7a4..a0b6f1b01d91417c3d01ff7a901eb24e0d4d3654 100644
--- a/Projects/Magstripe/Magstripe.c
+++ b/Projects/Magstripe/Magstripe.c
@@ -56,7 +56,7 @@ USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber            = 0,
+				.InterfaceNumber            = INTERFACE_ID_Keyboard,
 				.ReportINEndpoint           =
 					{
 						.Address            = KEYBOARD_EPADDR,
diff --git a/Projects/MediaController/Descriptors.c b/Projects/MediaController/Descriptors.c
index 636bbb618cba78fc6c45f1eef9142861258b47de..353e5fe2f7ccb9545f425e9543ba9ccec541f262 100644
--- a/Projects/MediaController/Descriptors.c
+++ b/Projects/MediaController/Descriptors.c
@@ -122,7 +122,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0x00,
+			.InterfaceNumber        = INTERFACE_ID_HID,
 			.AlternateSetting       = 0x00,
 
 			.TotalEndpoints         = 1,
diff --git a/Projects/MediaController/Descriptors.h b/Projects/MediaController/Descriptors.h
index 9f889641e621dfaa27dccc7a4f1a3c3482839fc8..827885de6820d297889296b799e1a3f66b9d94cb 100644
--- a/Projects/MediaController/Descriptors.h
+++ b/Projects/MediaController/Descriptors.h
@@ -53,18 +53,27 @@
 			// Media Controller HID Interface
 			USB_Descriptor_Interface_t            HID_Interface;
 			USB_HID_Descriptor_HID_t              HID_MediaControlHID;
-	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
+			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_HID = 0, /**< HID interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Macros: */
diff --git a/Projects/MediaController/MediaController.c b/Projects/MediaController/MediaController.c
index d12a21aac23894b4bfd58b12ee4e0a8b3d5a6c98..bda252a55c4d626c1b62bcb0a144654d506eec2c 100644
--- a/Projects/MediaController/MediaController.c
+++ b/Projects/MediaController/MediaController.c
@@ -47,7 +47,7 @@ USB_ClassInfo_HID_Device_t MediaControl_HID_Interface =
  	{
 		.Config =
 			{
-				.InterfaceNumber              = 0,
+				.InterfaceNumber              = INTERFACE_ID_HID,
 				.ReportINEndpoint             =
 					{
 						.Address              = MEDIACONTROL_HID_EPADDR,
diff --git a/Projects/RelayBoard/Descriptors.c b/Projects/RelayBoard/Descriptors.c
index c6b2d8f563f29ac4304fa44bc2c34d4011344bce..646f7ca088cf9dba8ab87a152b322860c46b0df6 100644
--- a/Projects/RelayBoard/Descriptors.c
+++ b/Projects/RelayBoard/Descriptors.c
@@ -91,7 +91,7 @@ const USB_Descriptor_Configuration_t PROGMEM RelayBoard_ConfigurationDescriptor
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_RelayBoard,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 0,
diff --git a/Projects/RelayBoard/Descriptors.h b/Projects/RelayBoard/Descriptors.h
index 97ed2251603cd76cb17a90cb68c6178a07c35cf0..c2fc16efa37d7145835a8bc2410fd79c84c4c995 100644
--- a/Projects/RelayBoard/Descriptors.h
+++ b/Projects/RelayBoard/Descriptors.h
@@ -54,16 +54,25 @@
 			USB_Descriptor_Interface_t            RelayBoardInterface;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_RelayBoard = 0, /**< Relay board interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
-		    STRING_ID_Serial        = 3, /**< Serial number string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
+			STRING_ID_Serial       = 3, /**< Serial number string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Projects/SerialToLCD/Descriptors.c b/Projects/SerialToLCD/Descriptors.c
index 8a55f82a445c628b94d37474f19d2e719a026a9c..baf33c0ce07320e6f5d527a535dbb150cc128394 100644
--- a/Projects/SerialToLCD/Descriptors.c
+++ b/Projects/SerialToLCD/Descriptors.c
@@ -103,7 +103,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -154,7 +154,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Projects/SerialToLCD/Descriptors.h b/Projects/SerialToLCD/Descriptors.h
index 5776098e3aa8d9430677ce74cca9434fc0e25158..f6619296dec61a6b170ce6110d0f013eab1e9964 100644
--- a/Projects/SerialToLCD/Descriptors.h
+++ b/Projects/SerialToLCD/Descriptors.h
@@ -80,15 +80,25 @@
 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */
+			INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Projects/SerialToLCD/SerialToLCD.c b/Projects/SerialToLCD/SerialToLCD.c
index aac4fadfb71f8f5a4455dbf263b69eb424bab376..21a5d68cb4d5329aa6b13d3111bfb12c5e2713de 100644
--- a/Projects/SerialToLCD/SerialToLCD.c
+++ b/Projects/SerialToLCD/SerialToLCD.c
@@ -51,7 +51,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber   = 0,
+				.ControlInterfaceNumber   = INTERFACE_ID_CDC_CCI,
 				.DataINEndpoint           =
 					{
 						.Address          = CDC_TX_EPADDR,
diff --git a/Projects/SerialToLCD/SerialToLCD.h b/Projects/SerialToLCD/SerialToLCD.h
index 22537d60902fa615be776738a87f08224355e4ba..bafc03c271e6ae162e63db828fc5adc4f8adb052 100644
--- a/Projects/SerialToLCD/SerialToLCD.h
+++ b/Projects/SerialToLCD/SerialToLCD.h
@@ -37,28 +37,28 @@
 #ifndef _SERIALTOLCD_H_
 #define _SERIALTOLCD_H_
 
-    /* Includes: */
-        #include <avr/io.h>
-        #include <avr/wdt.h>
-        #include <avr/interrupt.h>
-        #include <avr/power.h>
+	/* Includes: */
+		#include <avr/io.h>
+		#include <avr/wdt.h>
+		#include <avr/interrupt.h>
+		#include <avr/power.h>
 
-        #include "Descriptors.h"
+		#include "Descriptors.h"
 		#include "Lib/HD44780.h"
 
-        #include <LUFA/Version.h>
-        #include <LUFA/Drivers/Misc/RingBuffer.h>
-        #include <LUFA/Drivers/USB/USB.h>
+		#include <LUFA/Version.h>
+		#include <LUFA/Drivers/Misc/RingBuffer.h>
+		#include <LUFA/Drivers/USB/USB.h>
 		#include <LUFA/Platform/Platform.h>
 
 	/* Macros: */
 		#define COMMAND_ESCAPE     0x1B
 
-    /* Function Prototypes: */
-        void SetupHardware(void);
+	/* Function Prototypes: */
+		void SetupHardware(void);
 
-        void EVENT_USB_Device_ConfigurationChanged(void);
-        void EVENT_USB_Device_ControlRequest(void);
+		void EVENT_USB_Device_ConfigurationChanged(void);
+		void EVENT_USB_Device_ControlRequest(void);
 
 #endif
 
diff --git a/Projects/TempDataLogger/Descriptors.c b/Projects/TempDataLogger/Descriptors.c
index 6ec6f64aac87847ddc7056932fb3cb5d6d0ca24d..452c4c6ec39e2fd4fff2f015ee17c25ca49eadbe 100644
--- a/Projects/TempDataLogger/Descriptors.c
+++ b/Projects/TempDataLogger/Descriptors.c
@@ -109,7 +109,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_MassStorage,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
@@ -145,7 +145,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_HID,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
diff --git a/Projects/TempDataLogger/Descriptors.h b/Projects/TempDataLogger/Descriptors.h
index 91e238fc1d74f9391c45496c82be5c322c0e3da1..63c3fae02b567ddad794141f00c73d5727b0dbd5 100644
--- a/Projects/TempDataLogger/Descriptors.h
+++ b/Projects/TempDataLogger/Descriptors.h
@@ -56,15 +56,25 @@
 			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_MassStorage = 0, /**< Mass storage interface descriptor ID */
+			INTERFACE_ID_HID         = 1, /**< HID interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Projects/TempDataLogger/TempDataLogger.c b/Projects/TempDataLogger/TempDataLogger.c
index bbbea47f20dce702d3e37482fea36a4ee6ba3ada..66f933586df46eff023f724b8b7edaa6a18d8abc 100644
--- a/Projects/TempDataLogger/TempDataLogger.c
+++ b/Projects/TempDataLogger/TempDataLogger.c
@@ -44,7 +44,7 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber           = 0,
+				.InterfaceNumber           = INTERFACE_ID_MassStorage,
 				.DataINEndpoint            =
 					{
 						.Address           = MASS_STORAGE_IN_EPADDR,
@@ -72,7 +72,7 @@ USB_ClassInfo_HID_Device_t Generic_HID_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber              = 1,
+				.InterfaceNumber              = INTERFACE_ID_HID,
 				.ReportINEndpoint             =
 					{
 						.Address              = GENERIC_IN_EPADDR,
diff --git a/Projects/USBtoSerial/Descriptors.c b/Projects/USBtoSerial/Descriptors.c
index b2d228588f30a319d9d9ca165027c8274a84319a..ea0a84a0c57442d7451656ae2376a8fef8d9d4c9 100644
--- a/Projects/USBtoSerial/Descriptors.c
+++ b/Projects/USBtoSerial/Descriptors.c
@@ -91,7 +91,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -142,7 +142,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Projects/USBtoSerial/Descriptors.h b/Projects/USBtoSerial/Descriptors.h
index 363951c5b67e47d4e22297e0505a2ad164e21a19..ed19d84f823895a5fe4c3685cd944b9be105424c 100644
--- a/Projects/USBtoSerial/Descriptors.h
+++ b/Projects/USBtoSerial/Descriptors.h
@@ -79,15 +79,25 @@
 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */
+			INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Projects/USBtoSerial/USBtoSerial.c b/Projects/USBtoSerial/USBtoSerial.c
index 6df906340313758a2ef54ccfe8c699f965e58053..84ec2befa6e6c2ea54132db8dc032425922235a1 100644
--- a/Projects/USBtoSerial/USBtoSerial.c
+++ b/Projects/USBtoSerial/USBtoSerial.c
@@ -56,7 +56,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber         = 0,
+				.ControlInterfaceNumber         = INTERFACE_ID_CDC_CCI,
 				.DataINEndpoint                 =
 					{
 						.Address                = CDC_TX_EPADDR,
diff --git a/Projects/Webserver/Descriptors.c b/Projects/Webserver/Descriptors.c
index 8fcba5cc840c2bb4de8289481e074be7adad0ff1..b8acf42a2a0f53b00f4362519c617297cfa94989 100644
--- a/Projects/Webserver/Descriptors.c
+++ b/Projects/Webserver/Descriptors.c
@@ -105,7 +105,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -156,7 +156,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
@@ -192,7 +192,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 2,
+			.InterfaceNumber        = INTERFACE_ID_MassStorage,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Projects/Webserver/Descriptors.h b/Projects/Webserver/Descriptors.h
index 2c25512e40127b3c72afef66a606977ee5a70e8a..c649cf56f73455c668f042d10879f1b3bf19dd3d 100644
--- a/Projects/Webserver/Descriptors.h
+++ b/Projects/Webserver/Descriptors.h
@@ -96,15 +96,26 @@
 			USB_Descriptor_Endpoint_t              MS_DataOutEndpoint;
 		} USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC_CCI     = 0, /**< CDC CCI interface descriptor ID */
+			INTERFACE_ID_CDC_DCI     = 1, /**< CDC DCI interface descriptor ID */
+			INTERFACE_ID_MassStorage = 2, /**< Mass storage interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum StringDescriptors_t
 		{
-		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    STRING_ID_Product       = 2, /**< Product string ID */
+			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
diff --git a/Projects/Webserver/USBDeviceMode.c b/Projects/Webserver/USBDeviceMode.c
index 7d5beb93aaa55a5992296b2b4f428c35f3585991..f889b6be61d26071e2aae5f99f4db4738abe6627 100644
--- a/Projects/Webserver/USBDeviceMode.c
+++ b/Projects/Webserver/USBDeviceMode.c
@@ -44,7 +44,7 @@ USB_ClassInfo_RNDIS_Device_t Ethernet_RNDIS_Interface_Device =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber         = 0,
+				.ControlInterfaceNumber         = INTERFACE_ID_CDC_CCI,
 				.DataINEndpoint                 =
 					{
 						.Address                = CDC_TX_EPADDR,
@@ -76,7 +76,7 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface =
 	{
 		.Config =
 			{
-				.InterfaceNumber                = 2,
+				.InterfaceNumber                = INTERFACE_ID_MassStorage,
 				.DataINEndpoint                 =
 					{
 						.Address                = MASS_STORAGE_IN_EPADDR,
diff --git a/Projects/XPLAINBridge/USARTDescriptors.c b/Projects/XPLAINBridge/USARTDescriptors.c
index 0e0ac8534d2beb3abc1074872ed49aef0b91b073..b1bfd4e816e4b833afcf413b224e81a0f9ccdf77 100644
--- a/Projects/XPLAINBridge/USARTDescriptors.c
+++ b/Projects/XPLAINBridge/USARTDescriptors.c
@@ -91,7 +91,7 @@ const USART_USB_Descriptor_Configuration_t PROGMEM USART_ConfigurationDescriptor
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 0,
+			.InterfaceNumber        = INTERFACE_ID_CDC_CCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 1,
@@ -142,7 +142,7 @@ const USART_USB_Descriptor_Configuration_t PROGMEM USART_ConfigurationDescriptor
 		{
 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-			.InterfaceNumber        = 1,
+			.InterfaceNumber        = INTERFACE_ID_CDC_DCI,
 			.AlternateSetting       = 0,
 
 			.TotalEndpoints         = 2,
diff --git a/Projects/XPLAINBridge/USARTDescriptors.h b/Projects/XPLAINBridge/USARTDescriptors.h
index 954867c187a31a5d2282f1b4edeb52c8e25ed0eb..130c695b9a51778a202213be6dac1c415198d465 100644
--- a/Projects/XPLAINBridge/USARTDescriptors.h
+++ b/Projects/XPLAINBridge/USARTDescriptors.h
@@ -81,22 +81,32 @@
 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
 		} USART_USB_Descriptor_Configuration_t;
 
+		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+		 *  should have a unique ID index associated with it, which can be used to refer to the
+		 *  interface from other descriptors.
+		 */
+		enum USART_InterfaceDescriptors_t
+		{
+			INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */
+			INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */
+		};
+
 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 		 *  have a unique ID index associated with it, which can be used to refer to the string from
 		 *  other descriptors.
 		 */
 		enum USART_StringDescriptors_t
 		{
-		    USART_STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
-		    USART_STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
-		    USART_STRING_ID_Product       = 2, /**< Product string ID */
+			USART_STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
+			USART_STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
+			USART_STRING_ID_Product      = 2, /**< Product string ID */
 		};
 
 	/* Function Prototypes: */
 		uint16_t USART_GetDescriptor(const uint16_t wValue,
 		                             const uint8_t wIndex,
 		                             const void** const DescriptorAddress,
-									 uint8_t* const DescriptorMemorySpace);
+		                             uint8_t* const DescriptorMemorySpace);
 
 #endif
 
diff --git a/Projects/XPLAINBridge/XPLAINBridge.c b/Projects/XPLAINBridge/XPLAINBridge.c
index 2ef1d20ee2353101880157937be316b488e987b4..1c63b71d8b56d19fb340aceb0c616d3cda39a5df 100644
--- a/Projects/XPLAINBridge/XPLAINBridge.c
+++ b/Projects/XPLAINBridge/XPLAINBridge.c
@@ -47,7 +47,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
 	{
 		.Config =
 			{
-				.ControlInterfaceNumber         = 0,
+				.ControlInterfaceNumber         = INTERFACE_ID_CDC_CCI,
 				.DataINEndpoint                 =
 					{
 						.Address                = CDC_TX_EPADDR,