abstracted client/server model from client