refactring for adding more polymorphism