diff --git a/doc/source/operations.rst b/doc/source/operations.rst
index 0819bfb..2085bc8 100644
--- a/doc/source/operations.rst
+++ b/doc/source/operations.rst
@@ -43,8 +43,8 @@
 Nodes may be defined in subdirectories. However, node names (filename) must be
 unique across all subdirectories, and |reclass| will exit with an error if
 a node is defined multiple times. Subdirectories therefore really only exist
-for the administrator's sanity (and may be used in the future to tag
-additional classes onto nodes).
+for the administrator's local data structuring. They may be used in mappings
+(see below) to tag additional classes onto nodes.
 
 Data merging
 ------------
@@ -112,13 +112,12 @@
     - /\.(\S+)$/ tld-\\1
 
 Furthermore, since the outer slashes ('/') are used to "quote" the regular
-expression, *any* slashes within the regular expression must be escaped::
+expression, *any* slashes within the regular expression must be escaped. For
+instance, the following class mapping assigns a ``subdir-X`` class to all
+nodes that are defined in a subdirectory (using yaml_fs).
 
   class_mappings:
-    - /^([^\/]+)\// \\1
-
-This is a bit theoretical right now, as nodenames cannot (yet) include
-slashes, but that might come…
+    - /^([^\/]+)\// subdir-\\1
 
 Parameter interpolation
 ------------------------
diff --git a/reclass/storage/__init__.py b/reclass/storage/__init__.py
index 07a0cfe..1f0e20a 100644
--- a/reclass/storage/__init__.py
+++ b/reclass/storage/__init__.py
@@ -119,13 +119,15 @@
 
     def _nodeinfo(self, nodename):
         node_entity = self._get_node(nodename)
-        merge_base = self._populate_with_class_mappings(nodename)
-        ret = self._recurse_entity(node_entity, merge_base, nodename=nodename)
+        merge_base = self._populate_with_class_mappings(node_entity.name)
+        ret = self._recurse_entity(node_entity, merge_base,
+                                   nodename=node_entity.name)
         ret.interpolate()
         return ret
 
     def _nodeinfo_as_dict(self, nodename, entity):
-        ret = {'__reclass__' : {'node': nodename, 'uri': entity.uri,
+        ret = {'__reclass__' : {'node': entity.name, 'name': nodename,
+                                'uri': entity.uri,
                                 'timestamp': _get_timestamp()
                                },
               }
diff --git a/reclass/storage/yaml_fs/__init__.py b/reclass/storage/yaml_fs/__init__.py
index 72bfc88..691a952 100644
--- a/reclass/storage/yaml_fs/__init__.py
+++ b/reclass/storage/yaml_fs/__init__.py
@@ -55,11 +55,13 @@
     def _get_node(self, name):
         vvv('GET NODE {0}'.format(name))
         try:
-            path = os.path.join(self.nodes_uri, self._nodes[name])
+            relpath = self._nodes[name]
+            path = os.path.join(self.nodes_uri, relpath)
+            name = os.path.splitext(relpath)[0]
         except KeyError, e:
             raise reclass.errors.NodeNotFound(self._get_storage_name(),
                                               name, self.nodes_uri)
-        entity = YamlFile(path).entity
+        entity = YamlFile(path).get_entity(name)
         return entity
 
     def _get_class(self, name, nodename=None):
@@ -70,7 +72,7 @@
             raise reclass.errors.ClassNotFound(self._get_storage_name(),
                                                name, self.classes_uri,
                                                nodename)
-        entity = YamlFile(path).entity
+        entity = YamlFile(path).get_entity()
         return entity
 
     def _list_inventory(self):
diff --git a/reclass/storage/yaml_fs/yamlfile.py b/reclass/storage/yaml_fs/yamlfile.py
index 54c1a7e..bdd3d2d 100644
--- a/reclass/storage/yaml_fs/yamlfile.py
+++ b/reclass/storage/yaml_fs/yamlfile.py
@@ -31,7 +31,7 @@
             self._data = data
         fp.close()
 
-    def _get_entity(self):
+    def get_entity(self, name=None):
         classes = self._data.get('classes')
         if classes is None:
             classes = []
@@ -47,10 +47,12 @@
             parameters = {}
         parameters = datatypes.Parameters(parameters)
 
+        if name is None:
+            name = self._path
+
         return datatypes.Entity(classes, applications, parameters,
-                                name=self._path,
+                                name=name,
                                 uri='yaml_fs://{0}'.format(self._path))
-    entity = property(lambda self: self._get_entity())
 
     def __repr__(self):
         return '<{0} {1}, {2}>'.format(self.__class__.__name__, self._path,
