diff --git a/storage/__init__.py b/storage/__init__.py
index 0613bfe..27cbf7d 100644
--- a/storage/__init__.py
+++ b/storage/__init__.py
@@ -8,9 +8,10 @@
 #
 class NodeStorageBase(object):
 
-    def __init__(self, nodes_uri, classes_uri):
+    def __init__(self, nodes_uri, classes_uri, applications_postfix):
         self._nodes_uri = nodes_uri
         self._classes_uri = classes_uri
+        self._applications_postfix = applications_postfix
 
     nodes_uri = property(lambda self: self._nodes_uri)
     classes_uri = property(lambda self: self._classes_uri)
@@ -32,7 +33,7 @@
     def inventory(self):
         entity, applications, classes = self._list_inventory()
         ret = classes
-        ret.update([(k + '_hosts',v) for k,v in applications.iteritems()])
+        ret.update([(k + self._applications_postfix,v) for k,v in applications.iteritems()])
         return ret
 
 class StorageBackendLoader(object):
diff --git a/storage/yaml_fs/__init__.py b/storage/yaml_fs/__init__.py
index f53048f..9843333 100644
--- a/storage/yaml_fs/__init__.py
+++ b/storage/yaml_fs/__init__.py
@@ -16,8 +16,9 @@
 
 class ExternalNodeStorage(NodeStorageBase):
 
-    def __init__(self, nodes_uri, classes_uri):
-        super(ExternalNodeStorage, self).__init__(nodes_uri, classes_uri)
+    def __init__(self, nodes_uri, classes_uri, applications_postfix):
+        super(ExternalNodeStorage, self).__init__(nodes_uri, classes_uri,
+                                                  applications_postfix)
 
     def _read_nodeinfo(self, name, base_uri, seen, nodename=None):
         path = os.path.join(base_uri, name + FILE_EXTENSION)
diff --git a/storage/yaml_fs/tests/test_yaml_fs.py b/storage/yaml_fs/tests/test_yaml_fs.py
index 89ae294..b3dee9b 100644
--- a/storage/yaml_fs/tests/test_yaml_fs.py
+++ b/storage/yaml_fs/tests/test_yaml_fs.py
@@ -10,14 +10,15 @@
 
 import os
 
+POSTFIX = '_hosts'
 PWD = os.path.dirname(__file__)
 HOSTS = ['red', 'blue', 'green']
-MEMBERSHIPS = {'apt_hosts': HOSTS,
-               'motd_hosts': HOSTS,
-               'firewall_hosts': HOSTS[:2],
-               'lighttpd_hosts': HOSTS[:2],
-               'postfix_hosts': HOSTS[1:],
-               'blues_hosts': HOSTS[1:2],
+MEMBERSHIPS = {'apt%s' % POSTFIX: HOSTS,
+               'motd%s' % POSTFIX: HOSTS,
+               'firewall%s' % POSTFIX: HOSTS[:2],
+               'lighttpd%s' % POSTFIX: HOSTS[:2],
+               'postfix%s' % POSTFIX: HOSTS[1:],
+               'blues%s' % POSTFIX: HOSTS[1:2],
                'basenode': HOSTS,
                'debiannode': HOSTS,
                'debiannode@sid': HOSTS[0:1],
@@ -33,7 +34,8 @@
 
     def setUp(self):
         self._storage = ExternalNodeStorage(os.path.join(PWD, 'nodes'),
-                                            os.path.join(PWD, 'classes'))
+                                            os.path.join(PWD, 'classes'),
+                                            POSTFIX)
         self._inventory = self._storage.inventory()
 
     def test_inventory_setup(self):
