finished refactoring communicator (sort of)