In pushObjPath, it blows away existing namespaces bad => cursor = cursor[names.shift()] = {}; ie, if you do this: using('a', 'a/b', function(x) { }, true); Then you get: x.a -> blown away x.a.b -> result *probably depending on which order the deps load.