added view composition and suitable abstraction