finish adding polymorphism