Refactored to use TypeMap's instead of TypeConverter