refactoring the communicator