Code cleanup.
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_isDefaultValueOption_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_isDefaultValueOption_Test.java
similarity index 79%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_isDefaultValueOption_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_isDefaultValueOption_Test.java
index 71aa9c5..54b8ce6 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_isDefaultValueOption_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_isDefaultValueOption_Test.java
@@ -18,18 +18,18 @@
 import com.google.eclipse.protobuf.protobuf.FieldOption;
 
 /**
- * Tests for <code>{@link FieldOptions#isDefaultValueOption(FieldOption)}</code>.
+ * Tests for <code>{@link Options2#isDefaultValueOption(FieldOption)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class FieldOptions_isDefaultValueOption_Test {
+public class Options2_isDefaultValueOption_Test {
 
   @Rule public XtextRule xtext = createWith(integrationTestSetup());
 
-  private FieldOptions fieldOptions;
+  private Options2 options;
 
   @Before public void setUp() {
-    fieldOptions = xtext.getInstanceOf(FieldOptions.class);
+    options = xtext.getInstanceOf(Options2.class);
   }
 
   // syntax = "proto2";
@@ -39,7 +39,7 @@
   // }
   @Test public void should_return_true_if_FieldOption_is_default_value_one() {
     FieldOption option = xtext.find("default", FieldOption.class);
-    assertTrue(fieldOptions.isDefaultValueOption(option));
+    assertTrue(options.isDefaultValueOption(option));
   }
 
   // syntax = "proto2";
@@ -49,6 +49,6 @@
   // }
   @Test public void should_return_false_if_FieldOption_is_not_default_value_one() {
     FieldOption option = xtext.find("deprecated", FieldOption.class);
-    assertFalse(fieldOptions.isDefaultValueOption(option));
+    assertFalse(options.isDefaultValueOption(option));
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_nameOf_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_nameOf_FieldOption_Test.java
similarity index 87%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_nameOf_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_nameOf_FieldOption_Test.java
index de42f49..c673ed4 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_nameOf_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_nameOf_FieldOption_Test.java
@@ -23,14 +23,14 @@
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class FieldOptions_nameOf_Test {
+public class Options2_nameOf_FieldOption_Test {
 
   @Rule public XtextRule xtext = createWith(integrationTestSetup());
 
-  private FieldOptions fieldOptions;
+  private Options2 options;
 
   @Before public void setUp() {
-    fieldOptions = xtext.getInstanceOf(FieldOptions.class);
+    options = xtext.getInstanceOf(Options2.class);
   }
 
   // syntax = "proto2";
@@ -40,7 +40,7 @@
   // }
   @Test public void should_return_name_of_native_field_option() {
     FieldOption option = xtext.find("deprecated", FieldOption.class);
-    String name = fieldOptions.nameOf(option);
+    String name = options.nameOf(option);
     assertThat(name, equalTo("deprecated"));
   }
 
@@ -57,7 +57,7 @@
   // }
   @Test public void should_return_name_of_custom_field_option() {
     FieldOption option = xtext.find("encoding", ")", FieldOption.class);
-    String name = fieldOptions.nameOf(option);
+    String name = options.nameOf(option);
     assertThat(name, equalTo("encoding"));
   }
 }
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/Options2_rootSourceOf_FieldOption_Test.java
similarity index 81%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_rootSourceOf_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_rootSourceOf_FieldOption_Test.java
index b6ec71f..9c94f19 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/Options2_rootSourceOf_FieldOption_Test.java
@@ -19,18 +19,18 @@
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Tests for <code>{@link FieldOptions#rootSourceOf(FieldOption)}</code>.
+ * Tests for <code>{@link Options2#rootSourceOf(FieldOption)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class FieldOptions_rootSourceOf_Test {
+public class Options2_rootSourceOf_FieldOption_Test {
 
   @Rule public XtextRule xtext = createWith(integrationTestSetup());
 
-  private FieldOptions fieldOptions;
+  private Options2 options;
 
   @Before public void setUp() {
-    fieldOptions = xtext.getInstanceOf(FieldOptions.class);
+    options = xtext.getInstanceOf(Options2.class);
   }
 
   // syntax = "proto2";
@@ -40,7 +40,7 @@
   // }
   @Test public void should_return_field_of_native_field_option() {
     FieldOption option = xtext.find("deprecated", FieldOption.class);
-    MessageField field = (MessageField) fieldOptions.rootSourceOf(option);
+    MessageField field = (MessageField) options.rootSourceOf(option);
     assertThat(field.getName(), equalTo("deprecated"));
   }
 
@@ -57,7 +57,7 @@
   // }
   @Test public void should_return_field_of_custom_field_option() {
     FieldOption option = xtext.find("encoding", ")", FieldOption.class);
-    MessageField field = (MessageField) fieldOptions.rootSourceOf(option);
+    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_rootSourceOf_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_rootSourceOf_Option_Test.java
similarity index 89%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_rootSourceOf_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_rootSourceOf_Option_Test.java
index f582b9b..ddfe033 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/Options2_rootSourceOf_Option_Test.java
@@ -19,18 +19,18 @@
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Tests for <code>{@link Options#rootSourceOf(Option)}</code>.
+ * Tests for <code>{@link Options2#rootSourceOf(Option)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class Options_rootSourceOf_Test {
+public class Options2_rootSourceOf_Option_Test {
 
   @Rule public XtextRule xtext = createWith(integrationTestSetup());
 
-  private Options options;
+  private Options2 options;
 
   @Before public void setUp() {
-    options = xtext.getInstanceOf(Options.class);
+    options = xtext.getInstanceOf(Options2.class);
   }
 
   // syntax = "proto2";
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_sourceOfLastFieldIn_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_sourceOfLastFieldIn_CustomFieldOption_Test.java
similarity index 85%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_sourceOfLastFieldIn_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_sourceOfLastFieldIn_CustomFieldOption_Test.java
index 755de75..73bbaa8 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_sourceOfLastFieldIn_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_sourceOfLastFieldIn_CustomFieldOption_Test.java
@@ -19,18 +19,18 @@
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Tests for <code>{@link FieldOptions#sourceOfLastFieldIn(CustomFieldOption)}</code>.
+ * Tests for <code>{@link Options2#sourceOfLastFieldIn(CustomFieldOption)}</code>.
  *
  * alruiz@google.com (Alex Ruiz)
  */
