diff --git a/epicardium/ble/ble_main.c b/epicardium/ble/ble_main.c
index f952c560db75b8cbc95db25366e56dd60817ccc9..b6d662bed65704cc500d00f9df8ab712ad67aa10 100644
--- a/epicardium/ble/ble_main.c
+++ b/epicardium/ble/ble_main.c
@@ -235,9 +235,9 @@ static const attsCccSet_t bleCccSet[BLE_NUM_CCC_IDX] =
   {ESS_PRES_CH_CCC_HDL,   ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},   /* BLE_ESS_PRES_CCC_IDX */
   {HID_MOUSE_BOOT_IN_CH_CCC_HDL,        ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},    /* HIDAPP_MBI_CCC_HDL */
   {HID_KEYBOARD_BOOT_IN_CH_CCC_HDL,     ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},    /* HIDAPP_KBI_CCC_HDL */
-  {HID_INPUT_REPORT_1_CH_CCC_HDL,       ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},    /* HIDAPP_IN_CONSUMER_CCC_HDL */
-  {HID_INPUT_REPORT_2_CH_CCC_HDL,       ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},    /* HIDAPP_IN_KEYBOARD_CCC_HDL */
-  {HID_INPUT_REPORT_3_CH_CCC_HDL,       ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},    /* HIDAPP_IN_MOUSE_CCC_HDL */
+  {HID_INPUT_REPORT_1_CH_CCC_HDL,       ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},    /* HIDAPP_IN_KEYBOARD_CCC_HDL */
+  {HID_INPUT_REPORT_2_CH_CCC_HDL,       ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},    /* HIDAPP_IN_MOUSE_CCC_HDL */
+  {HID_INPUT_REPORT_3_CH_CCC_HDL,       ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},    /* HIDAPP_IN_CONSUMER_CCC_HDL */
 };
 
 /**************************************************************************************************
diff --git a/epicardium/ble/cccd.h b/epicardium/ble/cccd.h
index d3c063d06a0da1953f2987adcd1523c5bc66c3fd..ea91c630617a13ad159146cf782d6860dd50a88e 100644
--- a/epicardium/ble/cccd.h
+++ b/epicardium/ble/cccd.h
@@ -9,9 +9,9 @@ enum
   BLE_ESS_PRES_CCC_IDX,                   /*! Environmental sensing service, pressure characteristic */
   HIDAPP_MBI_CCC_HDL,                   /*! HID Boot Mouse Input characteristic */
   HIDAPP_KBI_CCC_HDL,                   /*! HID Boot Keyboard Input characteristic */
-  HIDAPP_IN_CONSUMER_CCC_HDL,             /*! HID Input Report characteristic for consumer control inputs */
   HIDAPP_IN_KEYBOARD_CCC_HDL,           /*! HID Input Report characteristic for keyboard inputs */
   HIDAPP_IN_MOUSE_CCC_HDL,              /*! HID Input Report characteristic for mouse inputs */
+  HIDAPP_IN_CONSUMER_CCC_HDL,             /*! HID Input Report characteristic for consumer control inputs */
   BLE_NUM_CCC_IDX
 };
 
diff --git a/epicardium/ble/hid.c b/epicardium/ble/hid.c
index be67305bbef87ef6cde3c9472a8fdb13fa0db02e..0edcd89dc6f3b70797faf1dc2aeb72ff37ad8d7a 100644
--- a/epicardium/ble/hid.c
+++ b/epicardium/ble/hid.c
@@ -19,80 +19,111 @@
 
 /*! HidApp Report Map (Descriptor) */
 /* clang-format off */
