The MTP Responder https://github.com/yoonghm/MTP works great using the provided MTP Disk (Experimental) usb type selection.

However, if I try extending the MTP disk functionality with other usb devices I get odd problems.

This is on Windows 7 ultimate sp1, using Teensy 3.6. I have tried clearing the USB cached devices, changing the USB descriptors and reinstalling many times but issues persist.

For instance, if I try this addition to usb_desc.h

Code:
#elif defined(USB_MTPDISK_SERIAL)
  #define VENDOR_ID		0x16C0
  #define PRODUCT_ID		0x04D7
  #define BCD_DEVICE		0x0215
  #define MANUFACTURER_NAME	{'T','e','e','n','s','y','d','u','i','n','o'}
  #define MANUFACTURER_NAME_LEN	11
  #define PRODUCT_NAME		{'T','e','e','n','s','y',' ','M','T','P',' ','D','i','s','k'}
  #define PRODUCT_NAME_LEN	15
  #define EP0_SIZE		64
  #define NUM_ENDPOINTS         5
  #define NUM_USB_BUFFERS	30
  #define NUM_INTERFACE		3
  #define MTP_INTERFACE		3	// MTP Disk
  #define MTP_TX_ENDPOINT	4
  #define MTP_TX_SIZE		64
  #define MTP_RX_ENDPOINT	4
  #define MTP_RX_SIZE		64
  #define MTP_EVENT_ENDPOINT	5
  #define MTP_EVENT_SIZE	16
  #define MTP_EVENT_INTERVAL	10
  #define CDC_IAD_DESCRIPTOR	1
  #define CDC_STATUS_INTERFACE	0
  #define CDC_DATA_INTERFACE	1	// Serial
  #define CDC_ACM_ENDPOINT	1
  #define CDC_RX_ENDPOINT       2
  #define CDC_TX_ENDPOINT       3
  #define CDC_ACM_SIZE          16
  #define CDC_RX_SIZE           64
  #define CDC_TX_SIZE           64
  #define ENDPOINT1_CONFIG	ENDPOINT_TRANSMIT_ONLY
  #define ENDPOINT2_CONFIG	ENDPOINT_RECEIVE_ONLY
  #define ENDPOINT3_CONFIG	ENDPOINT_TRANSMIT_ONLY
  #define ENDPOINT4_CONFIG	ENDPOINT_TRANSMIT_AND_RECEIVE
  #define ENDPOINT5_CONFIG	ENDPOINT_RECEIVE_ONLY
Along with this addition in boards.txt
Code:
teensy36.menu.usb.serialmtp.build.usbtype=USB_MTPDISK_SERIAL
teensy36.menu.usb.serialmidimtp=Serial + MIDI + MTP Disk
MTP disk is present and is usable but the serial port appears broken, appearing as "unknown" in the ports menu.
Other combinations I have tried always appear to leave one of the interfaces broken.

Also, here is my clumsy attempt to write an MTP driver for Serialflash devices. This is also not working quite right yet, files transfer but the windows explorer does not refresh to show them until a replug. It was working but stopped at some point so not sure if it is just that I broke my Windows USB stack.
https://github.com/prickle/MTP
So now I'm stuck. I don't know what I'm doing so no surprise really. Can anybody please suggest where I might be going wrong?