diff --git a/reclass/storage/yaml_git/__init__.py b/reclass/storage/yaml_git/__init__.py
index 8f54515..3c32bfa 100644
--- a/reclass/storage/yaml_git/__init__.py
+++ b/reclass/storage/yaml_git/__init__.py
@@ -34,15 +34,22 @@
 class GitURI(object):
 
     def __init__(self, dictionary):
-        self.repo = dictionary.get('repo', None)
-        self.branch = dictionary.get('branch', None)
+        self.repo = None
+        self.branch = None
+        self.root = None
+        self.update(dictionary)
 
     def update(self, dictionary):
         if 'repo' in dictionary: self.repo = dictionary['repo']
         if 'branch' in dictionary: self.branch = dictionary['branch']
+        if 'root' in dictionary:
+            if dictionary['root'] is None:
+                self.root = None
+            else:
+                self.root = dictionary['root'].replace('/', '.')
 
     def __repr__(self):
-        return '<{0}: {1} {2}>'.format(self.__class__.__name__, self.repo, self.branch)
+        return '<{0}: {1} {2} {3}>'.format(self.__class__.__name__, self.repo, self.branch, self.root)
 
 
 class GitRepo(object):
@@ -95,13 +102,15 @@
             ret[bname] = branch
         return ret
 
-    def nodes(self, branch):
+    def nodes(self, branch, subdir):
         ret = {}
         for name, file in self.files[branch].iteritems():
-            if name in ret:
-                raise reclass.errors.DuplicateNodeNameError(self.name, name, files[name], path)
-            else:
-                ret[name] = file
+            if subdir is None or name.startswith(subdir):
+                node_name = os.path.splitext(file.name)[0]
+                if node_name in ret:
+                    raise reclass.errors.DuplicateNodeNameError(self.name, name, files[name], path)
+                else:
+                    ret[node_name] = file
         return ret
 
 class ExternalNodeStorage(NodeStorageBase):
@@ -112,13 +121,13 @@
         super(ExternalNodeStorage, self).__init__(STORAGE_NAME)
 
         if nodes_uri is not None:
-            self._nodes_uri = GitURI({ 'branch': 'master', 'repo': None })
+            self._nodes_uri = GitURI({ 'branch': 'master' })
             self._nodes_uri.update(nodes_uri)
             self._load_repo(self._nodes_uri.repo)
-            self._nodes = self._repos[self._nodes_uri.repo].nodes(self._nodes_uri.branch)
+            self._nodes = self._repos[self._nodes_uri.repo].nodes(self._nodes_uri.branch, self._nodes_uri.root)
 
         if classes_uri is not None:
-            self._classes_default_uri = GitURI({ 'branch': '__env__', 'repo': None })
+            self._classes_default_uri = GitURI({ 'branch': '__env__' })
             self._classes_default_uri.update(classes_uri)
             self._load_repo(self._classes_default_uri.repo)
 
@@ -126,7 +135,7 @@
             if 'env_overrides' in classes_uri:
                 for override in classes_uri['env_overrides']:
                     for env, options in override.iteritems():
-                        uri = GitURI({ 'branch': env, 'repo': self._classes_default_uri.repo })
+                        uri = GitURI({ 'branch': env, 'repo': self._classes_default_uri.repo, 'root': self._classes_default_uri.root })
                         uri.update(options)
                         self._classes_uri.append((env, uri))
                         self._load_repo(uri.repo)
@@ -144,6 +153,8 @@
 
     def get_class(self, name, environment):
         uri = self._env_to_uri(environment)
+        if uri.root is not None:
+            name = '{0}.{1}'.format(uri.root, name)
         file = self._repos[uri.repo].files[uri.branch][name]
         blob = self._repos[uri.repo].get(file.id)
         entity = YamlData.from_string(blob.data, 'git_fs://{0}#{1}/{2}'.format(uri.repo, uri.branch, file.path)).get_entity(name)
