Add Generic Engine implementation

- add generic engine implementation