diff --git a/LUFA/Drivers/USB/Class/Device/CDC.c b/LUFA/Drivers/USB/Class/Device/CDC.c
index 16bc015496ef96702497fbe0c31091def26ddcef..b8a673f03ef972370785d2ec3a1647c3d3da5fa3 100644
--- a/LUFA/Drivers/USB/Class/Device/CDC.c
+++ b/LUFA/Drivers/USB/Class/Device/CDC.c
@@ -190,10 +190,17 @@ uint16_t CDC_Device_BytesReceived(USB_ClassInfo_CDC_Device_t* const CDCInterface
 
 	Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataOUTEndpointNumber);
 
-	if (Endpoint_IsOUTReceived() && !(Endpoint_BytesInEndpoint()))
-	  Endpoint_ClearOUT();
+	if (Endpoint_IsOUTReceived())
+	{
+		if (!(Endpoint_BytesInEndpoint()))
+		  Endpoint_ClearOUT();
 
-	return Endpoint_BytesInEndpoint();
+		return Endpoint_BytesInEndpoint();
+	}
+	else
+	{
+		return 0;
+	}
 }
 
 uint8_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)
diff --git a/LUFA/Drivers/USB/Class/Host/CDC.c b/LUFA/Drivers/USB/Class/Host/CDC.c
index 8ad37de7326ccd83ba9578c53d48b65a39e207ac..85864b05c5615ddf928ddbc3bc872835a8b1df6e 100644
--- a/LUFA/Drivers/USB/Class/Host/CDC.c
+++ b/LUFA/Drivers/USB/Class/Host/CDC.c
@@ -309,13 +309,22 @@ uint16_t CDC_Host_BytesReceived(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo
 	Pipe_SetPipeToken(PIPE_TOKEN_IN);
 	Pipe_Unfreeze();
 
-	if (Pipe_IsINReceived() && !(Pipe_BytesInPipe()))
-	  Pipe_ClearIN();
-	
-	BytesInPipe = Pipe_BytesInPipe();
-	Pipe_Freeze();
-	
-	return BytesInPipe;
+	if (Pipe_IsINReceived())
+	{
+		if (!(Pipe_BytesInPipe()))
+		  Pipe_ClearIN();
+		
+		BytesInPipe = Pipe_BytesInPipe();
+		Pipe_Freeze();
+		
+		return BytesInPipe;
+	}
+	else
+	{
+		Pipe_Freeze();
+		
+		return 0;
+	}
 }
 
 uint8_t CDC_Host_ReceiveByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)