Rewriting the _Operation class to be cleaner and allow deferred calculations