int x_offset = 0;
 
        /* MTTPC does not support Height and Width */
-       if (wacom->features.type == MTTPC)
+       if (wacom->features.type == MTTPC || wacom->features.type == MTTPC_B)
                x_offset = -4;
 
        /*
        case WACOM_PKGLEN_TPC2FG:
                return wacom_tpc_mt_touch(wacom);
 
+       case WACOM_PKGLEN_PENABLED:
+               return wacom_tpc_pen(wacom);
+
        default:
                switch (data[0]) {
                case WACOM_REPORT_TPC1FG:
                        return wacom_tpc_single_touch(wacom, len);
 
                case WACOM_REPORT_TPCMT:
+               case WACOM_REPORT_TPCMT2:
                        return wacom_mt_touch(wacom);
 
                case WACOM_REPORT_PENABLED:
        case TABLETPC2FG:
        case MTSCREEN:
        case MTTPC:
+       case MTTPC_B:
                sync = wacom_tpc_irq(wacom_wac, len);
                break;
 
 
        case MTSCREEN:
        case MTTPC:
+       case MTTPC_B:
        case TABLETPC2FG:
                if (features->device_type == BTN_TOOL_FINGER) {
                        unsigned int flags = INPUT_MT_DIRECT;
 static const struct wacom_features wacom_features_0x4001 =
        { "Wacom ISDv4 4001",      WACOM_PKGLEN_MTTPC,     26202, 16325,  255,
          0, MTTPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
+static const struct wacom_features wacom_features_0x4004 =
+       { "Wacom ISDv4 4004",      WACOM_PKGLEN_MTTPC,     11060, 6220,  255,
+         0, MTTPC_B, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
+static const struct wacom_features wacom_features_0x5000 =
+       { "Wacom ISDv4 5000",      WACOM_PKGLEN_MTTPC,     27848, 15752,  1023,
+         0, MTTPC_B, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
+static const struct wacom_features wacom_features_0x5002 =
+       { "Wacom ISDv4 5002",      WACOM_PKGLEN_MTTPC,     29576, 16724,  1023,
+         0, MTTPC_B, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
 static const struct wacom_features wacom_features_0x47 =
        { "Wacom Intuos2 6x8",    WACOM_PKGLEN_INTUOS,    20320, 16240, 1023,
          31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
        { USB_DEVICE_DETAILED(0x315, USB_CLASS_HID, 0, 0) },
        { USB_DEVICE_DETAILED(0x317, USB_CLASS_HID, 0, 0) },
        { USB_DEVICE_WACOM(0x4001) },
+       { USB_DEVICE_WACOM(0x4004) },
+       { USB_DEVICE_WACOM(0x5000) },
+       { USB_DEVICE_WACOM(0x5002) },
        { USB_DEVICE_WACOM(0x47) },
        { USB_DEVICE_WACOM(0xF4) },
        { USB_DEVICE_WACOM(0xF8) },
 
 #define WACOM_PKGLEN_MTOUCH    62
 #define WACOM_PKGLEN_MTTPC     40
 #define WACOM_PKGLEN_DTUS      68
+#define WACOM_PKGLEN_PENABLED   8
 
 /* wacom data size per MT contact */
 #define WACOM_BYTES_PER_MT_PACKET      11
 #define WACOM_REPORT_TPC1FG            6
 #define WACOM_REPORT_TPC2FG            13
 #define WACOM_REPORT_TPCMT             13
+#define WACOM_REPORT_TPCMT2            3
 #define WACOM_REPORT_TPCHID            15
 #define WACOM_REPORT_TPCST             16
 #define WACOM_REPORT_DTUS              17
        TABLETPC2FG,
        MTSCREEN,
        MTTPC,
+       MTTPC_B,
        MAX_TYPE
 };