Code cleanup.
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToCommentOrString_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isCommentOrString_Test.java
similarity index 83%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToCommentOrString_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isCommentOrString_Test.java
index c33619c..1535bac 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToCommentOrString_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isCommentOrString_Test.java
@@ -19,11 +19,11 @@
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 
 /**
- * Test for <code>{@link INodes#belongsToCommentOrString(INode)}</code>
+ * Test for <code>{@link INodes#isCommentOrString(INode)}</code>
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class INodes_belongsToCommentOrString_Test {
+public class INodes_isCommentOrString_Test {
   @Rule public XtextRule xtext = overrideRuntimeModuleWith(unitTestModule());
 
   private INodes nodes;
@@ -38,7 +38,7 @@
   // message Person {}
   @Test public void should_return_true_if_node_belongs_to_single_line_comment() {
     ILeafNode commentNode = xtext.find("// This is a test.");
-    assertTrue(nodes.belongsToCommentOrString(commentNode));
+    assertTrue(nodes.isCommentOrString(commentNode));
   }
 
   // syntax = "proto2";
@@ -47,7 +47,7 @@
   // message Person {}
   @Test public void should_return_true_if_node_belongs_to_multiple_line_comment() {
     ILeafNode commentNode = xtext.find("/* This is a test. */");
-    assertTrue(nodes.belongsToCommentOrString(commentNode));
+    assertTrue(nodes.isCommentOrString(commentNode));
   }
 
   // syntax = "proto2";
@@ -57,7 +57,7 @@
   // }
   @Test public void should_return_true_if_node_belongs_to_string() {
     ILeafNode node = xtext.find("'Alex'");
-    assertTrue(nodes.belongsToCommentOrString(node));
+    assertTrue(nodes.isCommentOrString(node));
   }
 
   // syntax = "proto2";
@@ -65,6 +65,6 @@
   // message Person {}
   @Test public void should_return_false_if_node_does_not_belong_to_any_comment_or_string() {
     ICompositeNode node = getNode(xtext.root());
-    assertFalse(nodes.belongsToCommentOrString(node));
+    assertFalse(nodes.isCommentOrString(node));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToComment_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isComment_Test.java
similarity index 86%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToComment_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isComment_Test.java
index 8f091bf..78336c0 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToComment_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isComment_Test.java
@@ -19,11 +19,11 @@
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 
 /**
- * Test for <code>{@link INodes#belongsToComment(INode)}</code>
+ * Test for <code>{@link INodes#isComment(INode)}</code>
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class INodes_belongsToComment_Test {
+public class INodes_isComment_Test {
   @Rule public XtextRule xtext = overrideRuntimeModuleWith(unitTestModule());
 
   private INodes nodes;
@@ -38,7 +38,7 @@
   // message Person {}
   @Test public void should_return_true_if_node_belongs_to_single_line_comment() {
     ILeafNode commentNode = xtext.find("// This is a test.");
-    assertTrue(nodes.belongsToComment(commentNode));
+    assertTrue(nodes.isComment(commentNode));
   }
 
   // syntax = "proto2";
@@ -47,7 +47,7 @@
   // message Person {}
   @Test public void should_return_true_if_node_belongs_to_multiple_line_comment() {
     ILeafNode commentNode = xtext.find("/* This is a test. */");
-    assertTrue(nodes.belongsToComment(commentNode));
+    assertTrue(nodes.isComment(commentNode));
   }
 
   // syntax = "proto2";
@@ -55,6 +55,6 @@
   // message Person {}
   @Test public void should_return_false_if_node_does_not_belong_to_any_comment() {
     ICompositeNode node = getNode(xtext.root());
-    assertFalse(nodes.belongsToComment(node));
+    assertFalse(nodes.isComment(node));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToMultipleLineComment_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isMultipleLineComment_Test.java
similarity index 84%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToMultipleLineComment_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isMultipleLineComment_Test.java
index 3601fd0..b3112dd 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToMultipleLineComment_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isMultipleLineComment_Test.java
@@ -19,11 +19,11 @@
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 
 /**
- * Test for <code>{@link INodes#belongsToMultipleLineComment(INode)}</code>
+ * Test for <code>{@link INodes#isMultipleLineComment(INode)}</code>
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class INodes_belongsToMultipleLineComment_Test {
+public class INodes_isMultipleLineComment_Test {
   @Rule public XtextRule xtext = overrideRuntimeModuleWith(unitTestModule());
 
   private INodes nodes;
@@ -38,7 +38,7 @@
   // message Person {}
   @Test public void should_return_true_if_node_belongs_to_multiple_line_comment() {
     ILeafNode commentNode = xtext.find("/* This is a test. */");
-    assertTrue(nodes.belongsToMultipleLineComment(commentNode));
+    assertTrue(nodes.isMultipleLineComment(commentNode));
   }
 
   // syntax = "proto2";
