further redesign of the engine; narrator doesn't need to be attached by client code