start with the Titan impl, rename getType to type