refactored to use CompositeView