Abstract object refactor