diff --git a/plyproto/model.py b/plyproto/model.py
index 7e39ae9..e471126 100644
--- a/plyproto/model.py
+++ b/plyproto/model.py
@@ -3,11 +3,44 @@
 __license__ = "Apache License, Version 2.0"
 __version__ = "1.0"
 
+class Visitor(object):
+
+    def __init__(self, verbose=False):
+        self.verbose = verbose
+
+    def __getattr__(self, name):
+        if not name.startswith('visit_'):
+            raise AttributeError('name must start with visit_ but was {}'
+                                 .format(name))
+
+        def f(element):
+            if self.verbose:
+                msg = 'unimplemented call to {}; ignoring ({})'
+                print(msg.format(name, element))
+            return True
+        return f
+
+    # visitor.visit_PackageStatement(self)
+    # visitor.visit_ImportStatement(self)
+    # visitor.visit_OptionStatement(self)
+    # visitor.visit_FieldDirective(self)
+    # visitor.visit_FieldType(self)
+    # visitor.visit_FieldDefinition(self)
+    # visitor.visit_EnumFieldDefinition(self)
+    # visitor.visit_EnumDefinition(self)
+    # visitor.visit_MessageDefinition(self)
+    # visitor.visit_MessageExtension(self)
+    # visitor.visit_MethodDefinition(self)
+    # visitor.visit_ServiceDefinition(self)
+    # visitor.visit_ExtensionsDirective(self)
+    # visitor.visit_Literal(self)
+    # visitor.visit_Name(self)
+
 # Base node
 class SourceElement(object):
     '''
-    A SourceElement is the base class for all elements that occur in a Java
-    file parsed by plyj.
+    A SourceElement is the base class for all elements that occur in a Protocol Buffers
+    file parsed by plyproto.
     '''
     def __init__(self):
         super(SourceElement, self).__init__()
@@ -31,14 +64,14 @@
     def accept(self, visitor):
         pass
 
-class PackageDeclaration(SourceElement):
+class PackageStatement(SourceElement):
     def __init__(self, name):
-        super(PackageDeclaration, self).__init__()
+        super(PackageStatement, self).__init__()
         self._fields = ['name']
         self.name = name
 
     def accept(self, visitor):
-        visitor.visit_PackageDeclaration(self)
+        visitor.visit_PackageStatement(self)
 
 class ImportStatement(SourceElement):
     def __init__(self, name):
@@ -49,38 +82,38 @@
     def accept(self, visitor):
         visitor.visit_ImportStatement(self)
 
-class OptionDefinition(SourceElement):
+class OptionStatement(SourceElement):
     def __init__(self, name, value):
-        super(OptionDefinition, self).__init__()
+        super(OptionStatement, self).__init__()
         self._fields = ['name', 'value']
         self.name = name
         self.value = value
 
     def accept(self, visitor):
-        visitor.visit_OptionDefinition(self)
+        visitor.visit_OptionStatement(self)
 
-class FieldDirectiveDeclaration(SourceElement):
+class FieldDirective(SourceElement):
     def __init__(self, name, value):
-        super(FieldDirectiveDeclaration, self).__init__()
+        super(FieldDirective, self).__init__()
         self._fields = ['name', 'value']
         self.name = name
         self.value = value
 
     def accept(self, visitor):
-        visitor.visit_FieldDirectiveDeclaration(self)
+        visitor.visit_FieldDirective(self)
 
-class FieldPrimitiveType(SourceElement):
+class FieldType(SourceElement):
     def __init__(self, name):
-        super(FieldPrimitiveType, self).__init__()
+        super(FieldType, self).__init__()
         self._fields = ['name']
         self.name = name
 
     def accept(self, visitor):
-        visitor.visit_FieldPrimitiveType(self)
+        visitor.visit_FieldType(self)
 
-class FieldDeclaration(SourceElement):
+class FieldDefinition(SourceElement):
     def __init__(self, field_modifier, ftype, name, fieldId, fieldDirective):
-        super(FieldDeclaration, self).__init__()
+        super(FieldDefinition, self).__init__()
         self._fields = ['field_modifier', 'ftype', 'name', 'fieldId', 'fieldDirective']
         self.name = name
         self.field_modifier = field_modifier
@@ -89,39 +122,39 @@
         self.fieldDirective = fieldDirective
 
     def accept(self, visitor):
-        visitor.visit_FieldDeclaration(self)
+        visitor.visit_FieldDefinition(self)
 
-class EnumFieldDeclaration(SourceElement):
+class EnumFieldDefinition(SourceElement):
     def __init__(self, name, fieldId):
-        super(EnumFieldDeclaration, self).__init__()
+        super(EnumFieldDefinition, self).__init__()
         self._fields = ['name', 'fieldId']
         self.name = name
         self.fieldId = fieldId
 
     def accept(self, visitor):
-        visitor.visit_EnumFieldDeclaration(self)
+        visitor.visit_EnumFieldDefinition(self)
 
-class EnumDeclaration(SourceElement):
+class EnumDefinition(SourceElement):
     def __init__(self, name, body):
-        super(EnumDeclaration, self).__init__()
+        super(EnumDefinition, self).__init__()
         self._fields = ['name', 'body']
         self.name = name
         self.body = body
 
     def accept(self, visitor):
-        if visitor.visit_EnumDeclaration(self):
+        if visitor.visit_EnumDefinition(self):
             for s in self.body:
                 s.accept(visitor)
 
-class MessageDeclaration(SourceElement):
+class MessageDefinition(SourceElement):
     def __init__(self, name, body):
