diff --git a/src/pdmgen.py b/src/pdmgen.py
index 711df52..fcda960 100755
--- a/src/pdmgen.py
+++ b/src/pdmgen.py
@@ -121,6 +121,44 @@
         pass
 
 
+class Path(ConfigEntry):
+    '''Path/metadata association.'''
+
+    def __init__(self, *a, **kw):
+        super(Path, self).__init__(**kw)
+
+    def factory(self, objs):
+        '''Create path and metadata elements.'''
+
+        args = {
+            'class': 'pathname',
+            'pathname': 'element',
+            'name': self.name['path']
+        }
+        add_unique(ConfigEntry(
+            configfile=self.configfile, **args), objs)
+
+        args = {
+            'class': 'meta',
+            'meta': 'element',
+            'name': self.name['meta']
+        }
+        add_unique(ConfigEntry(
+            configfile=self.configfile, **args), objs)
+
+        super(Path, self).factory(objs)
+
+    def setup(self, objs):
+        '''Resolve path and metadata names to indicies.'''
+
+        self.path = get_index(
+            objs, 'pathname', self.name['path'])
+        self.meta = get_index(
+            objs, 'meta', self.name['meta'])
+
+        super(Path, self).setup(objs)
+
+
 class Group(ConfigEntry):
     '''Pop the members keyword for groups.'''
 
@@ -154,6 +192,29 @@
         super(ImplicitGroup, self).factory(objs)
 
 
+class GroupOfPaths(ImplicitGroup):
+    '''Path group config file directive.'''
+
+    def __init__(self, *a, **kw):
+        super(GroupOfPaths, self).__init__(**kw)
+
+    def setup(self, objs):
+        '''Resolve group members.'''
+
+        def map_member(x):
+            path = get_index(
+                objs, 'pathname', x['path'])
+            meta = get_index(
+                objs, 'meta', x['meta'])
+            return (path, meta)
+
+        self.members = map(
+            map_member,
+            self.members)
+
+        super(GroupOfPaths, self).setup(objs)
+
+
 class Everything(Renderer):
     '''Parse/render entry point.'''
 
@@ -163,6 +224,12 @@
         handler methods.'''
 
         class_map = {
+            'path': {
+                'element': Path,
+            },
+            'pathgroup': {
+                'path': GroupOfPaths,
+            },
         }
 
         if cls not in class_map:
@@ -241,6 +308,11 @@
         return Everything(**objs)
 
     def __init__(self, *a, **kw):
+        self.pathmeta = kw.pop('path', [])
+        self.paths = kw.pop('pathname', [])
+        self.meta = kw.pop('meta', [])
+        self.pathgroups = kw.pop('pathgroup', [])
+
         super(Everything, self).__init__(**kw)
 
     def generate_cpp(self, loader):
@@ -250,6 +322,10 @@
                 self.render(
                     loader,
                     args.template,
+                    meta=self.meta,
+                    paths=self.paths,
+                    pathmeta=self.pathmeta,
+                    pathgroups=self.pathgroups,
                     indent=Indent()))
 
 if __name__ == '__main__':