+
+/* Based on https://github.com/adafruit/Adafruit_CircuitPython_BLE/blob/master/adafruit_ble/services/standard/hid.py */
 const uint8_t hidReportMap[] =
 {
-  0x05, 0x0C,                    /*  Usage Page (Consumer) */
-  0x09, 0x01,                    /*  Usage (Consumer Control) */
-  0xA1, 0x01,                    /*  Collection (Application) */
-  0x85, HIDAPP_CONSUMER_REPORT_ID,/*   Report ID (HIDAPP_CONSUMER_REPORT_ID) */
-  0x75, 0x10,                    /*    Report Size (16) */
-  0x95, 0x01,                    /*    Report Count (1) */
-  0x15, 0x01,                    /*    Logical Minimum (1) */
-  0x26, 0x8C, 0x02,              /*   Logical Maximum (652) */
-  0x19, 0x01,                    /*   Usage Minimum (Consumer Control) */
-  0x2A, 0x8C, 0x02,              /*   Usage Maximum (AC Send) */
-  0x81, 0x00,                    /*   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) */
-  0xC0,                          /* End Collection */
-  0x05, 0x01,                    /* Usage Page (Generic Desktop) */
-  0x09, 0x06,                    /* Usage (Keyboard) */
-  0xA1, 0x01,                    /* Collection (Application) */
-  0x85, HIDAPP_KEYBOARD_REPORT_ID, /*   report ID (HIDAPP_KEYBOARD_REPORT_ID) */
-  0x75, 0x01,                    /*   Report Size (1) */
-  0x95, 0x08,                    /*   Report Count (8) */
-  0x05, 0x07,                    /*   Usage Page (Key Codes) */
-  0x19, 0xe0,                    /*   Usage Minimum (224) */
-  0x29, 0xe7,                    /*   Usage Maximum (231) */
-  0x15, 0x00,                    /*   Logical Minimum (0) */
-  0x25, 0x01,                    /*   Logical Maximum (1) */
-  0x81, 0x02,                    /*   Input (Data, Variable, Absolute) */
-  0x95, 0x01,                    /*   Report Count (1) */
-  0x75, 0x08,                    /*   Report Size (8) */
-  0x81, 0x01,                    /*   Input (Constant) reserved byte(1) */
-  0x95, 0x05,                    /*   Report Count (5) */
-  0x75, 0x01,                    /*   Report Size (1) */
-  0x05, 0x08,                    /*   Usage Page (Page# for LEDs) */
-  0x19, 0x01,                    /*   Usage Minimum (1) */
-  0x29, 0x05,                    /*   Usage Maximum (5) */
-  0x91, 0x02,                    /*   Output (Data, Variable, Absolute), Led report */
-  0x95, 0x01,                    /*   Report Count (1) */
-  0x75, 0x03,                    /*   Report Size (3) */
-  0x91, 0x01,                    /*   Output (Constant), Led report padding */
-  0x95, 0x06,                    /*   Report Count (6) */
-  0x75, 0x08,                    /*   Report Size (8) */
-  0x15, 0x00,                    /*   Logical Minimum (0) */
-  0x25, 0x65,                    /*   Logical Maximum (101) */
-  0x05, 0x07,                    /*   Usage Page (Key codes) */
-  0x19, 0x00,                    /*   Usage Minimum (0) */
-  0x29, 0x65,                    /*   Usage Maximum (101) */
-  0x81, 0x00,                    /*   Input (Data, Array) Key array(6 bytes) */
-  0xC0,                          /* End Collection (Application) */
-  0x05, 0x01,                    /* USAGE_PAGE (Generic Desktop) */
-  0x09, 0x02,                    /* USAGE (Mouse) */
-  0xa1, 0x01,                    /* COLLECTION (Application) */
-  0x85, HIDAPP_MOUSE_REPORT_ID,  /*   report ID (HIDAPP_MOUSE_REPORT_ID) */
-  0x09, 0x01,                    /*   USAGE (Pointer) */
-  0xa1, 0x00,                    /*   COLLECTION (Physical) */
-  0x95, 0x03,                    /*     REPORT_COUNT (3) */
-  0x75, 0x01,                    /*     REPORT_SIZE (1) */
-  0x05, 0x09,                    /*     USAGE_PAGE (Button) */
-  0x19, 0x01,                    /*     USAGE_MINIMUM (Button 1) */
-  0x29, 0x03,                    /*     USAGE_MAXIMUM (Button 3) */
-  0x15, 0x00,                    /*     LOGICAL_MINIMUM (0) */
-  0x25, 0x01,                    /*     LOGICAL_MAXIMUM (1) */
-  0x81, 0x02,                    /*     INPUT (Data, Variable, Absolute) */
-  0x95, 0x01,                    /*     REPORT_COUNT (1) */
-  0x75, 0x05,                    /*     REPORT_SIZE (5) */
-  0x81, 0x01,                    /*     INPUT (Constant) */
-  0x75, 0x08,                    /*     REPORT_SIZE (8) */
-  0x95, 0x02,                    /*     REPORT_COUNT (2) */
-  0x05, 0x01,                    /*     USAGE_PAGE (Generic Desktop) */
-  0x09, 0x30,                    /*     USAGE (X) */
-  0x09, 0x31,                    /*     USAGE (Y) */
-  0x15, 0x81,                    /*     LOGICAL_MINIMUM (-127) */
-  0x25, 0x7f,                    /*     LOGICAL_MAXIMUM (127) */
-  0x81, 0x06,                    /*     INPUT (Data, Variable, Relative) */
-  0xc0,                          /*   End Collection (Physical) */
-  0xc0                           /* End Collection (Application) */
+	0x05, 0x01,  /* Usage Page (Generic Desktop Ctrls) */
+	0x09, 0x06,  /* Usage (Keyboard) */
+	0xA1, 0x01,  /* Collection (Application) */
+	0x85, HIDAPP_KEYBOARD_REPORT_ID,  /*   Report ID (1) */
+	0x05, 0x07,  /*   Usage Page (Kbrd/Keypad) */
+	0x19, 0xE0,  /*   Usage Minimum (\xE0) */
+	0x29, 0xE7,  /*   Usage Maximum (\xE7) */
+	0x15, 0x00,  /*   Logical Minimum (0) */
+	0x25, 0x01,  /*   Logical Maximum (1) */
+	0x75, 0x01,  /*   Report Size (1) */
+	0x95, 0x08,  /*   Report Count (8) */
+	0x81, 0x02,  /*   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) */
+	0x81, 0x01,  /*   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) */
+	0x19, 0x00,  /*   Usage Minimum (\x00) */
+	0x29, 0x89,  /*   Usage Maximum (\x89) */
+	0x15, 0x00,  /*   Logical Minimum (0) */
+	0x25, 0x89,  /*   Logical Maximum (137) */
+	0x75, 0x08,  /*   Report Size (8) */
+	0x95, 0x06,  /*   Report Count (6) */
+	0x81, 0x00,  /*   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) */
+	0x05, 0x08,  /*   Usage Page (LEDs) */
+	0x19, 0x01,  /*   Usage Minimum (Num Lock) */
+	0x29, 0x05,  /*   Usage Maximum (Kana) */
+	0x15, 0x00,  /*   Logical Minimum (0) */
+	0x25, 0x01,  /*   Logical Maximum (1) */
+	0x75, 0x01,  /*   Report Size (1) */
+	0x95, 0x05,  /*   Report Count (5) */
+	0x91, 0x02,  /*   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) */
+	0x95, 0x03,  /*   Report Count (3) */
+	0x91, 0x01,  /*   Output (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) */
+	0xC0,        /* End Collection */
+	0x05, 0x01,  /* Usage Page (Generic Desktop Ctrls) */
+	0x09, 0x02,  /* Usage (Mouse) */
+	0xA1, 0x01,  /* Collection (Application) */
+	0x09, 0x01,  /*   Usage (Pointer) */
+	0xA1, 0x00,  /*   Collection (Physical) */
+	0x85, HIDAPP_MOUSE_REPORT_ID,  /*     Report ID (2) */
+	0x05, 0x09,  /*     Usage Page (Button) */
+	0x19, 0x01,  /*     Usage Minimum (\x01) */
+	0x29, 0x05,  /*     Usage Maximum (\x05) */
+	0x15, 0x00,  /*     Logical Minimum (0) */
+	0x25, 0x01,  /*     Logical Maximum (1) */
+	0x95, 0x05,  /*     Report Count (5) */
+	0x75, 0x01,  /*     Report Size (1) */
+	0x81, 0x02,  /*     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) */
+	0x95, 0x01,  /*     Report Count (1) */
+	0x75, 0x03,  /*     Report Size (3) */
+	0x81, 0x01,  /*     Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) */
+	0x05, 0x01,  /*     Usage Page (Generic Desktop Ctrls) */
+	0x09, 0x30,  /*     Usage (X) */
+	0x09, 0x31,  /*     Usage (Y) */
+	0x15, 0x81,  /*     Logical Minimum (-127) */
+	0x25, 0x7F,  /*     Logical Maximum (127) */
+	0x75, 0x08,  /*     Report Size (8) */
+	0x95, 0x02,  /*     Report Count (2) */
+	0x81, 0x06,  /*     Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position) */
+	0x09, 0x38,  /*     Usage (Wheel) */
+	0x15, 0x81,  /*     Logical Minimum (-127) */
+	0x25, 0x7F,  /*     Logical Maximum (127) */
+	0x75, 0x08,  /*     Report Size (8) */
+	0x95, 0x01,  /*     Report Count (1) */
+	0x81, 0x06,  /*     Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position) */
+	0xC0,        /*   End Collection */
+	0xC0,        /* End Collection */
+	0x05, 0x0C,        /* Usage Page (Consumer) */
+	0x09, 0x01,        /* Usage (Consumer Control) */
+	0xA1, 0x01,        /* Collection (Application) */
+	0x85, HIDAPP_CONSUMER_REPORT_ID,        /*   Report ID (3) */
+	0x75, 0x10,        /*   Report Size (16) */
+	0x95, 0x01,        /*   Report Count (1) */
+	0x15, 0x01,        /*   Logical Minimum (1) */
+	0x26, 0x8C, 0x02,  /*   Logical Maximum (652) */
+	0x19, 0x01,        /*   Usage Minimum (Consumer Control) */
+	0x2A, 0x8C, 0x02,  /*   Usage Maximum (AC Send) */
+	0x81, 0x00,        /*   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) */
+	0xC0,              /* End Collection */
+#if 0
+	0x05, 0x01,        /* Usage Page (Generic Desktop Ctrls) */
+	0x09, 0x05,        /* Usage (Game Pad) */
+	0xA1, 0x01,        /* Collection (Application) */
+	0x85, 0x05,        /*   Report ID (5) */
+	0x05, 0x09,        /*   Usage Page (Button) */
+	0x19, 0x01,        /*   Usage Minimum (\x01) */
+	0x29, 0x10,        /*   Usage Maximum (\x10) */
+	0x15, 0x00,        /*   Logical Minimum (0) */
+	0x25, 0x01,        /*   Logical Maximum (1) */
+	0x75, 0x01,        /*   Report Size (1) */
+	0x95, 0x10,        /*   Report Count (16) */
+	0x81, 0x02,        /*   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) */
+	0x05, 0x01,        /*   Usage Page (Generic Desktop Ctrls) */
+	0x15, 0x81,        /*   Logical Minimum (-127) */
+	0x25, 0x7F,        /*   Logical Maximum (127) */
+	0x09, 0x30,        /*   Usage (X) */
+	0x09, 0x31,        /*   Usage (Y) */
+	0x09, 0x32,        /*   Usage (Z) */
+	0x09, 0x35,        /*   Usage (Rz) */
+	0x75, 0x08,        /*   Report Size (8) */
+	0x95, 0x04,        /*   Report Count (4) */
+	0x81, 0x02,        /*   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) */
+	0xC0,              /* End Collection */
+#endif
 };
 /* clang-format on */
 
