added 'GenEngine' and made generalizations to support other engines