Rework this so that it can support subTypes.