@@ -103,11 +134,11 @@ const uint16_t hidReportMapLen = sizeof(hidReportMap);
 static const hidReportIdMap_t hidAppReportIdSet[] =
 {
   /* type                       ID                            handle */
-  {HID_REPORT_TYPE_INPUT,       HIDAPP_CONSUMER_REPORT_ID,    HID_INPUT_REPORT_1_HDL},     /* Consumer Control Input Report */
-  {HID_REPORT_TYPE_INPUT,       HIDAPP_KEYBOARD_REPORT_ID,    HID_INPUT_REPORT_2_HDL},     /* Keyboard Input Report */
+  {HID_REPORT_TYPE_INPUT,       HIDAPP_KEYBOARD_REPORT_ID,    HID_INPUT_REPORT_1_HDL},     /* Keyboard Input Report */
   {HID_REPORT_TYPE_OUTPUT,      HIDAPP_KEYBOARD_REPORT_ID,    HID_OUTPUT_REPORT_HDL},      /* Keyboard Output Report */
   {HID_REPORT_TYPE_FEATURE,     HIDAPP_KEYBOARD_REPORT_ID,    HID_FEATURE_REPORT_HDL},     /* Keyboard Feature Report */
-  {HID_REPORT_TYPE_INPUT,       HIDAPP_MOUSE_REPORT_ID,       HID_INPUT_REPORT_3_HDL},     /* Mouse Input Report */
+  {HID_REPORT_TYPE_INPUT,       HIDAPP_MOUSE_REPORT_ID,       HID_INPUT_REPORT_2_HDL},     /* Mouse Input Report */
+  {HID_REPORT_TYPE_INPUT,       HIDAPP_CONSUMER_REPORT_ID,    HID_INPUT_REPORT_3_HDL},     /* Consumer Control Input Report */
   {HID_REPORT_TYPE_INPUT,       HID_KEYBOARD_BOOT_ID,         HID_KEYBOARD_BOOT_IN_HDL},   /* Boot Keyboard Input Report */
   {HID_REPORT_TYPE_OUTPUT,      HID_KEYBOARD_BOOT_ID,         HID_KEYBOARD_BOOT_OUT_HDL},  /* Boot Keyboard Output Report */
   {HID_REPORT_TYPE_INPUT,       HID_MOUSE_BOOT_ID,            HID_MOUSE_BOOT_IN_HDL},      /* Boot Mouse Input Report */
@@ -142,18 +173,10 @@ static void hidAppReportInit(void)
 	uint8_t oBuffer[HIDAPP_OUTPUT_REPORT_LEN];
 	uint8_t fBuffer[HIDAPP_FEATURE_REPORT_LEN];
 
-	/* Consumer Control Input report */
-	memset(iConsumerBuffer, 0, HIDAPP_CONSUMER_INPUT_REPORT_LEN);
-	AttsSetAttr(
-		HID_INPUT_REPORT_1_HDL,
-		HIDAPP_CONSUMER_INPUT_REPORT_LEN,
-		iConsumerBuffer
-	);
-
 	/* Keyboard Input report */
 	memset(iKeyboardBuffer, 0, HIDAPP_KEYBOARD_INPUT_REPORT_LEN);
 	AttsSetAttr(
-		HID_INPUT_REPORT_2_HDL,
+		HID_INPUT_REPORT_1_HDL,
 		HIDAPP_KEYBOARD_INPUT_REPORT_LEN,
 		iKeyboardBuffer
 	);
@@ -161,11 +184,19 @@ static void hidAppReportInit(void)
 	/* Mouse Input report */
 	memset(iMouseBuffer, 0, HIDAPP_MOUSE_INPUT_REPORT_LEN);
 	AttsSetAttr(
-		HID_INPUT_REPORT_3_HDL,
+		HID_INPUT_REPORT_2_HDL,
 		HIDAPP_MOUSE_INPUT_REPORT_LEN,
 		iMouseBuffer
 	);
 
+	/* Consumer Control Input report */
+	memset(iConsumerBuffer, 0, HIDAPP_CONSUMER_INPUT_REPORT_LEN);
+	AttsSetAttr(
+		HID_INPUT_REPORT_3_HDL,
+		HIDAPP_CONSUMER_INPUT_REPORT_LEN,
+		iConsumerBuffer
+	);
+
 	/* Output report */
 	memset(oBuffer, 0, HIDAPP_OUTPUT_REPORT_LEN);
 	AttsSetAttr(HID_OUTPUT_REPORT_HDL, HIDAPP_OUTPUT_REPORT_LEN, oBuffer);
diff --git a/epicardium/ble/hid.h b/epicardium/ble/hid.h
index 9e41986eb4a7d4ff17ee5826d413956e468f9c99..6edd627a1770589ae3d20bee49057fd399fc7fd9 100644
--- a/epicardium/ble/hid.h
+++ b/epicardium/ble/hid.h
@@ -2,13 +2,13 @@
 
 /* The input report fits in one byte */
 #define HIDAPP_KEYBOARD_INPUT_REPORT_LEN  8
-#define HIDAPP_MOUSE_INPUT_REPORT_LEN     3
+#define HIDAPP_MOUSE_INPUT_REPORT_LEN     4
 #define HIDAPP_CONSUMER_INPUT_REPORT_LEN  2
 #define HIDAPP_OUTPUT_REPORT_LEN          1
 #define HIDAPP_FEATURE_REPORT_LEN         1
 
 
 /* HID Report IDs */
-#define HIDAPP_CONSUMER_REPORT_ID         1
-#define HIDAPP_KEYBOARD_REPORT_ID         2
-#define HIDAPP_MOUSE_REPORT_ID            3
+#define HIDAPP_KEYBOARD_REPORT_ID         1
+#define HIDAPP_MOUSE_REPORT_ID            2
+#define HIDAPP_CONSUMER_REPORT_ID         3
diff --git a/pycardium/modules/hid.c b/pycardium/modules/hid.c
index f8823b794a97c425c1f2e8488261c6fd0fba950f..62e198fd6a468dab687967f7fbdb95400fd60ad4 100644
--- a/pycardium/modules/hid.c
+++ b/pycardium/modules/hid.c
@@ -8,7 +8,7 @@ static mp_obj_t mp_hid_set_control(mp_obj_t control_code)
 {
 	int code       = mp_obj_get_int(control_code);
 	uint8_t data[] = { code, code >> 8 };
-	int ret        = epic_hid_send_report(1, data, sizeof(data));
+	int ret        = epic_hid_send_report(3, data, sizeof(data));
 	return mp_obj_new_int(ret);
 }
 static MP_DEFINE_CONST_FUN_OBJ_1(hid_set_control_obj, mp_hid_set_control);