diff --git a/LUFA/Drivers/USB/Class/Audio.h b/LUFA/Drivers/USB/Class/Audio.h
index ad0150f653124e370f6b9b87456d8b8ea5d64baa..5d02b4d4a6fce2d449e154641568ee2e1b1b37d3 100644
--- a/LUFA/Drivers/USB/Class/Audio.h
+++ b/LUFA/Drivers/USB/Class/Audio.h
@@ -29,16 +29,16 @@
 */
 
 /** \file
- *  \brief Master include file for the library USB Audio Class driver.
+ *  \brief Master include file for the library USB Audio 1.0 Class driver.
  *
- *  Master include file for the library USB Audio Class driver, for both host and device modes, where available.
+ *  Master include file for the library USB Audio 1.0 Class driver, for both host and device modes, where available.
  *
  *  This file should be included in all user projects making use of this optional class driver, instead of
  *  including any headers in the USB/ClassDriver/Device, USB/ClassDriver/Host or USB/ClassDriver/Common subdirectories.
  */
 
 /** \ingroup Group_USBClassDrivers
- *  \defgroup Group_USBClassAudio Audio Class Driver
+ *  \defgroup Group_USBClassAudio Audio 1.0 Class Driver
  *
  *  \section Sec_Dependencies Module Source Dependencies
  *  The following files must be built with any user project that uses this module:
@@ -46,12 +46,12 @@
  *    - LUFA/Drivers/USB/Class/Host/Audio.c <i>(Makefile source module name: LUFA_SRC_USBCLASS)</i>
  *
  *  \section Sec_ModDescription Module Description
- *  Audio Class Driver module. This module contains an internal implementation of the USB Audio 1.0 Class, for both
- *  Device and Host USB modes. User applications can use this class driver instead of implementing the Audio class
+ *  Audio 1.0 Class Driver module. This module contains an internal implementation of the USB Audio 1.0 Class, for both
+ *  Device and Host USB modes. User applications can use this class driver instead of implementing the Audio 1.0 class
  *  manually via the low-level LUFA APIs.
  *
  *  This module is designed to simplify the user code by exposing only the required interface needed to interface with
- *  Hosts or Devices using the USB Audio Class.
+ *  Hosts or Devices using the USB Audio 1.0 Class.
  *
  *  @{
  */
diff --git a/LUFA/Drivers/USB/Class/Device/Audio.h b/LUFA/Drivers/USB/Class/Device/Audio.h
index 4026f9092d9eedec99d481bbc0b8e20039d4eca4..486df72d1344d390dda4a3126c5779369ee4a456 100644
--- a/LUFA/Drivers/USB/Class/Device/Audio.h
+++ b/LUFA/Drivers/USB/Class/Device/Audio.h
@@ -38,7 +38,7 @@
  */
 
 /** \ingroup Group_USBClassAudio
- *  \defgroup Group_USBClassAudioDevice Audio Class Device Mode Driver
+ *  \defgroup Group_USBClassAudioDevice Audio 1.0 Class Device Mode Driver
  *
  *  \section Sec_Dependencies Module Source Dependencies
  *  The following files must be built with any user project that uses this module:
diff --git a/LUFA/Drivers/USB/Class/Host/Audio.c b/LUFA/Drivers/USB/Class/Host/Audio.c
index 7397ef9864a61b8d044495ee6151519e8719318f..0da1eb664605332adc5b6aaaac3d5cbe0c165f37 100644
--- a/LUFA/Drivers/USB/Class/Host/Audio.c
+++ b/LUFA/Drivers/USB/Class/Host/Audio.c
@@ -194,7 +194,7 @@ static uint8_t DComp_NextAudioInterfaceDataEndpoint(void* CurrentDescriptor)
 	return DESCRIPTOR_SEARCH_NotFound;
 }
 
-uint8_t AUDIO_Host_StartStopStreaming(USB_ClassInfo_Audio_Host_t* const AudioInterfaceInfo,
+uint8_t Audio_Host_StartStopStreaming(USB_ClassInfo_Audio_Host_t* const AudioInterfaceInfo,
 			                          bool EnableStreaming)
 {
 	if (!(AudioInterfaceInfo->State.IsActive))
@@ -204,5 +204,37 @@ uint8_t AUDIO_Host_StartStopStreaming(USB_ClassInfo_Audio_Host_t* const AudioInt
 	                                       EnableStreaming ? AudioInterfaceInfo->State.EnabledStreamingAltIndex : 0);
 }
 
+uint8_t Audio_GetSetEndpointProperty(USB_ClassInfo_Audio_Host_t* const AudioInterfaceInfo,
+			                         const uint8_t DataPipeIndex,
+			                         const uint8_t EndpointProperty,
+			                         const uint8_t EndpointControl,
+			                         uint16_t const DataLength,
+			                         uint8_t* Data)
+{
+	uint8_t RequestType;
+	uint8_t EndpointAddress;
+	
+	if (EndpointProperty & 0x80)
+	  RequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE);
+	else
+	  RequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE);	
+	  
+	Pipe_SelectPipe(DataPipeIndex);
+	EndpointAddress = Pipe_GetBoundEndpointAddress();
+
+	USB_ControlRequest = (USB_Request_Header_t)
+		{
+			.bmRequestType = RequestType,
+			.bRequest      = EndpointProperty,
+			.wValue        = ((uint16_t)EndpointControl << 8),
+			.wIndex        = EndpointAddress,
+			.wLength       = DataLength,
+		};
+
+	Pipe_SelectPipe(PIPE_CONTROLPIPE);
+
+	return USB_Host_SendControlRequest(Data);	
+}
+
 #endif
 
diff --git a/LUFA/Drivers/USB/Class/Host/Audio.h b/LUFA/Drivers/USB/Class/Host/Audio.h
index 0ceaf885bf039f142b389a82ced53a8a8c3cae65..7e9a48d895d90530a265c0117b7578e5e61c651a 100644
--- a/LUFA/Drivers/USB/Class/Host/Audio.h
+++ b/LUFA/Drivers/USB/Class/Host/Audio.h
@@ -29,23 +29,23 @@
 */
 
 /** \file
- *  \brief Host mode driver for the library USB Audio Class driver.
+ *  \brief Host mode driver for the library USB Audio 1.0 Class driver.
  *
- *  Host mode driver for the library USB Audio Class driver.
+ *  Host mode driver for the library USB Audio 1.0 Class driver.
  *
  *  \note This file should not be included directly. It is automatically included as needed by the USB module driver
  *        dispatch header located in LUFA/Drivers/USB.h.
  */
 
 /** \ingroup Group_USBClassAudio
- *  \defgroup Group_USBClassAudioHost Audio Class Host Mode Driver
+ *  \defgroup Group_USBClassAudioHost Audio 1.0 Class Host Mode Driver
  *
  *  \section Sec_Dependencies Module Source Dependencies
  *  The following files must be built with any user project that uses this module:
  *    - LUFA/Drivers/USB/Class/Host/Audio.c <i>(Makefile source module name: LUFA_SRC_USBCLASS)</i>
  *
  *  \section Sec_ModDescription Module Description
- *  Host Mode USB Class driver framework interface, for the Audio USB Class driver.
+ *  Host Mode USB Class driver framework interface, for the Audio 1.0 USB Class driver.
  *
  *  @{
  */
