Offering more choices for type substitutions.
Refactoring.
Added type parameter renaming.