diff --git a/reclass.py.in b/reclass.py.in
index 4657624..a2e036a 100644
--- a/reclass.py.in
+++ b/reclass.py.in
@@ -39,7 +39,7 @@
                                                             options.nodes_uri,
                                                             options.classes_uri)
     data = get_data(options.storage_type, nodes_uri, classes_uri,
-                    options.applications_postfix, options.node)
+                    options.node)
     print output(data, options.output, options.pretty_print)
     sys.exit(posix.EX_OK)
 
diff --git a/reclass/__init__.py b/reclass/__init__.py
index 58fa4ef..cf4184e 100644
--- a/reclass/__init__.py
+++ b/reclass/__init__.py
@@ -10,9 +10,9 @@
 from output import OutputLoader
 from storage import StorageBackendLoader
 
-def get_data(storage_type, nodes_uri, classes_uri, applications_postfix, node):
+def get_data(storage_type, nodes_uri, classes_uri, node):
     storage_class = StorageBackendLoader(storage_type).load()
-    storage = storage_class(nodes_uri, classes_uri, applications_postfix)
+    storage = storage_class(nodes_uri, classes_uri)
     if not node:
         ret = storage.inventory()
     else:
diff --git a/reclass/adapters/ansible.py b/reclass/adapters/ansible.py
index 31d2f0a..0141ad1 100644
--- a/reclass/adapters/ansible.py
+++ b/reclass/adapters/ansible.py
@@ -20,7 +20,10 @@
 
         # The adapter resides in the Ansible directory, so let's look there
         # for an optional configuration file called reclass-config.yml.
-        options = {'output':'json', 'pretty_print':True}
+        options = {'output': 'json',
+                   'pretty_print': True,
+                   'applications_postfix': '_hosts'
+                  }
         config_path = os.path.join(ansible_dir, 'reclass-config.yml')
         if os.path.exists(config_path) and os.access(config_path, os.R_OK):
             options.update(reclass.config.read_config_file(config_path))
@@ -43,9 +46,6 @@
                 classes_uri = options['nodes_uri']
             options['classes_uri'] = classes_uri
 
-        if 'applications_postfix' not in options:
-            options['applications_postfix'] = '_hosts'
-
         # Invoke reclass according to what Ansible wants.
         # If the 'node' option is set, we want node information. If the option
         # is False instead, we print the inventory. Yeah for option abuse!
@@ -68,8 +68,7 @@
                                   posix.EX_USAGE)
 
         data = get_data(options['storage_type'], options['nodes_uri'],
-                        options['classes_uri'],
-                        options['applications_postfix'], options['node'])
+                        options['classes_uri'], options['node'])
 
         if options['node']:
             # Massage and shift the data like Ansible wants it
@@ -79,8 +78,17 @@
             data = data['parameters']
 
         else:
-            # Ansible inventory is only the list of groups
-            data = data['groups']
+            # Ansible inventory is only the list of groups. Groups are the set
+            # of classes plus the set of applications with the postfix added:
+            groups = data['classes']
+            apps = data['applications']
+            if 'applications_postfix' in options:
+                postfix = options['applications_postfix']
+                groups.update([(k + postfix, v) for k,v in apps.iteritems()])
+            else:
+                groups.update(apps)
+
+            data = groups
 
         print output(data, options['output'], options['pretty_print'])
 
diff --git a/reclass/config.py b/reclass/config.py
index 8deb299..498e7d1 100644
--- a/reclass/config.py
+++ b/reclass/config.py
@@ -36,9 +36,6 @@
                              default=defaults.get('pretty_print', False),
                              action="store_true",
                              help='try to make the output prettier [%default]')
-    options_group.add_option('--applications-postfix', dest='applications_postfix',
-                             default=defaults.get('applications_postfix', '_hosts'),
-                             help="the postfix to apply to groups made from applications ['%default']")
     parser.add_option_group(options_group)
 
     run_modes = optparse.OptionGroup(parser, 'Modes',
diff --git a/reclass/storage/__init__.py b/reclass/storage/__init__.py
index 1d26874..76c2a67 100644
--- a/reclass/storage/__init__.py
+++ b/reclass/storage/__init__.py
@@ -14,10 +14,9 @@
 
 class NodeStorageBase(object):
 
-    def __init__(self, nodes_uri, classes_uri, applications_postfix):
+    def __init__(self, nodes_uri, classes_uri):
         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)
@@ -40,16 +39,10 @@
 
     def inventory(self):
         entities, applications, classes = self._list_inventory()
-        groups = classes.copy()
-        if self._applications_postfix:
-            groups.update([(k + self._applications_postfix,v) for k,v in
-                           applications.iteritems()])
-        return {'__reclass__' : {'timestamp': _get_timestamp(),
-                                 'application_postfix': self._applications_postfix},
+        return {'__reclass__' : {'timestamp': _get_timestamp()},
                 'nodes': entities,
                 'classes': classes,
-                'applications': applications,
-                'groups': groups
+                'applications': applications
                }
 
 
diff --git a/reclass/storage/yaml_fs/__init__.py b/reclass/storage/yaml_fs/__init__.py
index 026c68f..45def3c 100644
--- a/reclass/storage/yaml_fs/__init__.py
+++ b/reclass/storage/yaml_fs/__init__.py
@@ -16,9 +16,8 @@
 
 class ExternalNodeStorage(NodeStorageBase):
 
-    def __init__(self, nodes_uri, classes_uri, applications_postfix):
-        super(ExternalNodeStorage, self).__init__(nodes_uri, classes_uri,
-                                                  applications_postfix)
+    def __init__(self, nodes_uri, classes_uri):
+        super(ExternalNodeStorage, self).__init__(nodes_uri, classes_uri)
 
     def _read_nodeinfo(self, name, base_uri, seen, nodename=None):
         path = os.path.join(base_uri, name + FILE_EXTENSION)
