diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.c b/Demos/Device/ClassDriver/AudioInput/AudioInput.c
index 58a3668e8403b1fcbc96b8256f7cd9303d68f97b..1acf20de800ba7ee63daa67140f0687275af0881 100644
--- a/Demos/Device/ClassDriver/AudioInput/AudioInput.c
+++ b/Demos/Device/ClassDriver/AudioInput/AudioInput.c
@@ -52,7 +52,7 @@ USB_ClassInfo_Audio_Device_t Microphone_Audio_Interface =
 	};
 
 /** Current audio sampling frequency of the streaming audio endpoint. */
-uint32_t CurrentAudioSampleFrequency = 48000;
+static uint32_t CurrentAudioSampleFrequency = 48000;
 
 
 /** Main program entry point. This routine contains the overall program flow, including initial
diff --git a/Demos/Device/ClassDriver/AudioInput/Descriptors.c b/Demos/Device/ClassDriver/AudioInput/Descriptors.c
index 6fffd05d4dfdbee838a9235bfbc2bb631254d803..0d1f0e03e3889154db67db6a0ca9d5222a59107a 100644
--- a/Demos/Device/ClassDriver/AudioInput/Descriptors.c
+++ b/Demos/Device/ClassDriver/AudioInput/Descriptors.c
@@ -54,8 +54,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 
 	.VendorID               = 0x03EB,
-	.ProductID              = 0x206B,
-	.ReleaseNumber          = VERSION_BCD(00.01),
+	.ProductID              = 0x2047,
+	.ReleaseNumber          = VERSION_BCD(00.02),
 
 	.ManufacturerStrIndex   = 0x01,
 	.ProductStrIndex        = 0x02,
diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
index 43267b2a7a2313a16e227d3f7986eac7b689275a..77727f05e40d8eccfcc114cb9b4b7b91dbc97820 100644
--- a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
+++ b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
@@ -52,7 +52,7 @@ USB_ClassInfo_Audio_Device_t Speaker_Audio_Interface =
 	};
 
 /** Current audio sampling frequency of the streaming audio endpoint. */
-uint32_t CurrentAudioSampleFrequency = 48000;
+static uint32_t CurrentAudioSampleFrequency = 48000;
 
 
 /** Main program entry point. This routine contains the overall program flow, including initial
diff --git a/Demos/Device/ClassDriver/AudioOutput/Descriptors.c b/Demos/Device/ClassDriver/AudioOutput/Descriptors.c
index 5bb0e9f116efeaf94dad723cb8820c00825a2cea..606d80b2bac41d256cfd617c70f35a70d29fbeab 100644
--- a/Demos/Device/ClassDriver/AudioOutput/Descriptors.c
+++ b/Demos/Device/ClassDriver/AudioOutput/Descriptors.c
@@ -54,8 +54,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 
 	.VendorID               = 0x03EB,
-	.ProductID              = 0x206C,
-	.ReleaseNumber          = VERSION_BCD(00.01),
+	.ProductID              = 0x2046,
+	.ReleaseNumber          = VERSION_BCD(00.02),
 
 	.ManufacturerStrIndex   = 0x01,
 	.ProductStrIndex        = 0x02,
diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.c b/Demos/Device/LowLevel/AudioInput/AudioInput.c
index f62fcbec55f75d00c520d8a39f52570c1c890d7b..d7916766070f81c0c886e6b1f53c66319816a64c 100644
--- a/Demos/Device/LowLevel/AudioInput/AudioInput.c
+++ b/Demos/Device/LowLevel/AudioInput/AudioInput.c
@@ -39,6 +39,9 @@
 /** Flag to indicate if the streaming audio alternative interface has been selected by the host. */
 static bool StreamingAudioInterfaceSelected = false;
 
+/** Current audio sampling frequency of the streaming audio endpoint. */
+static uint32_t CurrentAudioSampleFrequency = 48000;
+
 
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
@@ -87,7 +90,7 @@ void EVENT_USB_Device_Connect(void)
 
 	/* Sample reload timer initialization */
 	TIMSK0  = (1 << OCIE0A);
