diff --git a/LUFA/Drivers/USB/LowLevel/Endpoint.h b/LUFA/Drivers/USB/LowLevel/Endpoint.h
index e0a45f3780cdf982cae60fb7759266138c13190c..75c887761c58214686ad94528b443abfcfae4ab3 100644
--- a/LUFA/Drivers/USB/LowLevel/Endpoint.h
+++ b/LUFA/Drivers/USB/LowLevel/Endpoint.h
@@ -400,6 +400,35 @@
 				return ((UECONX & (1 << EPEN)) ? true : false);
 			}
 
+			/** Aborts all pending IN transactions on the currently selected endpoint, once the bank
+			 *  has been queued for transmission to the host via \ref Endpoint_ClearIN(). This function
+			 *  will terminate all queued transactions, resetting the endpoint banks ready for a new
+			 *  packet.
+			 *
+			 *  \ingroup Group_EndpointPacketManagement
+			 */
+			static inline void Endpoint_AbortPendingIN(void)
+			{
+				while (UESTA0X & (0x03 << NBUSYBK))
+				{
+					UEINTX |= (1 << RXOUTI);
+					while (UEINTX & (1 << RXOUTI));
+				}
+			}
+			
+			/** Retrieves the number of busy banks in the currently selected endpoint, which have been queued for
+			 *  transmission via the \ref Endpoint_ClearIN() command, or are awaiting acknowledgement via the
+			 *  \ref Endpoint_ClearOUT() command.
+			 *
+			 *  \ingroup Group_EndpointPacketManagement
+			 *
+			 *  \return Total number of busy banks in the selected endpoint.
+			 */
+			static inline uint8_t Endpoint_GetBusyBanks(void)
+			{
+				return (UESTA0X & (0x03 << NBUSYBK));
+			}
+
 			/** Determines if the currently selected endpoint may be read from (if data is waiting in the endpoint
 			 *  bank and the endpoint is an OUT direction, or if the bank is not yet full if the endpoint is an IN
 			 *  direction). This function will return false if an error has occurred in the endpoint, if the endpoint
diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.h b/LUFA/Drivers/USB/LowLevel/Pipe.h
index 8cf48cd0a1566fee80a61f467ed087d1828e19ac..53aeb1fd587de73b310ba1c9e3a0ae7dfcf97c60 100644
--- a/LUFA/Drivers/USB/LowLevel/Pipe.h
+++ b/LUFA/Drivers/USB/LowLevel/Pipe.h
@@ -452,6 +452,19 @@
 				                   PIPE_ERRORFLAG_DATATGL)) |
 				        (UPSTAX & (PIPE_ERRORFLAG_OVERFLOW | PIPE_ERRORFLAG_UNDERFLOW)));
 			}
+			
+			/** Retrieves the number of busy banks in the currently selected pipe, which have been queued for
+			 *  transmission via the \ref Pipe_ClearOUT() command, or are awaiting acknowledgement via the
+			 *  \ref Pipe_ClearIN() command.
+			 *
+			 *  \ingroup Group_PipePacketManagement
+			 *
+			 *  \return Total number of busy banks in the selected pipe.
+			 */
+			static inline uint8_t Pipe_GetBusyBanks(void)
+			{
+				return (UPSTAX & (0x03 << NBUSYBK));
+			}
 
 			/** Determines if the currently selected pipe may be read from (if data is waiting in the pipe
 			 *  bank and the pipe is an IN direction, or if the bank is not yet full if the pipe is an OUT
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index cefd37711a43a13a7824d989349b1629e934770e..bb43b010fe6397215d8f2b07ac9ae6611fddc845 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -31,6 +31,7 @@
   *  - Added new NO_CLASS_DRIVER_AUTOFLUSH compile time option to disable automatic flushing of interfaces when the USB management
   *    tasks for each driver is called
   *  - Added standard keyboard HID report scancode defines (thanks to L�szl� Monda)
+  *  - Added new Pipe_GetBusyBanks(), Endpoint_GetBusyBanks() and Endpoint_AbortPendingIN() functions
   *
   *  <b>Changed:</b>
   *  - Removed complicated logic for the Endpoint_ConfigureEndpoint() function to use inlined or function called versions