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 bff0655..907f555 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
@@ -123,12 +123,12 @@
 
   private void highlightOptions(IndexedElement element, IHighlightedPositionAcceptor acceptor) {
     for (FieldOption option : indexedElements.fieldOptionsOf(element)) {
-      ValueRef ref = option.getValue();
-      if (ref instanceof LiteralRef) {
+      ValueLink link = option.getValue();
+      if (link instanceof LiteralRef) {
         highlightFirstFeature(option, FIELD_OPTION__VALUE, acceptor, ENUM_LITERAL_ID);
         return;
       }
-      if (ref instanceof NumberRef) {
+      if (link instanceof NumberLink) {
         highlightFirstFeature(option, FIELD_OPTION__VALUE, acceptor, NUMBER_ID);
       }
     }
@@ -209,12 +209,12 @@
     if (element != null) {
       highlightFirstFeature(option, OPTION__SOURCE, acceptor, DEFAULT_ID);
     }
-    ValueRef ref = option.getValue();
-    if (ref instanceof LiteralRef) {
+    ValueLink link = option.getValue();
+    if (link instanceof LiteralRef) {
       highlightFirstFeature(option, OPTION__VALUE, acceptor, ENUM_LITERAL_ID);
       return;
     }
-    if (ref instanceof NumberRef) {
+    if (link instanceof NumberLink) {
       highlightFirstFeature(option, OPTION__VALUE, acceptor, NUMBER_ID);
     }
   }
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 5a77117..6096449 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
@@ -28,7 +28,7 @@
   private static final List<Class<? extends EObject>> IGNORED_ELEMENT_TYPES = new ArrayList<Class<? extends EObject>>();
 
   static {
-    IGNORED_ELEMENT_TYPES.add(BooleanRef.class);
+    IGNORED_ELEMENT_TYPES.add(BooleanLink.class);
     IGNORED_ELEMENT_TYPES.add(FieldOption.class);
     IGNORED_ELEMENT_TYPES.add(MessageLink.class);
   }
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 0f11301..27b5ed2 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
@@ -89,75 +89,6 @@
 ComplexTypeLink:
   target=[ComplexType|QualifiedName];
 
-ValueRef:
-  MessageNotation | SimpleRef;
-
-// { foo: 1, bar: 2 }
-MessageNotation:
-  '{'
-  fields+=FieldNotation ((',')? fields+=FieldNotation)*
-  '}'
-;
-
-FieldNotation:
-  SimpleFieldNotation | ComplexFieldNotation;
-
-SimpleFieldNotation:
-  name=FieldNotationNameSource ':' value=SimpleRef;
-
-ComplexFieldNotation:
-  name=FieldNotationNameSource ':'? values=MessageNotation;
-
-FieldNotationNameSource:
-  NormalFieldNotationNameSource | ExtensionFieldNotationNameSource;
-
-NormalFieldNotationNameSource:
-  property=[MessageField];
-
-ExtensionFieldNotationNameSource:
-  '[' extension=[MessageField|QualifiedName] ']';
-
-SimpleRef:
-  LiteralRef | BooleanRef | NumberRef | StringRef;
-
-LiteralRef:
-  literal=[Literal];
-
-BooleanRef:
-  boolean=BOOL;
-
-enum BOOL:
-  true
-  | false;
-
-NumberRef:
-  HexRef | LongRef | DoubleRef;
-
-HexRef:
-  hex=HEX;
-
-LongRef:
-  long=LONG;
-
-terminal LONG returns ecore::ELong:
-  ('-')? (NUMBER)+;
-
-DoubleRef:
-  double=DOUBLE;
-
-terminal DOUBLE returns ecore::EDouble:
-  (('-')? (NUMBER)* ('.' (NUMBER)+)? (('e'|'E')('-')? (NUMBER)+)?) | 'nan' | 'inf' | '-inf';
-
-StringRef:
-  string=STRING;
-
-terminal STRING:
-  SL_STRING (SL_STRING)*;
-
-terminal SL_STRING:
-  '"' ('\\' ('"' | "'" | '\\' | !('\\' | '"')) | !('\\' | '"'))* '"' (WS)* |
-  "'" ('\\' ('"' | "'" | '\\' | !('\\' | "'")) | !('\\' | "'"))* "'" (WS)*;
-
 Enum:
   'enum' name=Name '{'
   elements+=EnumElement*
@@ -173,9 +104,6 @@
 terminal HEX returns ecore::ELong:
   ('-')? '0x' (NUMBER | 'a'..'f' | 'A'..'F')+;
 
-terminal NUMBER:
-  '0'..'9';
-
 MessageExtension:
   'extend' message=MessageLink '{'
   elements+=MessageElement*
@@ -206,24 +134,24 @@
   NativeOption | CustomOption;
 
 NativeOption:
-  'option' source=OptionSource '=' value=ValueRef ';';
+  'option' source=OptionSource '=' value=ValueLink ';';
 
 CustomOption:
   'option' '(' source=OptionSource ')'
-  ('.' optionFields+=OptionFieldSource ('.' optionFields+=OptionFieldSource)*)? '=' value=ValueRef ';';
+  ('.' optionFields+=OptionFieldSource ('.' optionFields+=OptionFieldSource)*)? '=' value=ValueLink ';';
  
 FieldOption:
   DefaultValueFieldOption | NativeFieldOption | CustomFieldOption;
 
 DefaultValueFieldOption:
-  'default' '=' value=ValueRef;
+  'default' '=' value=ValueLink;
 
 NativeFieldOption:
-  source=OptionSource '=' value=ValueRef;
+  source=OptionSource '=' value=ValueLink;
 
 CustomFieldOption:
   '(' source=OptionSource ')'
-  ('.' optionFields+=OptionFieldSource ('.' optionFields+=OptionFieldSource)*)? '=' value=ValueRef;
+  ('.' optionFields+=OptionFieldSource ('.' optionFields+=OptionFieldSource)*)? '=' value=ValueLink;
 
 OptionSource:
   optionField=[IndexedElement|QualifiedName];
@@ -240,6 +168,77 @@
 IndexedElement:
   MessageField | Group;
 
+ValueLink:
+  MessageNotation | SimpleValueLink;
+
+// { foo: 1, bar: 2 }
+MessageNotation:
+  '{'
+  fields+=FieldNotation ((',')? fields+=FieldNotation)*
+  '}';
+
+FieldNotation:
+  SimpleFieldNotation | ComplexFieldNotation;
+
+SimpleFieldNotation:
+  name=FieldNotationNameSource ':' value=SimpleValueLink;
+
+ComplexFieldNotation:
+  name=FieldNotationNameSource ':'? values=MessageNotation;
+
+FieldNotationNameSource:
+  NormalFieldNotationNameSource | ExtensionFieldNotationNameSource;
+
+NormalFieldNotationNameSource:
+  property=[MessageField];
+
+ExtensionFieldNotationNameSource:
+  '[' extension=[MessageField|QualifiedName] ']';
+
+SimpleValueLink:
+  LiteralRef | BooleanLink | NumberLink | StringLink;
+
+LiteralRef:
+  literal=[Literal];
+
+BooleanLink:
+  target=BOOL;
+
+enum BOOL:
+  true
+  | false;
+
+NumberLink:
+  HexNumberLink | LongLink | DoubleLink;
+
+HexNumberLink:
+  target=HEX;
+
+LongLink:
+  target=LONG;
+
+terminal LONG returns ecore::ELong:
+  ('-')? (NUMBER)+;
+
+DoubleLink:
+  target=DOUBLE;
+
+terminal DOUBLE returns ecore::EDouble:
+  (('-')? (NUMBER)* ('.' (NUMBER)+)? (('e'|'E')('-')? (NUMBER)+)?) | 'nan' | 'inf' | '-inf';
+
+terminal NUMBER:
+  '0'..'9';
+
+StringLink:
+  target=STRING;
+
+terminal STRING:
+  SL_STRING (SL_STRING)*;
+
+terminal SL_STRING:
+  '"' ('\\' ('"' | "'" | '\\' | !('\\' | '"')) | !('\\' | '"'))* '"' (WS)* |
+  "'" ('\\' ('"' | "'" | '\\' | !('\\' | "'")) | !('\\' | "'"))* "'" (WS)*;
+
 terminal ID: '^'?('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
 terminal ML_COMMENT: '/*' -> '*/';
 terminal SL_COMMENT: '//' !('\n'|'\r')* ('\r'? '\n')?;
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 6acbfc8..81aeed8 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
@@ -56,8 +56,8 @@
    * @return the message from the given extension, or {@code null} if the extension is not referring to a message.
    */
   public Message messageFrom(MessageExtension extension) {
-    MessageLink ref = extension.getMessage();
-    return ref == null ? null : ref.getTarget();
+    MessageLink link = extension.getMessage();
+    return link == null ? null : link.getTarget();
   }
 
   /**
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
index 36647a4..c9f0265 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
@@ -50,13 +50,13 @@
   @Check public void checkDefaultValueType(FieldOption option) {
     if (!fieldOptions.isDefaultValueOption(option)) return;
     MessageField field = (MessageField) option.eContainer();
-    ValueRef defaultValue = option.getValue();
+    ValueLink defaultValue = option.getValue();
     if (properties.isString(field)) {
-      if (defaultValue instanceof StringRef) return;
+      if (defaultValue instanceof StringLink) return;
       error(expectedString, FIELD_OPTION__VALUE);
     }
     if (properties.isBool(field)) {
-      if (defaultValue instanceof BooleanRef) return;
+      if (defaultValue instanceof BooleanLink) return;
       error(expectedTrueOrFalse, FIELD_OPTION__VALUE);
     }
   }