-	OCR0A   = ((F_CPU / 8 / AUDIO_SAMPLE_FREQUENCY) - 1);
+	OCR0A   = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
 	TCCR0A  = (1 << WGM01);  // CTC mode
 	TCCR0B  = (1 << CS01);   // Fcpu/8 speed
 }
@@ -152,6 +155,57 @@ void EVENT_USB_Device_ControlRequest(void)
 				Endpoint_ClearSETUP();
 				Endpoint_ClearStatusStage();
 			}
+
+			break;
+		case AUDIO_REQ_SetCurrent:
+			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT))
+			{
+				/* Extract out the relevant request information to get the target Endpoint index and control being set */
+				uint8_t EndpointIndex   = (uint8_t)USB_ControlRequest.wIndex;
+				uint8_t EndpointControl = (USB_ControlRequest.wValue >> 8);
+				
+				/* Only handle SET CURRENT requests to the audio endpoint's sample frequency property */
+				if ((EndpointIndex == AUDIO_STREAM_EPNUM) && (EndpointControl == AUDIO_EPCONTROL_SamplingFreq))
+				{
+					uint8_t SampleRate[3];
+				
+					Endpoint_ClearSETUP();
+					Endpoint_Read_Control_Stream_LE(SampleRate, sizeof(SampleRate));
+					Endpoint_ClearOUT();
+					
+					/* Set the new sampling frequency to the value given by the host */
+					CurrentAudioSampleFrequency = (((uint32_t)SampleRate[2] << 16) | ((uint32_t)SampleRate[1] << 8) | (uint32_t)SampleRate[0]);
+
+					/* Adjust sample reload timer to the new frequency */
+					OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
+				}
+			}
+			
+			break;
+		case AUDIO_REQ_GetCurrent:
+			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT))
+			{
+				/* Extract out the relevant request information to get the target Endpoint index and control being retrieved */
+				uint8_t EndpointIndex   = (uint8_t)USB_ControlRequest.wIndex;
+				uint8_t EndpointControl = (USB_ControlRequest.wValue >> 8);
+				
+				/* Only handle GET CURRENT requests to the audio endpoint's sample frequency property */
+				if ((EndpointIndex == AUDIO_STREAM_EPNUM) && (EndpointControl == AUDIO_EPCONTROL_SamplingFreq))
+				{
+					uint8_t SampleRate[3];
+					
+					/* Convert the sampling rate value into the 24-bit format the host expects for the property */
+					SampleRate[2] = (CurrentAudioSampleFrequency >> 16);
+					SampleRate[1] = (CurrentAudioSampleFrequency >> 8);
+					SampleRate[0] = (CurrentAudioSampleFrequency &  0xFF);
+				
+					Endpoint_ClearSETUP();
+					Endpoint_Write_Control_Stream_LE(SampleRate, sizeof(SampleRate));
+					Endpoint_ClearOUT();					
+				}
+			}
+
+			break;
 	}
 }
 
diff --git a/Demos/Device/LowLevel/AudioInput/Descriptors.c b/Demos/Device/LowLevel/AudioInput/Descriptors.c
index 8a63d77361cb428146b650142fed6668f4a71bc1..10959074a7255ac90c058d6cbeedbdd2b536b7da 100644
--- a/Demos/Device/LowLevel/AudioInput/Descriptors.c
+++ b/Demos/Device/LowLevel/AudioInput/Descriptors.c
@@ -55,7 +55,7 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 
 	.VendorID               = 0x03EB,
 	.ProductID              = 0x2047,
-	.ReleaseNumber          = VERSION_BCD(00.01),
+	.ReleaseNumber          = VERSION_BCD(00.02),
 
 	.ManufacturerStrIndex   = 0x01,
 	.ProductStrIndex        = 0x02,
