finishing up the engine abstraction