restructure autoloading to account for all the corner cases that might occur
with out-of-tree components