* Needs serious refactoring. Code is way too complicated and nigh-on unmaintainable. However, refactoring may require coordinating API changes and release timing with client foo-config packages.