Refactor and implement the proper objective abstraction