diff --git a/epicardium/cdcacm.c b/epicardium/cdcacm.c
index 5bc8f706d8e3ef24bbb415cfe341d1cc61e6b023..fd0f2d8614ba034458b987072298870288227089 100644
--- a/epicardium/cdcacm.c
+++ b/epicardium/cdcacm.c
@@ -172,6 +172,8 @@ void cdcacm_init(void)
 
     /* Start with USB in low power mode */
     usb_app_sleep();
+    /* TODO: Fix priority */
+    NVIC_SetPriority(USB_IRQn, 6);
     NVIC_EnableIRQ(USB_IRQn);
 }
 
@@ -338,9 +340,19 @@ static int usb_read_callback(void)
 }
 
 /******************************************************************************/
+#include "FreeRTOS.h"
+#include "task.h"
+
+extern TaskHandle_t serial_task_id;
 void USB_IRQHandler(void)
 {
     usb_event_handler();
+
+    if (serial_task_id != NULL) {
+        BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+        vTaskNotifyGiveFromISR(serial_task_id, &xHigherPriorityTaskWoken);
+        portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
+    }
 }
 
 /******************************************************************************/
diff --git a/epicardium/serial.c b/epicardium/serial.c
index 0b956422a98123a2287a59f8cd1c45cf7a7af980..ac9e1ce0c72fca5b998fb546805d2e57e9722c45 100644
--- a/epicardium/serial.c
+++ b/epicardium/serial.c
@@ -13,7 +13,7 @@
 #include "queue.h"
 
 /* Task ID for the serial handler */
-TaskHandle_t serial_task_id;
+TaskHandle_t serial_task_id = NULL;
 
 /* The serial console in use (UART0) */
 extern mxc_uart_regs_t* ConsoleUart;
@@ -109,5 +109,9 @@ void vSerialTask(void*pvParameters)
 		while (UART_NumReadAvail(ConsoleUart) > 0) {
 			enqueue_char(UART_ReadByte(ConsoleUart));
 		}
+
+		while (cdcacm_num_read_avail() > 0) {
+			enqueue_char(cdcacm_read());
+		}
 	}
 }