@@ -46,6 +46,6 @@
   // message Person {}
   @Test public void should_return_false_if_node_does_not_belong_to_single_line_comment() {
     ICompositeNode node = getNode(xtext.root());
-    assertFalse(nodes.belongsToMultipleLineComment(node));
+    assertFalse(nodes.isMultipleLineComment(node));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToSingleLineComment_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isSingleLineComment_Test.java
similarity index 84%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToSingleLineComment_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isSingleLineComment_Test.java
index 630b218..22a25c7 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToSingleLineComment_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isSingleLineComment_Test.java
@@ -19,11 +19,11 @@
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 
 /**
- * Test for <code>{@link INodes#belongsToSingleLineComment(INode)}</code>
+ * Test for <code>{@link INodes#isSingleLineComment(INode)}</code>
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class INodes_belongsToSingleLineComment_Test {
+public class INodes_isSingleLineComment_Test {
   @Rule public XtextRule xtext = overrideRuntimeModuleWith(unitTestModule());
 
   private INodes nodes;
@@ -38,7 +38,7 @@
   // message Person {}
   @Test public void should_return_true_if_node_belongs_to_single_line_comment() {
     ILeafNode commentNode = xtext.find("// This is a test.");
-    assertTrue(nodes.belongsToSingleLineComment(commentNode));
+    assertTrue(nodes.isSingleLineComment(commentNode));
   }
 
   // syntax = "proto2";
@@ -46,6 +46,6 @@
   // message Person {}
   @Test public void should_return_false_if_node_does_not_belong_to_single_line_comment() {
     ICompositeNode node = getNode(xtext.root());
-    assertFalse(nodes.belongsToSingleLineComment(node));
+    assertFalse(nodes.isSingleLineComment(node));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToString_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isString_Test.java
similarity index 87%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToString_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isString_Test.java
index 113c3ec..1adb2e2 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_belongsToString_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/INodes_isString_Test.java
@@ -19,11 +19,11 @@
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 
 /**
- * Tests for <code>{@link INodes#belongsToString(INode)}</code>
+ * Tests for <code>{@link INodes#isString(INode)}</code>
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class INodes_belongsToString_Test {
+public class INodes_isString_Test {
   @Rule public XtextRule xtext = overrideRuntimeModuleWith(unitTestModule());
 
   private INodes nodes;
@@ -39,7 +39,7 @@
   // }
   @Test public void should_return_true_if_node_belongs_to_string() {
     ILeafNode node = xtext.find("'Alex'");
-    assertTrue(nodes.belongsToString(node));
+    assertTrue(nodes.isString(node));
   }
 
   // syntax = "proto2";
@@ -47,6 +47,6 @@
   // message Person {}
   @Test public void should_return_false_if_node_does_not_belong_to_string() {
     ICompositeNode node = getNode(xtext.root());
-    assertFalse(nodes.belongsToString(node));
+    assertFalse(nodes.isString(node));
   }
 }
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 9f80cbb..eda2424 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
@@ -40,7 +40,7 @@
       if (!nodes.isHiddenLeafNode(currentNode)) {
         continue;
       }
-      if (!nodes.belongsToComment(currentNode)) {
+      if (!nodes.isComment(currentNode)) {
         continue;
       }
       String rawComment = ((ILeafNode) currentNode).getText();
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 548c46e..be09d33 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
@@ -88,7 +88,7 @@
           int offset = styledText.getCaretOffset();
           ContentAssistContext[] context = contextFactory.create(editor.getInternalSourceViewer(), offset, resource);
           for (ContentAssistContext c : context) {
-            if (nodes.belongsToCommentOrString(c.getCurrentNode())) {
+            if (nodes.isCommentOrString(c.getCurrentNode())) {
               continue;
             }
             EObject model = modelFrom(c);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/MLCommentDocumentationProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/MLCommentDocumentationProvider.java
index d03dd7e..9994bd5 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/MLCommentDocumentationProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/MLCommentDocumentationProvider.java
@@ -48,7 +48,7 @@
       if (!nodes.isHiddenLeafNode(currentNode)) {
         continue;
       }
-      if (!nodes.belongsToMultipleLineComment(currentNode)) {
+      if (!nodes.isMultipleLineComment(currentNode)) {
         continue;
       }
       String text = ((ILeafNode) currentNode).getText();
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 578453b..4e51b2e 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
@@ -52,7 +52,7 @@
       if (!nodes.isHiddenLeafNode(currentNode)) {
         continue;
       }
-      if (!nodes.belongsToSingleLineComment(currentNode)) {
+      if (!nodes.isSingleLineComment(currentNode)) {
         continue;
       }
       String comment = ((ILeafNode) currentNode).getText();
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 286d51e..6d3eaa9 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
@@ -85,10 +85,10 @@
     if (node == null) {
       return false;
     }
-    if (nodes.belongsToComment(node)) {
+    if (nodes.isComment(node)) {
       return true;
     }
-    if (nodes.belongsToString(node)) {
+    if (nodes.isString(node)) {
       EObject o = findActualSemanticObjectFor(node);
       return !(o instanceof Import);
     }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/INodes.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/INodes.java
index 45a8df4..061e0cc 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/INodes.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/INodes.java
@@ -45,8 +45,8 @@
    * @return {@code true} if the given node belongs to a string, or a single- or multi-line comment; {@code false}
    * otherwise.
    */
-  public boolean belongsToCommentOrString(INode node) {
-    return belongsToComment(node) || belongsToString(node);
+  public boolean isCommentOrString(INode node) {
+    return isComment(node) || isString(node);
   }
 
   /**
@@ -54,8 +54,8 @@
    * @param node the node to check.
    * @return {@code true} if the given node belongs to a single- or multiple-line comment; {@code false} otherwise.
    */
-  public boolean belongsToComment(INode node) {
-    return belongsToSingleLineComment(node) || belongsToMultipleLineComment(node);
+  public boolean isComment(INode node) {
+    return isSingleLineComment(node) || isMultipleLineComment(node);
   }
 
   /**
@@ -63,8 +63,8 @@
    * @param node the node to check.
    * @return {@code true} if the given node belongs to a single-line comment; {@code false} otherwise.
    */
-  public boolean belongsToSingleLineComment(INode node) {
-    return belongsToComment(node, "SL_COMMENT");
+  public boolean isSingleLineComment(INode node) {
+    return isComment(node, "SL_COMMENT");
   }
 
   /**
@@ -72,11 +72,11 @@
    * @param node the node to check.
    * @return {@code true} if the given node belongs to a multiple-line comment; {@code false} otherwise.
    */
-  public boolean belongsToMultipleLineComment(INode node) {
-    return belongsToComment(node, "ML_COMMENT");
+  public boolean isMultipleLineComment(INode node) {
+    return isComment(node, "ML_COMMENT");
   }
 
-  private static boolean belongsToComment(INode node, String commentRuleName) {
+  private static boolean isComment(INode node, String commentRuleName) {
     if (!(node instanceof ILeafNode)) {
       return false;
     }
@@ -93,7 +93,7 @@
    * @param node the node to check.
    * @return {@code true} if the given node belongs to a string; {@code false} otherwise.
    */
-  public boolean belongsToString(INode node) {
+  public boolean isString(INode node) {
     EObject grammarElement = node.getGrammarElement();
     if (!(grammarElement instanceof RuleCall)) {
       return false;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Imports.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Imports.java
index deaef4c..516b167 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Imports.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Imports.java
@@ -39,7 +39,8 @@
     if (anImport == null) {
       return false;
     }
-    return descriptorProvider.descriptorLocation(anImport.getImportURI()) != null;
+    URI descriptorLocation = descriptorProvider.descriptorLocation(anImport.getImportURI());
+    return descriptorLocation != null;
   }
 
   /**
@@ -71,10 +72,7 @@
    */
   public String uriAsEnteredByUser(Import anImport) {
     INode node = nodes.firstNodeForFeature(anImport, IMPORT__IMPORT_URI);
-    if (node == null) {
-      return null;
-    }
-    String text = node.getText();
+    String text = (node == null) ? null : node.getText();
     if (text == null) {
       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
index bfc191d..e744b0b 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Options.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Options.java
@@ -122,14 +122,14 @@
   }
 
   /**
-   * 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>.
+   * Returns the name of the given <code>{@link IndexedElement}</code> that is being 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 optionSource the given {@code IndexedElement} that is being used as a source of an option.
+   * @return the name of the given {@code IndexedElement}.
    */
-  public String nameForOption(IndexedElement e) {
-    String name = nameResolver.nameOf(e);
-    if (e instanceof Group && !isEmpty(name)) {
+  public String nameForOption(IndexedElement optionSource) {
+    String name = nameResolver.nameOf(optionSource);
+    if (optionSource instanceof Group && !isEmpty(name)) {
       name = name.toLowerCase();
     }
     return name;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/IProtobufQualifiedNameProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/IProtobufQualifiedNameProvider.java
index ab9db8c..aabd384 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/IProtobufQualifiedNameProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/IProtobufQualifiedNameProvider.java
@@ -17,13 +17,13 @@
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
-@ImplementedBy(ProtobufQualifiedNameProvider.class) public interface IProtobufQualifiedNameProvider extends
-    IQualifiedNameProvider {
+@ImplementedBy(ProtobufQualifiedNameProvider.class)
+public interface IProtobufQualifiedNameProvider extends IQualifiedNameProvider {
   /**
-   * Returns the qualified name of the given object, to be used in an option. If the given object is a
-   * <code>{@link Group}</code>, this methods returns the name in lower case.
+   * Returns the qualified name of the given object, to be used as the name of an option. If the given object is a
+   * <code>{@link Group}</code>, this method returns the name in lower case.
    * @param e the given object.
-   * @return the qualified name of the given object, to be used in an option.
+   * @return the qualified name of the given object, to be used as the name of an option.
    */
   QualifiedName getFullyQualifiedNameForOption(EObject e);
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/LocalNamesProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/LocalNamesProvider.java
index 0ffc30d..0363fac 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/LocalNamesProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/LocalNamesProvider.java
@@ -9,7 +9,6 @@
 package com.google.eclipse.protobuf.naming;
 
 import static com.google.common.collect.Lists.newArrayList;
-import static com.google.eclipse.protobuf.naming.Naming.NamingUsage.*;
 import static java.util.Collections.*;
 import static org.eclipse.xtext.util.Strings.isEmpty;
 import static org.eclipse.xtext.util.Tuples.pair;
@@ -21,7 +20,6 @@
 import org.eclipse.xtext.util.*;
 
 import com.google.eclipse.protobuf.model.util.*;
-import com.google.eclipse.protobuf.naming.Naming.NamingUsage;
 import com.google.inject.*;
 
 /**
@@ -63,24 +61,24 @@
 
   @Inject private ModelFinder finder;
   @Inject private NameResolver nameResolver;
-  @Inject private Naming naming;
+  @Inject private NamingStrategies namingStrategies;
   @Inject private Packages packages;
 
   public List<QualifiedName> names(EObject e) {
-    return allNames(e, DEFAULT);
+    return allNames(e, namingStrategies.normal());
   }
 
   public List<QualifiedName> namesForOption(EObject e) {
-    return allNames(e, OPTION);
+    return allNames(e, namingStrategies.option());
   }
 
-  private List<QualifiedName> allNames(final EObject e, final NamingUsage usage) {
+  private List<QualifiedName> allNames(final EObject e, final NamingStrategy naming) {
     Pair<EObject, String> key = pair(e, "localFqns");
     return cache.get(key, e.eResource(), new Provider<List<QualifiedName>>() {
       @Override public List<QualifiedName> get() {
         List<QualifiedName> allNames = newArrayList();
         EObject current = e;
-        String name = naming.nameOf(e, usage);
+        String name = naming.nameOf(e);
         if (isEmpty(name)) {
           return emptyList();
         }
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
deleted file mode 100644
index 62b3229..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/Naming.java
+++ /dev/null
@@ -1,51 +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.naming;
-
-import org.eclipse.emf.ecore.EObject;
-
-import com.google.eclipse.protobuf.model.util.Options;
-import com.google.eclipse.protobuf.protobuf.*;
-import com.google.inject.*;
-
-/**
- * Utility methods related to naming.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-@Singleton public class Naming {
-  @Inject private NameResolver nameResolver;
-  @Inject private Options options;
-
-  /**
-   * Returns the name of the given object. If the name will be used for an option and if the given object is a
-   * <code>{@link Group}</code>, this method will return the name of the group in lower case.
-   * @param e the given object.
-   * @param usage indicates how the returned name will be used.
-   * @return the name of the given object.
-   */
-  String nameOf(EObject e, NamingUsage usage) {
-    if (NamingUsage.DEFAULT.equals(usage)) {
-      return nameResolver.nameOf(e);
-    }
-    if (e instanceof IndexedElement) {
-      return options.nameForOption((IndexedElement) e);
-    }
-    return nameResolver.nameOf(e);
-  }
-
-  /**
-   * Indicates if the name to obtain will be used by a type (default) or an option.
-   *
-   * @author alruiz@google.com (Alex Ruiz)
-   */
-  static enum NamingUsage {
-    DEFAULT, OPTION;
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/NamingStrategies.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/NamingStrategies.java
new file mode 100644
index 0000000..edc615a
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/NamingStrategies.java
@@ -0,0 +1,35 @@
+/*
+ * 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.naming;
+
+import com.google.eclipse.protobuf.model.util.Options;
+import com.google.inject.*;
+
+/**
+ * Utility methods related to naming.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@Singleton public class NamingStrategies {
+  private final NamingStrategy normal;
+  private final NamingStrategy option;
+
+  @Inject public NamingStrategies(NameResolver nameResolver, Options options) {
+    normal = new NormalNamingStrategy(nameResolver);
+    option = new OptionNamingStrategy(nameResolver, options);
+  }
+
+  NamingStrategy normal() {
+    return normal;
+  }
+
+  NamingStrategy option() {
+    return option;
+  }
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/NamingStrategy.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/NamingStrategy.java
new file mode 100644
index 0000000..0a82786
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/NamingStrategy.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2012 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.naming;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+interface NamingStrategy {
+  String nameOf(EObject e);
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/NormalNamingStrategy.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/NormalNamingStrategy.java
new file mode 100644
index 0000000..e25a1ef
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/NormalNamingStrategy.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2012 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.naming;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+class NormalNamingStrategy implements NamingStrategy {
+  private final NameResolver nameResolver;
+
+  public NormalNamingStrategy(NameResolver nameResolver) {
+    this.nameResolver = nameResolver;
+  }
+
+  @Override public String nameOf(EObject e) {
+    return nameResolver.nameOf(e);
+  }
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/OptionNamingStrategy.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/OptionNamingStrategy.java
new file mode 100644
index 0000000..0483fdd
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/OptionNamingStrategy.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2012 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.naming;
+
+import org.eclipse.emf.ecore.EObject;
+
+import com.google.eclipse.protobuf.model.util.Options;
+import com.google.eclipse.protobuf.protobuf.IndexedElement;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+class OptionNamingStrategy implements NamingStrategy {
+  private final NameResolver nameResolver;
+  private final Options options;
+
+  OptionNamingStrategy(NameResolver nameResolver, Options options) {
+    this.nameResolver = nameResolver;
+    this.options = options;
+  }
+
+
+  @Override public String nameOf(EObject e) {
+    if (e instanceof IndexedElement) {
+      return options.nameForOption((IndexedElement) e);
+    }
+    return nameResolver.nameOf(e);
+  }
+}
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 c6f458d..585ee20 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
@@ -8,7 +8,6 @@
  */
 package com.google.eclipse.protobuf.naming;
 
-import static com.google.eclipse.protobuf.naming.Naming.NamingUsage.*;
 import static org.eclipse.xtext.util.Strings.isEmpty;
 import static org.eclipse.xtext.util.Tuples.pair;
 
@@ -19,7 +18,6 @@
 import org.eclipse.xtext.util.*;
 
 import com.google.eclipse.protobuf.model.util.*;
-import com.google.eclipse.protobuf.naming.Naming.NamingUsage;
 import com.google.eclipse.protobuf.protobuf.Package;
 import com.google.inject.*;
 
@@ -34,31 +32,31 @@
   @Inject private final IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE;
 
   @Inject private ModelFinder finder;
-  @Inject private Naming naming;
+  @Inject private NamingStrategies namingStrategies;
   @Inject private Packages packages;
   @Inject private QualifiedNames qualifiedNames;
 
   @Override public QualifiedName getFullyQualifiedName(EObject e) {
-    return getFullyQualifiedName(e, DEFAULT);
+    return getFullyQualifiedName(e, namingStrategies.normal());
   }
 
   @Override public QualifiedName getFullyQualifiedNameForOption(EObject e) {
-    return getFullyQualifiedName(e, OPTION);
+    return getFullyQualifiedName(e, namingStrategies.option());
   }
 
-  private QualifiedName getFullyQualifiedName(final EObject e, final NamingUsage usage) {
+  private QualifiedName getFullyQualifiedName(final EObject e, final NamingStrategy naming) {
     Pair<EObject, String> key = pair(e, "fqn");
     return cache.get(key, e.eResource(), new Provider<QualifiedName>() {
       @Override public QualifiedName get() {
         EObject current = e;
-        String name = naming.nameOf(e, usage);
+        String name = naming.nameOf(e);
         if (isEmpty(name)) {
           return null;
         }
         QualifiedName qualifiedName = converter.toQualifiedName(name);
         while (current.eContainer() != null) {
           current = current.eContainer();
-          QualifiedName parentsQualifiedName = getFullyQualifiedName(current, usage);
+          QualifiedName parentsQualifiedName = getFullyQualifiedName(current, naming);
           if (parentsQualifiedName != null) { return parentsQualifiedName.append(qualifiedName); }
         }
         return addPackage(e, qualifiedName);