implemented view abstraction