diff --git a/README b/README
index 228486f..07b0fd9 100644
--- a/README
+++ b/README
@@ -12,7 +12,7 @@
 inventory of nodes to be managed, completely separately from the configuration
 of the automation tool. Usually, the external node classifier completely
 replaces the tool-specific inventory (such as site.pp for Puppet,
-ext_pillar/ext_nodes for Salt, or /etc/ansible/hosts).
+ext_pillar/master_tops for Salt, or /etc/ansible/hosts).
 
 reclass allows you to define your nodes through class inheritance, while
 always able to override details of classes further up the tree. Think of
@@ -215,6 +215,14 @@
 For information on how to use reclass directly, invoke reclass.py with --help
 and study the output.
 
+The three options --inventory-base-uri, --nodes-uri, and --classes-uri
+together specify the location of the inventory. If the base URI is specified,
+then it is prepended to the other two URIs, unless they are absolute URIs. If
+these two URIs are not specified, they default to 'nodes' and 'classes'.
+Therefore, if your inventory is in '/etc/reclass/nodes' and
+'/etc/reclass/classes', all you need to specify is the base URI as
+'/etc/reclass'.
+
 More commonly, however, use of reclass will happen indirectly, and through
 so-called adapters, e.g. /…/reclass/adapters/salt. The job of an adapter is to
 translate between different invocation paradigms, provide a sane set of
@@ -234,6 +242,7 @@
   storage_type: yaml_fs
   pretty_print: True
   output: json
+  inventory_base_uri: /etc/reclass
   nodes_uri: ../nodes
 
 reclass first looks in the current directory for the file called
diff --git a/config.py b/config.py
index 1a3c603..e78c552 100644
--- a/config.py
+++ b/config.py
@@ -20,11 +20,14 @@
     options_group.add_option('-t', '--storage-type', dest='storage_type',
                              default=defaults.get('storage_type', 'yaml_fs'),
                              help='the type of storage backend to use [%default]')
+    options_group.add_option('-b', '--inventory-base-uri', dest='inventory_base_uri',
+                             default=defaults.get('inventory_base_uri', None),
+                             help='the base URI to append to nodes and classes [%default]'),
     options_group.add_option('-u', '--nodes-uri', dest='nodes_uri',
-                             default=defaults.get('nodes_uri', None),
+                             default=defaults.get('nodes_uri', './nodes'),
                              help='the URI to the nodes storage [%default]'),
     options_group.add_option('-c', '--classes-uri', dest='classes_uri',
-                             default=defaults.get('classes_uri', None),
+                             default=defaults.get('classes_uri', './classes'),
                              help='the URI to the classes storage [%default]')
     options_group.add_option('-o', '--output', dest='output',
                              default=defaults.get('output', 'yaml'),
@@ -63,10 +66,10 @@
         usage_error('You need to either pass --inventory or --nodeinfo <nodename>')
     elif options.output not in ('json', 'yaml'):
         usage_error('Unknown output format: {0}'.format(options.output))
-    elif options.nodes_uri is None:
-        usage_error('Must specify at least --nodes-uri')
-
-    options.classes_uri = options.classes_uri or options.nodes_uri
+    elif options.inventory_base_uri is None and options.nodes_uri is None:
+        usage_error('Must specify --inventory-base-uri or --nodes-uri')
+    elif options.inventory_base_uri is None and options.classes_uri is None:
+        usage_error('Must specify --inventory-base-uri or --classes-uri')
 
     return options
 
@@ -82,3 +85,19 @@
         config_data.update(read_config_file(config_file))
     parser = _make_parser(name, version, description, config_data)
     return _parse_and_check_options(parser)
+
+def path_mangler(inventory_base_uri, nodes_uri, classes_uri):
+
+    if inventory_base_uri is not None:
+        # if inventory_base is given, default to subdirectories
+        nodes_uri = nodes_uri or 'nodes'
+        classes_uri = classes_uri or 'classes'
+        # and prepend the inventory_base_uri
+        def _path_mangler_inner(path):
+            ret = os.path.join(inventory_base_uri, path)
+            ret = os.path.expanduser(ret)
+            return os.path.abspath(ret)
+
+        return map(_path_mangler_inner, (nodes_uri, classes_uri))
+
+    return nodes_uri, classes_uri
diff --git a/reclass.py.in b/reclass.py.in
index 9471646..dbb916f 100644
--- a/reclass.py.in
+++ b/reclass.py.in
@@ -24,10 +24,7 @@
 
 def get_data(storage_type, nodes_uri, classes_uri, applications_postfix, node):
     storage_class = StorageBackendLoader(storage_type).load()
-    storage = storage_class(os.path.abspath(os.path.expanduser(nodes_uri)),
-                            os.path.abspath(os.path.expanduser(classes_uri)),
-                            applications_postfix
-                           )
+    storage = storage_class(nodes_uri, classes_uri, applications_postfix)
     if node is False:
         ret = storage.inventory()
     else:
@@ -55,9 +52,11 @@
             break
     try:
         options = get_options(config_file)
-        data = get_data(options.storage_type, options.nodes_uri,
-                        options.classes_uri, options.applications_postfix,
-                        options.node)
+        nodes_uri, classes_uri = config.path_mangler(options.inventory_base_uri,
+                                                     options.nodes_uri,
+                                                     options.classes_uri)
+        data = get_data(options.storage_type, nodes_uri, classes_uri,
+                        options.applications_postfix, options.node)
         print output(data, options.output, options.pretty_print)
         sys.exit(posix.EX_OK)
 