@@ -138,9 +138,30 @@
 			 *
 			 *  \return A value from the \ref USB_Host_SendControlErrorCodes_t enum.
 			 */
-			uint8_t AUDIO_Host_StartStopStreaming(USB_ClassInfo_Audio_Host_t* const AudioInterfaceInfo,
+			uint8_t Audio_Host_StartStopStreaming(USB_ClassInfo_Audio_Host_t* const AudioInterfaceInfo,
 			                                      bool EnableStreaming);
 
+			/** Gets or sets the specified property of a streaming audio class endpoint that is bound to a pipe in the given
+			 *  class instance.
+			 *
+			 *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class host configuration and state.
+			 *  \param[in]     DataPipeIndex       Index of the data pipe whose bound endpoint is to be altered.
+			 *  \param[in]     EndpointProperty    Property of the endpoint to get or set, a value from \ref Audio_ClassRequests_t.
+			 *  \param[in]     EndpointControl     Parameter of the endpoint to get or set, a value from \ref Audio_EndpointControls_t.
+			 *  \param[in,out] DataLength          For SET operations, the length of the parameter data to set. For GET operations, the maximum
+			 *                                     length of the retrieved data.
+			 *  \param[in,out] Data                Pointer to a location where the parameter data is stored for SET operations, or where
+			 *                                     the retrieved data is to be stored for GET operations.
+			 *
+			 *  \return A value from the \ref USB_Host_SendControlErrorCodes_t enum.
+			 */			
+			uint8_t Audio_GetSetEndpointProperty(USB_ClassInfo_Audio_Host_t* const AudioInterfaceInfo,
+			                                     const uint8_t DataPipeIndex,
+			                                     const uint8_t EndpointProperty,
+			                                     const uint8_t EndpointControl,
+			                                     uint16_t* const DataLength,
+			                                     uint8_t* Data);
+
 		/* Inline Functions: */
 			/** General management task for a given Audio host class interface, required for the correct operation of
 			 *  the interface. This should be called frequently in the main program loop, before the master USB management task
diff --git a/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c b/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c
index 48445293e80df518bae101932ec825a001d677f1..e93b256c6844c135d2541e4d3713fd5758197e90 100644
--- a/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c
+++ b/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c
@@ -137,13 +137,7 @@ bool Pipe_IsEndpointBound(const uint8_t EndpointAddress)
 		if (!(Pipe_IsConfigured()))
 		  continue;
 
-		uint8_t PipeToken        = Pipe_GetPipeToken();
-		bool    PipeTokenCorrect = true;
-
-		if (PipeToken != PIPE_TOKEN_SETUP)
-		  PipeTokenCorrect = (PipeToken == ((EndpointAddress & PIPE_EPDIR_MASK) ? PIPE_TOKEN_IN : PIPE_TOKEN_OUT));
-
-		if (PipeTokenCorrect && (Pipe_BoundEndpointNumber() == (EndpointAddress & PIPE_EPNUM_MASK)))
+		if (Pipe_GetBoundEndpointAddress() == EndpointAddress)
 		  return true;
 	}
 
diff --git a/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h b/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h
index c6bdcfb4a996b4392e74964d351851f2e22aa446..4d49da4f42922ac963ffa1b9c43d77551d5037b9 100644
--- a/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h
+++ b/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h
@@ -321,15 +321,16 @@
 				return ((UPSTAX & (1 << CFGOK)) ? true : false);
 			}
 
-			/** Retrieves the endpoint number of the endpoint within the attached device that the currently selected
+			/** Retrieves the endpoint address of the endpoint within the attached device that the currently selected
 			 *  pipe is bound to.
 			 *
-			 *  \return Endpoint number the currently selected pipe is bound to.
+			 *  \return Endpoint address the currently selected pipe is bound to.
 			 */
-			static inline uint8_t Pipe_BoundEndpointNumber(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
-			static inline uint8_t Pipe_BoundEndpointNumber(void)
+			static inline uint8_t Pipe_GetBoundEndpointAddress(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+			static inline uint8_t Pipe_GetBoundEndpointAddress(void)
 			{
-				return ((UPCFG0X >> PEPNUM0) & PIPE_EPNUM_MASK);
+				return (((UPCFG0X >> PEPNUM0) & PIPE_EPNUM_MASK) |
+				        ((Pipe_GetPipeToken() == PIPE_TOKEN_IN) ? ENDPOINT_DESCRIPTOR_DIR_IN : 0));
 			}
 
 			/** Sets the period between interrupts for an INTERRUPT type pipe to a specified number of milliseconds.
diff --git a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c
index 92589a870631f669e4d7c5fa0ba046fb8d195e05..4e67f9691f61b5a3d5076174bcf41d27e740fea0 100644
--- a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c
+++ b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c
@@ -86,13 +86,7 @@ bool Pipe_IsEndpointBound(const uint8_t EndpointAddress)
 		if (!(Pipe_IsConfigured()))
 		  continue;
 
-		uint8_t PipeToken        = Pipe_GetPipeToken();
-		bool    PipeTokenCorrect = true;
-
-		if (PipeToken != PIPE_TOKEN_SETUP)
-		  PipeTokenCorrect = (PipeToken == ((EndpointAddress & PIPE_EPDIR_MASK) ? PIPE_TOKEN_IN : PIPE_TOKEN_OUT));
-
-		if (PipeTokenCorrect && (Pipe_BoundEndpointNumber() == (EndpointAddress & PIPE_EPNUM_MASK)))
+		if (Pipe_GetBoundEndpointAddress() == EndpointAddress)
 		  return true;
 	}
 
diff --git a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h
index c10518548dc786086f11626c62587bc96ee9d6fd..459423c125fc3aaf39add11d28e9888f9d694c47 100644
--- a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h
+++ b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h
@@ -332,15 +332,16 @@
 				return (&AVR32_USBB.UPSTA0)[USB_SelectedPipe].cfgok;
 			}
 
-			/** Retrieves the endpoint number of the endpoint within the attached device that the currently selected
+			/** Retrieves the endpoint address of the endpoint within the attached device that the currently selected
 			 *  pipe is bound to.
 			 *
-			 *  \return Endpoint number the currently selected pipe is bound to.
+			 *  \return Endpoint address the currently selected pipe is bound to.
 			 */
-			static inline uint8_t Pipe_BoundEndpointNumber(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
-			static inline uint8_t Pipe_BoundEndpointNumber(void)
+			static inline uint8_t Pipe_GetBoundEndpointAddress(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+			static inline uint8_t Pipe_GetBoundEndpointAddress(void)
 			{
-				return (&AVR32_USBB.UPCFG0)[USB_SelectedPipe].pepnum;
+				return ((&AVR32_USBB.UPCFG0)[USB_SelectedPipe].pepnum |
+				        ((Pipe_GetPipeToken() == PIPE_TOKEN_IN) ? ENDPOINT_DESCRIPTOR_DIR_IN : 0));
 			}
 
 			/** Sets the period between interrupts for an INTERRUPT type pipe to a specified number of milliseconds.
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 23bd5ec1e4bb49a2390578782500dcb5906e47dd..c7401ea72ab6297adddbb822bef6040ff74eed68 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -31,6 +31,8 @@
   *   - Altered the definition of the USB_Audio_Descriptor_Format_t descriptor so that the user is now responsible for supplying
   *     the supported audio sampling rates, to allow for multiple audio interfaces with different numbers of supported rates and/or
   *     continuous sample rates
+  *   - Pipe_BoundEndpointNumber() has been renamed to Pipe_GetBoundEndpointAddress(), and now returns the correct endpoint direction
+  *     as part of the endpoint address
   *  - Library Applications:
   *   - Modified the Low Level and Class Driver AudioInput and AudioOutput demos to support multiple sample rates
   *