seperate model and view