refactor dispatcher
refactor dispatch; add execution context