finished implementing all requirements