@@ -201,12 +201,17 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 
 			.SubFrameSize             = 0x02,
 			.BitResolution            = 16,
-			.TotalDiscreteSampleRates = 1,
+
+			.TotalDiscreteSampleRates = (sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates) / sizeof(USB_Audio_SampleFreq_t)),
 		},
 	
 	.Audio_AudioFormatSampleRates =
 		{
-			AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)
+			AUDIO_SAMPLE_FREQ(8000),
+			AUDIO_SAMPLE_FREQ(11025),
+			AUDIO_SAMPLE_FREQ(22050),
+			AUDIO_SAMPLE_FREQ(44100),
+			AUDIO_SAMPLE_FREQ(48000),
 		},
 
 	.Audio_StreamEndpoint =
diff --git a/Demos/Device/LowLevel/AudioInput/Descriptors.h b/Demos/Device/LowLevel/AudioInput/Descriptors.h
index 82dbd517f033c97b8ca978d0b3d0c98fc4273639..05d1fee36ae7ae40ea986b2a2f98ba51b92a31a2 100644
--- a/Demos/Device/LowLevel/AudioInput/Descriptors.h
+++ b/Demos/Device/LowLevel/AudioInput/Descriptors.h
@@ -51,9 +51,6 @@
 		 */
 		#define AUDIO_STREAM_EPSIZE          ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)
 
-		/** Sample frequency of the data being transmitted through the streaming endpoint. */
-		#define AUDIO_SAMPLE_FREQUENCY       48000
-
 	/* Type Defines: */
 		/** Type define for the device configuration descriptor structure. This must be defined in the
 		 *  application code, as the configuration descriptor contains several sub-descriptors which
@@ -70,7 +67,7 @@
 			USB_Descriptor_Interface_t                Audio_StreamInterface_Alt1;
 			USB_Audio_Descriptor_Interface_AS_t       Audio_StreamInterface_SPC;
 			USB_Audio_Descriptor_Format_t             Audio_AudioFormat;
-			USB_Audio_SampleFreq_t                    Audio_AudioFormatSampleRates[1];
+			USB_Audio_SampleFreq_t                    Audio_AudioFormatSampleRates[5];
 			USB_Audio_Descriptor_StreamEndpoint_Std_t Audio_StreamEndpoint;
 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
 		} USB_Descriptor_Configuration_t;
diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
index 22cfac4d9f5bda9242b1e562edd41e5f4e952af2..c5d93630018905a83a5cacff72d29a45f60313e6 100644
--- a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
+++ b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
@@ -39,6 +39,9 @@
 /** Flag to indicate if the streaming audio alternative interface has been selected by the host. */
 static bool StreamingAudioInterfaceSelected = false;
 
+/** Current audio sampling frequency of the streaming audio endpoint. */
+static uint32_t CurrentAudioSampleFrequency = 48000;
+
 
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
@@ -81,7 +84,7 @@ void EVENT_USB_Device_Connect(void)
 
 	/* Sample reload timer initialization */
 	TIMSK0 = (1 << OCIE0A);
-	OCR0A  = ((F_CPU / 8 / AUDIO_SAMPLE_FREQUENCY) - 1);
+	OCR0A  = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
 	TCCR0A = (1 << WGM01);  // CTC mode
 	TCCR0B = (1 << CS01);   // Fcpu/8 speed
 
@@ -178,6 +181,57 @@ void EVENT_USB_Device_ControlRequest(void)
 				Endpoint_ClearSETUP();
 				Endpoint_ClearStatusStage();
 			}
