moved
removed redundance
implemented all parts