diff --git a/plyproto/model.py b/plyproto/model.py
index bcff7ee..d2b7d80 100644
--- a/plyproto/model.py
+++ b/plyproto/model.py
@@ -35,9 +35,20 @@
     # visitor.visit_Literal(self)
     # visitor.visit_Name(self)
     # visitor.visit_Proto(self)
+    # visitor.visit_LU(self)
+
+class Base(object):
+    parent = None
+
+    def v(self, obj, visitor):
+        if obj == None:
+            return
+        if not hasattr(obj, "accept"):
+            return
+        obj.accept(visitor)
 
 # Lexical unit - contains lexspan and linespan for later analysis.
-class LU(object):
+class LU(Base):
     def __init__(self, p, idx):
         self.p = p
         self.idx = idx
@@ -70,14 +81,14 @@
         return self.describe()
 
     def accept(self, visitor):
-        pass
+        self.v(self.pval, visitor)
 
     def __iter__(self):
         for x in self.pval:
             yield x
 
 # Base node
-class SourceElement(object):
+class SourceElement(Base):
     '''
     A SourceElement is the base class for all elements that occur in a Protocol Buffers
     file parsed by plyproto.
@@ -150,7 +161,9 @@
         self.value = value
 
     def accept(self, visitor):
-        visitor.visit_FieldDirective(self)
+        if visitor.visit_FieldDirective(self):
+            self.v(self.name, visitor)
+            self.v(self.value, visitor)
 
 class FieldType(SourceElement):
     def __init__(self, name, linespan=None, lexspan=None, p=None):
@@ -159,7 +172,8 @@
         self.name = name
 
     def accept(self, visitor):
-        visitor.visit_FieldType(self)
+        if visitor.visit_FieldType(self):
+            self.v(self.name, visitor)
 
 class FieldDefinition(SourceElement):
     def __init__(self, field_modifier, ftype, name, fieldId, fieldDirective, linespan=None, lexspan=None, p=None):
@@ -172,7 +186,13 @@
         self.fieldDirective = fieldDirective
 
     def accept(self, visitor):
-        visitor.visit_FieldDefinition(self)
+        if visitor.visit_FieldDefinition(self):
+            self.v(self.name, visitor)
+            self.v(self.field_modifier, visitor)
+            self.v(self.ftype, visitor)
+            self.v(self.fieldId, visitor)
+            for s in self.fieldDirective:
+                self.v(s, visitor)
 
 class EnumFieldDefinition(SourceElement):
     def __init__(self, name, fieldId, linespan=None, lexspan=None, p=None):
@@ -182,7 +202,9 @@
         self.fieldId = fieldId
 
     def accept(self, visitor):
-        visitor.visit_EnumFieldDefinition(self)
+        if visitor.visit_EnumFieldDefinition(self):
+            self.v(self.name, visitor)
+            self.v(self.fieldId, visitor)
 
 class EnumDefinition(SourceElement):
     def __init__(self, name, body, linespan=None, lexspan=None, p=None):
@@ -193,6 +215,7 @@
 
     def accept(self, visitor):
         if visitor.visit_EnumDefinition(self):
+            self.v(self.name, visitor)
             for s in self.body:
                 s.accept(visitor)
 
@@ -205,6 +228,7 @@
 
     def accept(self, visitor):
         if visitor.visit_MessageDefinition(self):
+            self.v(self.name, visitor)
             for s in self.body:
                 s.accept(visitor)
 
@@ -217,6 +241,7 @@
 
     def accept(self, visitor):
         if visitor.visit_MessageExtension(self):
+            self.v(self.name, visitor)
             for s in self.body:
                 s.accept(visitor)
 
@@ -229,7 +254,10 @@
         self.name3 = name3
 
     def accept(self, visitor):
-        visitor.visit_MethodDefinition(self)
+        if visitor.visit_MethodDefinition(self):
+            self.v(self.name, visitor)
+            self.v(self.name2, visitor)
+            self.v(self.name3, visitor)
 
 class ServiceDefinition(SourceElement):
     def __init__(self, name, body, linespan=None, lexspan=None, p=None):
@@ -240,6 +268,7 @@
 
     def accept(self, visitor):
         if visitor.visit_ServiceDefinition(self):
+            self.v(self.name, visitor)
             for s in self.body:
                 s.accept(visitor)
 
@@ -254,7 +283,9 @@
         self.toVal = toVal
 
     def accept(self, visitor):
-        visitor.visit_ExtensionsDirective(self)
+        if visitor.visit_ExtensionsDirective(self):
+            self.v(self.fromVal, visitor)
+            self.v(self.toVal, visitor)
 
 class Literal(SourceElement):
 
@@ -321,5 +352,6 @@
 
     def accept(self, visitor):
         if visitor.visit_Proto(self):
+            self.v(self.pkg, visitor)
             for s in self.body:
                 s.accept(visitor)
diff --git a/plyproto/parser.py b/plyproto/parser.py
index b827ab0..e75eb52 100755
--- a/plyproto/parser.py
+++ b/plyproto/parser.py
@@ -175,9 +175,9 @@
         '''field_directive_plus : field_directive
                                | field_directive_plus field_directive'''
         if len(p) == 2:
-            p[0] = [p[1]]
+            p[0] = [LU(p,1)]
         else:
-            p[0] = p[1] + [p[2]]
+            p[0] = p[1] + [LU(p,2)]
 
     def p_dotname(self, p):
         '''dotname : NAME
