diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/junit/matchers/ContainAllFields.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/junit/matchers/ContainAllFields.java
index 8a5214a..b586d29 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/junit/matchers/ContainAllFields.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/junit/matchers/ContainAllFields.java
@@ -36,8 +36,8 @@
     IEObjectDescriptions descriptions = (IEObjectDescriptions) arg;
     if (descriptions.size() != fields.size()) return false;
     for (MessageField field : fields) {
-      Name name = field.getName();
-      EObject described = descriptions.objectDescribedAs(name.getValue());
+      String name = field.getName();
+      EObject described = descriptions.objectDescribedAs(name);
       if (described != field) return false;
     }
     return true;
@@ -46,7 +46,7 @@
   @Override public void describeTo(Description description) {
     List<String> names = new ArrayList<String>();
     for (MessageField field : fields) {
-      names.add(field.getName().getValue());
+      names.add(field.getName());
     }
     description.appendValue(names);
   }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/junit/matchers/ContainAllFieldsInMessage.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/junit/matchers/ContainAllFieldsInMessage.java
index f14949e..a4b2d55 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/junit/matchers/ContainAllFieldsInMessage.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/junit/matchers/ContainAllFieldsInMessage.java
@@ -64,7 +64,6 @@
 
   private String nameOf(IndexedElement e) {
     if (e == null) return null;
-    Name name = (e instanceof Group) ? ((Group) e).getName() : ((MessageField) e).getName();
-    return name.getValue();
+    return (e instanceof Group) ? ((Group) e).getName() : ((MessageField) e).getName();
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/junit/matchers/ContainAllLiteralsInEnum.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/junit/matchers/ContainAllLiteralsInEnum.java
index cf03f7c..f0ba0a2 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/junit/matchers/ContainAllLiteralsInEnum.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/junit/matchers/ContainAllLiteralsInEnum.java
@@ -40,8 +40,8 @@
     List<Literal> literals = allLiterals();
     if (descriptions.size() != literals.size()) return false;
     for (Literal literal : literals) {
-      Name name = literal.getName();
-      EObject described = descriptions.objectDescribedAs(name.getValue());
+      String name = literal.getName();
+      EObject described = descriptions.objectDescribedAs(name);
       if (described != literal) return false;
     }
     return true;
@@ -50,8 +50,8 @@
   @Override public void describeTo(Description description) {
     List<String> names = new ArrayList<String>();
     for (Literal literal : allLiterals()) {
-      Name name = literal.getName();
-      names.add(name.getValue());
+      String name = literal.getName();
+      names.add(name);
     }
     description.appendValue(names);
   }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_rootSourceOf_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_rootSourceOf_Test.java
index 3f852dd..b6ec71f 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_rootSourceOf_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_rootSourceOf_Test.java
@@ -41,7 +41,7 @@
   @Test public void should_return_field_of_native_field_option() {
     FieldOption option = xtext.find("deprecated", FieldOption.class);
     MessageField field = (MessageField) fieldOptions.rootSourceOf(option);
-    assertThat(field.getName().getValue(), equalTo("deprecated"));
+    assertThat(field.getName(), equalTo("deprecated"));
   }
 
   // syntax = "proto2";
@@ -58,6 +58,6 @@
   @Test public void should_return_field_of_custom_field_option() {
     FieldOption option = xtext.find("encoding", ")", FieldOption.class);
     MessageField field = (MessageField) fieldOptions.rootSourceOf(option);
-    assertThat(field.getName().getValue(), equalTo("encoding"));
+    assertThat(field.getName(), equalTo("encoding"));
   }
 }
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/FieldOptions_sourceOfLastFieldIn_Test.java
index 1008b54..755de75 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/FieldOptions_sourceOfLastFieldIn_Test.java
@@ -51,6 +51,6 @@
   @Test public void should_return_option_field() {
     CustomFieldOption option = xtext.find("custom", ").", CustomFieldOption.class);
     MessageField field = (MessageField) fieldOptions.sourceOfLastFieldIn(option);
-    assertThat(field.getName().getValue(), equalTo("count"));
+    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/FieldOptions_sourceOf_Test.java
index 3b01f5b..d97ea3a 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_sourceOf_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/FieldOptions_sourceOf_Test.java
@@ -47,7 +47,7 @@
   @Test public void should_return_source_of_field_option() {
     CustomFieldOption option = xtext.find("encoding", ")", CustomFieldOption.class);
     MessageField field = (MessageField) fieldOptions.sourceOf(option);
-    assertThat(field.getName().getValue(), equalTo("encoding"));
+    assertThat(field.getName(), equalTo("encoding"));
   }
 
   // syntax = "proto2";
@@ -68,6 +68,6 @@
   @Test public void should_return_source_of_field_in_field_option() {
     CustomFieldOption option = xtext.find("custom", ").", CustomFieldOption.class);
     MessageField field = (MessageField) fieldOptions.sourceOf(option);
-    assertThat(field.getName().getValue(), equalTo("count"));
+    assertThat(field.getName(), equalTo("count"));
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_lastFieldSourceFrom_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_lastFieldSourceFrom_Test.java
index 2c9b754..f035ebb 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_lastFieldSourceFrom_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_lastFieldSourceFrom_Test.java
@@ -49,6 +49,6 @@
   @Test public void should_return_option_field() {
     CustomOption option = xtext.find("custom", ")", CustomOption.class);
     MessageField field = (MessageField) options.lastFieldSourceFrom(option);
-    assertThat(field.getName().getValue(), equalTo("count"));
+    assertThat(field.getName(), equalTo("count"));
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_rootSourceOf_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_rootSourceOf_Test.java
index 7901f00..f582b9b 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_rootSourceOf_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_rootSourceOf_Test.java
@@ -39,7 +39,7 @@
   @Test public void should_return_source_of_native_option() {
     Option option = xtext.find("java_package", Option.class);
     MessageField field = (MessageField) options.rootSourceOf(option);
-    assertThat(field.getName().getValue(), equalTo("java_package"));
+    assertThat(field.getName(), equalTo("java_package"));
   }
 
   // syntax = "proto2";
@@ -54,6 +54,6 @@
   @Test public void should_return_source_of_custom_option() {
     Option option = xtext.find("encoding", ")", Option.class);
     MessageField field = (MessageField) options.rootSourceOf(option);
-    assertThat(field.getName().getValue(), equalTo("encoding"));
+    assertThat(field.getName(), equalTo("encoding"));
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_sourceOf_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_sourceOf_Test.java
index 9412acd..bb6e9c0 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_sourceOf_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/model/util/Options_sourceOf_Test.java
@@ -45,7 +45,7 @@
   @Test public void should_return_source_of_custom_option() {
     CustomOption option = xtext.find("encoding", ")", CustomOption.class);
     MessageField p = (MessageField) options.sourceOf(option);
-    assertThat(p.getName().getValue(), equalTo("encoding"));
+    assertThat(p.getName(), equalTo("encoding"));
   }
 
   // syntax = "proto2";
@@ -64,6 +64,6 @@
   @Test public void should_return_source_of_field_in_option() {
     CustomOption option = xtext.find("custom", ")", CustomOption.class);
     MessageField p = (MessageField) options.sourceOf(option);
-    assertThat(p.getName().getValue(), equalTo("count"));
+    assertThat(p.getName(), equalTo("count"));
   }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_availableOptionsFor_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_availableOptionsFor_Test.java
index a51a6f8..e2df747 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_availableOptionsFor_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_availableOptionsFor_Test.java
@@ -82,8 +82,8 @@
     void mapByName(Collection<MessageField> options) {
       optionsByName.clear();
       for (MessageField option : options) {
-        Name name = option.getName();
-        optionsByName.put(name.getValue(), option);
+        String name = option.getName();
+        optionsByName.put(name, option);
       }
     }
 
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 6ad2aec..e59b78a 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_enumTypeOf_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_enumTypeOf_Test.java
@@ -39,7 +39,7 @@
   @Test public void should_return_Enum_if_field_type_is_enum() {
     MessageField option = descriptor.option("optimize_for", FILE);
     Enum anEnum = descriptor.enumTypeOf(option);
-    assertThat(anEnum.getName().getValue(), equalTo("OptimizeMode"));
+    assertThat(anEnum.getName(), equalTo("OptimizeMode"));
   }
 
   @Test public void should_return_null_if_field_is_null() {
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/NameValueConverter_toValue_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/NameValueConverter_toValue_Test.java
deleted file mode 100644
index 755fb40..0000000
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/NameValueConverter_toValue_Test.java
+++ /dev/null
@@ -1,55 +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.conversion;
-
-import static com.google.eclipse.protobuf.junit.core.Setups.unitTestSetup;
-import static com.google.eclipse.protobuf.junit.core.XtextRule.createWith;
-import static org.hamcrest.core.IsEqual.equalTo;
-import static org.junit.Assert.*;
-import static org.mockito.Mockito.*;
-
-import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.protobuf.Name;
-
-import org.eclipse.xtext.nodemodel.INode;
-import org.junit.*;
-
-/**
- * Tests for <code>{@link NameValueConverter#toValue(String, INode)}</code>
- * 
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class NameValueConverter_toValue_Test {
-
-  @Rule public XtextRule xtext = createWith(unitTestSetup());
-  
-  private INode node;
-  private NameValueConverter converter;
-  
-  @Before public void setUp() {
-    node = mock(INode.class);
-    converter = xtext.getInstanceOf(NameValueConverter.class);
-  }
-  
-  @Test public void should_return_name_using_given_value_if_given_value_is_not_null() {
-    Name name = converter.toValue("hello", node);
-    assertThat(name.getValue(), equalTo("hello"));
-  }
-  
-  @Test public void should_return_name_using_text_from_node_if_value_is_null_and_text_in_node_is_keyword() {
-    when(node.getText()).thenReturn("message");
-    Name name = converter.toValue(null, node);
-    assertThat(name.getValue(), equalTo("message"));
-  }
-  
-  @Test public void should_return_null_if_given_value_is_null_and_text_in_node_is_not_keyword() {
-    when(node.getText()).thenReturn("hello");
-    assertNull(converter.toValue(null, node));
-  }
-}
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/EnumHasLiterals.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/EnumHasLiterals.java
index 847fb0d..65fd42c 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/EnumHasLiterals.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/EnumHasLiterals.java
@@ -44,7 +44,7 @@
   private List<String> literalNames(Enum anEnum) {
     List<String> names = new ArrayList<String>();
     for (Literal literal : getAllContentsOfType(anEnum, Literal.class)) {
-      names.add(literal.getName().getValue());
+      names.add(literal.getName());
     }
     return names;
   }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/FieldHasType.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/FieldHasType.java
index ca4cb3c..3b31b28 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/FieldHasType.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/FieldHasType.java
@@ -46,7 +46,7 @@
     if (link instanceof ScalarTypeLink) return ((ScalarTypeLink) link).getTarget().getName();
     if (link instanceof ComplexTypeLink) {
       ComplexType type = ((ComplexTypeLink) link).getTarget();
-      return type == null ? null : type.getName().getValue();
+      return type == null ? null : type.getName();
     }
     return link.toString();
   }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_nameOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_nameOf_Test.java
index c81ebbc..413c94e 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_nameOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/IndexedElements_nameOf_Test.java
@@ -28,26 +28,22 @@
 
   @Rule public XtextRule xtext = createWith(unitTestSetup());
   
-  private Name name;
   private IndexedElements indexedElements;
   
   @Before public void setUp() {
-    name = mock(Name.class);
     indexedElements = xtext.getInstanceOf(IndexedElements.class);
   }
   
   @Test public void should_return_name_of_Property() {
     MessageField field = mock(MessageField.class);
-    when(field.getName()).thenReturn(name);
-    when(name.getValue()).thenReturn("foo");
+    when(field.getName()).thenReturn("foo");
     assertThat(indexedElements.nameOf(field), equalTo("foo"));
     verify(field).getName();
   }
 
   @Test public void should_return_name_of_Group() {
     Group group = mock(Group.class);
-    when(group.getName()).thenReturn(name);
-    when(name.getValue()).thenReturn("foo");
+    when(group.getName()).thenReturn("foo");
     assertThat(indexedElements.nameOf(group), equalTo("foo"));
     verify(group).getName();
   }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_enumTypeOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_enumTypeOf_Test.java
index cf92013..132cdc0 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_enumTypeOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_enumTypeOf_Test.java
@@ -48,7 +48,7 @@
   @Test public void should_return_enum_if_field_type_is_enum() {
     MessageField field = xtext.find("type", MessageField.class);
     Enum anEnum = finder.enumTypeOf(field);
-    assertThat(anEnum.getName().getValue(), equalTo("PhoneType"));
+    assertThat(anEnum.getName(), equalTo("PhoneType"));
   }
 
   // syntax = "proto2";
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_messageFrom_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_messageFrom_Test.java
index d1d4bef..f51de92 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_messageFrom_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_messageFrom_Test.java
@@ -44,7 +44,7 @@
   @Test public void should_return_message_from_extension() {
     MessageExtension extension = xtext.find("Person", " {}", MessageExtension.class);
     Message message = finder.messageFrom(extension);
-    assertThat(message.getName().getValue(), equalTo("Person"));
+    assertThat(message.getName(), equalTo("Person"));
   }
 
   @Test public void should_return_null_if_extension_is_not_referring_to_message() {
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 07fc757..093c4b6 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
@@ -27,26 +27,22 @@
   
   @Rule public XtextRule xtext = createWith(unitTestSetup());
 
-  private Name name;
   private Options options;
   
   @Before public void setUp() {
-    name = mock(Name.class);
     options = xtext.getInstanceOf(Options.class);
   }
   
   @Test public void should_return_unchanged_name_if_element_is_Field() {
     MessageField field = mock(MessageField.class);
-    when(field.getName()).thenReturn(name);
-    when(name.getValue()).thenReturn("active");
+    when(field.getName()).thenReturn("active");
     assertThat(options.nameForOption(field), equalTo("active"));
     verify(field).getName();
   }
   
   @Test public void should_return_name_in_lower_case_if_element_is_Group() {
     Group group = mock(Group.class);
-    when(group.getName()).thenReturn(name);
-    when(name.getValue()).thenReturn("Person");
+    when(group.getName()).thenReturn("Person");
     assertThat(options.nameForOption(group), equalTo("person"));
     verify(group).getName();
   }
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 6894a39..36f8d22 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
@@ -56,7 +56,6 @@
   @Inject private IndexedElements indexedElements;
   @Inject private PluginImageHelper imageHelper;
   @Inject private Literals literals;
-  @Inject private Names names;
   @Inject private Options options;
   @Inject private Fields properties;
 
@@ -319,7 +318,7 @@
     proposeDefaultKeyword(field, optionNames, context, acceptor);
     ProtoDescriptor descriptor = descriptorProvider.primaryDescriptor();
     for (MessageField optionSource : descriptor.availableOptionsFor(field)) {
-      String optionName = names.valueOf(optionSource.getName());
+      String optionName = optionSource.getName();
       if (optionNames.contains(optionName) || ("packed".equals(optionName) && !canBePacked(field))) continue;
       proposeOption(optionSource, context, acceptor);
     }
@@ -356,7 +355,7 @@
 
   private void proposeOption(MessageField optionSource, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
-    String displayString = names.valueOf(optionSource.getName());
+    String displayString = optionSource.getName();
     String proposalText = displayString + space() + EQUAL + space();
     Object value = defaultValueOf(optionSource);
     if (value != null) proposalText = proposalText + value;
@@ -574,7 +573,7 @@
   private void proposeAndAccept(Enum enumType, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
     Image image = imageHelper.getImage(images.imageFor(Literal.class));
     for (Literal literal : getAllContentsOfType(enumType, Literal.class))
-      proposeAndAccept(names.valueOf(literal.getName()), image, context, acceptor);
+      proposeAndAccept(literal.getName(), image, context, acceptor);
   }
 
   private void proposeAndAccept(String proposalText, Image image, ContentAssistContext context,
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
index 0f2aa81..87fc2ca 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
@@ -32,7 +32,6 @@
     IGNORED_ELEMENT_TYPES.add(BooleanLink.class);
     IGNORED_ELEMENT_TYPES.add(FieldOption.class);
     IGNORED_ELEMENT_TYPES.add(MessageLink.class);
-    IGNORED_ELEMENT_TYPES.add(Name.class);
   }
 
   boolean _isLeaf(Extensions extensions) {
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
index d1b1665..1299e78 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
@@ -120,7 +120,7 @@
   (('{' options+=Option* '}') (';')? | ';');
 
 Name:
-  value=IdOrReservedWord;
+  IdOrReservedWord;
 
 IdOrReservedWord: 
   ID | ReservedWord;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/NameValueConverter.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/NameValueConverter.java
deleted file mode 100644
index 1e78eb9..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/NameValueConverter.java
+++ /dev/null
@@ -1,42 +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.conversion;
-
-import com.google.eclipse.protobuf.protobuf.*;
-import com.google.inject.Inject;
-
-import org.eclipse.xtext.conversion.impl.AbstractLexerBasedConverter;
-import org.eclipse.xtext.nodemodel.INode;
-
-/**
- * Converts names to <code>{@link Name}</code>s.
- * 
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class NameValueConverter extends AbstractLexerBasedConverter<Name> {
-
-  private ProtobufFactory factory = ProtobufFactory.eINSTANCE;
-  @Inject private Keywords keywords;
-  
-  @Override public Name toValue(String string, INode node) {
-    String value = value(string, node);
-    if (value == null) return null;
-    Name name = factory.createName();
-    name.setValue(value);
-    return name;
-  }
-  
-  private String value(String string, INode node) {
-    if (string != null) return string;
-    String text = node.getText();
-    if (text == null) return text;
-    text = text.trim();
-    return keywords.isKeyword(text) ? text : null;
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java
index 50289cb..47f60ec 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java
@@ -8,11 +8,10 @@
  */
 package com.google.eclipse.protobuf.conversion;
 
+import com.google.inject.Inject;
+
 import org.eclipse.xtext.common.services.DefaultTerminalConverters;
 import org.eclipse.xtext.conversion.*;
-import com.google.eclipse.protobuf.protobuf.Name;
-
-import com.google.inject.Inject;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -22,7 +21,6 @@
   @Inject private DOUBLEValueConverter doubleValueConverter;
   @Inject private HEXValueConverter hexValueConverter;
   @Inject private LONGValueConverter longValueConverter;
-  @Inject private NameValueConverter nameValueConverter;
   @Inject private STRINGValueConverter stringValueConverter;
   
   @ValueConverter(rule = "DOUBLE")
@@ -44,9 +42,4 @@
   @Override public IValueConverter<String> STRING() {
     return stringValueConverter;
   }
-
-  @ValueConverter(rule = "Name")
-  public IValueConverter<Name> Name() {
-    return nameValueConverter;
-  }
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/FieldOptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/FieldOptions.java
index 8bf9a34..59641d5 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/FieldOptions.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/FieldOptions.java
@@ -21,7 +21,6 @@
 @Singleton
 public class FieldOptions {
 
-  private @Inject Names names;
   private @Inject OptionFields optionFields;
 
   /**
@@ -41,8 +40,7 @@
   public String nameOf(FieldOption option) {
     IndexedElement e = rootSourceOf(option);
     if (e instanceof MessageField) {
-      Name name = ((MessageField) e).getName();
-      return names.valueOf(name);
+      return ((MessageField) e).getName();
     }
     return null;
   }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Fields.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Fields.java
index ba0159c..8d5875c 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Fields.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Fields.java
@@ -23,8 +23,6 @@
 @Singleton
 public class Fields {
 
-  private @Inject Names names;
-
   /**
    * Indicates whether the modifier of the given field is <code>{@link Modifier#OPTIONAL}</code>.
    * @param field the given field.
@@ -90,8 +88,7 @@
     if (link instanceof ScalarTypeLink) return ((ScalarTypeLink) link).getTarget().getName();
     if (link instanceof ComplexTypeLink) {
       ComplexType type = ((ComplexTypeLink) link).getTarget();
-      if (type == null) return null;
-      return names.valueOf(type.getName());
+      return (type == null) ? null : type.getName();
     }
     return link.toString();
   }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/IndexedElements.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/IndexedElements.java
index 2af8c4f..a131513 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
@@ -27,8 +27,6 @@
 @Singleton
 public class IndexedElements {
 
-  private @Inject Names names;
-
   /**
    * Returns the name of the given <code>{@link IndexedElement}</code>.
    * @param e the given {@code IndexedElement}.
@@ -37,12 +35,12 @@
    */
   public String nameOf(IndexedElement e) {
     if (e instanceof MessageField) {
-      Name name = ((MessageField) e).getName();
-      return names.valueOf(name);
+      MessageField field = (MessageField) e;
+      return field.getName();
     }
     if (e instanceof Group) {
-      Name name = ((Group) e).getName();
-      return names.valueOf(name);
+      Group group = (Group) e;
+      return group.getName();
     }
     return null;
   }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Names.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Names.java
deleted file mode 100644
index 87c633b..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Names.java
+++ /dev/null
@@ -1,27 +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 com.google.eclipse.protobuf.protobuf.Name;
-import com.google.inject.Singleton;
-
-/**
- * Utility methods related to <code>{@link Name}</code>s.
- * 
- * @author alruiz@google.com (Alex Ruiz)
- */
-@Singleton
-public class Names {
-  
-  public String valueOf(Name name) {
-    if (name == null) return null;
-    return name.getValue();
-  }
-  
-}
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 17bfc21..f1b2c5f 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
@@ -23,7 +23,6 @@
 @Singleton
 public class Options {
 
-  private @Inject Names names;
   private @Inject OptionFields optionFields;
   
   /**
@@ -95,13 +94,13 @@
    */
   public String nameForOption(IndexedElement e) {
     if (e instanceof MessageField) {
-      Name name = ((MessageField) e).getName();
-      return names.valueOf(name);
+      MessageField field = (MessageField) e;
+      return field.getName();
     }
     if (e instanceof Group) {
-      Name name = ((Group) e).getName();
-      String value = names.valueOf(name);
-      if (!isEmpty(value)) return value.toLowerCase();
+      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/naming/NameResolver.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/NameResolver.java
index 478cbd1..45258ed 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/NameResolver.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/NameResolver.java
@@ -8,11 +8,12 @@
  */
 package com.google.eclipse.protobuf.naming;
 
-import org.eclipse.emf.ecore.*;
+import static org.eclipse.xtext.util.SimpleAttributeResolver.NAME_RESOLVER;
 
-import com.google.eclipse.protobuf.protobuf.Name;
 import com.google.inject.Singleton;
 
+import org.eclipse.emf.ecore.*;
+
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -22,12 +23,11 @@
   public String nameOf(EObject o) {
     Object value = nameFeatureOf(o);
     if (value instanceof String) return (String) value;
-    if (value instanceof Name) return ((Name) value).getValue();
     return null;
   }
   
   private Object nameFeatureOf(EObject e) {
-    EStructuralFeature f = e.eClass().getEStructuralFeature("name");
+    EStructuralFeature f = NAME_RESOLVER.getAttribute(e);
     return (f != null) ? e.eGet(f) : null;
   }
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionScopeFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionScopeFinder.java
index 171dff4..d3df720 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionScopeFinder.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionScopeFinder.java
@@ -73,11 +73,7 @@
     if (!(o instanceof MessageExtension)) return false;
     Message message = modelFinder.messageFrom((MessageExtension) o);
     if (message == null) return false;
-    Name name = message.getName();
-    if (name != null) {
-      String nameValue = name.getValue();
-      return optionType.messageName().equals(nameValue);
-    }
-    return false;
+    String name = message.getName();
+    return optionType.messageName().equals(name);
   }
 }
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 dd22fc3..3e38f54 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
@@ -28,7 +28,6 @@
   @Inject private FieldOptions fieldOptions;
   @Inject private Options options;
   @Inject private ModelFinder modelFinder;
-  @Inject private Names names;
   @Inject private QualifiedNameDescriptions qualifiedNameDescriptions;
 
   Collection<IEObjectDescription> sourceOf(FieldName name) {
@@ -72,9 +71,8 @@
     Message fieldType = modelFinder.messageTypeOf(field);
     for (MessageElement element : fieldType.getElements()) {
       if (element instanceof MessageField) {
-        Name name = ((MessageField) element).getName();
-        String nameValue = names.valueOf(name);
-        descriptions.add(create(nameValue, element));
+        String name = ((MessageField) element).getName();
+        descriptions.add(create(name, element));
       }
     }
     return descriptions;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/LiteralDescriptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/LiteralDescriptions.java
index 2cc54ae..b91dbe8 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/LiteralDescriptions.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/LiteralDescriptions.java
@@ -12,10 +12,8 @@
 import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType;
 import static org.eclipse.xtext.resource.EObjectDescription.create;
 
-import com.google.eclipse.protobuf.model.util.Names;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Enum;
-import com.google.inject.Inject;
 
 import org.eclipse.xtext.resource.IEObjectDescription;
 
@@ -26,14 +24,12 @@
  */
 class LiteralDescriptions {
 
-  @Inject private Names names;
-  
   Collection<IEObjectDescription> literalsOf(Enum anEnum) {
     if (anEnum == null) return emptyList();
     List<IEObjectDescription> descriptions = new ArrayList<IEObjectDescription>();
     for (Literal literal : getAllContentsOfType(anEnum, Literal.class)) {
-      String nameValue = names.valueOf(literal.getName());
-      descriptions.add(create(nameValue, literal));
+      String name = literal.getName();
+      descriptions.add(create(name, literal));
     }
     return descriptions;
   }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java
index 72b3079..4af132a 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java
@@ -11,7 +11,6 @@
 import static java.util.Collections.emptyList;
 import static org.eclipse.xtext.resource.EObjectDescription.create;
 
-import com.google.eclipse.protobuf.model.util.Names;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.inject.Inject;
 
@@ -26,7 +25,6 @@
 class NativeOptionDescriptions {
 
   @Inject private ProtoDescriptorProvider descriptorProvider;
-  @Inject private Names names;
   
   Collection <IEObjectDescription> sources(NativeOption option) {
     return allSources(option);
@@ -46,8 +44,8 @@
   private Collection<IEObjectDescription> describe(Collection<MessageField> fields) {
     List<IEObjectDescription> descriptions = new ArrayList<IEObjectDescription>();
     for (MessageField field : fields) {
-      String nameValue = names.valueOf(field.getName());
-      descriptions.add(create(nameValue, field));
+      String name = field.getName();
+      descriptions.add(create(name, field));
     }
     return descriptions;
   }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java
index 1127262..0e59191 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
@@ -102,7 +102,7 @@
     for (ComplexType t : allTypes) {
       if (!(t instanceof Message)) continue;
       Message m = (Message) t;
-      OptionType type = OPTION_DEFINITION_BY_NAME.get(m.getName().getValue());
+      OptionType type = OPTION_DEFINITION_BY_NAME.get(m.getName());
       if (type == null) continue;
       initOptions(m, type);
     }
@@ -116,16 +116,16 @@
       }
       if (e instanceof Enum) {
         Enum anEnum = (Enum) e;
-        Name name = anEnum.getName();
-        enumsByName.put(name.getValue(), anEnum);
+        String name = anEnum.getName();
+        enumsByName.put(name, anEnum);
       }
     }
   }
 
   private void addOption(MessageField optionSource, OptionType type) {
     if (shouldIgnore(optionSource)) return;
-    Name name = optionSource.getName();
-    optionsByType.get(type).put(name.getValue(), optionSource);
+    String name = optionSource.getName();
+    optionsByType.get(type).put(name, optionSource);
   }
 
   private boolean shouldIgnore(MessageField field) {
