Most of the functionality is done