worked on abstraction