You could probably achieve this with an OrderedConfiguration<NodeConfig>
Eg: public interface NodeConfig() { public String getName(); public String getParentName(); //optional public List<String> getChildNames(); // optional } After all contributions, you could build a tree of nodes by calculating actual children combining getParentName() with getChildNames() where appropriate. You could contribute multiple times to the same Node.