cleaned up execute, fixed some bugs, now works for generic exchanges, added execution context