Implement most of the things :)