dryExec instead of dryRunEdge
Revamp update as a class extended from EventEmitter