diff object extended and refactored