added a derive_engine method