implement view polymorphism