Updated to use an asynchronous client/server model, because that is what we are going to need to use.