created abstract engine