code finished as much as could