protocol hierarchies
common.hpp should be only included from top-level headers