huge clean up/refactoring, switch send to use polling