Why are you using timeouts?  Let's just use events, and if the events aren't working up here, fix the bugs in the wrappers.