Renamed Property to MessageField.
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_lastFieldSourceFrom_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_lastFieldSourceFrom_Test.java
index a106684..7f21876 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_lastFieldSourceFrom_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_lastFieldSourceFrom_Test.java
@@ -48,9 +48,9 @@
   // message Person {
   //   optional boolean active = 1 [(custom).count = 6];
   // }
-  @Test public void should_return_property_field() {
+  @Test public void should_return_option_field() {
     CustomFieldOption option = xtext.find("custom", ").", CustomFieldOption.class);
-    Property p = (Property) fieldOptions.lastFieldSourceFrom(option);
-    assertThat(p.getName(), equalTo("count"));
+    MessageField field = (MessageField) fieldOptions.lastFieldSourceFrom(option);
+    assertThat(field.getName(), equalTo("count"));
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_rootSourceOf_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_rootSourceOf_Test.java
index 5a2a8a7..b6ec71f 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_rootSourceOf_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_rootSourceOf_Test.java
@@ -38,10 +38,10 @@
   // message Person {
   //   optional boolean active = 1 [deprecated = false];
   // }
-  @Test public void should_return_property_of_native_field_option() {
+  @Test public void should_return_field_of_native_field_option() {
     FieldOption option = xtext.find("deprecated", FieldOption.class);
-    Property p = (Property) fieldOptions.rootSourceOf(option);
-    assertThat(p.getName(), equalTo("deprecated"));
+    MessageField field = (MessageField) fieldOptions.rootSourceOf(option);
+    assertThat(field.getName(), equalTo("deprecated"));
   }
 
   // syntax = "proto2";
@@ -55,9 +55,9 @@
   // message Person {
   //   optional boolean active = 1 [(encoding) = 'UTF-8'];
   // }
-  @Test public void should_return_property_of_custom_field_option() {
+  @Test public void should_return_field_of_custom_field_option() {
     FieldOption option = xtext.find("encoding", ")", FieldOption.class);
-    Property p = (Property) fieldOptions.rootSourceOf(option);
-    assertThat(p.getName(), equalTo("encoding"));
+    MessageField field = (MessageField) fieldOptions.rootSourceOf(option);
+    assertThat(field.getName(), equalTo("encoding"));
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_sourceOf_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_sourceOf_Test.java
index 247f7cb..d97ea3a 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_sourceOf_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_sourceOf_Test.java
@@ -44,10 +44,10 @@
   // message Person {
   //   optional boolean active = 1 [(encoding) = 'UTF-8'];
   // }
-  @Test public void should_return_property_of_custom_field_option() {
+  @Test public void should_return_source_of_field_option() {
     CustomFieldOption option = xtext.find("encoding", ")", CustomFieldOption.class);
-    Property p = (Property) fieldOptions.sourceOf(option);
-    assertThat(p.getName(), equalTo("encoding"));
+    MessageField field = (MessageField) fieldOptions.sourceOf(option);
+    assertThat(field.getName(), equalTo("encoding"));
   }
 
   // syntax = "proto2";
@@ -65,9 +65,9 @@
   // message Person {
   //   optional boolean active = 1 [(custom).count = 6];
   // }
-  @Test public void should_return_property_field() {
+  @Test public void should_return_source_of_field_in_field_option() {
     CustomFieldOption option = xtext.find("custom", ").", CustomFieldOption.class);
-    Property p = (Property) fieldOptions.sourceOf(option);
-    assertThat(p.getName(), equalTo("count"));
+    MessageField field = (MessageField) fieldOptions.sourceOf(option);
+    assertThat(field.getName(), equalTo("count"));
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_lastFieldSourceFrom_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_lastFieldSourceFrom_Test.java
index 4ffe347..f035ebb 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_lastFieldSourceFrom_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_lastFieldSourceFrom_Test.java
@@ -46,9 +46,9 @@
   // }
   //
   // option (custom).count = 6;
-  @Test public void should_return_property_field() {
+  @Test public void should_return_option_field() {
     CustomOption option = xtext.find("custom", ")", CustomOption.class);
-    Property p = (Property) options.lastFieldSourceFrom(option);
-    assertThat(p.getName(), equalTo("count"));
+    MessageField field = (MessageField) options.lastFieldSourceFrom(option);
+    assertThat(field.getName(), equalTo("count"));
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_rootSourceOf_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_rootSourceOf_Test.java
index 007459a..f582b9b 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_rootSourceOf_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_rootSourceOf_Test.java
@@ -36,10 +36,10 @@
   // syntax = "proto2";
   //
   // option java_package = 'com.google.eclipse.protobuf.tests';
-  @Test public void should_return_property_of_native_option() {
+  @Test public void should_return_source_of_native_option() {
     Option option = xtext.find("java_package", Option.class);
-    Property p = (Property) options.rootSourceOf(option);
-    assertThat(p.getName(), equalTo("java_package"));
+    MessageField field = (MessageField) options.rootSourceOf(option);
+    assertThat(field.getName(), equalTo("java_package"));
   }
 
   // syntax = "proto2";
@@ -51,9 +51,9 @@
   // }
   //
   // option (encoding) = 'UTF-8';
-  @Test public void should_return_property_of_custom_option() {
+  @Test public void should_return_source_of_custom_option() {
     Option option = xtext.find("encoding", ")", Option.class);
-    Property p = (Property) options.rootSourceOf(option);
-    assertThat(p.getName(), equalTo("encoding"));
+    MessageField field = (MessageField) options.rootSourceOf(option);
+    assertThat(field.getName(), equalTo("encoding"));
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_sourceOf_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_sourceOf_Test.java
index 5734e54..bb6e9c0 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_sourceOf_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_sourceOf_Test.java
@@ -42,9 +42,9 @@
   // }
   //
   // option (encoding) = 'UTF-8';
-  @Test public void should_return_property_of_custom_option() {
+  @Test public void should_return_source_of_custom_option() {
     CustomOption option = xtext.find("encoding", ")", CustomOption.class);
-    Property p = (Property) options.sourceOf(option);
+    MessageField p = (MessageField) options.sourceOf(option);
     assertThat(p.getName(), equalTo("encoding"));
   }
 
@@ -61,9 +61,9 @@
   // }
   //
   // option (custom).count = 6;
-  @Test public void should_return_property_field() {
+  @Test public void should_return_source_of_field_in_option() {
     CustomOption option = xtext.find("custom", ")", CustomOption.class);
-    Property p = (Property) options.sourceOf(option);
+    MessageField p = (MessageField) options.sourceOf(option);
     assertThat(p.getName(), equalTo("count"));
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllFields.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllFields.java
new file mode 100644
index 0000000..fdef015
--- /dev/null
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllFields.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.scoping;
+
+import java.util.*;
+
+import org.eclipse.emf.ecore.EObject;
+import org.hamcrest.*;
+
+import com.google.eclipse.protobuf.protobuf.MessageField;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+class ContainAllFields extends BaseMatcher<IEObjectDescriptions> {
+
+  private final Collection<MessageField> fields = new ArrayList<MessageField>();
+
+  static ContainAllFields containAll(Collection<MessageField> fields) {
+    return new ContainAllFields(fields);
+  }
+  
+  private ContainAllFields(Collection<MessageField> fields) {
+    this.fields.addAll(fields);
+  }
+
+  @Override public boolean matches(Object arg) {
+    if (!(arg instanceof IEObjectDescriptions)) return false;
+    IEObjectDescriptions descriptions = (IEObjectDescriptions) arg;
+    if (descriptions.size() != fields.size()) return false;
+    for (MessageField field : fields) {
+      String name = field.getName();
+      EObject described = descriptions.objectDescribedAs(name);
+      if (described != field) return false;
+    }
+    return true;
+  }
+
+  @Override public void describeTo(Description description) {
+    List<String> names = new ArrayList<String>();
+    for (MessageField field : fields) {
+      names.add(field.getName());
+    }
+    description.appendValue(names);
+  }
+}
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllFieldsInMessage.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllFieldsInMessage.java
index b144280..1612b99 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllFieldsInMessage.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllFieldsInMessage.java
@@ -24,12 +24,12 @@
 
   private final EObject container;
 
-  static ContainAllFieldsInMessage containAllFieldsIn(Group g) {
-    return new ContainAllFieldsInMessage(g);
+  static ContainAllFieldsInMessage containAllFieldsIn(Group group) {
+    return new ContainAllFieldsInMessage(group);
   }
 
-  static ContainAllFieldsInMessage containAllFieldsIn(Message m) {
-    return new ContainAllFieldsInMessage(m);
+  static ContainAllFieldsInMessage containAllFieldsIn(Message message) {
+    return new ContainAllFieldsInMessage(message);
   }
 
   private ContainAllFieldsInMessage(EObject container) {
@@ -63,6 +63,6 @@
 
   private String nameOf(IndexedElement e) {
     if (e == null) return null;
-    return (e instanceof Group) ? ((Group) e).getName() : ((Property) e).getName(); 
+    return (e instanceof Group) ? ((Group) e).getName() : ((MessageField) e).getName(); 
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllProperties.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllProperties.java
deleted file mode 100644
index 8466996..0000000
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllProperties.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import java.util.*;
-
-import org.eclipse.emf.ecore.EObject;
-import org.hamcrest.*;
-
-import com.google.eclipse.protobuf.protobuf.Property;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class ContainAllProperties extends BaseMatcher<IEObjectDescriptions> {
-
-  private final Collection<Property> properties = new ArrayList<Property>();
-
-  static ContainAllProperties containAll(Collection<Property> properties) {
-    return new ContainAllProperties(properties);
-  }
-  
-  private ContainAllProperties(Collection<Property> properties) {
-    this.properties.addAll(properties);
-  }
-
-  @Override public boolean matches(Object arg) {
-    if (!(arg instanceof IEObjectDescriptions)) return false;
-    IEObjectDescriptions descriptions = (IEObjectDescriptions) arg;
-    if (descriptions.size() != properties.size()) return false;
-    for (Property property : properties) {
-      String name = property.getName();
-      EObject described = descriptions.objectDescribedAs(name);
-      if (described != property) return false;
-    }
-    return true;
-  }
-
-  @Override public void describeTo(Description description) {
-    List<String> names = new ArrayList<String>();
-    for (Property property : properties) {
-      names.add(property.getName());
-    }
-    description.appendValue(names);
-  }
-}
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/Issue147_AddSupportForGroupOptions_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/Issue147_AddSupportForGroupOptions_Test.java
index 7cbc2c8..7036bad 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/Issue147_AddSupportForGroupOptions_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/Issue147_AddSupportForGroupOptions_Test.java
@@ -11,7 +11,7 @@
 import static com.google.eclipse.protobuf.junit.core.Setups.integrationTestSetup;
 import static com.google.eclipse.protobuf.junit.core.XtextRule.createWith;
 import static com.google.eclipse.protobuf.scoping.ContainAllNames.containAll;
-import static com.google.eclipse.protobuf.scoping.ContainAllProperties.containAll;
+import static com.google.eclipse.protobuf.scoping.ContainAllFields.containAll;
 import static com.google.eclipse.protobuf.scoping.IEObjectDescriptions.descriptionsIn;
 import static com.google.eclipse.protobuf.scoping.OptionType.FIELD;
 import static org.junit.Assert.assertThat;
@@ -57,8 +57,8 @@
   @Test public void should_provide_fields_for_native_option() {
     NativeFieldOption option = xtext.find("deprecated", NativeFieldOption.class);
     IScope scope = provider.scope_OptionSource_optionField(option.getSource(), reference);
-    Collection<Property> fieldOptions = descriptor().optionsOfType(FIELD);
-    assertThat(descriptionsIn(scope), containAll(fieldOptions));
+    Collection<MessageField> optionSources = descriptor().optionsOfType(FIELD);
+    assertThat(descriptionsIn(scope), containAll(optionSources));
   }
 
   private ProtoDescriptor descriptor() {
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/Issue157_GroupsShouldBeTypes_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/Issue157_GroupsShouldBeTypes_Test.java
index d930c88..d8e1452 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/Issue157_GroupsShouldBeTypes_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/Issue157_GroupsShouldBeTypes_Test.java
@@ -53,8 +53,8 @@
   //   }
   // }
   @Test public void should_treat_groups_as_types() {
-    Property p = xtext.find("mygroup", Property.class);
-    IScope scope = provider.scope_ComplexTypeLink_target((ComplexTypeLink) p.getType(), reference);
+    MessageField field = xtext.find("mygroup", MessageField.class);
+    IScope scope = provider.scope_ComplexTypeLink_target((ComplexTypeLink) field.getType(), reference);
     assertThat(descriptionsIn(scope), contain("Root.MyGroup", "MyGroup"));
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_availableOptionsFor_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_availableOptionsFor_Test.java
index 1812287..a84f419 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_availableOptionsFor_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_availableOptionsFor_Test.java
@@ -10,7 +10,7 @@
 
 import static com.google.eclipse.protobuf.junit.core.Setups.integrationTestSetup;
 import static com.google.eclipse.protobuf.junit.core.XtextRule.createWith;
-import static com.google.eclipse.protobuf.junit.matchers.PropertyHasType.*;
+import static com.google.eclipse.protobuf.junit.matchers.FieldHasType.*;
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.*;
 import static org.mockito.Mockito.mock;
@@ -62,7 +62,7 @@
   }
 
   @Test public void should_return_all_field_options() {
-    Property optionContainer = mock(Property.class);
+    MessageField optionContainer = mock(MessageField.class);
     options.mapByName(descriptor.availableOptionsFor(optionContainer));
     assertNotNull(options.option("ctype"));
     assertThat(options.option("packed"), isBool());
@@ -72,21 +72,21 @@
 
   @Test public void should_return_empty_List_if_given_model_does_not_have_options() {
     Import optionContainer = mock(Import.class);
-    Collection<Property> foundOptions = descriptor.availableOptionsFor(optionContainer);
+    Collection<MessageField> foundOptions = descriptor.availableOptionsFor(optionContainer);
     assertThat(foundOptions.size(), equalTo(0));
   }
 
   private static class Options {
-    private final Map<String, Property> optionsByName = new HashMap<String, Property>();
+    private final Map<String, MessageField> optionsByName = new HashMap<String, MessageField>();
 
-    void mapByName(Collection<Property> options) {
+    void mapByName(Collection<MessageField> options) {
       optionsByName.clear();
-      for (Property option : options) {
+      for (MessageField option : options) {
         optionsByName.put(option.getName(), option);
       }
     }
 
-    Property option(String name) {
+    MessageField option(String name) {
       return optionsByName.get(name);
     }
   }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_enumTypeOf_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_enumTypeOf_Test.java
index 68c1e30..e59b78a 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_enumTypeOf_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_enumTypeOf_Test.java
@@ -21,7 +21,7 @@
 import com.google.eclipse.protobuf.protobuf.Enum;
 
 /**
- * Tests for <code>{@link ProtoDescriptor#enumTypeOf(Property)}</code>.
+ * Tests for <code>{@link ProtoDescriptor#enumTypeOf(MessageField)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -36,13 +36,13 @@
     descriptor = descriptorProvider.primaryDescriptor();
   }
 
-  @Test public void should_return_Enum_if_property_type_is_enum() {
-    Property option = descriptor.option("optimize_for", FILE);
+  @Test public void should_return_Enum_if_field_type_is_enum() {
+    MessageField option = descriptor.option("optimize_for", FILE);
     Enum anEnum = descriptor.enumTypeOf(option);
     assertThat(anEnum.getName(), equalTo("OptimizeMode"));
   }
 
-  @Test public void should_return_null_if_property_is_null() {
+  @Test public void should_return_null_if_field_is_null() {
     assertNull(descriptor.enumTypeOf(null));
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_ComplexTypeLink_target_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_ComplexTypeLink_target_Test.java
index c9e390e..21e7a4d 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_ComplexTypeLink_target_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_ComplexTypeLink_target_Test.java
@@ -62,8 +62,8 @@
   //   optional Type type = 1;
   // }
   @Test public void should_provide_Types() {
-    Property p = xtext.find("type", Property.class);
-    IScope scope = provider.scope_ComplexTypeLink_target(typeOf(p), reference);
+    MessageField field = xtext.find("type", MessageField.class);
+    IScope scope = provider.scope_ComplexTypeLink_target(typeOf(field), reference);
     assertThat(descriptionsIn(scope), containAll("Type", "proto.Type", "google.proto.Type", "com.google.proto.Type",
                                                  ".com.google.proto.Type",
                                                  "Address", "proto.Address", "google.proto.Address",
@@ -98,8 +98,8 @@
   //   optional com.google.test.Type type = 1;
   // }
   @Test public void should_provide_imported_Types() {
-    Property p = xtext.find("type", " =", Property.class);
-    IScope scope = provider.scope_ComplexTypeLink_target(typeOf(p), reference);
+    MessageField field = xtext.find("type", " =", MessageField.class);
+    IScope scope = provider.scope_ComplexTypeLink_target(typeOf(field), reference);
     assertThat(descriptionsIn(scope), containAll("test.proto.Type", ".test.proto.Type",
                                                  "test.proto.Address", ".test.proto.Address",
                                                  "Contact", "proto.Contact", "google.proto.Contact",
@@ -132,8 +132,8 @@
   //   optional com.google.test.Type type = 1;
   // }
   @Test public void should_provide_imported_Types_with_equal_package() {
-    Property p = xtext.find("type", " =", Property.class);
-    IScope scope = provider.scope_ComplexTypeLink_target(typeOf(p), reference);
+    MessageField field = xtext.find("type", " =", MessageField.class);
+    IScope scope = provider.scope_ComplexTypeLink_target(typeOf(field), reference);
     assertThat(descriptionsIn(scope), containAll("Type", "proto.Type", "google.proto.Type", "com.google.proto.Type",
                                                  ".com.google.proto.Type",
                                                  "Address", "proto.Address", "google.proto.Address",
@@ -168,8 +168,8 @@
   //   optional test.proto.Type type = 1;
   // }
   @Test public void should_provide_public_imported_Types() {
-    Property p = xtext.find("type", " =", Property.class);
-    IScope scope = provider.scope_ComplexTypeLink_target(typeOf(p), reference);
+    MessageField field = xtext.find("type", " =", MessageField.class);
+    IScope scope = provider.scope_ComplexTypeLink_target(typeOf(field), reference);
     assertThat(descriptionsIn(scope), containAll("test.proto.Type", ".test.proto.Type",
                                                  "test.proto.Address", ".test.proto.Address",
                                                  "Contact", "proto.Contact", "google.proto.Contact",
@@ -209,15 +209,15 @@
   //   optional test.proto.Type type = 1;
   // }
   @Test public void should_provide_public_imported_Types_with_more_than_one_level() {
-    Property p = xtext.find("type", " =", Property.class);
-    IScope scope = provider.scope_ComplexTypeLink_target(typeOf(p), reference);
+    MessageField field = xtext.find("type", " =", MessageField.class);
+    IScope scope = provider.scope_ComplexTypeLink_target(typeOf(field), reference);
     assertThat(descriptionsIn(scope), containAll("test.proto.Type", ".test.proto.Type",
                                                  "test.proto.Address", ".test.proto.Address",
                                                  "Contact", "proto.Contact", "google.proto.Contact",
                                                  "com.google.proto.Contact", ".com.google.proto.Contact"));
   }
 
-  private static ComplexTypeLink typeOf(Property p) {
-    return (ComplexTypeLink) p.getType();
+  private static ComplexTypeLink typeOf(MessageField field) {
+    return (ComplexTypeLink) field.getType();
   }
 }
\ No newline at end of file
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralRef_literal_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralRef_literal_Test.java
index d541111..42ac84e 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralRef_literal_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralRef_literal_Test.java
@@ -85,7 +85,7 @@
   // }
   //
   // option (type) = ONE;
-  @Test public void should_provide_Literals_for_custom_option() {
+  @Test public void should_provide_Literals_for_source_of_custom_option() {
     Option option = xtext.find("type", ")", Option.class);
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum typeEnum = xtext.find("Type", " {", Enum.class);
@@ -110,7 +110,7 @@
   // }
   //
   // option (info).type = ONE;
-  @Test public void should_provide_Literals_for_property_of_custom_option() {
+  @Test public void should_provide_Literals_for_source_of_field_of_custom_option() {
     Option option = xtext.find("info", ")", Option.class);
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum typeEnum = xtext.find("Type", " {", Enum.class);
@@ -126,7 +126,7 @@
   //  message Person {
   //    optional Type type = 1 [ctype = STRING];
   //  }
-  @Test public void should_provide_Literals_for_native_field_option() {
+  @Test public void should_provide_Literals_for_source_of_native_field_option() {
     FieldOption option = xtext.find("ctype", FieldOption.class);
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum cTypeEnum = descriptor().enumByName("CType");
@@ -154,7 +154,7 @@
   // message Person {
   //   optional boolean active = 1 [(type) = ONE];
   // }
-  @Test public void should_provide_Literals_for_custom_field_option() {
+  @Test public void should_provide_Literals_for_source_of_custom_field_option() {
     FieldOption option = xtext.find("type", ")", FieldOption.class);
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum typeEnum = xtext.find("Type", " {", Enum.class);
@@ -181,7 +181,7 @@
   // message Person {
   //   optional boolean active = 1 [(info).type = ONE];
   // }
-  @Test public void should_provide_Literals_for_property_of_custom_field_option() {
+  @Test public void should_provide_Literals_for_source_of_field_in_custom_field_option() {
     FieldOption option = xtext.find("info", ")", FieldOption.class);
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum typeEnum = xtext.find("Type", " {", Enum.class);
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_OptionSource_optionField_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_OptionSource_optionField_Test.java
index d8fdb65..0abef3a 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_OptionSource_optionField_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_OptionSource_optionField_Test.java
@@ -11,7 +11,7 @@
 import static com.google.eclipse.protobuf.junit.core.Setups.integrationTestSetup;
 import static com.google.eclipse.protobuf.junit.core.XtextRule.createWith;
 import static com.google.eclipse.protobuf.scoping.ContainAllNames.containAll;
-import static com.google.eclipse.protobuf.scoping.ContainAllProperties.containAll;
+import static com.google.eclipse.protobuf.scoping.ContainAllFields.containAll;
 import static com.google.eclipse.protobuf.scoping.IEObjectDescriptions.descriptionsIn;
 import static com.google.eclipse.protobuf.scoping.OptionType.*;
 import static org.junit.Assert.assertThat;
@@ -53,8 +53,8 @@
   @Test public void should_provide_Property_fields_for_native_option() {
     Option option = xtext.find("optimize_for", Option.class);
     IScope scope = provider.scope_OptionSource_optionField(option.getSource(), reference);
-    Collection<Property> fileOptions = descriptor().optionsOfType(FILE);
-    assertThat(descriptionsIn(scope), containAll(fileOptions));
+    Collection<MessageField> optionSources = descriptor().optionsOfType(FILE);
+    assertThat(descriptionsIn(scope), containAll(optionSources));
   }
 
   // syntax = "proto2";
@@ -65,8 +65,8 @@
   @Test public void should_provide_Property_fields_for_native_field_option() {
     NativeFieldOption option = xtext.find("ctype", NativeFieldOption.class);
     IScope scope = provider.scope_OptionSource_optionField(option.getSource(), reference);
-    Collection<Property> fieldOptions = descriptor().optionsOfType(FIELD);
-    assertThat(descriptionsIn(scope), containAll(fieldOptions));
+    Collection<MessageField> optionSources = descriptor().optionsOfType(FIELD);
+    assertThat(descriptionsIn(scope), containAll(optionSources));
   }
 
   private ProtoDescriptor descriptor() {
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/Issue154_AllowMultipleSemicolons_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/Issue154_AllowMultipleSemicolons_Test.java
index 26f74f5..ca6de14 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/Issue154_AllowMultipleSemicolons_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/Issue154_AllowMultipleSemicolons_Test.java
@@ -30,7 +30,7 @@
   // message Foo {
   //   optional double bar = 1 [deprecated = true];;
   // }
-  @Test public void should_allow_multiple_semicolons_at_the_end_of_property() {
+  @Test public void should_allow_multiple_semicolons_at_the_end_of_field() {
     assertNotNull(xtext.root());
   }   
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/PropertyHasType.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/FieldHasType.java
similarity index 67%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/PropertyHasType.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/FieldHasType.java
index cdb38c1..3b31b28 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/PropertyHasType.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/FieldHasType.java
@@ -15,34 +15,34 @@
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class PropertyHasType extends BaseMatcher<Property> {
+public class FieldHasType extends BaseMatcher<MessageField> {
 
   private final String typeName;
 
-  public static PropertyHasType isBool() {
+  public static FieldHasType isBool() {
     return hasType("bool");
   }
 
-  public static PropertyHasType isString() {
+  public static FieldHasType isString() {
     return hasType("string");
   }
 
-  public static PropertyHasType hasType(String typeName) {
-    return new PropertyHasType(typeName);
+  public static FieldHasType hasType(String typeName) {
+    return new FieldHasType(typeName);
   }
 
-  private PropertyHasType(String typeName) {
+  private FieldHasType(String typeName) {
     this.typeName = typeName;
   }
 
   @Override public boolean matches(Object arg) {
-    if (!(arg instanceof Property)) return false;
-    Property property = (Property) arg;
-    return typeName.equals(typeNameOf(property));
+    if (!(arg instanceof MessageField)) return false;
+    MessageField field = (MessageField) arg;
+    return typeName.equals(typeNameOf(field));
   }
 
-  private String typeNameOf(Property property) {
-    TypeLink link = property.getType();
+  private String typeNameOf(MessageField field) {
+    TypeLink link = field.getType();
     if (link instanceof ScalarTypeLink) return ((ScalarTypeLink) link).getTarget().getName();
     if (link instanceof ComplexTypeLink) {
       ComplexType type = ((ComplexTypeLink) link).getTarget();
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_firstNodeForFeature_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_firstNodeForFeature_Test.java
index 3e9567b..a39b03b 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_firstNodeForFeature_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_firstNodeForFeature_Test.java
@@ -10,12 +10,12 @@
 
 import static com.google.eclipse.protobuf.junit.core.Setups.unitTestSetup;
 import static com.google.eclipse.protobuf.junit.core.XtextRule.createWith;
-import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.PROPERTY__NAME;
+import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.MESSAGE_FIELD__NAME;
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.assertThat;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.protobuf.Property;
+import com.google.eclipse.protobuf.protobuf.MessageField;
 
 import org.eclipse.emf.ecore.*;
 import org.eclipse.xtext.nodemodel.INode;
@@ -42,8 +42,8 @@
   //   optional bool active = 1;
   // }
   @Test public void should_return_first_node_for_feature() {
-    Property active = xtext.find("active", Property.class);
-    INode node = nodes.firstNodeForFeature(active, PROPERTY__NAME);
+    MessageField field = xtext.find("active", MessageField.class);
+    INode node = nodes.firstNodeForFeature(field, MESSAGE_FIELD__NAME);
     assertThat(node.getText().trim(), equalTo("active"));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_calculateTagNumberOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_calculateTagNumberOf_Test.java
index f8ec02a..a15a702 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_calculateTagNumberOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_calculateTagNumberOf_Test.java
@@ -38,9 +38,9 @@
   // message Person {
   //   required string name = 2;
   // }
-  @Test public void should_return_one_for_first_and_only_property() {
-    Property name = xtext.find("name", Property.class);
-    long index = indexedElements.calculateTagNumberOf(name);
+  @Test public void should_return_one_for_first_and_only_field() {
+    MessageField field = xtext.find("name", MessageField.class);
+    long index = indexedElements.calculateTagNumberOf(field);
     assertThat(index, equalTo(1L));
   }
 
@@ -50,9 +50,9 @@
   //   required string name = 6;
   //   required int32 id = 8;
   // }
-  @Test public void should_return_max_tag_number_value_plus_one_for_new_property() {
-    Property id = xtext.find("id", Property.class);
-    long index = indexedElements.calculateTagNumberOf(id);
+  @Test public void should_return_max_tag_number_value_plus_one_for_new_field() {
+    MessageField field = xtext.find("id", MessageField.class);
+    long index = indexedElements.calculateTagNumberOf(field);
     assertThat(index, equalTo(7L));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_indexFeatureOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_indexFeatureOf_Test.java
index cf39f97..a21fba2 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_indexFeatureOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_indexFeatureOf_Test.java
@@ -32,15 +32,15 @@
   }
   
   @Test public void should_return_name_of_Property() {
-    Property p = mock(Property.class);
-    EStructuralFeature expected = PROPERTY__INDEX;
-    assertThat(indexedElements.indexFeatureOf(p), equalTo(expected));
+    MessageField field = mock(MessageField.class);
+    EStructuralFeature expected = MESSAGE_FIELD__INDEX;
+    assertThat(indexedElements.indexFeatureOf(field), equalTo(expected));
   }
 
   @Test public void should_return_name_of_Group() {
-    Group g = mock(Group.class);
+    Group group = mock(Group.class);
     EStructuralFeature expected = GROUP__INDEX;
-    assertThat(indexedElements.indexFeatureOf(g), equalTo(expected));
+    assertThat(indexedElements.indexFeatureOf(group), equalTo(expected));
   }
   
   @Test public void should_return_null_if_IndexedElement_is_null() {
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_indexOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_indexOf_Test.java
index 98c76ee..be51897 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_indexOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_indexOf_Test.java
@@ -30,17 +30,17 @@
   }
   
   @Test public void should_return_name_of_Property() {
-    Property p = mock(Property.class);
-    when(p.getIndex()).thenReturn(6L);
-    assertThat(indexedElements.indexOf(p), equalTo(6L));
-    verify(p).getIndex();
+    MessageField field = mock(MessageField.class);
+    when(field.getIndex()).thenReturn(6L);
+    assertThat(indexedElements.indexOf(field), equalTo(6L));
+    verify(field).getIndex();
   }
 
   @Test public void should_return_name_of_Group() {
-    Group g = mock(Group.class);
-    when(g.getIndex()).thenReturn(8L);
-    assertThat(indexedElements.indexOf(g), equalTo(8L));
-    verify(g).getIndex();
+    Group group = mock(Group.class);
+    when(group.getIndex()).thenReturn(8L);
+    assertThat(indexedElements.indexOf(group), equalTo(8L));
+    verify(group).getIndex();
   }
   
   @Test public void should_return_MIN_VALUE_if_IndexedElement_is_null() {
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_nameOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_nameOf_Test.java
index ed939bf..a214940 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_nameOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_nameOf_Test.java
@@ -30,17 +30,17 @@
   }
   
   @Test public void should_return_name_of_Property() {
-    Property p = mock(Property.class);
-    when(p.getName()).thenReturn("foo");
-    assertThat(indexedElements.nameOf(p), equalTo("foo"));
-    verify(p).getName();
+    MessageField field = mock(MessageField.class);
+    when(field.getName()).thenReturn("foo");
+    assertThat(indexedElements.nameOf(field), equalTo("foo"));
+    verify(field).getName();
   }
 
   @Test public void should_return_name_of_Group() {
-    Group g = mock(Group.class);
-    when(g.getName()).thenReturn("foo");
-    assertThat(indexedElements.nameOf(g), equalTo("foo"));
-    verify(g).getName();
+    Group group = mock(Group.class);
+    when(group.getName()).thenReturn("foo");
+    assertThat(indexedElements.nameOf(group), equalTo("foo"));
+    verify(group).getName();
   }
   
   @Test public void should_return_null_if_IndexedElement_is_null() {
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_setIndexOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_setIndexOf_Test.java
index 3b72ac9..12d8f55 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_setIndexOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_setIndexOf_Test.java
@@ -28,14 +28,14 @@
   }
   
   @Test public void should_return_name_of_Property() {
-    Property p = mock(Property.class);
-    indexedElements.setIndexTo(p, 6L);
-    verify(p).setIndex(6L);
+    MessageField field = mock(MessageField.class);
+    indexedElements.setIndexTo(field, 6L);
+    verify(field).setIndex(6L);
   }
 
   @Test public void should_return_name_of_Group() {
-    Group g = mock(Group.class);
-    indexedElements.setIndexTo(g, 8L);
-    verify(g).setIndex(8L);
+    Group group = mock(Group.class);
+    indexedElements.setIndexTo(group, 8L);
+    verify(group).setIndex(8L);
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_enumTypeOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_enumTypeOf_Test.java
index fa92638..132cdc0 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_enumTypeOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_enumTypeOf_Test.java
@@ -20,7 +20,7 @@
 import com.google.eclipse.protobuf.protobuf.Enum;
 
 /**
- * Tests for <code>{@link ModelFinder#enumTypeOf(Property)}</code>.
+ * Tests for <code>{@link ModelFinder#enumTypeOf(MessageField)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -45,10 +45,10 @@
   // message PhoneNumber {
   //   optional PhoneType type = 1;
   // }
-  @Test public void should_return_enum_if_property_type_is_enum() {
-    Property type = xtext.find("type", Property.class);
-    Enum phoneType = finder.enumTypeOf(type);
-    assertThat(phoneType.getName(), equalTo("PhoneType"));
+  @Test public void should_return_enum_if_field_type_is_enum() {
+    MessageField field = xtext.find("type", MessageField.class);
+    Enum anEnum = finder.enumTypeOf(field);
+    assertThat(anEnum.getName(), equalTo("PhoneType"));
   }
 
   // syntax = "proto2";
@@ -56,8 +56,8 @@
   // message Person {
   //   optional string name = 1;
   // }
-  @Test public void should_return_null_if_property_type_is_not_enum() {
-    Property name = xtext.find("name", Property.class);
-    assertNull(finder.enumTypeOf(name));
+  @Test public void should_return_null_if_field_type_is_not_enum() {
+    MessageField field = xtext.find("name", MessageField.class);
+    assertNull(finder.enumTypeOf(field));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_packageOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_packageOf_Test.java
index 0bb1bea..c4bf6b0 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_packageOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_packageOf_Test.java
@@ -43,8 +43,8 @@
   //   optional int32 id = 1;
   // }
   @Test public void should_return_package_if_proto_has_one() {
-    Property id = xtext.find("id", Property.class);
-    Package aPackage = finder.packageOf(id);
+    MessageField field = xtext.find("id", MessageField.class);
+    Package aPackage = finder.packageOf(field);
     assertThat(aPackage.getName(), equalTo("person.test"));
   }
 
@@ -54,7 +54,7 @@
   //   optional int32 id = 1;
   // }
   @Test public void should_return_null_if_proto_does_not_have_package() {
-    Property id = xtext.find("id", Property.class);
-    assertNull(finder.packageOf(id));
+    MessageField field = xtext.find("id", MessageField.class);
+    assertNull(finder.packageOf(field));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_rootOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_rootOf_Test.java
index cec6fe4..615969a 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_rootOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_rootOf_Test.java
@@ -17,7 +17,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.protobuf.Property;
+import com.google.eclipse.protobuf.protobuf.MessageField;
 
 /**
  * Tests for <code>{@link ModelFinder#rootOf(EObject)}</code>.
@@ -40,7 +40,7 @@
   //   optional string name = 1;
   // }
   @Test public void should_return_root_of_proto() {
-    Property name = xtext.find("name", Property.class);
-    assertThat(finder.rootOf(name), sameInstance(xtext.root()));
+    MessageField field = xtext.find("name", MessageField.class);
+    assertThat(finder.rootOf(field), sameInstance(xtext.root()));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_scalarTypeOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_scalarTypeOf_Test.java
index 766d69a..08375f3 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_scalarTypeOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_scalarTypeOf_Test.java
@@ -19,7 +19,7 @@
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Tests for <code>{@link ModelFinder#scalarTypeOf(Property)}</code>.
+ * Tests for <code>{@link ModelFinder#scalarTypeOf(MessageField)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -38,10 +38,10 @@
   // message Person {
   //   optional int32 id = 1;
   // }
-  @Test public void should_return_scalar_if_property_type_is_scalar() {
-    Property id = xtext.find("id", Property.class);
-    ScalarType int32 = finder.scalarTypeOf(id);
-    assertThat(int32.getName(), equalTo("int32"));
+  @Test public void should_return_scalar_if_field_type_is_scalar() {
+    MessageField field = xtext.find("id", MessageField.class);
+    ScalarType type = finder.scalarTypeOf(field);
+    assertThat(type.getName(), equalTo("int32"));
   }
 
   // syntax = "proto2";
@@ -55,8 +55,8 @@
   // message PhoneNumber {
   //   optional PhoneType type = 1;
   // }
-  @Test public void should_return_null_if_property_type_is_not_scalar() {
-    Property type = xtext.find("type", Property.class);
-    assertNull(finder.scalarTypeOf(type));
+  @Test public void should_return_null_if_field_type_is_not_scalar() {
+    MessageField field = xtext.find("type", MessageField.class);
+    assertNull(finder.scalarTypeOf(field));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Options_nameForOption_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Options_nameForOption_Test.java
index 700f94f..02e28c4 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Options_nameForOption_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Options_nameForOption_Test.java
@@ -28,18 +28,18 @@
     options = new Options();
   }
   
-  @Test public void should_return_unchanged_name_if_element_is_Property() {
-    Property p = mock(Property.class);
-    when(p.getName()).thenReturn("active");
-    assertThat(options.nameForOption(p), equalTo("active"));
-    verify(p).getName();
+  @Test public void should_return_unchanged_name_if_element_is_Field() {
+    MessageField field = mock(MessageField.class);
+    when(field.getName()).thenReturn("active");
+    assertThat(options.nameForOption(field), equalTo("active"));
+    verify(field).getName();
   }
   
   @Test public void should_return_name_in_lower_case_if_element_is_Group() {
-    Group g = mock(Group.class);
-    when(g.getName()).thenReturn("Person");
-    assertThat(options.nameForOption(g), equalTo("person"));
-    verify(g).getName();
+    Group group = mock(Group.class);
+    when(group.getName()).thenReturn("Person");
+    assertThat(options.nameForOption(group), equalTo("person"));
+    verify(group).getName();
   }
   
   @Test public void should_return_null_if_element_is_null() {
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isBool_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isBool_Test.java
index 803d0ad..4959897 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isBool_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isBool_Test.java
@@ -15,10 +15,10 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.protobuf.Property;
+import com.google.eclipse.protobuf.protobuf.MessageField;
 
 /**
- * Tests for <code>{@link Properties#isBool(Property)}</code>.
+ * Tests for <code>{@link Fields#isBool(MessageField)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -26,10 +26,10 @@
 
   @Rule public XtextRule xtext = createWith(unitTestSetup());
 
-  private Properties properties;
+  private Fields properties;
 
   @Before public void setUp() {
-    properties = xtext.getInstanceOf(Properties.class);
+    properties = xtext.getInstanceOf(Fields.class);
   }
 
   // syntax = "proto2";
@@ -37,9 +37,9 @@
   // message Person {
   //   optional bool code = 1;
   // }
-  @Test public void should_return_true_if_property_is_bool() {
-    Property p = xtext.find("code", Property.class);
-    assertTrue(properties.isBool(p));
+  @Test public void should_return_true_if_field_is_bool() {
+    MessageField field = xtext.find("code", MessageField.class);
+    assertTrue(properties.isBool(field));
   }
 
   // syntax = "proto2";
@@ -48,7 +48,7 @@
   //   optional string name = 1;
   // }
   @Test public void should_return_false_if_property_is_not_bool() {
-    Property p = xtext.find("name", Property.class);
-    assertFalse(properties.isBool(p));
+    MessageField field = xtext.find("name", MessageField.class);
+    assertFalse(properties.isBool(field));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isPrimitive_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isPrimitive_Test.java
index 05132df..ec37bbf 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isPrimitive_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isPrimitive_Test.java
@@ -15,11 +15,13 @@
 
 import org.junit.*;
 
+import java.util.List;
+
 import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.protobuf.Property;
+import com.google.eclipse.protobuf.protobuf.MessageField;
 
 /**
- * Tests for <code>{@link Properties#isPrimitive(Property)}</code>.
+ * Tests for <code>{@link Fields#isPrimitive(MessageField)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -27,10 +29,10 @@
 
   @Rule public XtextRule xtext = createWith(unitTestSetup());
 
-  private Properties properties;
+  private Fields properties;
 
   @Before public void setUp() {
-    properties = xtext.getInstanceOf(Properties.class);
+    properties = xtext.getInstanceOf(Fields.class);
   }
 
   // syntax = "proto2";
@@ -47,9 +49,10 @@
   //   optional fixed64 fixed64_1 = 9;
   //   optional bool bool_1 = 10;
   // }
-  @Test public void should_return_true_if_property_is_primitive() {
-    for (Property p : getAllContentsOfType(xtext.root(), Property.class))
-      assertTrue(properties.isPrimitive(p));
+  @Test public void should_return_true_if_field_is_primitive() {
+    List<MessageField> fields = getAllContentsOfType(xtext.root(), MessageField.class);
+    for (MessageField field : fields)
+      assertTrue(properties.isPrimitive(field));
   }
 
   // syntax = "proto2";
@@ -63,8 +66,9 @@
   // message Person {
   //   optional string name = 1;
   // }
-  @Test public void should_return_false_if_property_is_not_primitive() {
-    for (Property p : getAllContentsOfType(xtext.root(), Property.class))
+  @Test public void should_return_false_if_field_is_not_primitive() {
+    List<MessageField> fields = getAllContentsOfType(xtext.root(), MessageField.class);
+    for (MessageField p : fields)
       assertFalse(properties.isPrimitive(p));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isString_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isString_Test.java
index dd43c51..0270976 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isString_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isString_Test.java
@@ -15,10 +15,10 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.protobuf.Property;
+import com.google.eclipse.protobuf.protobuf.MessageField;
 
 /**
- * Tests for <code>{@link Properties#isString(Property)}</code>.
+ * Tests for <code>{@link Fields#isString(MessageField)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -26,10 +26,10 @@
 
   @Rule public XtextRule xtext = createWith(unitTestSetup());
 
-  private Properties properties;
+  private Fields properties;
 
   @Before public void setUp() {
-    properties = xtext.getInstanceOf(Properties.class);
+    properties = xtext.getInstanceOf(Fields.class);
   }
 
   // syntax = "proto2";
@@ -37,9 +37,9 @@
   // message Person {
   //   optional string name = 1;
   // }
-  @Test public void should_return_true_if_property_is_string() {
-    Property p = xtext.find("name", Property.class);
-    assertTrue(properties.isString(p));
+  @Test public void should_return_true_if_field_is_string() {
+    MessageField field = xtext.find("name", MessageField.class);
+    assertTrue(properties.isString(field));
   }
 
   // syntax = "proto2";
@@ -47,8 +47,8 @@
   // message Person {
   //   optional double code = 1;
   // }
-  @Test public void should_return_false_if_property_is_not_string() {
-    Property p = xtext.find("code", Property.class);
-    assertFalse(properties.isString(p));
+  @Test public void should_return_false_if_field_is_not_string() {
+    MessageField field = xtext.find("code", MessageField.class);
+    assertFalse(properties.isString(field));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_typeNameOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_typeNameOf_Test.java
index 22e1996..c573453 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_typeNameOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_typeNameOf_Test.java
@@ -16,10 +16,10 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.protobuf.Property;
+import com.google.eclipse.protobuf.protobuf.MessageField;
 
 /**
- * Tests for <code>{@link Properties#typeNameOf(Property)}</code>.
+ * Tests for <code>{@link Fields#typeNameOf(MessageField)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -27,10 +27,10 @@
 
   @Rule public XtextRule xtext = createWith(unitTestSetup());
 
-  private Properties properties;
+  private Fields properties;
 
   @Before public void setUp() {
-    properties = xtext.getInstanceOf(Properties.class);
+    properties = xtext.getInstanceOf(Fields.class);
   }
 
   // syntax = "proto2";
@@ -39,8 +39,8 @@
   //   optional string name = 1;
   // }
   @Test public void should_return_name_of_scalar() {
-    Property name = xtext.find("name", Property.class);
-    assertThat(properties.typeNameOf(name), equalTo("string"));
+    MessageField field = xtext.find("name", MessageField.class);
+    assertThat(properties.typeNameOf(field), equalTo("string"));
   }
 
   // syntax = "proto2";
@@ -54,7 +54,7 @@
   //   }
   // }
   @Test public void should_return_name_of_type() {
-    Property number = xtext.find("number", Property.class);
-    assertThat(properties.typeNameOf(number), equalTo("PhoneNumber"));
+    MessageField field = xtext.find("number", MessageField.class);
+    assertThat(properties.typeNameOf(field), equalTo("PhoneNumber"));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider_getFullyQualifiedName_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider_getFullyQualifiedName_Test.java
index f77b9eb..3352509 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider_getFullyQualifiedName_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider_getFullyQualifiedName_Test.java
@@ -42,8 +42,8 @@
   //   optional string name = 1;
   // }
   @Test public void should_include_existing_package_name_as_part_of_message_FQN() {
-    Message person = xtext.find("Person", Message.class);
-    QualifiedName fqn = provider.getFullyQualifiedName(person);
+    Message message = xtext.find("Person", Message.class);
+    QualifiedName fqn = provider.getFullyQualifiedName(message);
     assertThat(fqn.toString(), equalTo("fqn.test.Person"));
   }
 
@@ -54,9 +54,9 @@
   // message Person {
   //   optional string name = 1;
   // }
-  @Test public void should_include_existing_package_name_as_part_of_property_FQN() {
-    Property name = xtext.find("name", Property.class);
-    QualifiedName fqn = provider.getFullyQualifiedName(name);
+  @Test public void should_include_existing_package_name_as_part_of_field_FQN() {
+    MessageField field = xtext.find("name", MessageField.class);
+    QualifiedName fqn = provider.getFullyQualifiedName(field);
     assertThat(fqn.toString(), equalTo("fqn.test.Person.name"));
   }
 
@@ -66,17 +66,17 @@
   //   optional string name = 1;
   // }
   @Test public void should_not_include_package_name_as_part_of_message_FQN_if_package_is_not_specified() {
-    Message person = xtext.find("Person", Message.class);
-    QualifiedName fqn = provider.getFullyQualifiedName(person);
+    Message message = xtext.find("Person", Message.class);
+    QualifiedName fqn = provider.getFullyQualifiedName(message);
     assertThat(fqn.toString(), equalTo("Person"));
   }
 
   // message Person {
   //   optional string name = 1;
   // }
-  @Test public void should_not_include_package_name_as_part_of_property_FQN_if_package_is_not_specified() {
-    Property name = xtext.find("name", Property.class);
-    QualifiedName fqn = provider.getFullyQualifiedName(name);
+  @Test public void should_not_include_package_name_as_part_of_field_FQN_if_package_is_not_specified() {
+    MessageField field = xtext.find("name", MessageField.class);
+    QualifiedName fqn = provider.getFullyQualifiedName(field);
     assertThat(fqn.toString(), equalTo("Person.name"));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkTagNumberIsGreaterThanZero_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkTagNumberIsGreaterThanZero_Test.java
index 5960e68..2a4c399 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkTagNumberIsGreaterThanZero_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkTagNumberIsGreaterThanZero_Test.java
@@ -45,10 +45,10 @@
   //   optional long id = 0;
   // }
   @Test public void should_create_error_if_field_index_is_zero() {
-    Property id = xtext.find("id", Property.class);
-    validator.checkTagNumberIsGreaterThanZero(id);
+    MessageField field = xtext.find("id", MessageField.class);
+    validator.checkTagNumberIsGreaterThanZero(field);
     String message = "Field numbers must be positive integers.";
-    verify(messageAcceptor).acceptError(message, id, PROPERTY__INDEX, INSIGNIFICANT_INDEX, INVALID_FIELD_TAG_NUMBER_ERROR);
+    verify(messageAcceptor).acceptError(message, field, MESSAGE_FIELD__INDEX, INSIGNIFICANT_INDEX, INVALID_FIELD_TAG_NUMBER_ERROR);
   }
 
   // syntax = "proto2";
@@ -57,10 +57,10 @@
   //   optional long id = -1;
   // }
   @Test public void should_create_error_if_field_index_is_negative() {
-    Property id = xtext.find("id", Property.class);
-    validator.checkTagNumberIsGreaterThanZero(id);
+    MessageField field = xtext.find("id", MessageField.class);
+    validator.checkTagNumberIsGreaterThanZero(field);
     String message = "Expected field number.";
-    verify(messageAcceptor).acceptError(message, id, PROPERTY__INDEX, INSIGNIFICANT_INDEX, INVALID_FIELD_TAG_NUMBER_ERROR);
+    verify(messageAcceptor).acceptError(message, field, MESSAGE_FIELD__INDEX, INSIGNIFICANT_INDEX, INVALID_FIELD_TAG_NUMBER_ERROR);
   }
 
   // syntax = "proto2";
@@ -69,8 +69,8 @@
   //   optional long id = 1;
   // }
   @Test public void should_not_create_error_if_field_index_is_greater_than_zero() {
-    Property id = xtext.find("id", Property.class);
-    validator.checkTagNumberIsGreaterThanZero(id);
+    MessageField field = xtext.find("id", MessageField.class);
+    validator.checkTagNumberIsGreaterThanZero(field);
     verifyZeroInteractions(messageAcceptor);
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkTagNumberIsUnique_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkTagNumberIsUnique_Test.java
index 8ffc0bd..5497e3a 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkTagNumberIsUnique_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkTagNumberIsUnique_Test.java
@@ -10,7 +10,7 @@
 
 import static com.google.eclipse.protobuf.junit.core.Setups.unitTestSetup;
 import static com.google.eclipse.protobuf.junit.core.XtextRule.createWith;
-import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.PROPERTY__INDEX;
+import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.MESSAGE_FIELD__INDEX;
 import static com.google.eclipse.protobuf.validation.ProtobufJavaValidator.INVALID_FIELD_TAG_NUMBER_ERROR;
 import static org.eclipse.xtext.validation.ValidationMessageAcceptor.INSIGNIFICANT_INDEX;
 import static org.mockito.Mockito.*;
@@ -46,10 +46,10 @@
   //   optional string name = 1;
   // }
   @Test public void should_create_error_if_field_does_not_have_unique_tag_number() {
-    Property name = xtext.find("name", Property.class);
-    validator.checkTagNumberIsUnique(name);
+    MessageField field = xtext.find("name", MessageField.class);
+    validator.checkTagNumberIsUnique(field);
     String message = "Field number 1 has already been used in \"Person\" by field \"id\".";
-    verify(messageAcceptor).acceptError(message, name, PROPERTY__INDEX, INSIGNIFICANT_INDEX, INVALID_FIELD_TAG_NUMBER_ERROR);
+    verify(messageAcceptor).acceptError(message, field, MESSAGE_FIELD__INDEX, INSIGNIFICANT_INDEX, INVALID_FIELD_TAG_NUMBER_ERROR);
   }
 
   // syntax = "proto2";
@@ -59,8 +59,8 @@
   //   optional string name = 2;
   // }
   @Test public void should_not_create_error_if_field_has_unique_tag_number() {
-    Property name = xtext.find("name", Property.class);
-    validator.checkTagNumberIsUnique(name);
+    MessageField field = xtext.find("name", MessageField.class);
+    validator.checkTagNumberIsUnique(field);
     verifyZeroInteractions(messageAcceptor);
   }
 }
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder_matchingCommentNode_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder_matchingCommentNode_Test.java
index 8e19167..0bfb102 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder_matchingCommentNode_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder_matchingCommentNode_Test.java
@@ -21,7 +21,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.protobuf.Property;
+import com.google.eclipse.protobuf.protobuf.MessageField;
 
 /**
  * Tests for <code>{@link CommentNodesFinder#matchingCommentNode(EObject, String...)}</code>.
@@ -45,8 +45,8 @@
   //   optional bool active = 1;
   // }
   @Test public void should_return_matching_single_line_comment_of_element() {
-    Property active = xtext.find("active", Property.class);
-    Pair<INode, Matcher> match = finder.matchingCommentNode(active, "next id: [\\d]+");
+    MessageField field = xtext.find("active", MessageField.class);
+    Pair<INode, Matcher> match = finder.matchingCommentNode(field, "next id: [\\d]+");
     INode node = match.getFirst();
     assertThat(node.getText().trim(), equalTo("// Next Id: 6"));
   }
@@ -60,8 +60,8 @@
   //   optional bool active = 1;
   // }
   @Test public void should_return_matching_multi_line_comment_of_element() {
-    Property active = xtext.find("active", Property.class);
-    Pair<INode, Matcher> match = finder.matchingCommentNode(active, "NEXT ID: [\\d]+");
+    MessageField field = xtext.find("active", MessageField.class);
+    Pair<INode, Matcher> match = finder.matchingCommentNode(field, "NEXT ID: [\\d]+");
     assertNotNull(match.getFirst());
   }
 
@@ -72,7 +72,7 @@
   //   optional bool active = 1;
   // }
   @Test public void should_return_null_if_no_matching_node_found() {
-    Property active = xtext.find("active", Property.class);
+    MessageField active = xtext.find("active", MessageField.class);
     Pair<INode, Matcher> match = finder.matchingCommentNode(active, "Hello");
     assertNull(match);
   }
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/documentation/MLCommentDocumentationProvider_getDocumentation_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/documentation/MLCommentDocumentationProvider_getDocumentation_Test.java
index f9b4896..8fcda40 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/documentation/MLCommentDocumentationProvider_getDocumentation_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/documentation/MLCommentDocumentationProvider_getDocumentation_Test.java
@@ -18,7 +18,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.protobuf.Property;
+import com.google.eclipse.protobuf.protobuf.MessageField;
 
 /**
  * Tests for <code>{@link MLCommentDocumentationProvider#getDocumentation(EObject)}</code>
@@ -46,8 +46,8 @@
   //   optional bool active = 1;
   // }
   @Test public void should_return_single_line_comment_of_element() {
-    Property active = xtext.find("active", Property.class);
-    String documentation = provider.getDocumentation(active);
+    MessageField field = xtext.find("active", MessageField.class);
+    String documentation = provider.getDocumentation(field);
     String[] lines = documentation.split(lineSeparator());
     assertThat(lines[0], equalTo("Indicates whether the person is active or not."));
     assertThat(lines[1], equalTo("(Optional.)"));
@@ -57,8 +57,8 @@
   //   optional bool active = 1;
   // }
   @Test public void should_return_empty_String_if_element_does_not_have_single_line_comment() {
-    Property active = xtext.find("active", Property.class);
-    String documentation = provider.getDocumentation(active);
+    MessageField field = xtext.find("active", MessageField.class);
+    String documentation = provider.getDocumentation(field);
     assertThat(documentation, equalTo(""));
   }
 }
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/documentation/SLCommentDocumentationProvider_getDocumentation_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/documentation/SLCommentDocumentationProvider_getDocumentation_Test.java
index 482f264..0438083 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/documentation/SLCommentDocumentationProvider_getDocumentation_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/documentation/SLCommentDocumentationProvider_getDocumentation_Test.java
@@ -17,7 +17,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.protobuf.Property;
+import com.google.eclipse.protobuf.protobuf.MessageField;
 
 /**
  * Tests for <code>{@link SLCommentDocumentationProvider#getDocumentation(EObject)}</code>
@@ -42,8 +42,8 @@
   //   optional bool active = 1;
   // }
   @Test public void should_return_single_line_comment_of_element() {
-    Property active = xtext.find("active", Property.class);
-    String documentation = provider.getDocumentation(active);
+    MessageField field = xtext.find("active", MessageField.class);
+    String documentation = provider.getDocumentation(field);
     assertThat(documentation, equalTo("Indicates whether the person is active or not. (Optional.)"));
   }
 
@@ -53,8 +53,8 @@
   //   optional bool active = 1;
   // }
   @Test public void should_return_empty_String_if_element_does_not_have_single_line_comment() {
-    Property active = xtext.find("active", Property.class);
-    String documentation = provider.getDocumentation(active);
+    MessageField field = xtext.find("active", MessageField.class);
+    String documentation = provider.getDocumentation(field);
     assertThat(documentation, equalTo(""));
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/icons/property-opt.gif b/com.google.eclipse.protobuf.ui/icons/field-opt.gif
similarity index 100%
rename from com.google.eclipse.protobuf.ui/icons/property-opt.gif
rename to com.google.eclipse.protobuf.ui/icons/field-opt.gif
Binary files differ
diff --git a/com.google.eclipse.protobuf.ui/icons/property-rep.gif b/com.google.eclipse.protobuf.ui/icons/field-rep.gif
similarity index 100%
rename from com.google.eclipse.protobuf.ui/icons/property-rep.gif
rename to com.google.eclipse.protobuf.ui/icons/field-rep.gif
Binary files differ
diff --git a/com.google.eclipse.protobuf.ui/icons/property-req.gif b/com.google.eclipse.protobuf.ui/icons/field-req.gif
similarity index 100%
rename from com.google.eclipse.protobuf.ui/icons/property-req.gif
rename to com.google.eclipse.protobuf.ui/icons/field-req.gif
Binary files differ
diff --git a/com.google.eclipse.protobuf.ui/icons/property.gif b/com.google.eclipse.protobuf.ui/icons/field.gif
similarity index 100%
rename from com.google.eclipse.protobuf.ui/icons/property.gif
rename to com.google.eclipse.protobuf.ui/icons/field.gif
Binary files differ
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java
index 88560f2..a4ffaf1 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java
@@ -36,7 +36,7 @@
 
 /**
  * Inserts a semicolon at the end of a line, regardless of the current position of the caret in the editor. If the
- * line of code being edited is a property or enum literal and if it does not have an index yet, this handler will
+ * line of code being edited is a field or enum literal and if it does not have an index yet, this handler will
  * insert an index with a proper value as well.
  *
  * @author alruiz@google.com (Alex Ruiz)
@@ -108,13 +108,13 @@
               }
               return content;
             }
-            if (model instanceof Property) {
-              Property property = (Property) model;
-              ContentToInsert content = newContent(property);
+            if (model instanceof MessageField) {
+              MessageField field = (MessageField) model;
+              ContentToInsert content = newContent(field);
               if (content.equals(ContentToInsert.INSERT_TAG_NUMBER)) {
-                long index = indexedElements.calculateTagNumberOf(property);
-                property.setIndex(index);
-                updateIndexInCommentOfParent(property, index, document);
+                long index = indexedElements.calculateTagNumberOf(field);
+                field.setIndex(index);
+                updateIndexInCommentOfParent(field, index, document);
               }
               return content;
             }
@@ -133,8 +133,8 @@
     return newContent(indexNode);
   }
 
-  private ContentToInsert newContent(Property property) {
-    INode indexNode = nodes.firstNodeForFeature(property, PROPERTY__INDEX);
+  private ContentToInsert newContent(MessageField field) {
+    INode indexNode = nodes.firstNodeForFeature(field, MESSAGE_FIELD__INDEX);
     return newContent(indexNode);
   }
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
index a822e15..242acd7 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
@@ -33,7 +33,7 @@
 
 import com.google.eclipse.protobuf.grammar.CommonKeyword;
 import com.google.eclipse.protobuf.model.util.*;
-import com.google.eclipse.protobuf.model.util.Properties;
+import com.google.eclipse.protobuf.model.util.Fields;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Enum;
 import com.google.eclipse.protobuf.scoping.*;
@@ -58,7 +58,7 @@
   @Inject private PluginImageHelper imageHelper;
   @Inject private Literals literals;
   @Inject private Options options;
-  @Inject private Properties properties;
+  @Inject private Fields properties;
 
   @Override public void completeProtobuf_Syntax(EObject model, Assignment assignment, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {}
@@ -95,27 +95,27 @@
   @Override public void completeNativeOption_Source(EObject model, Assignment assignment,
       ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
     ProtoDescriptor descriptor = descriptorProvider.primaryDescriptor();
-    Collection<Property> optionProperties = descriptor.availableOptionsFor(model);
+    Collection<MessageField> optionProperties = descriptor.availableOptionsFor(model);
     if (!optionProperties.isEmpty()) proposeOptions(optionProperties, context, acceptor);
   }
 
-  private void proposeOptions(Collection<Property> optionProperties, ContentAssistContext context,
+  private void proposeOptions(Collection<MessageField> optionSources, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
-    for (Property p : optionProperties) proposeOption(p, context, acceptor);
+    for (MessageField source : optionSources) proposeOption(source, context, acceptor);
   }
 
   @Override public void completeNativeOption_Value(EObject model, Assignment assignment,
       ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
     NativeOption option = (NativeOption) model;
-    Property property = (Property) options.rootSourceOf(option);
-    if (property == null) return;
+    MessageField optionSource = (MessageField) options.rootSourceOf(option);
+    if (optionSource == null) return;
     ProtoDescriptor descriptor = descriptorProvider.primaryDescriptor();
-    Enum enumType = descriptor.enumTypeOf(property);
+    Enum enumType = descriptor.enumTypeOf(optionSource);
     if (enumType != null) {
       proposeAndAccept(enumType, context, acceptor);
       return;
     }
-    proposePrimitiveValues(property, context, acceptor);
+    proposePrimitiveValues(optionSource, context, acceptor);
   }
 
   @Override public void complete_ID(EObject model, RuleCall ruleCall, ContentAssistContext context,
@@ -185,40 +185,40 @@
   }
 
   private boolean isBoolProposalValid(ContentAssistContext context) {
-    Property p = propertyFrom(context);
-    return p != null && properties.isBool(p);
+    MessageField field = fieldFrom(context);
+    return field != null && properties.isBool(field);
   }
 
   private boolean isNanProposalValid(ContentAssistContext context) {
-    Property p = propertyFrom(context);
-    return p != null && properties.mayBeNan(p);
+    MessageField field = fieldFrom(context);
+    return field != null && properties.mayBeNan(field);
   }
 
-  private Property propertyFrom(ContentAssistContext context) {
+  private MessageField fieldFrom(ContentAssistContext context) {
     EObject model = context.getCurrentModel();
-    if (model instanceof Property) return (Property) model;
+    if (model instanceof MessageField) return (MessageField) model;
     if (model instanceof Option) {
       Option option = (Option) model;
       IndexedElement source = options.rootSourceOf(option);
-      if (source instanceof Property) return (Property) source;
+      if (source instanceof MessageField) return (MessageField) source;
     }
     if (model instanceof FieldOption) {
       FieldOption option = (FieldOption) model;
       IndexedElement source = fieldOptions.rootSourceOf(option);
-      if (source instanceof Property) return (Property) source;
+      if (source instanceof MessageField) return (MessageField) source;
     }
     return null;
   }
 
   private boolean proposeOpeningBracket(ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
     EObject model = context.getCurrentModel();
-    if (!(model instanceof Property)) return false;
-    Property p = (Property) model;
-    Modifier modifier = p.getModifier();
+    if (!(model instanceof MessageField)) return false;
+    MessageField field = (MessageField) model;
+    Modifier modifier = field.getModifier();
     if (OPTIONAL.equals(modifier)) {
       CompoundElement display = DEFAULT_EQUAL_IN_BRACKETS;
       int cursorPosition = display.indexOf(CLOSING_BRACKET);
-      if (properties.isString(p)) {
+      if (properties.isString(field)) {
         display = DEFAULT_EQUAL_STRING_IN_BRACKETS;
         cursorPosition++;
       }
@@ -245,9 +245,9 @@
     proposeIndex(index, context, acceptor);
   }
 
-  @Override public void completeProperty_Index(EObject model, Assignment assignment, ContentAssistContext context,
+  @Override public void completeMessageField_Index(EObject model, Assignment assignment, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
-    long index = indexedElements.calculateTagNumberOf((Property) model);
+    long index = indexedElements.calculateTagNumberOf((MessageField) model);
     proposeIndex(index, context, acceptor);
   }
 
@@ -255,15 +255,15 @@
     proposeAndAccept(valueOf(index), context, acceptor);
   }
 
-  @Override public void completeProperty_Name(EObject model, Assignment assignment, ContentAssistContext context,
+  @Override public void completeMessageField_Name(EObject model, Assignment assignment, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
-    String typeName = toFirstLower(properties.typeNameOf((Property) model));
+    String typeName = toFirstLower(properties.typeNameOf((MessageField) model));
     int index = 1;
     String name = typeName + index;
     for (EObject o : model.eContainer().eContents()) {
-      if (o == model || !(o instanceof Property)) continue;
-      Property p = (Property) o;
-      if (!name.equals(p.getName())) continue;
+      if (o == model || !(o instanceof MessageField)) continue;
+      MessageField field = (MessageField) o;
+      if (!name.equals(field.getName())) continue;
       name = typeName + (++index);
     }
     proposeAndAccept(name, context, acceptor);
@@ -284,20 +284,21 @@
 
   @Override public void completeNativeFieldOption_Source(EObject model, Assignment assignment,
       ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    Property p = extractElementFromContext(context, Property.class);
-    if (p != null) {
-      proposeNativeOptions(p, context, acceptor);
+    MessageField field = extractElementFromContext(context, MessageField.class);
+    if (field != null) {
+      proposeNativeOptions(field, context, acceptor);
     }
   }
 
-  private void proposeNativeOptions(Property p, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    List<String> optionNames = existingFieldOptionNames(p);
-    proposeDefaultKeyword(p, optionNames, context, acceptor);
+  private void proposeNativeOptions(MessageField field, ContentAssistContext context,
+      ICompletionProposalAcceptor acceptor) {
+    List<String> optionNames = existingFieldOptionNames(field);
+    proposeDefaultKeyword(field, optionNames, context, acceptor);
     ProtoDescriptor descriptor = descriptorProvider.primaryDescriptor();
-    for (Property option : descriptor.availableOptionsFor(p)) {
-      String optionName = option.getName();
-      if (optionNames.contains(optionName) || ("packed".equals(optionName) && !canBePacked(p))) continue;
-      proposeOption(option, context, acceptor);
+    for (MessageField optionSource : descriptor.availableOptionsFor(field)) {
+      String optionName = optionSource.getName();
+      if (optionNames.contains(optionName) || ("packed".equals(optionName) && !canBePacked(field))) continue;
+      proposeOption(optionSource, context, acceptor);
     }
   }
 
@@ -312,12 +313,12 @@
 
   private void proposeDefaultKeyword(IndexedElement e, List<String> existingOptionNames, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
-    if (!(e instanceof Property)) return;
-    Property property = (Property) e;
-    if (!properties.isOptional(property) || existingOptionNames.contains(DEFAULT.toString())) return;
+    if (!(e instanceof MessageField)) return;
+    MessageField field = (MessageField) e;
+    if (!properties.isOptional(field) || existingOptionNames.contains(DEFAULT.toString())) return;
     CompoundElement display = DEFAULT_EQUAL;
     int cursorPosition = display.charCount();
-    if (properties.isString(property)) {
+    if (properties.isString(field)) {
       display = DEFAULT_EQUAL_STRING;
       cursorPosition++;
     }
@@ -325,15 +326,16 @@
   }
 
   private boolean canBePacked(IndexedElement e) {
-    if (!(e instanceof Property)) return false;
-    Property property = (Property) e;
-    return properties.isPrimitive(property) && REPEATED.equals(property.getModifier());
+    if (!(e instanceof MessageField)) return false;
+    MessageField field = (MessageField) e;
+    return properties.isPrimitive(field) && REPEATED.equals(field.getModifier());
   }
 
-  private void proposeOption(Property option, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    String displayString = option.getName();
+  private void proposeOption(MessageField optionSource, ContentAssistContext context,
+      ICompletionProposalAcceptor acceptor) {
+    String displayString = optionSource.getName();
     String proposalText = displayString + space() + EQUAL + space();
-    Object value = defaultValueOf(option);
+    Object value = defaultValueOf(optionSource);
     if (value != null) proposalText = proposalText + value;
     ICompletionProposal proposal = createCompletionProposal(proposalText, displayString, imageForOption(), context);
     if (value == EMPTY_STRING && proposal instanceof ConfigurableCompletionProposal) {
@@ -344,18 +346,18 @@
     acceptor.accept(proposal);
   }
   
-  private Object defaultValueOf(Property p) {
-    if (properties.isBool(p)) return TRUE;
-    if (properties.isString(p)) return EMPTY_STRING;
+  private Object defaultValueOf(MessageField field) {
+    if (properties.isBool(field)) return TRUE;
+    if (properties.isString(field)) return EMPTY_STRING;
     return null;
   }
   
   @Override public void completeDefaultValueFieldOption_Value(EObject model, Assignment assignment, 
       ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    if (!(model instanceof Property)) return;
-    Property p = (Property) model;
-    if (!properties.isOptional(p)) return;
-    proposeDefaultValue(p, context, acceptor);
+    if (!(model instanceof MessageField)) return;
+    MessageField field = (MessageField) model;
+    if (!properties.isOptional(field)) return;
+    proposeDefaultValue(field, context, acceptor);
   }
   
   @Override public ICompletionProposal createCompletionProposal(String proposal, String displayString, Image image,
@@ -371,22 +373,22 @@
     if (!(model instanceof NativeFieldOption)) return;
     NativeFieldOption option = (NativeFieldOption) model;
     ProtoDescriptor descriptor = descriptorProvider.primaryDescriptor();
-    Property property = (Property) fieldOptions.rootSourceOf(option);
-    Enum enumType = descriptor.enumTypeOf(property);
+    MessageField field = (MessageField) fieldOptions.rootSourceOf(option);
+    Enum enumType = descriptor.enumTypeOf(field);
     if (enumType != null) {
       proposeAndAccept(enumType, context, acceptor);
       return;
     }
-    proposePrimitiveValues(property, context, acceptor);
+    proposePrimitiveValues(field, context, acceptor);
   }
 
-  private boolean proposePrimitiveValues(Property property, ContentAssistContext context,
+  private boolean proposePrimitiveValues(MessageField field, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
-    if (properties.isBool(property)) {
+    if (properties.isBool(field)) {
       proposeBooleanValues(context, acceptor);
       return true;
     }
-    if (properties.isString(property)) {
+    if (properties.isString(field)) {
       proposeEmptyString(context, acceptor);
       return true;
     }
@@ -520,8 +522,8 @@
     CustomOption option = (CustomOption) model;
     IndexedElement e = options.lastFieldSourceFrom(option);
     if (e == null) e = options.rootSourceOf(option);
-    if (e instanceof Property) {
-      proposeDefaultValue((Property) e, context, acceptor);
+    if (e instanceof MessageField) {
+      proposeDefaultValue((MessageField) e, context, acceptor);
     }
   }
 
@@ -532,16 +534,16 @@
     CustomFieldOption option = (CustomFieldOption) model;
     IndexedElement e = fieldOptions.lastFieldSourceFrom(option);
     if (e == null) e = fieldOptions.rootSourceOf(option);
-    if (e instanceof Property) {
-      proposeDefaultValue((Property) e, context, acceptor);
+    if (e instanceof MessageField) {
+      proposeDefaultValue((MessageField) e, context, acceptor);
     }
   }
 
-  private void proposeDefaultValue(Property property, ContentAssistContext context,
+  private void proposeDefaultValue(MessageField field, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
-    if (property == null) return;
-    if (proposePrimitiveValues(property, context, acceptor)) return;
-    Enum enumType = finder.enumTypeOf(property);
+    if (field == null) return;
+    if (proposePrimitiveValues(field, context, acceptor)) return;
+    Enum enumType = finder.enumTypeOf(field);
     if (enumType != null) {
       proposeAndAccept(enumType, context, acceptor);
     }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/ProtobufSemanticHighlightingCalculator.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/ProtobufSemanticHighlightingCalculator.java
index 068b21b..bff0655 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/ProtobufSemanticHighlightingCalculator.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/ProtobufSemanticHighlightingCalculator.java
@@ -116,8 +116,8 @@
       highlight((Group) element, acceptor);
       return;
     }
-    if (element instanceof Property) {
-      highlight((Property) element, acceptor);
+    if (element instanceof MessageField) {
+      highlight((MessageField) element, acceptor);
     }
   }
 
@@ -146,20 +146,20 @@
     }
   }
 
-  private void highlight(Property property, IHighlightedPositionAcceptor acceptor) {
-    highlightPropertyType(property, acceptor);
+  private void highlight(MessageField field, IHighlightedPositionAcceptor acceptor) {
+    highlightPropertyType(field, acceptor);
   }
 
-  private void highlightPropertyType(Property property, IHighlightedPositionAcceptor acceptor) {
-    TypeLink link = property.getType();
+  private void highlightPropertyType(MessageField field, IHighlightedPositionAcceptor acceptor) {
+    TypeLink link = field.getType();
     if (!(link instanceof ComplexTypeLink)) return;
     ComplexType type = ((ComplexTypeLink) link).getTarget();
     if (type instanceof Message) {
-      highlightFirstFeature(property, PROPERTY__TYPE, acceptor, MESSAGE_ID);
+      highlightFirstFeature(field, MESSAGE_FIELD__TYPE, acceptor, MESSAGE_ID);
       return;
     }
     if (type instanceof Enum) {
-      highlightFirstFeature(property, PROPERTY__TYPE, acceptor, ENUM_ID);
+      highlightFirstFeature(field, MESSAGE_FIELD__TYPE, acceptor, ENUM_ID);
       return;
     }
   }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
index e3c10a6..25e2b12 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
@@ -33,9 +33,9 @@
 
   private static final Map<Modifier, String> IMAGES_BY_MODIFIER = new HashMap<Modifier, String>();
   static {
-    IMAGES_BY_MODIFIER.put(OPTIONAL, "property-opt.gif");
-    IMAGES_BY_MODIFIER.put(REPEATED, "property-rep.gif");
-    IMAGES_BY_MODIFIER.put(REQUIRED, "property-req.gif");
+    IMAGES_BY_MODIFIER.put(OPTIONAL, "field-opt.gif");
+    IMAGES_BY_MODIFIER.put(REPEATED, "field-rep.gif");
+    IMAGES_BY_MODIFIER.put(REQUIRED, "field-req.gif");
   }
 
   private static final Map<Class<?>, String> IMAGES_BY_TYPE = new HashMap<Class<?>, String>();
@@ -61,9 +61,9 @@
       Keyword k = (Keyword) o;
       return imageFor(k);
     }
-    if (o instanceof Property) {
-      Property p = (Property) o;
-      return imageFor(p.getModifier());
+    if (o instanceof MessageField) {
+      MessageField f = (MessageField) o;
+      return imageFor(f.getModifier());
     }
     if (o instanceof String) {
       return o + GIF_EXTENSION;
@@ -79,8 +79,8 @@
     return imageFor(interfaces[0]);
   }
 
-  private String imageFor(Keyword k) {
-    String value = k.getValue();
+  private String imageFor(Keyword keyword) {
+    String value = keyword.getValue();
     Modifier m = Modifier.getByName(value);
     String image = IMAGES_BY_MODIFIER.get(m);
     if (image != null) return image;
@@ -89,10 +89,10 @@
     return DEFAULT_IMAGE;
   }
 
-  private String imageFor(Modifier m) {
-    String image = IMAGES_BY_MODIFIER.get(m);
+  private String imageFor(Modifier modifier) {
+    String image = IMAGES_BY_MODIFIER.get(modifier);
     if (image != null) return image;
-    return "property.gif";
+    return "field.gif";
   }
 
   public String defaultImage() {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
index c829532..f714048 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
@@ -31,7 +31,7 @@
 
   @Inject private INodes nodes;
   @Inject private Options options;
-  @Inject private Properties properties;
+  @Inject private Fields properties;
 
   public Object labelFor(Object o) {
     if (o instanceof Option) {
@@ -47,37 +47,37 @@
       return labelFor(extensions);
     }
     if (o instanceof Import) {
-      Import i = (Import) o;
-      return labelFor(i);
+      Import anImport = (Import) o;
+      return labelFor(anImport);
     }
     if (o instanceof Literal) {
-      Literal l = (Literal) o;
-      return labelFor(l);
+      Literal literal = (Literal) o;
+      return labelFor(literal);
     }
-    if (o instanceof Property) {
-      Property p = (Property) o;
-      return labelFor(p);
+    if (o instanceof MessageField) {
+      MessageField field = (MessageField) o;
+      return labelFor(field);
     }
     if (o instanceof Rpc) {
-      Rpc r = (Rpc) o;
-      return labelFor(r);
+      Rpc rpc = (Rpc) o;
+      return labelFor(rpc);
     }
     return null;
   }
 
-  private Object labelFor(Option o) {
-    IndexedElement e = options.rootSourceOf(o);
+  private Object labelFor(Option option) {
+    IndexedElement e = options.rootSourceOf(option);
     String name = options.nameForOption(e);
     StringBuilder b = new StringBuilder();
-    boolean isCustomOption = o instanceof CustomOption || o instanceof CustomFieldOption;
+    boolean isCustomOption = option instanceof CustomOption || option instanceof CustomFieldOption;
     if (isCustomOption) b.append("(");
     b.append(name);
     if (isCustomOption) b.append(")");
-    if (o instanceof CustomOption) {
-      appendFields(b, ((CustomOption) o).getOptionFields());
+    if (option instanceof CustomOption) {
+      appendFields(b, ((CustomOption) option).getOptionFields());
     }
-    if (o instanceof CustomFieldOption) {
-      appendFields(b, ((CustomFieldOption) o).getOptionFields());
+    if (option instanceof CustomFieldOption) {
+      appendFields(b, ((CustomFieldOption) option).getOptionFields());
     }
     return b.toString();
   }
@@ -98,13 +98,13 @@
     }
   }
 
-  private Object labelFor(MessageExtension e) {
-    return messageName(e.getMessage());
+  private Object labelFor(MessageExtension extension) {
+    return messageName(extension.getMessage());
   }
 
-  private Object labelFor(Extensions e) {
+  private Object labelFor(Extensions extensions) {
     StringBuilder builder = new StringBuilder();
-    EList<Range> ranges = e.getRanges();
+    EList<Range> ranges = extensions.getRanges();
     int rangeCount = ranges.size();
     for (int i = 0; i < rangeCount; i++) {
       if (i > 0) builder.append(", ");
@@ -118,38 +118,38 @@
     return builder.toString();
   }
 
-  private Object labelFor(Import i) {
-    INode node = nodes.firstNodeForFeature(i, IMPORT__IMPORT_URI);
-    if (node == null) return i.getImportURI();
+  private Object labelFor(Import anImport) {
+    INode node = nodes.firstNodeForFeature(anImport, IMPORT__IMPORT_URI);
+    if (node == null) return anImport.getImportURI();
     return node.getText();
   }
 
-  private Object labelFor(Literal l) {
-    StyledString text = new StyledString(l.getName());
-    String index = String.format(" [%d]", l.getIndex());
+  private Object labelFor(Literal literal) {
+    StyledString text = new StyledString(literal.getName());
+    String index = String.format(" [%d]", literal.getIndex());
     text.append(index, DECORATIONS_STYLER);
     return text;
   }
 
-  private Object labelFor(Property p) {
-    StyledString text = new StyledString(p.getName());
-    String typeName = properties.typeNameOf(p);
+  private Object labelFor(MessageField field) {
+    StyledString text = new StyledString(field.getName());
+    String typeName = properties.typeNameOf(field);
     if (typeName == null) typeName = "<unresolved reference>"; // TODO move to
                                                                // properties
                                                                // file
-    String indexAndType = String.format(" [%d] : %s", p.getIndex(), typeName);
+    String indexAndType = String.format(" [%d] : %s", field.getIndex(), typeName);
     text.append(indexAndType, DECORATIONS_STYLER);
     return text;
   }
 
-  private Object labelFor(Rpc r) {
-    StyledString text = new StyledString(r.getName());
-    String types = String.format(" : %s > %s", messageName(r.getArgType()), messageName(r.getReturnType()));
+  private Object labelFor(Rpc rpc) {
+    StyledString text = new StyledString(rpc.getName());
+    String types = String.format(" : %s > %s", messageName(rpc.getArgType()), messageName(rpc.getReturnType()));
     text.append(types, DECORATIONS_STYLER);
     return text;
   }
 
-  private String messageName(MessageLink r) {
-    return r.getTarget().getName();
+  private String messageName(MessageLink link) {
+    return link.getTarget().getName();
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
index c157012..5a77117 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
@@ -33,15 +33,15 @@
     IGNORED_ELEMENT_TYPES.add(MessageLink.class);
   }
 
-  boolean _isLeaf(Extensions e) {
+  boolean _isLeaf(Extensions extensions) {
     return true;
   }
 
-  boolean _isLeaf(Option o) {
+  boolean _isLeaf(Option option) {
     return true;
   }
 
-  boolean _isLeaf(Property p) {
+  boolean _isLeaf(MessageField field) {
     return true;
   }
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickfixProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickfixProvider.java
index a43e68a..e2e2626 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickfixProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickfixProvider.java
@@ -46,7 +46,7 @@
 
   @Fix(INVALID_FIELD_TAG_NUMBER_ERROR)
   public void regenerateTagNumber(Issue issue, IssueResolutionAcceptor acceptor) {
-    acceptor.accept(issue, regenerateTagNumberLabel, regenerateTagNumber, "property.gif", new ISemanticModification() {
+    acceptor.accept(issue, regenerateTagNumberLabel, regenerateTagNumber, "field.gif", new ISemanticModification() {
       @Override public void apply(EObject element, IModificationContext context) throws Exception {
         if (!(element instanceof IndexedElement)) return;
         IndexedElement e = (IndexedElement) element;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
index 75974a3..0f11301 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
@@ -47,7 +47,7 @@
   '}' (';')?;
 
 MessageElement:
-  Option | Extensions | ComplexType | Property | MessageExtension;
+  Option | Extensions | ComplexType | MessageField | MessageExtension;
 
 Extensions:
   'extensions' ranges+=Range (',' ranges+=Range)* ';';
@@ -65,9 +65,9 @@
   '}' (';')?;
 
 GroupElement:
-  Option | Property | Group | Enum | MessageExtension;
+  Option | MessageField | Group | Enum | MessageExtension;
 
-Property:
+MessageField:
   modifier=Modifier type=TypeLink name=Name '=' index=(LONG | HEX)
   ('[' fieldOptions+=FieldOption (',' fieldOptions+=FieldOption)* ']')? (';')+;
 
@@ -112,10 +112,10 @@
   NormalFieldNotationNameSource | ExtensionFieldNotationNameSource;
 
 NormalFieldNotationNameSource:
-  property=[Property];
+  property=[MessageField];
 
 ExtensionFieldNotationNameSource:
-  '[' extension=[Property|QualifiedName] ']';
+  '[' extension=[MessageField|QualifiedName] ']';
 
 SimpleRef:
   LiteralRef | BooleanRef | NumberRef | StringRef;
@@ -238,7 +238,7 @@
   '(' optionExtendMessageField=[IndexedElement|QualifiedName] ')';  
 
 IndexedElement:
-  Property | Group;
+  MessageField | Group;
 
 terminal ID: '^'?('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
 terminal ML_COMMENT: '/*' -> '*/';
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/formatting/ProtobufFormatter.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/formatting/ProtobufFormatter.java
index e347492..c49fbaf 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/formatting/ProtobufFormatter.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/formatting/ProtobufFormatter.java
@@ -32,7 +32,7 @@
     c.setLinewrap(1).after(g.getCustomOptionRule());
     c.setLinewrap(1).after(g.getImportRule());
     c.setLinewrap(1).after(g.getGroupRule());
-    c.setLinewrap(1).after(g.getPropertyRule());
+    c.setLinewrap(1).after(g.getMessageFieldRule());
     c.setLinewrap(1).after(g.getEnumRule());
     c.setLinewrap(1).after(g.getEnumElementRule());
     c.setLinewrap(1).after(g.getRpcRule());
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/FieldOptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/FieldOptions.java
index fd794b7..f212187 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/FieldOptions.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/FieldOptions.java
@@ -29,7 +29,7 @@
    * @return {@code true} if the given option is the "default value" one, {@code false} otherwise.
    */
   public boolean isDefaultValueOption(FieldOption option) {
-    return option instanceof DefaultValueFieldOption && option.eContainer() instanceof Property;
+    return option instanceof DefaultValueFieldOption && option.eContainer() instanceof MessageField;
   }
 
   /**
@@ -39,7 +39,7 @@
    */
   public String nameOf(FieldOption option) {
     IndexedElement e = rootSourceOf(option);
-    if (e instanceof Property) return ((Property) e).getName();
+    if (e instanceof MessageField) return ((MessageField) e).getName();
     return null;
   }
 
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Fields.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Fields.java
new file mode 100644
index 0000000..8b6d1ec
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Fields.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.model.util;
+
+import static com.google.eclipse.protobuf.grammar.CommonKeyword.*;
+import static com.google.eclipse.protobuf.protobuf.Modifier.OPTIONAL;
+
+import com.google.eclipse.protobuf.grammar.CommonKeyword;
+import com.google.eclipse.protobuf.protobuf.*;
+import com.google.inject.Singleton;
+
+/**
+ * Utility methods related to <code>{@link MessageField}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@Singleton
+public class Fields {
+
+  /**
+   * Indicates whether the modifier of the given field is <code>{@link Modifier#OPTIONAL}</code>.
+   * @param field the given field.
+   * @return {@code true} if the modifier of the given field is "optional," {@code false} otherwise.
+   */
+  public boolean isOptional(MessageField field) {
+    return OPTIONAL.equals(field.getModifier());
+  }
+
+  /**
+   * Indicates whether the type of the given field is primitive. Primitive types include: {@code double},
+   * {@code float}, {@code int32}, {@code int64}, {@code uint32}, {@code uint64}, {@code sint32}, {@code sint64},
+   * {@code fixed32}, {@code fixed64}, {@code sfixed32}, {@code sfixed64} and {@code bool}.
+   * @param field the given field.
+   * @return {@code true} if the type of the given field is primitive, {@code false} otherwise.
+   */
+  public boolean isPrimitive(MessageField field) {
+    TypeLink link = field.getType();
+    if (!(link instanceof ScalarTypeLink)) return false;
+    String typeName = ((ScalarTypeLink) link).getTarget().getName();
+    return !STRING.hasValue(typeName) && !BYTES.hasValue(typeName);
+  }
+
+  /**
+   * Indicates whether the given field is of type {@code bool}.
+   * @param field the given field.
+   * @return {@code true} if the given field is of type {@code bool}, {@code false} otherwise.
+   */
+  public boolean isBool(MessageField field) {
+    return isScalarType(field, BOOL);
+  }
+
+  /**
+   * Indicates whether the given field can accept "nan" as its default value.
+   * @param field the given field.
+   * @return {@code true} if the given field can accept "nan" as its default value, {@code false} otherwise.
+   */
+  public boolean mayBeNan(MessageField field) {
+    String typeName = typeNameOf(field);
+    return FLOAT.hasValue(typeName) || DOUBLE.hasValue(typeName);
+  }
+
+  /**
+   * Indicates whether the given field is of type {@code string}.
+   * @param field the given field.
+   * @return {@code true} if the given field is of type {@code string}, {@code false} otherwise.
+   */
+  public boolean isString(MessageField field) {
+    return isScalarType(field, STRING);
+  }
+
+  private boolean isScalarType(MessageField field, CommonKeyword typeKeyword) {
+    return typeKeyword.hasValue(typeNameOf(field));
+  }
+
+  /**
+   * Returns the name of the type of the given field.
+   * @param field the given field.
+   * @return the name of the type of the given field.
+   */
+  public String typeNameOf(MessageField field) {
+    TypeLink link = field.getType();
+    if (link instanceof ScalarTypeLink) return ((ScalarTypeLink) link).getTarget().getName();
+    if (link instanceof ComplexTypeLink) {
+      ComplexType type = ((ComplexTypeLink) link).getTarget();
+      return type == null ? null : type.getName();
+    }
+    return link.toString();
+  }
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/IndexedElements.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/IndexedElements.java
index dca138d..ef4d0ad 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/IndexedElements.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/IndexedElements.java
@@ -35,7 +35,7 @@
    */
   public String nameOf(IndexedElement e) {
     if (e == null) return null;
-    return (e instanceof Group) ? ((Group) e).getName() : ((Property) e).getName(); 
+    return (e instanceof Group) ? ((Group) e).getName() : ((MessageField) e).getName(); 
   }
 
   /**
@@ -46,7 +46,7 @@
    */
   public long indexOf(IndexedElement e) {
     if (e == null) return Long.MIN_VALUE;
-    return (e instanceof Group) ? ((Group) e).getIndex() : ((Property) e).getIndex(); 
+    return (e instanceof Group) ? ((Group) e).getIndex() : ((MessageField) e).getIndex(); 
   }
   
   /**
@@ -57,7 +57,7 @@
    */
   public EStructuralFeature indexFeatureOf(IndexedElement e) {
     if (e == null) return null;
-    return (e instanceof Group) ? GROUP__INDEX : PROPERTY__INDEX; 
+    return (e instanceof Group) ? GROUP__INDEX : MESSAGE_FIELD__INDEX; 
   }
   
   /**
@@ -68,7 +68,7 @@
    */
   public List<FieldOption> fieldOptionsOf(IndexedElement e) {
     if (e == null) return emptyList();
-    return (e instanceof Group) ? ((Group) e).getFieldOptions() : ((Property) e).getFieldOptions();
+    return (e instanceof Group) ? ((Group) e).getFieldOptions() : ((MessageField) e).getFieldOptions();
   }
 
   /**
@@ -82,7 +82,7 @@
       ((Group) e).setIndex(newIndex);
       return;
     }
-    ((Property) e).setIndex(newIndex);
+    ((MessageField) e).setIndex(newIndex);
   }
 
   /**
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/ModelFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/ModelFinder.java
index 72f3048..6acbfc8 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/ModelFinder.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/ModelFinder.java
@@ -34,69 +34,69 @@
   
   /**
    * Returns all the <strong>local</strong> extensions of the given message.
-   * @param m the given message.
+   * @param message the given message.
    * @return all the <strong>local</strong> extensions of the given message, or an empty collection if none is found.
    */
-  public Collection<MessageExtension> localExtensionsOf(Message m) {
-    return extensionsOf(m, rootOf(m));
+  public Collection<MessageExtension> localExtensionsOf(Message message) {
+    return extensionsOf(message, rootOf(message));
   }
   
-  public Collection<MessageExtension> extensionsOf(Message m, Protobuf root) {
+  public Collection<MessageExtension> extensionsOf(Message message, Protobuf root) {
     Set<MessageExtension> extensions = new HashSet<MessageExtension>();
     for (MessageExtension extension : getAllContentsOfType(root, MessageExtension.class)) {
       Message referred = messageFrom(extension);
-      if (m.equals(referred)) extensions.add(extension);
+      if (message.equals(referred)) extensions.add(extension);
     }
     return extensions;
   }
   
   /**
    * Returns the message from the given extension.
-   * @param e the given extension.
+   * @param extension the given extension.
    * @return the message from the given extension, or {@code null} if the extension is not referring to a message.
    */
-  public Message messageFrom(MessageExtension e) {
-    MessageLink ref = e.getMessage();
+  public Message messageFrom(MessageExtension extension) {
+    MessageLink ref = extension.getMessage();
     return ref == null ? null : ref.getTarget();
   }
 
   /**
-   * Returns the message type of the given property, only if the type of the given property is a message.
-   * @param p the given property.
-   * @return the message type of the given property or {@code null} if the type of the given property is not message.
+   * Returns the message type of the given field, only if the type of the given field is a message.
+   * @param field the given field.
+   * @return the message type of the given field or {@code null} if the type of the given field is not message.
    */
-  public Message messageTypeOf(Property p) {
-    ComplexType type = typeOf(p);
+  public Message messageTypeOf(MessageField field) {
+    ComplexType type = typeOf(field);
     return (type instanceof Message) ? (Message) type : null;
   }
   
   /**
-   * Returns the enum type of the given property, only if the type of the given property is an enum.
-   * @param p the given property.
-   * @return the enum type of the given property or {@code null} if the type of the given property is not enum.
+   * Returns the enum type of the given field, only if the type of the given field is an enum.
+   * @param field the given field.
+   * @return the enum type of the given field or {@code null} if the type of the given field is not enum.
    */
-  public Enum enumTypeOf(Property p) {
-    ComplexType type = typeOf(p);
+  public Enum enumTypeOf(MessageField field) {
+    ComplexType type = typeOf(field);
     return (type instanceof Enum) ? (Enum) type : null;
   }
   
   /**
-   * Returns the type of the given property.
-   * @param p the given property.
-   * @return the type of the given property.
+   * Returns the type of the given field.
+   * @param field the given field.
+   * @return the type of the given field.
    */
-  public ComplexType typeOf(Property p) {
-    TypeLink link = p.getType();
+  public ComplexType typeOf(MessageField field) {
+    TypeLink link = field.getType();
     if (!(link instanceof ComplexTypeLink)) return null;
     return ((ComplexTypeLink) link).getTarget();
   }
 
   /**
-   * Returns the scalar type of the given property, only if the type of the given property is a scalar.
-   * @param p the given property.
-   * @return the scalar type of the given property or {@code null} if the type of the given property is not a scalar.
+   * Returns the scalar type of the given field, only if the type of the given field is a scalar.
+   * @param p the given field.
+   * @return the scalar type of the given field or {@code null} if the type of the given field is not a scalar.
    */
-  public ScalarType scalarTypeOf(Property p) {
+  public ScalarType scalarTypeOf(MessageField p) {
     TypeLink link = (p).getType();
     if (link instanceof ScalarTypeLink)
       return ((ScalarTypeLink) link).getTarget();
@@ -172,10 +172,10 @@
     return null;
   }
 
-  public Collection<Property> propertiesOf(Message message) {
-    List<Property> properties = new ArrayList<Property>();
+  public Collection<MessageField> propertiesOf(Message message) {
+    List<MessageField> properties = new ArrayList<MessageField>();
     for (MessageElement e :message.getElements()) {
-      if (e instanceof Property) properties.add((Property) e);
+      if (e instanceof MessageField) properties.add((MessageField) e);
     }
     return unmodifiableList(properties);
   }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Options.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Options.java
index 7ab3e83..17e7d16 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Options.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Options.java
@@ -93,7 +93,7 @@
    * @return the name of the given <code>{@link IndexedElement}</code>.
    */
   public String nameForOption(IndexedElement e) {
-    if (e instanceof Property) return ((Property) e).getName();
+    if (e instanceof MessageField) return ((MessageField) e).getName();
     if (e instanceof Group) {
       String name = ((Group) e).getName();
       if (!isEmpty(name)) return name.toLowerCase();
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Properties.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Properties.java
deleted file mode 100644
index 8b80af2..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Properties.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.model.util;
-
-import static com.google.eclipse.protobuf.grammar.CommonKeyword.*;
-import static com.google.eclipse.protobuf.protobuf.Modifier.OPTIONAL;
-
-import com.google.eclipse.protobuf.grammar.CommonKeyword;
-import com.google.eclipse.protobuf.protobuf.*;
-import com.google.inject.Singleton;
-
-/**
- * Utility methods related to <code>{@link Property}</code>.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-@Singleton
-public class Properties {
-
-  /**
-   * Indicates whether the modifier of the given property is <code>{@link Modifier#OPTIONAL}</code>.
-   * @param property the given property.
-   * @return {@code true} if the modifier of the given property is "optional," {@code false} otherwise.
-   */
-  public boolean isOptional(Property property) {
-    return OPTIONAL.equals(property.getModifier());
-  }
-
-  /**
-   * Indicates whether the type of the given property is primitive. Primitive types include: {@code double},
-   * {@code float}, {@code int32}, {@code int64}, {@code uint32}, {@code uint64}, {@code sint32}, {@code sint64},
-   * {@code fixed32}, {@code fixed64}, {@code sfixed32}, {@code sfixed64} and {@code bool}.
-   * @param p the given property.
-   * @return {@code true} if the type of the given property is primitive, {@code false} otherwise.
-   */
-  public boolean isPrimitive(Property p) {
-    TypeLink link = p.getType();
-    if (!(link instanceof ScalarTypeLink)) return false;
-    String typeName = ((ScalarTypeLink) link).getTarget().getName();
-    return !STRING.hasValue(typeName) && !BYTES.hasValue(typeName);
-  }
-
-  /**
-   * Indicates whether the given property is of type {@code bool}.
-   * @param p the given property.
-   * @return {@code true} if the given property is of type {@code bool}, {@code false} otherwise.
-   */
-  public boolean isBool(Property p) {
-    return isScalarType(p, BOOL);
-  }
-
-  /**
-   * Indicates whether the given property can accept "nan" as its default value.
-   * @param p the given property.
-   * @return {@code true} if the given property  can accept "nan" as its default value, {@code false} otherwise.
-   */
-  public boolean mayBeNan(Property p) {
-    String typeName = typeNameOf(p);
-    return FLOAT.hasValue(typeName) || DOUBLE.hasValue(typeName);
-  }
-
-  /**
-   * Indicates whether the given property is of type {@code string}.
-   * @param p the given property.
-   * @return {@code true} if the given property is of type {@code string}, {@code false} otherwise.
-   */
-  public boolean isString(Property p) {
-    return isScalarType(p, STRING);
-  }
-
-  private boolean isScalarType(Property p, CommonKeyword typeKeyword) {
-    return typeKeyword.hasValue(typeNameOf(p));
-  }
-
-  /**
-   * Returns the name of the type of the given <code>{@link Property}</code>.
-   * @param p the given {@code Property}.
-   * @return the name of the type of the given {@code Property}.
-   */
-  public String typeNameOf(Property p) {
-    TypeLink link = p.getType();
-    if (link instanceof ScalarTypeLink) return ((ScalarTypeLink) link).getTarget().getName();
-    if (link instanceof ComplexTypeLink) {
-      ComplexType type = ((ComplexTypeLink) link).getTarget();
-      return type == null ? null : type.getName();
-    }
-    return link.toString();
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldScopeFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldScopeFinder.java
index 146186a..12fa210 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldScopeFinder.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldScopeFinder.java
@@ -90,9 +90,9 @@
   private class MessageFieldDescriptorProvider implements IEObjectDescriptionsProvider {
     @Override public Collection<IEObjectDescription> fieldsInTypeOf(IndexedElement e) {
       Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
-      if (e instanceof Property) {
-        Message propertyType = modelFinder.messageTypeOf((Property) e);
-        for (MessageElement element : propertyType.getElements()) {
+      if (e instanceof MessageField) {
+        Message fieldType = modelFinder.messageTypeOf((MessageField) e);
+        for (MessageElement element : fieldType.getElements()) {
           IEObjectDescription d = describe(element);
           if (d != null) descriptions.add(d);
         }
@@ -115,11 +115,11 @@
 
   private class ExtendMessageFieldDescriptorProvider implements IEObjectDescriptionsProvider {
     @Override public Collection<IEObjectDescription> fieldsInTypeOf(IndexedElement e) {
-      if (!(e instanceof Property)) return emptyList();
-      Message propertyType = modelFinder.messageTypeOf((Property) e);
-      if (propertyType == null) return emptyList();
+      if (!(e instanceof MessageField)) return emptyList();
+      Message fieldType = modelFinder.messageTypeOf((MessageField) e);
+      if (fieldType == null) return emptyList();
       Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
-      for (MessageExtension extension : modelFinder.localExtensionsOf(propertyType)) {
+      for (MessageExtension extension : modelFinder.localExtensionsOf(fieldType)) {
         for (MessageElement element : extension.getElements()) {
           if (!(element instanceof IndexedElement)) continue;
           IndexedElement current = (IndexedElement) element;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/FieldNotationScopeFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/FieldNotationScopeFinder.java
index ff28159..56af398 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/FieldNotationScopeFinder.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/FieldNotationScopeFinder.java
@@ -33,15 +33,15 @@
   Collection<IEObjectDescription> sourceOf(FieldNotationNameSource s) {
     EObject container = s.eContainer();
     if (!(container instanceof FieldNotation)) return emptySet();
-    Property p = sourceOf((FieldNotation) container);
-    if (p == null) return emptySet();
+    MessageField field = sourceOf((FieldNotation) container);
+    if (field == null) return emptySet();
     if (s instanceof NormalFieldNotationNameSource) {
-      return propertiesInTypeOf(p);
+      return propertiesInTypeOf(field);
     }
-    return propertiesInExtendMessageOf(p);
+    return propertiesInExtendMessageOf(field);
   }
   
-  private Property sourceOf(FieldNotation notation) {
+  private MessageField sourceOf(FieldNotation notation) {
     EObject container = notation.eContainer();
     IndexedElement source = null;
     if (container instanceof MessageNotation) {
@@ -59,10 +59,10 @@
         return sourceOf(complex);
       }
     }
-    return ((source instanceof Property) ? (Property) source : null);
+    return ((source instanceof MessageField) ? (MessageField) source : null);
   }
 
-  private Property sourceOf(ComplexFieldNotation n) {
+  private MessageField sourceOf(ComplexFieldNotation n) {
     FieldNotationNameSource s = n.getName();
     if (s instanceof NormalFieldNotationNameSource) {
       NormalFieldNotationNameSource normal = (NormalFieldNotationNameSource) s;
@@ -75,25 +75,25 @@
     return null;
   }
   
-  private Collection<IEObjectDescription> propertiesInTypeOf(Property p) {
+  private Collection<IEObjectDescription> propertiesInTypeOf(MessageField field) {
     Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
-    Message propertyType = modelFinder.messageTypeOf(p);
-    for (MessageElement element : propertyType.getElements()) {
-      if (element instanceof Property) {
-        String name = ((Property) element).getName();
+    Message fieldType = modelFinder.messageTypeOf(field);
+    for (MessageElement element : fieldType.getElements()) {
+      if (element instanceof MessageField) {
+        String name = ((MessageField) element).getName();
         descriptions.add(create(name, element));
       }
     }
     return descriptions;
   }
 
-  private Collection<IEObjectDescription> propertiesInExtendMessageOf(Property p) {
+  private Collection<IEObjectDescription> propertiesInExtendMessageOf(MessageField field) {
     Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
-    Message propertyType = modelFinder.messageTypeOf(p);
+    Message fieldType = modelFinder.messageTypeOf(field);
     // check first in descriptor.proto
-    for (MessageExtension extension : modelFinder.extensionsOf(propertyType, modelFinder.rootOf(p))) {
+    for (MessageExtension extension : modelFinder.extensionsOf(fieldType, modelFinder.rootOf(field))) {
       for (MessageElement element : extension.getElements()) {
-        if (!(element instanceof Property)) continue;
+        if (!(element instanceof MessageField)) continue;
         descriptions.addAll(qualifiedNameDescriptions.qualifiedNames(element));
       }
     }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java
index 28fa721..1a7bf63 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java
@@ -36,15 +36,15 @@
 
   private Collection <IEObjectDescription> allProperties(EObject option) {
     ProtoDescriptor descriptor = descriptorProvider.primaryDescriptor();
-    Collection<Property> properties = descriptor.availableOptionsFor(option.eContainer());
-    if (properties.isEmpty()) return emptyList();
-    return describe(properties);
+    Collection<MessageField> fields = descriptor.availableOptionsFor(option.eContainer());
+    if (fields.isEmpty()) return emptyList();
+    return describe(fields);
   }
 
-  private Collection<IEObjectDescription> describe(Collection<Property> properties) {
+  private Collection<IEObjectDescription> describe(Collection<MessageField> fields) {
     List<IEObjectDescription> descriptions = new ArrayList<IEObjectDescription>();
-    for (Property p : properties) {
-      descriptions.add(create(p.getName(), p));
+    for (MessageField field : fields) {
+      descriptions.add(create(field.getName(), field));
     }
     return descriptions;
   }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java
index 0620b88..7fba47b 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java
@@ -8,7 +8,7 @@
  */
 package com.google.eclipse.protobuf.scoping;
 
-import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.PROPERTY__TYPE;
+import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.MESSAGE_FIELD__TYPE;
 import static com.google.eclipse.protobuf.scoping.OptionType.findOptionTypeForLevelOf;
 import static com.google.eclipse.protobuf.util.Closeables.closeQuietly;
 import static com.google.eclipse.protobuf.util.Encodings.UTF_8;
@@ -52,7 +52,7 @@
   }
 
   private final List<ComplexType> allTypes = new ArrayList<ComplexType>();
-  private final Map<OptionType, Map<String, Property>> optionsByType = new HashMap<OptionType, Map<String, Property>>();
+  private final Map<OptionType, Map<String, MessageField>> optionsByType = new HashMap<OptionType, Map<String, MessageField>>();
   private final Map<String, Enum> enumsByName = new HashMap<String, Enum>();
 
   private Protobuf root;
@@ -94,7 +94,7 @@
 
   private void addOptionTypes() {
     for (OptionType type : OptionType.values())
-      optionsByType.put(type, new LinkedHashMap<String, Property>());
+      optionsByType.put(type, new LinkedHashMap<String, MessageField>());
   }
 
   private void initContents() {
@@ -110,8 +110,8 @@
 
   private void initOptions(Message optionGroup, OptionType type) {
     for (MessageElement e : optionGroup.getElements()) {
-      if (e instanceof Property) {
-        addOption((Property) e, type);
+      if (e instanceof MessageField) {
+        addOption((MessageField) e, type);
         continue;
       }
       if (e instanceof Enum) {
@@ -121,13 +121,13 @@
     }
   }
 
-  private void addOption(Property optionDefinition, OptionType type) {
-    if (shouldIgnore(optionDefinition)) return;
-    optionsByType.get(type).put(optionDefinition.getName(), optionDefinition);
+  private void addOption(MessageField optionSource, OptionType type) {
+    if (shouldIgnore(optionSource)) return;
+    optionsByType.get(type).put(optionSource.getName(), optionSource);
   }
 
-  private boolean shouldIgnore(Property property) {
-    return "uninterpreted_option".equals(property.getName());
+  private boolean shouldIgnore(MessageField field) {
+    return "uninterpreted_option".equals(field.getName());
   }
 
   /**
@@ -138,7 +138,7 @@
    * @return the options available for the given option or option container, or an empty collection if the are not any
    * options available.
    */
-  public Collection<Property> availableOptionsFor(EObject o) {
+  public Collection<MessageField> availableOptionsFor(EObject o) {
     EObject target = o;
     if (target instanceof NativeOption) target = target.eContainer();
     OptionType type = findOptionTypeForLevelOf(target);
@@ -147,20 +147,20 @@
   }
 
   @VisibleForTesting
-  Collection<Property> optionsOfType(OptionType type) {
+  Collection<MessageField> optionsOfType(OptionType type) {
     return unmodifiableCollection(optionsByType.get(type).values());
   }
 
   /**
-   * Returns the enum type of the given property, only if the given property is defined in
+   * Returns the enum type of the given field, only if the given field is defined in
    * {@code google/protobuf/descriptor.proto} and its type is enum (more details can be found <a
    * href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
-   * @param p the given property.
-   * @return the enum type of the given property or {@code null} if the type of the given property is not enum.
+   * @param field the given field.
+   * @return the enum type of the given field or {@code null} if the type of the given field is not enum.
    */
-  public Enum enumTypeOf(Property p) {
-    if (p == null) return null;
-    INode node = nodes.firstNodeForFeature(p, PROPERTY__TYPE);
+  public Enum enumTypeOf(MessageField field) {
+    if (field == null) return null;
+    INode node = nodes.firstNodeForFeature(field, MESSAGE_FIELD__TYPE);
     if (node == null) return null;
     String typeName = node.getText();
     return (isEmpty(typeName)) ? null : enumByName(typeName.trim());
@@ -192,8 +192,8 @@
   }
 
   @VisibleForTesting
-  Property option(String name, OptionType type) {
-    Map<String, Property> optionByName = optionsByType.get(type);
+  MessageField option(String name, OptionType type) {
+    Map<String, MessageField> optionByName = optionsByType.get(type);
     return (optionByName != null) ? optionByName.get(name) : null;
   }
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
index fd23681..9f3e573 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
@@ -49,7 +49,7 @@
   @SuppressWarnings("unused")
   public IScope scope_ComplexTypeLink_target(ComplexTypeLink t, EReference r) {
     EObject c = t.eContainer();
-    if (c instanceof Property) {
+    if (c instanceof MessageField) {
       return createScope(findTypeScope(c));
     }
     Set<IEObjectDescription> descriptions = emptySet();
@@ -80,7 +80,7 @@
     if (container instanceof NativeOption) {
       ProtoDescriptor descriptor = descriptorProvider.primaryDescriptor();
       IndexedElement e = options.rootSourceOf((Option) container);
-      anEnum = descriptor.enumTypeOf((Property) e);
+      anEnum = descriptor.enumTypeOf((MessageField) e);
     }
     if (container instanceof CustomOption) {
       CustomOption option = (CustomOption) container;
@@ -89,14 +89,14 @@
     if (container instanceof NativeFieldOption) {
       ProtoDescriptor descriptor = descriptorProvider.primaryDescriptor();
       IndexedElement c = fieldOptions.rootSourceOf((FieldOption) container);
-      anEnum = descriptor.enumTypeOf((Property) c);
+      anEnum = descriptor.enumTypeOf((MessageField) c);
     }
     if (container instanceof CustomFieldOption) {
       CustomFieldOption option = (CustomFieldOption) container;
       container = fieldOptions.sourceOf(option);
     }
-    if (container instanceof Property) {
-      anEnum = modelFinder.enumTypeOf((Property) container);
+    if (container instanceof MessageField) {
+      anEnum = modelFinder.enumTypeOf((MessageField) container);
     }
     return createScope(literalDescriptions.literalsOf(anEnum));
   }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
index 9b91d09..36647a4 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
@@ -39,7 +39,7 @@
   @Inject private IndexedElements indexedElements;
   @Inject private ImportUriResolver uriResolver;
   @Inject private IQualifiedNameProvider qualifiedNameProvider;
-  @Inject private Properties properties;
+  @Inject private Fields properties;
 
   @Check public void checkIsProto2(Protobuf protobuf) {
     if (protobuf instanceof NonProto2) {
@@ -49,13 +49,13 @@
   
   @Check public void checkDefaultValueType(FieldOption option) {
     if (!fieldOptions.isDefaultValueOption(option)) return;
-    Property property = (Property) option.eContainer();
+    MessageField field = (MessageField) option.eContainer();
     ValueRef defaultValue = option.getValue();
-    if (properties.isString(property)) {
+    if (properties.isString(field)) {
       if (defaultValue instanceof StringRef) return;
       error(expectedString, FIELD_OPTION__VALUE);
     }
-    if (properties.isBool(property)) {
+    if (properties.isBool(field)) {
       if (defaultValue instanceof BooleanRef) return;
       error(expectedTrueOrFalse, FIELD_OPTION__VALUE);
     }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java
index a67b593..78b02d5 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java
@@ -15,7 +15,7 @@
 import org.eclipse.xtext.nodemodel.SyntaxErrorMessage;
 import org.eclipse.xtext.parser.antlr.SyntaxErrorMessageProvider;
 
-import com.google.eclipse.protobuf.protobuf.Property;
+import com.google.eclipse.protobuf.protobuf.MessageField;
 
 /**
  * Messages for syntax errors.
@@ -27,15 +27,15 @@
   @Override public SyntaxErrorMessage getSyntaxErrorMessage(IParserErrorContext context) {
     String message = context.getDefaultMessage();
     EObject currentContext = context.getCurrentContext();
-    if (currentContext instanceof Property) message =  mapToProtocMessage(message, (Property) currentContext);
+    if (currentContext instanceof MessageField) message =  mapToProtocMessage(message, (MessageField) currentContext);
     if (currentContext == null && message.contains("RULE_STRING")) return null;
     return new SyntaxErrorMessage(message, SYNTAX_DIAGNOSITC);
   }
 
-  private String mapToProtocMessage(String message, Property property) {
-    if (message.contains("RULE_ID") && property.getName() == null)
+  private String mapToProtocMessage(String message, MessageField field) {
+    if (message.contains("RULE_ID") && field.getName() == null)
       return expectedFieldName;
-    if (message.equals("mismatched input ';' expecting '='") && property.getIndex() == 0)
+    if (message.equals("mismatched input ';' expecting '='") && field.getIndex() == 0)
       return missingFieldNumber;
     return message;
   }