Refactored
#TODO: Revisit progress and returns