Implemented lots of stuff