implementing Morphism