diff --git a/plyproto/model.py b/plyproto/model.py
index e471126..f3b33d6 100644
--- a/plyproto/model.py
+++ b/plyproto/model.py
@@ -10,8 +10,7 @@
 
     def __getattr__(self, name):
         if not name.startswith('visit_'):
-            raise AttributeError('name must start with visit_ but was {}'
-                                 .format(name))
+            raise AttributeError('name must start with visit_ but was {}'.format(name))
 
         def f(element):
             if self.verbose:
@@ -35,6 +34,7 @@
     # visitor.visit_ExtensionsDirective(self)
     # visitor.visit_Literal(self)
     # visitor.visit_Name(self)
+    # visitor.visit_Proto(self)
 
 # Base node
 class SourceElement(object):
@@ -42,9 +42,12 @@
     A SourceElement is the base class for all elements that occur in a Protocol Buffers
     file parsed by plyproto.
     '''
-    def __init__(self):
+    def __init__(self, linespan=[], lexspan=[], p=None):
         super(SourceElement, self).__init__()
-        self._fields = []
+        self._fields = [] # ['linespan', 'lexspan']
+        self.linespan = linespan
+        self.lexspan = lexspan
+        self.p = p
 
     def __repr__(self):
         equals = ("{0}={1!r}".format(k, getattr(self, k))
@@ -61,31 +64,38 @@
     def __ne__(self, other):
         return not self == other
 
+    def setLexData(self, linespan, lexspan):
+        self.linespan = linespan
+        self.lexspan = lexspan
+
+    def setLexObj(self, p):
+        self.p = p
+
     def accept(self, visitor):
         pass
 
 class PackageStatement(SourceElement):
-    def __init__(self, name):
-        super(PackageStatement, self).__init__()
-        self._fields = ['name']
+    def __init__(self, name, linespan=None, lexspan=None, p=None):
+        super(PackageStatement, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['name']
         self.name = name
 
     def accept(self, visitor):
         visitor.visit_PackageStatement(self)
 
 class ImportStatement(SourceElement):
-    def __init__(self, name):
-        super(ImportStatement, self).__init__()
-        self._fields = ['name']
+    def __init__(self, name, linespan=None, lexspan=None, p=None):
+        super(ImportStatement, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['name']
         self.name = name
 
     def accept(self, visitor):
         visitor.visit_ImportStatement(self)
 
 class OptionStatement(SourceElement):
-    def __init__(self, name, value):
-        super(OptionStatement, self).__init__()
-        self._fields = ['name', 'value']
+    def __init__(self, name, value, linespan=None, lexspan=None, p=None):
+        super(OptionStatement, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['name', 'value']
         self.name = name
         self.value = value
 
@@ -93,9 +103,9 @@
         visitor.visit_OptionStatement(self)
 
 class FieldDirective(SourceElement):
-    def __init__(self, name, value):
-        super(FieldDirective, self).__init__()
-        self._fields = ['name', 'value']
+    def __init__(self, name, value, linespan=None, lexspan=None, p=None):
+        super(FieldDirective, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['name', 'value']
         self.name = name
         self.value = value
 
@@ -103,18 +113,18 @@
         visitor.visit_FieldDirective(self)
 
 class FieldType(SourceElement):
-    def __init__(self, name):
-        super(FieldType, self).__init__()
-        self._fields = ['name']
+    def __init__(self, name, linespan=None, lexspan=None, p=None):
+        super(FieldType, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['name']
         self.name = name
 
     def accept(self, visitor):
         visitor.visit_FieldType(self)
 
 class FieldDefinition(SourceElement):
-    def __init__(self, field_modifier, ftype, name, fieldId, fieldDirective):
-        super(FieldDefinition, self).__init__()
-        self._fields = ['field_modifier', 'ftype', 'name', 'fieldId', 'fieldDirective']
+    def __init__(self, field_modifier, ftype, name, fieldId, fieldDirective, linespan=None, lexspan=None, p=None):
+        super(FieldDefinition, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['field_modifier', 'ftype', 'name', 'fieldId', 'fieldDirective']
         self.name = name
         self.field_modifier = field_modifier
         self.ftype = ftype
@@ -125,9 +135,9 @@
         visitor.visit_FieldDefinition(self)
 
 class EnumFieldDefinition(SourceElement):
-    def __init__(self, name, fieldId):
-        super(EnumFieldDefinition, self).__init__()
-        self._fields = ['name', 'fieldId']
+    def __init__(self, name, fieldId, linespan=None, lexspan=None, p=None):
+        super(EnumFieldDefinition, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['name', 'fieldId']
         self.name = name
         self.fieldId = fieldId
 
@@ -135,9 +145,9 @@
         visitor.visit_EnumFieldDefinition(self)
 
 class EnumDefinition(SourceElement):
-    def __init__(self, name, body):
-        super(EnumDefinition, self).__init__()
-        self._fields = ['name', 'body']
+    def __init__(self, name, body, linespan=None, lexspan=None, p=None):
+        super(EnumDefinition, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['name', 'body']
         self.name = name
         self.body = body
 
@@ -147,9 +157,9 @@
                 s.accept(visitor)
 
 class MessageDefinition(SourceElement):
-    def __init__(self, name, body):
-        super(MessageDefinition, self).__init__()
-        self._fields = ['name', 'body']
+    def __init__(self, name, body, linespan=None, lexspan=None, p=None):
+        super(MessageDefinition, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['name', 'body']
         self.name = name
         self.body = body
 
@@ -159,9 +169,9 @@
                 s.accept(visitor)
 
 class MessageExtension(SourceElement):
-    def __init__(self, name, body):
-        super(MessageExtension, self).__init__()
-        self._fields = ['name', 'body']
+    def __init__(self, name, body, linespan=None, lexspan=None, p=None):
+        super(MessageExtension, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['name', 'body']
         self.name = name
         self.body = body
 
@@ -171,9 +181,9 @@
                 s.accept(visitor)
 
 class MethodDefinition(SourceElement):
-    def __init__(self, name, name2, name3):
-        super(MethodDefinition, self).__init__()
-        self._fields = ['name', 'name2', 'name3']
+    def __init__(self, name, name2, name3, linespan=None, lexspan=None, p=None):
+        super(MethodDefinition, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['name', 'name2', 'name3']
         self.name = name
         self.name2 = name2
         self.name3 = name3
@@ -182,9 +192,9 @@
         visitor.visit_MethodDefinition(self)
 
 class ServiceDefinition(SourceElement):
-    def __init__(self, name, body):
-        super(ServiceDefinition, self).__init__()
-        self._fields = ['name', 'body']
+    def __init__(self, name, body, linespan=None, lexspan=None, p=None):
+        super(ServiceDefinition, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['name', 'body']
         self.name = name
         self.body = body
 
@@ -197,9 +207,9 @@
     pass
 
 class ExtensionsDirective(SourceElement):
-    def __init__(self, fromVal, toVal):
-        super(ExtensionsDirective, self).__init__()
-        self._fields = ['fromVal', 'toVal']
+    def __init__(self, fromVal, toVal, linespan=None, lexspan=None, p=None):
+        super(ExtensionsDirective, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['fromVal', 'toVal']
         self.fromVal = fromVal
         self.toVal = toVal
 
@@ -208,9 +218,9 @@
 
 class Literal(SourceElement):
 
-    def __init__(self, value):
-        super(Literal, self).__init__()
-        self._fields = ['value']
+    def __init__(self, value, linespan=None, lexspan=None, p=None):
+        super(Literal, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['value']
         self.value = value
 
     def accept(self, visitor):
@@ -218,9 +228,9 @@
 
 class Name(SourceElement):
 
-    def __init__(self, value):
-        super(Name, self).__init__()
-        self._fields = ['value']
+    def __init__(self, value, linespan=None, lexspan=None, p=None):
+        super(Name, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['value']
         self.value = value
 
     def append_name(self, name):
@@ -232,4 +242,15 @@
     def accept(self, visitor):
         visitor.visit_Name(self)
 
+class ProtoFile(SourceElement):
 
+    def __init__(self, pkg, body, linespan=None, lexspan=None, p=None):
+        super(ProtoFile, self).__init__(linespan=linespan, lexspan=lexspan, p=p)
+        self._fields += ['pkg', 'body']
+        self.pkg = pkg
+        self.body = body
+
+    def accept(self, visitor):
+        if visitor.visit_Proto(self):
+            for s in self.body:
+                s.accept(visitor)
