In progress [Issue 125] Support for custom options.

Code cleanup.
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/FieldOptions_fieldFrom_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_fieldFrom_Test.java
similarity index 95%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/FieldOptions_fieldFrom_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_fieldFrom_Test.java
index 81e38e6..18a79eb 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/FieldOptions_fieldFrom_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_fieldFrom_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.FieldOptionFinder.findFieldOption;
 import static com.google.eclipse.protobuf.junit.find.Name.name;
@@ -20,6 +20,7 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.FieldOptions;
 import com.google.eclipse.protobuf.protobuf.CustomFieldOption;
 import com.google.eclipse.protobuf.protobuf.Property;
 import com.google.eclipse.protobuf.protobuf.Protobuf;
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/FieldOptions_isDefaultValueOption_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_isDefaultValueOption_Test.java
similarity index 94%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/FieldOptions_isDefaultValueOption_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_isDefaultValueOption_Test.java
index c320a8d..ea04c89 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/FieldOptions_isDefaultValueOption_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_isDefaultValueOption_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.FieldOptionFinder.findFieldOption;
 import static com.google.eclipse.protobuf.junit.find.Name.name;
@@ -18,6 +18,7 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.FieldOptions;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/FieldOptions_nameOf_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_nameOf_Test.java
similarity index 95%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/FieldOptions_nameOf_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_nameOf_Test.java
index 6d97e35..0c0ef93 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/FieldOptions_nameOf_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_nameOf_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.FieldOptionFinder.findFieldOption;
 import static com.google.eclipse.protobuf.junit.find.Name.name;
@@ -18,6 +18,7 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.FieldOptions;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/FieldOptions_propertyFrom_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_propertyFrom_Test.java
similarity index 95%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/FieldOptions_propertyFrom_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_propertyFrom_Test.java
index 7d3e768..1f2b873 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/FieldOptions_propertyFrom_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_propertyFrom_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.FieldOptionFinder.findFieldOption;
 import static com.google.eclipse.protobuf.junit.find.Name.name;
@@ -18,6 +18,7 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.FieldOptions;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/Options_fieldFrom_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_fieldFrom_Test.java
similarity index 95%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/Options_fieldFrom_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_fieldFrom_Test.java
index a8cc57f..cca1738 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/Options_fieldFrom_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_fieldFrom_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.Name.name;
 import static com.google.eclipse.protobuf.junit.find.OptionFinder.findOption;
@@ -20,6 +20,7 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.Options;
 import com.google.eclipse.protobuf.protobuf.CustomOption;
 import com.google.eclipse.protobuf.protobuf.Property;
 import com.google.eclipse.protobuf.protobuf.Protobuf;
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/Options_propertyFrom_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_propertyFrom_Test.java
similarity index 95%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/Options_propertyFrom_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_propertyFrom_Test.java
index 3243aaf..888b8ca 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/util/Options_propertyFrom_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_propertyFrom_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.Name.name;
 import static com.google.eclipse.protobuf.junit.find.OptionFinder.findOption;
@@ -18,6 +18,7 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.Options;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
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 d9b483d..2362293 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
@@ -8,7 +8,7 @@
  */
 package com.google.eclipse.protobuf.scoping;
 
-import static com.google.eclipse.protobuf.util.OptionType.FILE;
+import static com.google.eclipse.protobuf.model.OptionType.FILE;
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.hamcrest.core.IsNull.nullValue;
 import static org.junit.Assert.assertThat;
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_enumTypeOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_enumTypeOf_Test.java
similarity index 88%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_enumTypeOf_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_enumTypeOf_Test.java
index 883013c..afc810f 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_enumTypeOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_enumTypeOf_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.Name.name;
 import static com.google.eclipse.protobuf.junit.find.PropertyFinder.findProperty;
