All of the implementation is done