I see the point of moving OnConnected() a bit "down" (I was actually close to comment on that in the initial PR of this) but why do you move the Open*() to be later now? They are just wrapper to start threads and thus do not delay the execution, but now you moved the Open*() calls into the background connect thread which delays their invocation.