finished implementing everything