+
+			break;
+		case AUDIO_REQ_SetCurrent:
+			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT))
+			{
+				/* Extract out the relevant request information to get the target Endpoint index and control being set */
+				uint8_t EndpointIndex   = (uint8_t)USB_ControlRequest.wIndex;
+				uint8_t EndpointControl = (USB_ControlRequest.wValue >> 8);
+				
+				/* Only handle SET CURRENT requests to the audio endpoint's sample frequency property */
+				if ((EndpointIndex == AUDIO_STREAM_EPNUM) && (EndpointControl == AUDIO_EPCONTROL_SamplingFreq))
+				{
+					uint8_t SampleRate[3];
+				
+					Endpoint_ClearSETUP();
+					Endpoint_Read_Control_Stream_LE(SampleRate, sizeof(SampleRate));
+					Endpoint_ClearOUT();
+					
+					/* Set the new sampling frequency to the value given by the host */
+					CurrentAudioSampleFrequency = (((uint32_t)SampleRate[2] << 16) | ((uint32_t)SampleRate[1] << 8) | (uint32_t)SampleRate[0]);
+
+					/* Adjust sample reload timer to the new frequency */
+					OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
+				}
+			}
+			
+			break;
+		case AUDIO_REQ_GetCurrent:
+			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT))
+			{
+				/* Extract out the relevant request information to get the target Endpoint index and control being retrieved */
+				uint8_t EndpointIndex   = (uint8_t)USB_ControlRequest.wIndex;
+				uint8_t EndpointControl = (USB_ControlRequest.wValue >> 8);
+				
+				/* Only handle GET CURRENT requests to the audio endpoint's sample frequency property */
+				if ((EndpointIndex == AUDIO_STREAM_EPNUM) && (EndpointControl == AUDIO_EPCONTROL_SamplingFreq))
+				{
+					uint8_t SampleRate[3];
+					
+					/* Convert the sampling rate value into the 24-bit format the host expects for the property */
+					SampleRate[2] = (CurrentAudioSampleFrequency >> 16);
+					SampleRate[1] = (CurrentAudioSampleFrequency >> 8);
+					SampleRate[0] = (CurrentAudioSampleFrequency &  0xFF);
+				
+					Endpoint_ClearSETUP();
+					Endpoint_Write_Control_Stream_LE(SampleRate, sizeof(SampleRate));
+					Endpoint_ClearOUT();					
+				}
+			}
+
+			break;
 	}
 }
 
diff --git a/Demos/Device/LowLevel/AudioOutput/Descriptors.c b/Demos/Device/LowLevel/AudioOutput/Descriptors.c
index 59e3af1dd6e8d93c0a2d30040b48dc8f798a3ebf..a86eee75cba872c206fec571f1c1c8734e2af9ad 100644
--- a/Demos/Device/LowLevel/AudioOutput/Descriptors.c
+++ b/Demos/Device/LowLevel/AudioOutput/Descriptors.c
@@ -55,7 +55,7 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 
 	.VendorID               = 0x03EB,
 	.ProductID              = 0x2046,
-	.ReleaseNumber          = VERSION_BCD(00.01),
+	.ReleaseNumber          = VERSION_BCD(00.02),
 
 	.ManufacturerStrIndex   = 0x01,
 	.ProductStrIndex        = 0x02,
@@ -202,12 +202,16 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 			.SubFrameSize             = 0x02,
 			.BitResolution            = 16,
 
-			.TotalDiscreteSampleRates = 1,
+			.TotalDiscreteSampleRates = (sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates) / sizeof(USB_Audio_SampleFreq_t)),
 		},
 	
 	.Audio_AudioFormatSampleRates =
 		{
-			AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)
+			AUDIO_SAMPLE_FREQ(8000),
+			AUDIO_SAMPLE_FREQ(11025),
+			AUDIO_SAMPLE_FREQ(22050),
+			AUDIO_SAMPLE_FREQ(44100),
+			AUDIO_SAMPLE_FREQ(48000),
 		},
 
 	.Audio_StreamEndpoint =
