need abstraction and classes