should be done with assn4 implementation