interface is mostly done for assignment one