-        super(MessageDeclaration, self).__init__()
+        super(MessageDefinition, self).__init__()
         self._fields = ['name', 'body']
         self.name = name
         self.body = body
 
     def accept(self, visitor):
-        if visitor.visit_MessageDeclaration(self):
+        if visitor.visit_MessageDefinition(self):
             for s in self.body:
                 s.accept(visitor)
 
@@ -148,15 +181,15 @@
     def accept(self, visitor):
         visitor.visit_MethodDefinition(self)
 
-class ServiceDeclaration(SourceElement):
+class ServiceDefinition(SourceElement):
     def __init__(self, name, body):
-        super(ServiceDeclaration, self).__init__()
+        super(ServiceDefinition, self).__init__()
         self._fields = ['name', 'body']
         self.name = name
         self.body = body
 
     def accept(self, visitor):
-        if visitor.visit_ServiceDeclaration(self):
+        if visitor.visit_ServiceDefinition(self):
             for s in self.body:
                 s.accept(visitor)
 
@@ -200,19 +233,3 @@
         visitor.visit_Name(self)
 
 
-class Visitor(object):
-
-    def __init__(self, verbose=False):
-        self.verbose = verbose
-
-    def __getattr__(self, name):
-        if not name.startswith('visit_'):
-            raise AttributeError('name must start with visit_ but was {}'
-                                 .format(name))
-
-        def f(element):
-            if self.verbose:
-                msg = 'unimplemented call to {}; ignoring ({})'
-                print(msg.format(name, element))
-            return True
-        return f
diff --git a/plyproto/parser.py b/plyproto/parser.py
index 545faee..2c8188a 100755
--- a/plyproto/parser.py
+++ b/plyproto/parser.py
@@ -108,7 +108,7 @@
 
     def p_field_directive(self, p):
         '''field_directive : LBRACK NAME EQ rvalue RBRACK'''
-        p[0] = FieldDirectiveDeclaration(Name(p[2]), p[4])
+        p[0] = FieldDirective(Name(p[2]), p[4])
 
     def p_field_directive_times(self, p):
         '''field_directive_times : field_directive_plus'''
@@ -128,7 +128,7 @@
 
     def p_field_type(self, p):
         '''field_type : primitive_type'''
-        p[0] = FieldPrimitiveType(p[1])
+        p[0] = FieldType(p[1])
 
     def p_field_type2(self, p):
         '''field_type : NAME'''
@@ -137,12 +137,12 @@
     # Root of the field declaration.
     def p_field_definition(self, p):
         '''field_definition : field_modifier field_type NAME EQ field_id field_directive_times SEMI'''
-        p[0] = FieldDeclaration(p[1], p[2], Name(p[3]), p[5], p[6])
+        p[0] = FieldDefinition(p[1], p[2], Name(p[3]), p[5], p[6])
 
     # Root of the enum field declaration.
     def p_enum_field(self, p):
         '''enum_field : NAME EQ NUM SEMI'''
-        p[0] = EnumFieldDeclaration(Name(p[1]), p[3])
+        p[0] = EnumFieldDefinition(Name(p[1]), p[3])
 
     def p_enum_body_part(self, p):
         '''enum_body_part : enum_field
@@ -169,7 +169,7 @@
     # enum_definition ::= 'enum' ident '{' { ident '=' integer ';' }* '}'
     def p_enum_definition(self, p):
         '''enum_definition : ENUM NAME LBRACE enum_body_opt RBRACE'''
-        p[0] = EnumDeclaration(Name(p[2]), p[4])
+        p[0] = EnumDefinition(Name(p[2]), p[4])
 
     def p_extensions_to(self, p):
         '''extensions_to : MAX'''
@@ -215,7 +215,7 @@
     # message_definition = MESSAGE_ - ident("messageId") + LBRACE + message_body("body") + RBRACE
     def p_message_definition(self, p):
         '''message_definition : MESSAGE NAME LBRACE message_body RBRACE'''
-        p[0] = MessageDeclaration(Name(p[2]), p[4])
+        p[0] = MessageDefinition(Name(p[2]), p[4])
 
     # method_definition ::= 'rpc' ident '(' [ ident ] ')' 'returns' '(' [ ident ] ')' ';'
     def p_method_definition(self, p):
@@ -238,12 +238,12 @@
     # service_definition = SERVICE_ - ident("serviceName") + LBRACE + ZeroOrMore(Group(method_definition)) + RBRACE
     def p_service_definition(self, p):
         '''service_definition : SERVICE NAME LBRACE method_definition_opt RBRACE'''
-        p[0] = ServiceDeclaration(Name(p[2]), p[4])
+        p[0] = ServiceDefinition(Name(p[2]), p[4])
 
     # package_directive ::= 'package' ident [ '.' ident]* ';'
     def p_package_directive(self,p):
         '''package_directive : PACKAGE NAME SEMI'''
-        p[0] = PackageDeclaration(Name(p[2]))
+        p[0] = PackageStatement(Name(p[2]))
 
     # import_directive = IMPORT_ - quotedString("importFileSpec") + SEMI
     def p_import_directive(self, p):
@@ -263,7 +263,7 @@
     # option_directive = OPTION_ - ident("optionName") + EQ + quotedString("optionValue") + SEMI
     def p_option_directive(self, p):
         '''option_directive : OPTION NAME EQ option_rvalue SEMI'''
-        p[0] = OptionDefinition(Name(p[2]), p[4])
+        p[0] = OptionStatement(Name(p[2]), p[4])
 
     # topLevelStatement = Group(message_definition | message_extension | enum_definition | service_definition | import_directive | option_directive)
     def p_topLevel(self,p):