diff --git a/Demos/Device/LowLevel/AudioOutput/Descriptors.h b/Demos/Device/LowLevel/AudioOutput/Descriptors.h
index b4b8db6a4ad5f9ea2d05d474b239b3781e6550f4..ca5c87386685e9a5fb88b39c24bbde1cffb26c00 100644
--- a/Demos/Device/LowLevel/AudioOutput/Descriptors.h
+++ b/Demos/Device/LowLevel/AudioOutput/Descriptors.h
@@ -51,9 +51,6 @@
 		 */
 		#define AUDIO_STREAM_EPSIZE          ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)
 
-		/** Sample frequency of the data being transmitted through the streaming endpoint. */
-		#define AUDIO_SAMPLE_FREQUENCY       48000
-
 	/* Type Defines: */
 		/** Type define for the device configuration descriptor structure. This must be defined in the
 		 *  application code, as the configuration descriptor contains several sub-descriptors which
@@ -70,7 +67,7 @@
 			USB_Descriptor_Interface_t                Audio_StreamInterface_Alt1;
 			USB_Audio_Descriptor_Interface_AS_t       Audio_StreamInterface_SPC;
 			USB_Audio_Descriptor_Format_t             Audio_AudioFormat;
-			USB_Audio_SampleFreq_t                    Audio_AudioFormatSampleRates[1];
+			USB_Audio_SampleFreq_t                    Audio_AudioFormatSampleRates[5];
 			USB_Audio_Descriptor_StreamEndpoint_Std_t Audio_StreamEndpoint;
 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
 		} USB_Descriptor_Configuration_t;
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 886be5c5639493c83ae47f512869d84300418785..d2d3c5d0da8ff8ea0160d4a8394974ee59ebc58d 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -29,7 +29,7 @@
   *     the supported audio sampling rates, to allow for multiple audio interfaces with different numbers of supported rates and/or
   *     continuous sample rates
   *  - Library Applications:
-  *   - Modified the Class Driver AudioInput and AudioOutput demos to support multiple sample rates
+  *   - Modified the Low Level and Class Driver AudioInput and AudioOutput demos to support multiple sample rates
   *
   *  <b>Fixed:</b>
   *  - Core:
@@ -1016,7 +1016,7 @@
   *  - Library license changed from LGPLv3 to MIT license
   *
   *
-  *  \section Sec_ChangeLog151 Version 1.5.1 - Released 31st July, 2008
+  *  \section Sec_ChangeLog151 Version 1.5.1 - Released 7th July, 2008
   *
   *  - Changed host demos to enable the host function task on the firing of the USB_DeviceEnumerationComplete event
   *    rather than the USB_DeviceAttached event
@@ -1095,7 +1095,7 @@
   *  - Added USE_NONSTANDARD_DESCRIPTOR_NAMES token to switch back to the non-standard descriptor element names
   *
   *
-  *  \section Sec_ChangeLog141 Version 1.4.1 - Released 5 May, 2008
+  *  \section Sec_ChangeLog141 Version 1.4.1 - Released 19 May, 2008
   *
   *  - Enhanced KeyboardWithParser demo, now prints out pressed alphanumeric characters like the standard demo
   *  - Fixed MassStorage demo, read/writes using non mode-10 commands now work correctly
diff --git a/LUFA/ManPages/VIDAndPIDValues.txt b/LUFA/ManPages/VIDAndPIDValues.txt
index d05334d9a05388d070fe96d2326efebb505cc106..17d9e1782d3b17575077f0cfe40e9bd66986a689 100644
--- a/LUFA/ManPages/VIDAndPIDValues.txt
+++ b/LUFA/ManPages/VIDAndPIDValues.txt
@@ -361,7 +361,7 @@
  *     0x206B
  *    </td>
  *    <td>
- *     Class Driver Audio Input Demo (Multiple Sample Rates)
+ *     <i>Currently Unallocated</i>
  *    </td>
  *   </tr>
  *
@@ -373,7 +373,7 @@
  *     0x206C
  *    </td>
  *    <td>
- *     Class Driver Audio Output Demo (Multiple Sample Rates)
+ *     <i>Currently Unallocated</i>
  *    </td>
  *   </tr>
  *