proper type polymorphism