first strike, big refactoring, going for a protocol handling #23