added some polymorphism