@@ -19,22 +19,23 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.ModelFinder;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Enum;
 
 /**
- * Tests for <code>{@link ProtobufElementFinder#enumTypeOf(Property)}</code>.
+ * Tests for <code>{@link ModelFinder#enumTypeOf(Property)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class ProtobufElementFinder_enumTypeOf_Test {
+public class ModelFinder_enumTypeOf_Test {
 
   @Rule public XtextRule xtext = XtextRule.unitTestSetup();
 
-  private ProtobufElementFinder finder;
+  private ModelFinder finder;
 
   @Before public void setUp() {
-    finder = xtext.getInstanceOf(ProtobufElementFinder.class);
+    finder = xtext.getInstanceOf(ModelFinder.class);
   }
 
   @Test public void should_return_enum_if_property_type_is_enum() {
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_importsIn_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_importsIn_Test.java
similarity index 84%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_importsIn_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_importsIn_Test.java
index 08ebcc7..9fd4c3a 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_importsIn_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_importsIn_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.assertThat;
@@ -17,21 +17,22 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.ModelFinder;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Tests for <code>{@link ProtobufElementFinder#importsIn(Protobuf)}</code>.
+ * Tests for <code>{@link ModelFinder#importsIn(Protobuf)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class ProtobufElementFinder_importsIn_Test {
+public class ModelFinder_importsIn_Test {
 
   @Rule public XtextRule xtext = XtextRule.unitTestSetup();
 
-  private ProtobufElementFinder finder;
+  private ModelFinder finder;
 
   @Before public void setUp() {
-    finder = xtext.getInstanceOf(ProtobufElementFinder.class);
+    finder = xtext.getInstanceOf(ModelFinder.class);
   }
 
   @Test public void should_return_all_imports() {
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_packageOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_packageOf_Test.java
similarity index 87%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_packageOf_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_packageOf_Test.java
index 872f4bd..09f32c8 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_packageOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_packageOf_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.Name.name;
 import static com.google.eclipse.protobuf.junit.find.PropertyFinder.findProperty;
@@ -20,22 +20,23 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.ModelFinder;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Package;
 
 /**
- * Tests for <code>{@link ProtobufElementFinder#packageOf(EObject)}</code>.
+ * Tests for <code>{@link ModelFinder#packageOf(EObject)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class ProtobufElementFinder_packageOf_Test {
+public class ModelFinder_packageOf_Test {
 
   @Rule public XtextRule xtext = XtextRule.unitTestSetup();
 
-  private ProtobufElementFinder finder;
+  private ModelFinder finder;
 
   @Before public void setUp() {
-    finder = xtext.getInstanceOf(ProtobufElementFinder.class);
+    finder = xtext.getInstanceOf(ModelFinder.class);
   }
 
   @Test public void should_return_package_if_proto_has_one() {
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_rootOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_rootOf_Test.java
similarity index 82%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_rootOf_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_rootOf_Test.java
index 0fdbd4e..ce5baca 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_rootOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_rootOf_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.Name.name;
 import static com.google.eclipse.protobuf.junit.find.PropertyFinder.findProperty;
@@ -19,21 +19,22 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.ModelFinder;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Tests for <code>{@link ProtobufElementFinder#rootOf(EObject)}</code>.
+ * Tests for <code>{@link ModelFinder#rootOf(EObject)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class ProtobufElementFinder_rootOf_Test {
+public class ModelFinder_rootOf_Test {
 
   @Rule public XtextRule xtext = XtextRule.unitTestSetup();
 
-  private ProtobufElementFinder finder;
+  private ModelFinder finder;
 
   @Before public void setUp() {
-    finder = xtext.getInstanceOf(ProtobufElementFinder.class);
+    finder = xtext.getInstanceOf(ModelFinder.class);
   }
 
   @Test public void should_return_root_of_proto() {
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_scalarTypeOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_scalarTypeOf_Test.java
similarity index 87%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_scalarTypeOf_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_scalarTypeOf_Test.java
index 8facaf6..c217d1b 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_scalarTypeOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_scalarTypeOf_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.Name.name;
 import static com.google.eclipse.protobuf.junit.find.PropertyFinder.findProperty;
@@ -19,21 +19,22 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.ModelFinder;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Tests for <code>{@link ProtobufElementFinder#scalarTypeOf(Property)}</code>.
+ * Tests for <code>{@link ModelFinder#scalarTypeOf(Property)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class ProtobufElementFinder_scalarTypeOf_Test {
+public class ModelFinder_scalarTypeOf_Test {
 
   @Rule public XtextRule xtext = XtextRule.unitTestSetup();
 
-  private ProtobufElementFinder finder;
+  private ModelFinder finder;
 
   @Before public void setUp() {
-    finder = xtext.getInstanceOf(ProtobufElementFinder.class);
+    finder = xtext.getInstanceOf(ModelFinder.class);
   }
 
   @Test public void should_return_scalar_if_property_type_is_scalar() {
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ModelNodes_firstNodeForFeature_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelNodes_firstNodeForFeature_Test.java
similarity index 86%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ModelNodes_firstNodeForFeature_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelNodes_firstNodeForFeature_Test.java
index 3c6d723..abcb15c 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ModelNodes_firstNodeForFeature_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelNodes_firstNodeForFeature_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.Name.name;
 import static com.google.eclipse.protobuf.junit.find.PropertyFinder.findProperty;
@@ -21,10 +21,11 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.INodes;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Tests for <code>{@link ModelNodes#firstNodeForFeature(EObject, EStructuralFeature)}</code>
+ * Tests for <code>{@link INodes#firstNodeForFeature(EObject, EStructuralFeature)}</code>
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -32,10 +33,10 @@
 
   @Rule public XtextRule xtext = XtextRule.unitTestSetup();
 
-  private ModelNodes nodes;
+  private INodes nodes;
 
   @Before public void setUp() {
-    nodes = xtext.getInstanceOf(ModelNodes.class);
+    nodes = xtext.getInstanceOf(INodes.class);
   }
 
   @Test public void should_return_first_node_for_feature() {
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Packages_areRelated_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Packages_areRelated_Test.java
similarity index 95%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Packages_areRelated_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Packages_areRelated_Test.java
index 782a187..145ecd4 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Packages_areRelated_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Packages_areRelated_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.assertThat;
@@ -14,8 +14,8 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.stubs.protobuf.PackageStub;
+import com.google.eclipse.protobuf.model.util.Packages;
 import com.google.eclipse.protobuf.protobuf.Package;
-import com.google.eclipse.protobuf.util.Packages;
 
 /**
  * Tests for <code>{@link Packages#areRelated(Package, Package)}</code>.
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isBool_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isBool_Test.java
similarity index 94%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isBool_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isBool_Test.java
index de31f6c..bf88542 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isBool_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isBool_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.Name.name;
 import static com.google.eclipse.protobuf.junit.find.PropertyFinder.findProperty;
@@ -18,6 +18,7 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.Properties;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isPrimitive_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isPrimitive_Test.java
similarity index 96%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isPrimitive_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isPrimitive_Test.java
index aa81e03..f35eaec 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isPrimitive_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isPrimitive_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.PropertyFinder.allPropertiesIn;
 import static org.hamcrest.core.IsEqual.equalTo;
@@ -16,6 +16,7 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.Properties;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isString_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isString_Test.java
similarity index 94%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isString_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isString_Test.java
index 4b5bf25..5777f7a 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isString_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_isString_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.Name.name;
 import static com.google.eclipse.protobuf.junit.find.PropertyFinder.findProperty;
@@ -18,6 +18,7 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.Properties;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_typeNameOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_typeNameOf_Test.java
similarity index 95%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_typeNameOf_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_typeNameOf_Test.java
index 05e16f9..dcfb8cf 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_typeNameOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Properties_typeNameOf_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.junit.find.Name.name;
 import static com.google.eclipse.protobuf.junit.find.PropertyFinder.findProperty;
@@ -18,6 +18,7 @@
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
+import com.google.eclipse.protobuf.model.util.Properties;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder.java
index b385e47..0a456c1 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder.java
@@ -21,7 +21,7 @@
 import org.eclipse.xtext.nodemodel.*;
 import org.eclipse.xtext.util.*;
 
-import com.google.eclipse.protobuf.util.ModelNodes;
+import com.google.eclipse.protobuf.model.util.INodes;
 import com.google.inject.*;
 
 /**
@@ -32,7 +32,7 @@
 
   private static final String MATCH_ANYTHING = ".*";
 
-  @Inject private ModelNodes nodes;
+  @Inject private INodes nodes;
   @Inject private final IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE;
 
   Pair<INode, Matcher> matchingCommentNode(EObject target, String...patternsToMatch) {
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 dfe06d3..8234de9 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
@@ -27,11 +27,11 @@
 import org.eclipse.xtext.util.concurrent.IUnitOfWork;
 
 import com.google.eclipse.protobuf.grammar.CommonKeyword;
+import com.google.eclipse.protobuf.model.util.INodes;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Enum;
 import com.google.eclipse.protobuf.ui.preferences.pages.editor.numerictag.*;
 import com.google.eclipse.protobuf.ui.util.*;
-import com.google.eclipse.protobuf.util.ModelNodes;
 import com.google.inject.Inject;
 
 /**
@@ -50,7 +50,7 @@
   @Inject private CommentNodesFinder commentNodesFinder;
   @Inject private Fields fields;
   @Inject private Literals literals;
-  @Inject private ModelNodes nodes;
+  @Inject private INodes nodes;
   @Inject private NumericTagPreferencesFactory preferencesFactory;
   @Inject private ParserBasedContentAssistContextFactory contextFactory;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/CustomOptionProperties.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/CustomOptionProperties.java
index ba8479f..a232ae7 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/CustomOptionProperties.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/CustomOptionProperties.java
@@ -12,6 +12,8 @@
 import static java.util.Collections.*;
 import static org.eclipse.emf.ecore.util.EcoreUtil.getAllContents;
 
+import com.google.eclipse.protobuf.model.OptionType;
+import com.google.eclipse.protobuf.model.util.*;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Package;
 import com.google.eclipse.protobuf.util.*;
@@ -29,7 +31,7 @@
 class CustomOptionProperties {
 
   @Inject private Imports imports;
-  @Inject private ProtobufElementFinder finder;
+  @Inject private ModelFinder finder;
   @Inject private Options options;
   @Inject private Packages packages;
   @Inject private Resources resources;
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 740b443..25c5245 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
@@ -29,14 +29,14 @@
 import org.eclipse.xtext.ui.editor.contentassist.*;
 
 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.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Enum;
 import com.google.eclipse.protobuf.scoping.*;
 import com.google.eclipse.protobuf.ui.grammar.CompoundElement;
 import com.google.eclipse.protobuf.ui.labeling.Images;
 import com.google.eclipse.protobuf.ui.util.*;
-import com.google.eclipse.protobuf.util.*;
-import com.google.eclipse.protobuf.util.Properties;
 import com.google.inject.Inject;
 
 /**
@@ -49,7 +49,7 @@
   @Inject private CustomOptionProperties customOptionProperties;
   @Inject private ProtoDescriptorProvider descriptorProvider;
   @Inject private FieldOptions fieldOptions;
-  @Inject private ProtobufElementFinder finder;
+  @Inject private ModelFinder finder;
   @Inject private Fields fields;
   @Inject private Images images;
   @Inject private PluginImageHelper imageHelper;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SingleLineCommentDocumentationProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SingleLineCommentDocumentationProvider.java
index 2dee40c..0d9bb15 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SingleLineCommentDocumentationProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SingleLineCommentDocumentationProvider.java
@@ -15,8 +15,8 @@
 import org.eclipse.xtext.documentation.IEObjectDocumentationProvider;
 import org.eclipse.xtext.nodemodel.*;
 
+import com.google.eclipse.protobuf.model.util.*;
 import com.google.eclipse.protobuf.protobuf.*;
-import com.google.eclipse.protobuf.util.*;
 import com.google.inject.Inject;
 
 /**
@@ -31,7 +31,7 @@
   private static final String UNIX_NEW_LINE = "\\n";
 
   @Inject private FieldOptions fieldOptions;
-  @Inject private ModelNodes nodes;
+  @Inject private INodes nodes;
   @Inject private Options options;
 
   public String getDocumentation(EObject o) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconcileStrategy.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconcileStrategy.java
index eedeb01..4b5cc25 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconcileStrategy.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconcileStrategy.java
@@ -15,7 +15,7 @@
 import org.eclipse.ui.texteditor.spelling.SpellingService;
 import org.eclipse.xtext.ui.editor.reconciler.XtextDocumentReconcileStrategy;
 
-import com.google.eclipse.protobuf.util.ModelNodes;
+import com.google.eclipse.protobuf.model.util.INodes;
 import com.google.inject.Inject;
 
 /**
@@ -25,7 +25,7 @@
 
   private ProtobufSpelling spellingStrategy;
 
-  @Inject private ModelNodes nodes;
+  @Inject private INodes nodes;
 
   @Override public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) {
     super.reconcile(dirtyRegion, subRegion);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java
index 23cdaa7..2259474 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java
@@ -21,17 +21,17 @@
 import org.eclipse.xtext.ui.editor.model.XtextDocument;
 import org.eclipse.xtext.util.concurrent.IUnitOfWork;
 
+import com.google.eclipse.protobuf.model.util.INodes;
 import com.google.eclipse.protobuf.protobuf.Import;
-import com.google.eclipse.protobuf.util.ModelNodes;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
 class ProtobufSpelling extends SpellingReconcileStrategy {
 
-  private final ModelNodes nodes;
+  private final INodes nodes;
 
-  ProtobufSpelling(ISourceViewer viewer, SpellingService spellingService, ModelNodes nodes) {
+  ProtobufSpelling(ISourceViewer viewer, SpellingService spellingService, INodes nodes) {
     super(viewer, spellingService);
     this.nodes = nodes;
   }
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 1ed9972..df82389 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
@@ -18,10 +18,10 @@
 import org.eclipse.xtext.resource.XtextResource;
 import org.eclipse.xtext.ui.editor.syntaxcoloring.*;
 
+import com.google.eclipse.protobuf.model.util.*;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Enum;
 import com.google.eclipse.protobuf.protobuf.Package;
-import com.google.eclipse.protobuf.util.*;
 import com.google.inject.Inject;
 
 /**
@@ -29,9 +29,8 @@
  */
 public class ProtobufSemanticHighlightingCalculator implements ISemanticHighlightingCalculator {
 
-  @Inject private ModelNodes nodes;
+  @Inject private INodes nodes;
   @Inject private Options options;
-  @Inject private FieldOptions fieldOptions;
 
   public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor) {
     if (resource == null) return;
@@ -122,9 +121,6 @@
 
   private void highlightOptions(Field field, IHighlightedPositionAcceptor acceptor) {
     for (FieldOption option : field.getFieldOptions()) {
-      // TODO fix this 
-      // String highlightId = fieldOptions.isDefaultValueOption(option) ? KEYWORD_ID : DEFAULT_ID;
-      // highlightName(option, acceptor, highlightId);
       ValueRef ref = option.getValue();
       if (ref instanceof LiteralRef) {
         highlightFirstFeature(option, FIELD_OPTION__VALUE, acceptor, ENUM_LITERAL_ID);
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 df19786..8eb7508 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
@@ -16,8 +16,8 @@
 import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.xtext.nodemodel.INode;
 
+import com.google.eclipse.protobuf.model.util.*;
 import com.google.eclipse.protobuf.protobuf.*;
-import com.google.eclipse.protobuf.util.*;
 import com.google.inject.*;
 
 /**
@@ -27,7 +27,7 @@
  */
 @Singleton public class Labels {
 
-  @Inject private ModelNodes nodes;
+  @Inject private INodes nodes;
   @Inject private Options options;
   @Inject private Properties properties;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/Validation.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/Validation.java
index 255e62f..0ed6920 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/Validation.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/Validation.java
@@ -25,8 +25,8 @@
 import org.eclipse.xtext.util.concurrent.IUnitOfWork;
 
 import com.google.eclipse.protobuf.conversion.STRINGValueConverter;
+import com.google.eclipse.protobuf.model.util.INodes;
 import com.google.eclipse.protobuf.protobuf.Import;
-import com.google.eclipse.protobuf.util.ModelNodes;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -94,8 +94,8 @@
     return converter.toValue(text, node);
   }
 
-  private static ModelNodes nodes() {
-    return injector().getInstance(ModelNodes.class);
+  private static INodes nodes() {
+    return injector().getInstance(INodes.class);
   }
 
   private Validation() {}
diff --git a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
index 21189b7..b1316ee 100644
--- a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
+++ b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
@@ -23,6 +23,8 @@
 Export-Package: com.google.eclipse.protobuf,

  com.google.eclipse.protobuf.conversion,

  com.google.eclipse.protobuf.grammar,

+ com.google.eclipse.protobuf.model,

+ com.google.eclipse.protobuf.model.util,

  com.google.eclipse.protobuf.parseTreeConstruction,

  com.google.eclipse.protobuf.parser.antlr,

  com.google.eclipse.protobuf.parser.antlr.internal,

diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/OptionType.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/OptionType.java
similarity index 97%
rename from com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/OptionType.java
rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/OptionType.java
index a58b31f..7ead38b 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/OptionType.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/OptionType.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model;
 
 import java.util.*;
 import java.util.Map.Entry;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/FieldOptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/FieldOptions.java
similarity index 98%
rename from com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/FieldOptions.java
rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/FieldOptions.java
index 5291ee4..41d1365 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/FieldOptions.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/FieldOptions.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.inject.Singleton;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/ModelNodes.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/INodes.java
similarity index 97%
rename from com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/ModelNodes.java
rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/INodes.java
index 6c8fb35..a200c52 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/ModelNodes.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/INodes.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static org.eclipse.xtext.nodemodel.util.NodeModelUtils.findNodesForFeature;
 
@@ -24,7 +24,7 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton
-public class ModelNodes {
+public class INodes {
 
   private static final String SINGLE_LINE_COMMENT_RULE_NAME = "SL_COMMENT";
 
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Imports.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Imports.java
similarity index 97%
rename from com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Imports.java
rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Imports.java
index 3b0b4b9..4fbe746 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Imports.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Imports.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import com.google.eclipse.protobuf.protobuf.Import;
 import com.google.eclipse.protobuf.scoping.ProtoDescriptorProvider;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/ProtobufElementFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/ModelFinder.java
similarity index 97%
rename from com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/ProtobufElementFinder.java
rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/ModelFinder.java
index 6a0bfeb..3529d39 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/ProtobufElementFinder.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/ModelFinder.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static java.util.Collections.unmodifiableList;
 import static org.eclipse.emf.ecore.util.EcoreUtil.getAllContents;
@@ -29,7 +29,7 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton
-public class ProtobufElementFinder {
+public class ModelFinder {
 
   /**
    * Returns the message type of the given property, only if the type of the given property is a message.
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Options.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Options.java
similarity index 96%
rename from com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Options.java
rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Options.java
index f92ae92..4eb677f 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Options.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Options.java
@@ -6,10 +6,11 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import org.eclipse.emf.ecore.EObject;
 
+import com.google.eclipse.protobuf.model.OptionType;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.inject.Singleton;
 
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Packages.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Packages.java
similarity index 97%
rename from com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Packages.java
rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Packages.java
index 2219dca..ae37a41 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Packages.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Packages.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static org.eclipse.xtext.util.Strings.isEmpty;
 
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Properties.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Properties.java
similarity index 98%
rename from com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Properties.java
rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Properties.java
index df6ed1c..e31414c 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Properties.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Properties.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.util;
+package com.google.eclipse.protobuf.model.util;
 
 import static com.google.eclipse.protobuf.grammar.CommonKeyword.*;
 import static com.google.eclipse.protobuf.protobuf.Modifier.OPTIONAL;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java
index 4b4ee83..d21a62c 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java
@@ -20,8 +20,8 @@
 import org.eclipse.xtext.util.Pair;
 
 import com.google.common.base.Function;
+import com.google.eclipse.protobuf.model.util.ModelFinder;
 import com.google.eclipse.protobuf.protobuf.Package;
-import com.google.eclipse.protobuf.util.ProtobufElementFinder;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 
@@ -35,7 +35,7 @@
   @Inject private IQualifiedNameConverter converter = new IQualifiedNameConverter.DefaultImpl();
   @Inject private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE;
 
-  @Inject private ProtobufElementFinder finder;
+  @Inject private ModelFinder finder;
   
   private Function<EObject, String> resolver = newResolver(String.class, "name");
 
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionDescriptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionDescriptions.java
index e037e83..3dc4220 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionDescriptions.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionDescriptions.java
@@ -8,7 +8,7 @@
  */
 package com.google.eclipse.protobuf.scoping;
 
-import static com.google.eclipse.protobuf.util.OptionType.typeOf;
+import static com.google.eclipse.protobuf.model.OptionType.typeOf;
 import static java.util.Collections.emptyList;
 import static org.eclipse.emf.ecore.util.EcoreUtil.getAllContents;
 import static org.eclipse.xtext.resource.EObjectDescription.create;
@@ -21,6 +21,8 @@
 import org.eclipse.xtext.naming.QualifiedName;
 import org.eclipse.xtext.resource.IEObjectDescription;
 
+import com.google.eclipse.protobuf.model.OptionType;
+import com.google.eclipse.protobuf.model.util.*;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Package;
 import com.google.eclipse.protobuf.util.*;
@@ -31,7 +33,7 @@
  */
 class CustomOptionDescriptions {
 
-  @Inject private ProtobufElementFinder finder;
+  @Inject private ModelFinder finder;
   @Inject private ImportedNamesProvider importedNamesProvider;
   @Inject private Imports imports;
   @Inject private LocalNamesProvider localNamesProvider;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ImportedNamesProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ImportedNamesProvider.java
index d0eea21..4240c6e 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ImportedNamesProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ImportedNamesProvider.java
@@ -20,7 +20,7 @@
 import org.eclipse.xtext.util.*;
 
 import com.google.common.base.Function;
-import com.google.eclipse.protobuf.util.ProtobufElementFinder;
+import com.google.eclipse.protobuf.model.util.ModelFinder;
 import com.google.inject.*;
 
 /**
@@ -33,7 +33,7 @@
   @Inject private final IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE;
   @Inject private final IQualifiedNameConverter converter = new IQualifiedNameConverter.DefaultImpl();
 
-  @Inject private ProtobufElementFinder finder;
+  @Inject private ModelFinder finder;
   @Inject private QualifiedNames qualifiedNames;
 
   private final Function<EObject, String> resolver = newResolver(String.class, "name");
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/LocalNamesProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/LocalNamesProvider.java
index 8c19341..108d98b 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/LocalNamesProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/LocalNamesProvider.java
@@ -20,7 +20,7 @@
 import org.eclipse.xtext.util.*;
 
 import com.google.common.base.Function;
-import com.google.eclipse.protobuf.util.ProtobufElementFinder;
+import com.google.eclipse.protobuf.model.util.ModelFinder;
 import com.google.inject.*;
 
 /**
@@ -59,7 +59,7 @@
   @Inject private final IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE;
   @Inject private final IQualifiedNameConverter converter = new IQualifiedNameConverter.DefaultImpl();
 
-  @Inject private ProtobufElementFinder finder;
+  @Inject private ModelFinder finder;
   @Inject private QualifiedNames qualifiedNames;
 
   private final Function<EObject, String> resolver = newResolver(String.class, "name");
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 d3cd34a..9460829 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,10 +8,10 @@
  */
 package com.google.eclipse.protobuf.scoping;
 
+import static com.google.eclipse.protobuf.model.OptionType.*;
 import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.PROPERTY__TYPE;
 import static com.google.eclipse.protobuf.util.Closeables.closeQuietly;
 import static com.google.eclipse.protobuf.util.Encodings.UTF_8;
-import static com.google.eclipse.protobuf.util.OptionType.*;
 import static java.util.Collections.*;
 import static org.eclipse.xtext.EcoreUtil2.*;
 import static org.eclipse.xtext.util.CancelIndicator.NullImpl;
@@ -28,9 +28,10 @@
 import org.eclipse.xtext.resource.XtextResource;
 
 import com.google.common.annotations.VisibleForTesting;
+import com.google.eclipse.protobuf.model.OptionType;
+import com.google.eclipse.protobuf.model.util.INodes;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Enum;
-import com.google.eclipse.protobuf.util.*;
 
 /**
  * Contains the elements from descriptor.proto (provided with protobuf's library.)
@@ -58,10 +59,10 @@
   private Protobuf root;
 
   private final String importUri;
-  private final ModelNodes nodes;
+  private final INodes nodes;
   private final XtextResource resource;
 
-  ProtoDescriptor(String importUri, URI location, IParser parser, ModelNodes nodes) {
+  ProtoDescriptor(String importUri, URI location, IParser parser, INodes nodes) {
     this.importUri = importUri;
     this.nodes = nodes;
     addOptionTypes();
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java
index 7c91a25..0069deb 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java
@@ -18,7 +18,7 @@
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.xtext.parser.IParser;
 
-import com.google.eclipse.protobuf.util.ModelNodes;
+import com.google.eclipse.protobuf.model.util.INodes;
 import com.google.inject.*;
 
 /**
@@ -32,7 +32,7 @@
   private static final String EXTENSION_ID = "com.google.eclipse.protobuf.descriptorSource";
 
   @Inject private IParser parser;
-  @Inject private ModelNodes nodes;
+  @Inject private INodes nodes;
   @Inject private IExtensionRegistry registry;
 
   private Map<String, URI> descriptorInfos;
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 4b2a06c..b029280 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
@@ -17,9 +17,9 @@
 import org.eclipse.xtext.scoping.IScope;
 import org.eclipse.xtext.scoping.impl.*;
 
+import com.google.eclipse.protobuf.model.util.*;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Enum;
-import com.google.eclipse.protobuf.util.*;
 import com.google.inject.Inject;
 
 /**
@@ -36,7 +36,7 @@
   @Inject private CustomOptionDescriptions customOptionDescriptions;
   @Inject private ProtoDescriptorProvider descriptorProvider;
   @Inject private FieldOptions fieldOptions;
-  @Inject private ProtobufElementFinder finder;
+  @Inject private ModelFinder finder;
   @Inject private LiteralDescriptions literalDescriptions;
   @Inject private NativeOptionDescriptions nativeOptionDescriptions;
   @Inject private Options options;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeDescriptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeDescriptions.java
index 9b0af62..555ed7f 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeDescriptions.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeDescriptions.java
@@ -20,6 +20,7 @@
 import org.eclipse.xtext.naming.QualifiedName;
 import org.eclipse.xtext.resource.IEObjectDescription;
 
+import com.google.eclipse.protobuf.model.util.*;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Package;
 import com.google.eclipse.protobuf.util.*;
@@ -31,7 +32,7 @@
 class TypeDescriptions {
 
   @Inject private ProtoDescriptorProvider descriptorProvider;
-  @Inject private ProtobufElementFinder finder;
+  @Inject private ModelFinder finder;
   @Inject private ImportedNamesProvider importedNamesProvider;
   @Inject private Imports imports;
   @Inject private LocalNamesProvider localNamesProvider;
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 8e47ed3..0b38cc9 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
@@ -19,6 +19,7 @@
 import org.eclipse.xtext.scoping.impl.ImportUriResolver;
 import org.eclipse.xtext.validation.Check;
 
+import com.google.eclipse.protobuf.model.util.*;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Package;
 import com.google.eclipse.protobuf.util.*;