Communication layer + refactoring