add abstraction for exec