diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/PropertyHasType.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/PropertyHasType.java
index a14b23e..cdb38c1 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/PropertyHasType.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/PropertyHasType.java
@@ -42,13 +42,13 @@
   }
 
   private String typeNameOf(Property property) {
-    AbstractTypeRef r = property.getType();
-    if (r instanceof ScalarTypeRef) return ((ScalarTypeRef) r).getScalar().getName();
-    if (r instanceof ComplexTypeLink) {
-      ComplexType type = ((ComplexTypeLink) r).getTarget();
+    TypeLink link = property.getType();
+    if (link instanceof ScalarTypeLink) return ((ScalarTypeLink) link).getTarget().getName();
+    if (link instanceof ComplexTypeLink) {
+      ComplexType type = ((ComplexTypeLink) link).getTarget();
       return type == null ? null : type.getName();
     }
-    return r.toString();
+    return link.toString();
   }
 
   @Override public void describeTo(Description description) {
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 2c7bc4a..068b21b 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,6 +11,7 @@
 
 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.*;
@@ -150,9 +151,9 @@
   }
 
   private void highlightPropertyType(Property property, IHighlightedPositionAcceptor acceptor) {
-    AbstractTypeRef ref = property.getType();
-    if (!(ref instanceof ComplexTypeLink)) return;
-    ComplexType type = ((ComplexTypeLink) ref).getTarget();
+    TypeLink link = property.getType();
+    if (!(link instanceof ComplexTypeLink)) return;
+    ComplexType type = ((ComplexTypeLink) link).getTarget();
     if (type instanceof Message) {
       highlightFirstFeature(property, PROPERTY__TYPE, acceptor, MESSAGE_ID);
       return;
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 21120e3..75974a3 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
@@ -68,7 +68,7 @@
   Option | Property | Group | Enum | MessageExtension;
 
 Property:
-  modifier=Modifier type=AbstractTypeRef name=Name '=' index=(LONG | HEX)
+  modifier=Modifier type=TypeLink name=Name '=' index=(LONG | HEX)
   ('[' fieldOptions+=FieldOption (',' fieldOptions+=FieldOption)* ']')? (';')+;
 
 enum Modifier:
@@ -76,11 +76,11 @@
   | optional
   | repeated;
 
-AbstractTypeRef:
-  ScalarTypeRef | ComplexTypeLink;
+TypeLink:
+  ScalarTypeLink | ComplexTypeLink;
 
-ScalarTypeRef:
-  scalar=ScalarType;
+ScalarTypeLink:
+  target=ScalarType;
 
 enum ScalarType:
   double | float | int32 | int64 | uint32 | uint64 | sint32 | sint64 | fixed32 | fixed64 | sfixed32 | sfixed64 | bool |
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 7bf76e2..72f3048 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
@@ -86,9 +86,9 @@
    * @return the type of the given property.
    */
   public ComplexType typeOf(Property p) {
-    AbstractTypeRef r = p.getType();
-    if (!(r instanceof ComplexTypeLink)) return null;
-    return ((ComplexTypeLink) r).getTarget();
+    TypeLink link = p.getType();
+    if (!(link instanceof ComplexTypeLink)) return null;
+    return ((ComplexTypeLink) link).getTarget();
   }
 
   /**
@@ -97,9 +97,9 @@
    * @return the scalar type of the given property or {@code null} if the type of the given property is not a scalar.
    */
   public ScalarType scalarTypeOf(Property p) {
-    AbstractTypeRef aTypeRef = (p).getType();
-    if (aTypeRef instanceof ScalarTypeRef)
-      return ((ScalarTypeRef) aTypeRef).getScalar();
+    TypeLink link = (p).getType();
+    if (link instanceof ScalarTypeLink)
+      return ((ScalarTypeLink) link).getTarget();
     return null;
   }
 
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Properties.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Properties.java
index 8df03b0..8b80af2 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Properties.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Properties.java
@@ -40,9 +40,9 @@
    * @return {@code true} if the type of the given property is primitive, {@code false} otherwise.
    */
   public boolean isPrimitive(Property p) {
-    AbstractTypeRef r = p.getType();
-    if (!(r instanceof ScalarTypeRef)) return false;
-    String typeName = ((ScalarTypeRef) r).getScalar().getName();
+    TypeLink link = p.getType();
+    if (!(link instanceof ScalarTypeLink)) return false;
+    String typeName = ((ScalarTypeLink) link).getTarget().getName();
     return !STRING.hasValue(typeName) && !BYTES.hasValue(typeName);
   }
 
@@ -84,12 +84,12 @@
    * @return the name of the type of the given {@code Property}.
    */
   public String typeNameOf(Property p) {
-    AbstractTypeRef r = p.getType();
-    if (r instanceof ScalarTypeRef) return ((ScalarTypeRef) r).getScalar().getName();
-    if (r instanceof ComplexTypeLink) {
-      ComplexType type = ((ComplexTypeLink) r).getTarget();
+    TypeLink link = p.getType();
+    if (link instanceof ScalarTypeLink) return ((ScalarTypeLink) link).getTarget().getName();
+    if (link instanceof ComplexTypeLink) {
+      ComplexType type = ((ComplexTypeLink) link).getTarget();
       return type == null ? null : type.getName();
     }
-    return r.toString();
+    return link.toString();
   }
 }