-public class FieldOptions_sourceOfLastFieldIn_Test {
+public class Options2_sourceOfLastFieldIn_CustomFieldOption_Test {
 
   @Rule public XtextRule xtext = createWith(integrationTestSetup());
 
-  private FieldOptions fieldOptions;
+  private Options2 fieldOptions;
 
   @Before public void setUp() {
-    fieldOptions = xtext.getInstanceOf(FieldOptions.class);
+    fieldOptions = xtext.getInstanceOf(Options2.class);
   }
 
   // syntax = "proto2";
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/Options2_sourceOfLastFieldIn_CustomOption_Test.java
similarity index 81%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_lastFieldSourceFrom_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_sourceOfLastFieldIn_CustomOption_Test.java
index f035ebb..79afea9 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/Options2_sourceOfLastFieldIn_CustomOption_Test.java
@@ -19,18 +19,18 @@
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Tests for <code>{@link Options#lastFieldSourceFrom(CustomOption)}</code>.
+ * Tests for <code>{@link Options2#sourceOfLastFieldIn(CustomOption)}</code>.
  *
  * alruiz@google.com (Alex Ruiz)
  */
-public class Options_lastFieldSourceFrom_Test {
+public class Options2_sourceOfLastFieldIn_CustomOption_Test {
 
   @Rule public XtextRule xtext = createWith(integrationTestSetup());
 
-  private Options options;
+  private Options2 options;
 
   @Before public void setUp() {
-    options = xtext.getInstanceOf(Options.class);
+    options = xtext.getInstanceOf(Options2.class);
   }
 
   // syntax = "proto2";
@@ -48,7 +48,7 @@
   // option (custom).count = 6;
   @Test public void should_return_option_field() {
     CustomOption option = xtext.find("custom", ")", CustomOption.class);
-    MessageField field = (MessageField) options.lastFieldSourceFrom(option);
+    MessageField field = (MessageField) options.sourceOfLastFieldIn(option);
     assertThat(field.getName(), equalTo("count"));
   }
 }
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/Options2_sourceOf_CustomFieldOption_Test.java
similarity index 83%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_sourceOf_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_sourceOf_CustomFieldOption_Test.java
index d97ea3a..d9bf061 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/Options2_sourceOf_CustomFieldOption_Test.java
@@ -19,18 +19,18 @@
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Tests for <code>{@link FieldOptions#sourceOf(CustomFieldOption)}</code>.
+ * Tests for <code>{@link Options2#sourceOf(CustomFieldOption)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class FieldOptions_sourceOf_Test {
+public class Options2_sourceOf_CustomFieldOption_Test {
 
   @Rule public XtextRule xtext = createWith(integrationTestSetup());
 
-  private FieldOptions fieldOptions;
+  private Options2 options;
 
   @Before public void setUp() {
-    fieldOptions = xtext.getInstanceOf(FieldOptions.class);
+    options = xtext.getInstanceOf(Options2.class);
   }
 
   // syntax = "proto2";
@@ -46,7 +46,7 @@
   // }
   @Test public void should_return_source_of_field_option() {
     CustomFieldOption option = xtext.find("encoding", ")", CustomFieldOption.class);
-    MessageField field = (MessageField) fieldOptions.sourceOf(option);
+    MessageField field = (MessageField) options.sourceOf(option);
     assertThat(field.getName(), equalTo("encoding"));
   }
 
@@ -67,7 +67,7 @@
   // }
   @Test public void should_return_source_of_field_in_field_option() {
     CustomFieldOption option = xtext.find("custom", ").", CustomFieldOption.class);
-    MessageField field = (MessageField) fieldOptions.sourceOf(option);
+    MessageField field = (MessageField) options.sourceOf(option);
     assertThat(field.getName(), equalTo("count"));
   }
 }
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/Options2_sourceOf_CustomOption_Test.java
similarity index 90%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_sourceOf_Test.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options2_sourceOf_CustomOption_Test.java
index 84a5083..0185441 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/Options2_sourceOf_CustomOption_Test.java
@@ -19,18 +19,18 @@
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Tests for <code>{@link Options#sourceOf(CustomOption)}</code>
+ * Tests for <code>{@link Options2#sourceOf(CustomOption)}</code>
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class Options_sourceOf_Test {
+public class Options2_sourceOf_CustomOption_Test {
 
   @Rule public XtextRule xtext = createWith(integrationTestSetup());
 
-  private Options options;
+  private Options2 options;
 
   @Before public void setUp() {
-    options = xtext.getInstanceOf(Options.class);
+    options = xtext.getInstanceOf(Options2.class);
   }
 
   // syntax = "proto2";
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 7a99481..81b052a 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
@@ -20,17 +20,17 @@
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Tests for <code>{@link Options#nameForOption(IndexedElement)}</code>
+ * Tests for <code>{@link Options2#nameForOption(IndexedElement)}</code>
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Options_nameForOption_Test {
 
   @Rule public XtextRule xtext = createWith(unitTestSetup());
 
-  private Options options;
+  private Options2 options;
 
   @Before public void setUp() {
-    options = xtext.getInstanceOf(Options.class);
+    options = xtext.getInstanceOf(Options2.class);
   }
 
   @Test public void should_return_unchanged_name_if_element_is_Field() {
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 99e9b0d..57866d7 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
@@ -49,14 +49,13 @@
 
   @Inject private IEObjectDescriptionChooser descriptionChooser;
   @Inject private ProtoDescriptorProvider descriptorProvider;
-  @Inject private FieldOptions fieldOptions;
   @Inject private ModelFinder finder;
   @Inject private Images images;
   @Inject private IndexedElements indexedElements;
   @Inject private PluginImageHelper imageHelper;
   @Inject private Literals literals;
   @Inject private MessageFields messageFields;
-  @Inject private Options options;
+  @Inject private Options2 options;
 
   @Override public void completeProtobuf_Syntax(EObject model, Assignment assignment, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {}
@@ -243,7 +242,7 @@
     }
     if (model instanceof FieldOption) {
       FieldOption option = (FieldOption) model;
-      IndexedElement source = fieldOptions.rootSourceOf(option);
+      IndexedElement source = options.rootSourceOf(option);
       if (source instanceof MessageField) {
         return (MessageField) source;
       }
@@ -383,7 +382,7 @@
     }
     List<String> optionNames = new ArrayList<String>();
     for (FieldOption option : allFieldOptions) {
-      optionNames.add(fieldOptions.nameOf(option));
+      optionNames.add(options.nameOf(option));
     }
     return optionNames;
   }
@@ -466,7 +465,7 @@
     }
     NativeFieldOption option = (NativeFieldOption) model;
     ProtoDescriptor descriptor = descriptorProvider.primaryDescriptor();
-    MessageField field = (MessageField) fieldOptions.rootSourceOf(option);
+    MessageField field = (MessageField) options.rootSourceOf(option);
     Enum enumType = descriptor.enumTypeOf(field);
     if (enumType != null) {
       proposeAndAccept(enumType, context, acceptor);
@@ -605,7 +604,7 @@
       return;
     }
     CustomOption option = (CustomOption) model;
-    IndexedElement e = options.lastFieldSourceFrom(option);
+    IndexedElement e = options.sourceOfLastFieldIn(option);
     if (e == null) {
       e = options.rootSourceOf(option);
     }
@@ -620,10 +619,11 @@
     if (!(model instanceof CustomFieldOption)) {
       return;
     }
+    // TODO check if this is the same as sourceOf
     CustomFieldOption option = (CustomFieldOption) model;
-    IndexedElement e = fieldOptions.sourceOfLastFieldIn(option);
+    IndexedElement e = options.sourceOfLastFieldIn(option);
     if (e == null) {
-      e = fieldOptions.rootSourceOf(option);
+      e = options.rootSourceOf(option);
     }
     if (e instanceof MessageField) {
       proposeFieldValue((MessageField) e, context, acceptor);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SLCommentDocumentationProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SLCommentDocumentationProvider.java
index 243746d..c090a8f 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SLCommentDocumentationProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SLCommentDocumentationProvider.java
@@ -34,9 +34,8 @@
   private static final Pattern COMMENT_START = compile("//\\s*"); // "//" plus whitespace
   private static final Patterns NEW_LINE = compileAll("\\r\\n", "\\n");
 
-  @Inject private FieldOptions fieldOptions;
   @Inject private INodes nodes;
-  @Inject private Options options;
+  @Inject private Options2 options;
 
   @Override public String getDocumentation(EObject o) {
     String comment = findComment(o);
@@ -69,7 +68,7 @@
       return e != null ? e : o;
     }
     if (o instanceof FieldOption) {
-      IndexedElement e = fieldOptions.rootSourceOf((FieldOption) o);
+      IndexedElement e = options.rootSourceOf((FieldOption) o);
       return e != null ? e : o;
     }
     return o;
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 917bfb8..38a5aeb 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
@@ -11,7 +11,6 @@
 
 import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.*;
 import static com.google.eclipse.protobuf.ui.editor.syntaxcoloring.HighlightingConfiguration.*;
-import static org.eclipse.xtext.ui.editor.syntaxcoloring.DefaultHighlightingConfiguration.*;
 
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.*;
@@ -32,7 +31,7 @@
 
   @Inject private IndexedElements indexedElements;
   @Inject private INodes nodes;
-  @Inject private Options options;
+  @Inject private Options2 options;
 
   @Override public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor) {
     if (resource == null) {
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 1fb28a4..6f2c67b 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
@@ -34,7 +34,7 @@
   @Inject private NameResolver nameResolver;
   @Inject private MessageFields messageFields;
   @Inject private INodes nodes;
-  @Inject private Options options;
+  @Inject private Options2 options;
 
   public Object labelFor(Object o) {
     if (o instanceof Extensions) {
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
deleted file mode 100644
index 0676f91..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/FieldOptions.java
+++ /dev/null
@@ -1,127 +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 java.util.List;
-
-import com.google.eclipse.protobuf.protobuf.*;
-import com.google.inject.*;
-
-/**
- * Utility methods related to field options.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-@Singleton public class FieldOptions {
-
-  private @Inject OptionFields optionFields;
-
-  /**
-   * Indicates whether the given option is the "default value" one.
-   * @param option the given option to check.
-   * @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 MessageField;
-  }
-
-  /**
-   * Returns the name of the given option.
-   * @param option the given option.
-   * @return the name of the given option.
-   */
-  public String nameOf(FieldOption option) {
-    IndexedElement e = rootSourceOf(option);
-    if (e instanceof MessageField) {
-      return ((MessageField) e).getName();
-    }
-    return null;
-  }
-
-  /**
-   * Returns the <code>{@link IndexedElement}</code> the given <code>{@link CustomFieldOption}</code> is referring to.
-   * This method will check first the source of the last field of the given option (if any.) If the option does not have
-   * any fields, this method will return the root source of the option.
-   * <p>
-   * Example #1
-   *
-   * <pre>
-   * [(myFieldOption) = true];
-   * </pre>
-   *
-   * this method will return the <code>{@link IndexedElement}</code> "myFieldOption" is pointing to.
-   * </p>
-   * <p>
-   * Example #2
-   *
-   * <pre>
-   * [(myOption).foo = true];
-   * </pre>
-   *
-   * this method will return the <code>{@link IndexedElement}</code> "foo" is pointing to.
-   * </p>
-   * @param option the given {@code CustomFieldOption}.
-   * @return the {@code IndexedElement} the given {@code CustomFieldOption} is referring to, or {@code null} if it
-   *         cannot be found.
-   */
-  public IndexedElement sourceOf(CustomFieldOption option) {
-    IndexedElement e = sourceOfLastFieldIn(option);
-    if (e == null) {
-      e = rootSourceOf(option);
-    }
-    return e;
-  }
-
-  /**
-   * Returns the <code>{@link IndexedElement}</code> the given <code>{@link FieldOption}</code> is referring to. In the
-   * following example
-   *
-   * <pre>
-   * [(myFieldOption) = true]
-   * </pre>
-   *
-   * this method will return the <code>{@link IndexedElement}</code> "myFieldOption" is pointing to.
-   * @param option the given {@code FieldOption}.
-   * @return the {@code Property} the given {@code FieldOption} is referring to, or {@code null} if it cannot be found.
-   */
-  public IndexedElement rootSourceOf(FieldOption option) {
-    OptionSource source = null;
-    if (option instanceof NativeFieldOption) {
-      NativeFieldOption nativeOption = (NativeFieldOption) option;
-      source = nativeOption.getSource();
-    }
-    if (option instanceof CustomFieldOption) {
-      CustomFieldOption customOption = (CustomFieldOption) option;
-      source = customOption.getSource();
-    }
-    return (source == null) ? null : source.getTarget();
-  }
-
-  /**
-   * Returns the last field of the given <code>{@link CustomFieldOption}</code>. In the following example
-   *
-   * <pre>
-   * [(myOption).foo = true];
-   * </pre>
-   *
-   * this method will return the field that "foo" is pointing to.
-   * @param option the given {@code CustomFieldOption}.
-   * @return the last field of the given {@code CustomFieldOption} is referring to, or {@code null} if one cannot be
-   *         found.
-   */
-  public IndexedElement sourceOfLastFieldIn(CustomFieldOption option) {
-    List<OptionField> fields = option.getFields();
-    int fieldCount = fields.size();
-    if (fieldCount == 0) {
-      return null;
-    }
-    OptionField last = fields.get(fieldCount - 1);
-    return optionFields.sourceOf(last);
-  }
-}
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 b3b314e..e291d5d 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
@@ -18,7 +18,7 @@
 import org.eclipse.xtext.util.SimpleAttributeResolver;
 
 import com.google.eclipse.protobuf.protobuf.*;
-import com.google.inject.Singleton;
+import com.google.inject.*;
 
 /**
  * Utility methods related to <code>{@link IndexedElement}</code>s.
@@ -28,6 +28,8 @@
 @Singleton public class IndexedElements {
   private final static SimpleAttributeResolver<EObject, Long> INDEX_RESOLVER = newResolver(long.class, "index");
 
+  @Inject private ModelObjects modelObjects;
+
   /**
    * Calculates the index value for the given element. The calculated index value is the maximum of all the
    * index values of the given element's siblings, plus one. The minimum index value is 1.
@@ -81,13 +83,11 @@
    */
   @SuppressWarnings("unchecked")
   public List<FieldOption> fieldOptionsOf(IndexedElement e) {
-    if (e != null) {
-      EStructuralFeature feature = e.eClass().getEStructuralFeature("fieldOptions");
-      if (feature != null) {
-        return (List<FieldOption>) e.eGet(feature);
-      }
+    List<FieldOption> options = modelObjects.valueOfFeature(e, "fieldOptions", List.class);
+    if (options == null) {
+      options = emptyList();
     }
-    return emptyList();
+    return options;
   }
 
   /**
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 d9877d1..495e15c 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
@@ -33,9 +33,10 @@
 @Singleton public class ModelFinder {
 
   /**
-   * Returns all the <strong>local</strong> extensions of the given message.
+   * Returns all the extensions of the given message declared in the same file as the 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.
+   * @return all the extensions of the given message declared in the same file as the message, or an empty collection if
+   * none are found.
    */
   public Collection<TypeExtension> localExtensionsOf(Message message) {
     return extensionsOf(message, rootOf(message));
@@ -84,10 +85,10 @@
     return fieldType(field, Enum.class);
   }
 
-  private <T extends ComplexType> T fieldType(MessageField field, Class<T> typeClazz) {
+  private <T extends ComplexType> T fieldType(MessageField field, Class<T> targetType) {
     ComplexType type = typeOf(field);
-    if (typeClazz.isInstance(type)) {
-      return typeClazz.cast(type);
+    if (targetType.isInstance(type)) {
+      return targetType.cast(type);
     }
     return null;
   }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/ModelObjects.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/ModelObjects.java
new file mode 100644
index 0000000..2b792d4
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/ModelObjects.java
@@ -0,0 +1,40 @@
+/*
+ * 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 org.eclipse.emf.ecore.*;
+
+import com.google.inject.Singleton;
+
+/**
+ * Utility methods related to model objects.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@Singleton public class ModelObjects {
+
+  /**
+   * Returns the value of the structural feature with a matching name in the given model object.
+   * @param e the given model object.
+   * @param featureName the name of the structural feature to read the value from.
+   * @param valueType the expected type of the value to return.
+   * @return the value of the structural feature with a matching name in the given model object, or {@code null} if the
+   * given model object is {@code null} or if the model object does not have a structural feature with a matching name.
+   * @throws ClassCastException if the value of the structural value is not the same as the expected one.
+   */
+  public <T> T valueOfFeature(EObject e, String featureName, Class<T> valueType) {
+    if (e != null) {
+      EStructuralFeature feature = e.eClass().getEStructuralFeature(featureName);
+      if (feature != null) {
+        return valueType.cast(e.eGet(feature));
+      }
+    }
+    return null;
+  }
+}
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
deleted file mode 100644
index c838c2b..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Options.java
+++ /dev/null
@@ -1,116 +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 org.eclipse.xtext.util.Strings.isEmpty;
-
-import java.util.List;
-
-import com.google.eclipse.protobuf.protobuf.*;
-import com.google.inject.*;
-
-/**
- * Utility methods related to <code>{@link Option}</code>.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-@Singleton public class Options {
-
-  private @Inject OptionFields optionFields;
-
-  /**
-   * Returns the <code>{@link IndexedElement}</code> the given <code>{@link CustomOption}</code> is referring to. This
-   * method will check first the source of the last field of the given option (if any.) If the option does not have any
-   * fields, this method will return the root source of the option.
-   * <p>
-   * Example #1
-   *
-   * <pre>
-   * option(myOption) = true;
-   * </pre>
-   *
-   * this method will return the <code>{@link IndexedElement}</code> "myOption" is pointing to.
-   * </p>
-   * <p>
-   * Example #2
-   *
-   * <pre>
-   * option(myOption).foo = true;
-   * </pre>
-   *
-   * this method will return the <code>{@link IndexedElement}</code> "foo" is pointing to.
-   * </p>
-   * @param option the given {@code CustomOption}.
-   * @return the {@code IndexedElement} the given {@code CustomOption} is referring to, or {@code null} if it cannot be
-   * found.
-   */
-  public IndexedElement sourceOf(CustomOption option) {
-    IndexedElement e = lastFieldSourceFrom(option);
-    if (e == null) {
-      e = rootSourceOf(option);
-    }
-    return e;
-  }
-
-  /**
-   * Returns the <code>{@link IndexedElement}</code> the given <code>{@link Option}</code> is referring to. In the
-   * following example
-   *
-   * <pre>
-   * option(myOption).foo = true;
-   * </pre>
-   *
-   * this method will return the <code>{@link IndexedElement}</code> "myOption" is pointing to.
-   * @param option the given {@code Option}.
-   * @return the {@code IndexedElement} the given {@code Option} is referring to, or {@code null} if it cannot be found.
-   */
-  public IndexedElement rootSourceOf(Option option) {
-    OptionSource source = option.getSource();
-    return (source == null) ? null : source.getTarget();
-  }
-
-  /**
-   * Returns the last field of the given <code>{@link CustomOption}</code>. In the following example
-   *
-   * <pre>
-   * option(myOption).foo = true;
-   * </pre>
-   *
-   * this method will return the field that "foo" is pointing to.
-   * @param option the given {@code CustomOption}.
-   * @return the last field of the given {@code CustomOption} is referring to, or {@code null} if one cannot be found.
-   */
-  public IndexedElement lastFieldSourceFrom(CustomOption option) {
-    List<OptionField> fields = option.getFields();
-    if (fields.isEmpty()) {
-      return null;
-    }
-    OptionField last = fields.get(fields.size() - 1);
-    return optionFields.sourceOf(last);
-  }
-
-  /**
-   * Returns the name of the given <code>{@link IndexedElement}</code> used as a source of an option. If the given
-   * element is a <code>{@link Group}</code>, this method will return its name in lower case.
-   * @param e the given {@code IndexedElement}.
-   * @return the name of the given <code>{@link IndexedElement}</code>.
-   */
-  public String nameForOption(IndexedElement e) {
-    if (e instanceof MessageField) {
-      MessageField field = (MessageField) e;
-      return field.getName();
-    }
-    if (e instanceof Group) {
-      String name = ((Group) e).getName();
-      // TODO check where toLowerCase is being used and remove duplication
-      return (isEmpty(name)) ? name : name.toLowerCase();
-    }
-    return null;
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Options2.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Options2.java
new file mode 100644
index 0000000..ae23826
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Options2.java
@@ -0,0 +1,212 @@
+/*
+ * 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 org.eclipse.xtext.util.Strings.isEmpty;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+
+import com.google.eclipse.protobuf.naming.NameResolver;
+import com.google.eclipse.protobuf.protobuf.*;
+import com.google.inject.*;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ *
+ */
+@Singleton public class Options2 {
+
+  @Inject private ModelObjects modelObjects;
+  @Inject private NameResolver nameResolver;
+  @Inject private OptionFields optionFields;
+
+  /**
+   * Indicates whether the given option is the "default value" one.
+   * @param option the given option to check.
+   * @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 MessageField;
+  }
+
+  /**
+   * Returns the <code>{@link IndexedElement}</code> the given <code>{@link CustomOption}</code> is referring to. This
+   * method will check first the source of the last field of the given option (if any.) If the option does not have any
+   * fields, this method will return the root source of the option.
+   * <p>
+   * Example #1
+   *
+   * <pre>
+   * option(myOption) = true;
+   * </pre>
+   *
+   * this method will return the <code>{@link IndexedElement}</code> "myOption" is pointing to.
+   * </p>
+   * <p>
+   * Example #2
+   *
+   * <pre>
+   * option(myOption).foo = true;
+   * </pre>
+   *
+   * this method will return the <code>{@link IndexedElement}</code> "foo" is pointing to.
+   * </p>
+   * @param option the given {@code CustomOption}.
+   * @return the {@code IndexedElement} the given {@code CustomOption} is referring to, or {@code null} if it cannot be
+   * found.
+   */
+  public IndexedElement sourceOf(CustomOption option) {
+    IndexedElement e = sourceOfLastFieldIn(option);
+    if (e == null) {
+      e = rootSourceOf(option);
+    }
+    return e;
+  }
+
+  /**
+   * Returns the last field of the given <code>{@link CustomOption}</code>. In the following example
+   *
+   * <pre>
+   * option(myOption).foo = true;
+   * </pre>
+   *
+   * this method will return the field that "foo" is pointing to.
+   * @param option the given {@code CustomOption}.
+   * @return the last field of the given {@code CustomOption} is referring to, or {@code null} if one cannot be found.
+   */
+  public IndexedElement sourceOfLastFieldIn(CustomOption option) {
+    return findSourceOfLastField(option);
+  }
+
+  /**
+   * Returns the <code>{@link IndexedElement}</code> the given <code>{@link Option}</code> is referring to. In the
+   * following example
+   *
+   * <pre>
+   * option(myOption).foo = true;
+   * </pre>
+   *
+   * this method will return the <code>{@link IndexedElement}</code> "myOption" is pointing to.
+   * @param option the given {@code Option}.
+   * @return the {@code IndexedElement} the given {@code Option} is referring to, or {@code null} if it cannot be found.
+   */
+  public IndexedElement rootSourceOf(Option option) {
+    return findRootSource(option);
+  }
+
+  /**
+   * Returns the <code>{@link IndexedElement}</code> the given <code>{@link CustomFieldOption}</code> is referring to.
+   * This method will check first the source of the last field of the given option (if any.) If the option does not have
+   * any fields, this method will return the root source of the option.
+   * <p>
+   * Example #1
+   *
+   * <pre>
+   * [(myFieldOption) = true];
+   * </pre>
+   *
+   * this method will return the <code>{@link IndexedElement}</code> "myFieldOption" is pointing to.
+   * </p>
+   * <p>
+   * Example #2
+   *
+   * <pre>
+   * [(myOption).foo = true];
+   * </pre>
+   *
+   * this method will return the <code>{@link IndexedElement}</code> "foo" is pointing to.
+   * </p>
+   * @param option the given {@code CustomFieldOption}.
+   * @return the {@code IndexedElement} the given {@code CustomFieldOption} is referring to, or {@code null} if it
+   *         cannot be found.
+   */
+  public IndexedElement sourceOf(CustomFieldOption option) {
+    IndexedElement e = sourceOfLastFieldIn(option);
+    if (e == null) {
+      e = rootSourceOf(option);
+    }
+    return e;
+  }
+
+  /**
+   * Returns the last field of the given <code>{@link CustomFieldOption}</code>. In the following example
+   *
+   * <pre>
+   * [(myOption).foo = true];
+   * </pre>
+   *
+   * this method will return the field that "foo" is pointing to.
+   * @param option the given {@code CustomFieldOption}.
+   * @return the last field of the given {@code CustomFieldOption} is referring to, or {@code null} if one cannot be
+   * found.
+   */
+  public IndexedElement sourceOfLastFieldIn(CustomFieldOption option) {
+    return findSourceOfLastField(option);
+  }
+
+  @SuppressWarnings("unchecked")
+  private IndexedElement findSourceOfLastField(EObject e) {
+    List<OptionField> fields = modelObjects.valueOfFeature(e, "fields", List.class);
+    if (fields == null || fields.isEmpty()) {
+      return null;
+    }
+    OptionField last = fields.get(fields.size() - 1);
+    return optionFields.sourceOf(last);
+  }
+
+  /**
+   * Returns the <code>{@link IndexedElement}</code> the given <code>{@link FieldOption}</code> is referring to. In the
+   * following example
+   *
+   * <pre>
+   * [(myFieldOption) = true]
+   * </pre>
+   *
+   * this method will return the <code>{@link IndexedElement}</code> "myFieldOption" is pointing to.
+   * @param option the given {@code FieldOption}.
+   * @return the {@code Property} the given {@code FieldOption} is referring to, or {@code null} if it cannot be found.
+   */
+  public IndexedElement rootSourceOf(FieldOption option) {
+    return findRootSource(option);
+  }
+
+  private IndexedElement findRootSource(EObject e) {
+    OptionSource source = modelObjects.valueOfFeature(e, "source", OptionSource.class);
+    return source == null ? null : source.getTarget();
+  }
+
+  /**
+   * Returns the name of the given <code>{@link IndexedElement}</code> used as a source of an option. If the given
+   * element is a <code>{@link Group}</code>, this method will return its name in lower case.
+   * @param e the given {@code IndexedElement}.
+   * @return the name of the given <code>{@link IndexedElement}</code>.
+   */
+  public String nameForOption(IndexedElement e) {
+    String name = nameResolver.nameOf(e);
+    if (e instanceof Group && !isEmpty(name)) {
+      name = name.toLowerCase();
+    }
+    return name;
+  }
+
+  /**
+   * Returns the name of the given option.
+   * @param option the given option.
+   * @return the name of the given option.
+   */
+  public String nameOf(FieldOption option) {
+    IndexedElement e = rootSourceOf(option);
+    if (e instanceof MessageField) {
+      return ((MessageField) e).getName();
+    }
+    return null;
+  }
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/Naming.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/Naming.java
index 69e7771..02c5974 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/Naming.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/Naming.java
@@ -10,7 +10,7 @@
 
 import org.eclipse.emf.ecore.EObject;
 
-import com.google.eclipse.protobuf.model.util.Options;
+import com.google.eclipse.protobuf.model.util.Options2;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.inject.*;
 
@@ -22,7 +22,7 @@
 @Singleton public class Naming {
 
   @Inject private NameResolver nameResolver;
-  @Inject private Options options;
+  @Inject private Options2 options;
 
   /**
    * Returns the name of the given object. If the name will be used for an option and if the given object is a
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 ae9c04f..1cb7576 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
@@ -25,10 +25,9 @@
  */
 class CustomOptionFieldScopeFinder {
 
-  @Inject private FieldOptions fieldOptions;
   @Inject private ModelFinder modelFinder;
   @Inject private OptionFields optionFields;
-  @Inject private Options options;
+  @Inject private Options2 options;
   @Inject private QualifiedNameDescriptions qualifiedNameDescriptions;
 
   Collection<IEObjectDescription> findScope(CustomOption option, MessageOptionField field) {
@@ -64,7 +63,7 @@
       IEObjectDescriptionsProvider provider) {
     IndexedElement e = referredField(field, option.getFields(), new Provider<IndexedElement>() {
       @Override public IndexedElement get() {
-        return fieldOptions.rootSourceOf(option);
+        return options.rootSourceOf(option);
       }
     });
     if (e != null) {
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 ad59afc..d9742cd 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
@@ -25,8 +25,7 @@
  */
 class FieldNotationScopeFinder {
 
-  @Inject private FieldOptions fieldOptions;
-  @Inject private Options options;
+  @Inject private Options2 options;
   @Inject private ModelFinder modelFinder;
   @Inject private QualifiedNameDescriptions qualifiedNameDescriptions;
 
@@ -55,7 +54,7 @@
     }
     if (container instanceof CustomFieldOption) {
       CustomFieldOption option = (CustomFieldOption) container;
-      source = fieldOptions.sourceOf(option);
+      source = options.sourceOf(option);
     }
     if (container instanceof ComplexValueField) {
       source = sourceOf((ComplexValueField) container);
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 58558d2..668900c 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
@@ -39,11 +39,10 @@
   @Inject private CustomOptionScopeFinder customOptionScopeFinder;
   @Inject private ProtoDescriptorProvider descriptorProvider;
   @Inject private FieldNotationScopeFinder fieldNotationScopeFinder;
-  @Inject private FieldOptions fieldOptions;
   @Inject private ModelFinder modelFinder;
   @Inject private LiteralDescriptions literalDescriptions;
   @Inject private NativeOptionDescriptions nativeOptionDescriptions;
-  @Inject private Options options;
+  @Inject private Options2 options;
   @Inject private TypeScopeFinder typeScopeFinder;
 
   @SuppressWarnings("unused") public IScope scope_ComplexTypeLink_target(ComplexTypeLink link, EReference r) {
@@ -100,12 +99,12 @@
     }
     if (container instanceof NativeFieldOption) {
       ProtoDescriptor descriptor = descriptorProvider.primaryDescriptor();
-      IndexedElement c = fieldOptions.rootSourceOf((FieldOption) container);
+      IndexedElement c = options.rootSourceOf((FieldOption) container);
       anEnum = descriptor.enumTypeOf((MessageField) c);
     }
     if (container instanceof CustomFieldOption) {
       CustomFieldOption option = (CustomFieldOption) container;
-      container = fieldOptions.sourceOf(option);
+      container = options.sourceOf(option);
     }
     if (container instanceof SimpleValueField) {
       SimpleValueField field = (SimpleValueField) container;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/DataTypeValidator.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/DataTypeValidator.java
index b40e264..45645d4 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/DataTypeValidator.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/DataTypeValidator.java
@@ -30,14 +30,14 @@
 
   @Override public void register(EValidatorRegistrar registrar) {}
 
-  @Inject private FieldOptions fieldOptions;
   @Inject private IQualifiedNameProvider fqnProvider;
   @Inject private MessageFields messageFields;
   @Inject private ModelFinder modelFinder;
   @Inject private INodes nodes;
+  @Inject private Options2 options;
 
   @Check public void checkValueOfDefaultTypeMatchesFieldType(FieldOption option) {
-    if (fieldOptions.isDefaultValueOption(option)) {
+    if (options.isDefaultValueOption(option)) {
       MessageField field = (MessageField) option.eContainer();
       checkValueTypeMatchesFieldType(option, field);
     }