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 e1fe7fc..665b74a 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
@@ -13,6 +13,7 @@
 import static org.eclipse.jface.viewers.StyledString.DECORATIONS_STYLER;
 
 import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.xtext.nodemodel.INode;
 
@@ -36,10 +37,6 @@
   @Inject private Fields properties;
 
   public Object labelFor(Object o) {
-    if (o instanceof ComplexType) {
-      ComplexType type = (ComplexType) o;
-      return labelFor(type);
-    }
     if (o instanceof Extensions) {
       Extensions extensions = (Extensions) o;
       return labelFor(extensions);
@@ -68,12 +65,11 @@
       Rpc rpc = (Rpc) o;
       return labelFor(rpc);
     }
+    if (o instanceof EObject) {
+      return nameResolver.nameOf((EObject) o);
+    }
     return null;
   }
-
-  private Object labelFor(ComplexType type) {
-    return nameResolver.nameOf(type);
-  }
   
   private Object labelFor(Extensions extensions) {
     StringBuilder builder = new StringBuilder();
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
index d6d73c0..1dfcd33 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
@@ -17,7 +17,7 @@
 import org.eclipse.xtext.scoping.impl.ImportUriResolver;
 import org.eclipse.xtext.validation.IResourceValidator;
 
-import com.google.eclipse.protobuf.conversion.ProtobufTerminalConverters;
+import com.google.eclipse.protobuf.conversion.*;
 import com.google.eclipse.protobuf.linking.ProtobufResource;
 import com.google.eclipse.protobuf.naming.ProtobufQualifiedNameProvider;
 import com.google.eclipse.protobuf.parser.Proto2OnlyParser;
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
new file mode 100644
index 0000000..e738673
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/NameValueConverter.java
@@ -0,0 +1,41 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.eclipse.protobuf.conversion;
+
+import static org.eclipse.xtext.GrammarUtil.getAllKeywords;
+
+import com.google.eclipse.protobuf.protobuf.*;
+import com.google.inject.Inject;
+
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.conversion.impl.*;
+import org.eclipse.xtext.nodemodel.INode;
+
+import java.util.*;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ * 
+ */
+public class NameValueConverter extends AbstractLexerBasedConverter<Name> {
+
+  @Inject
+  private IGrammarAccess grammarAccess;
+
+  @Override public Name toValue(String string, INode node) {
+    String value = value(string, node);
+    if (value == null) return null;
+    Name name = ProtobufFactory.eINSTANCE.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();
+    Set<String> allKeywords = getAllKeywords(grammarAccess.getGrammar());
+    return allKeywords.contains(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 d778e94..50289cb 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
@@ -10,6 +10,7 @@
 
 import org.eclipse.xtext.common.services.DefaultTerminalConverters;
 import org.eclipse.xtext.conversion.*;
+import com.google.eclipse.protobuf.protobuf.Name;
 
 import com.google.inject.Inject;
 
@@ -21,6 +22,7 @@
   @Inject private DOUBLEValueConverter doubleValueConverter;
   @Inject private HEXValueConverter hexValueConverter;
   @Inject private LONGValueConverter longValueConverter;
+  @Inject private NameValueConverter nameValueConverter;
   @Inject private STRINGValueConverter stringValueConverter;
   
   @ValueConverter(rule = "DOUBLE")
@@ -42,4 +44,9 @@
   @Override public IValueConverter<String> STRING() {
     return stringValueConverter;
   }
+
+  @ValueConverter(rule = "Name")
+  public IValueConverter<Name> Name() {
+    return nameValueConverter;
+  }
 }
