introduce TypeMap