Nit: I'm not sure that init should have knowledge about what type of clients it could be built into. How about using bit-position flags for each of the classes instead (HMM_RPC_CLIENT, HMM_OPTIONAL_RPC_SERVER, HMM_NODE, ...), and passing the combination to it?