diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_OptionSource_optionField_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_OptionSource_optionField_Test.java
index 8b0711a..d8fdb65 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_OptionSource_optionField_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_OptionSource_optionField_Test.java
@@ -96,7 +96,6 @@
 
   // // Create file custom-options.proto
   // syntax = "proto2";
-  //
   // package test.proto;
   //
   // import "google/protobuf/descriptor.proto";
@@ -106,6 +105,7 @@
   //   optional int32 info = 1002;
   // }
 
+  // syntax = "proto2";
   // package com.google.proto;
   //
   // import 'custom-options.proto';
@@ -120,7 +120,6 @@
 
   // // Create file custom-options.proto
   // syntax = "proto2";
-  //
   // package com.google.proto;
   //
   // import "google/protobuf/descriptor.proto";
@@ -130,6 +129,7 @@
   //   optional int32 info = 1002;
   // }
 
+  // syntax = "proto2";
   // package com.google.proto;
   //
   // import 'custom-options.proto';
@@ -144,6 +144,7 @@
                                                  ".com.google.proto.info"));
   }
 
+  // syntax = "proto2";
   // package com.google.proto;
   // import 'google/protobuf/descriptor.proto';
   //
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_TypeRef_type_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_TypeRef_type_Test.java
index 8398201..79dd0ea 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_TypeRef_type_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_TypeRef_type_Test.java
@@ -44,7 +44,6 @@
   }
 
   // syntax = "proto2";
-  //
   // package com.google.proto;
   //
   // enum Type {
@@ -75,6 +74,7 @@
 
   // // Create file types.proto
   //
+  // syntax = "proto2";
   // package test.proto;
   //
   // enum Type {
@@ -89,6 +89,7 @@
   //   optional int32 zipCode = 4;
   // }
 
+  // syntax = "proto2";
   // package com.google.proto;
   //
   // import "types.proto";
@@ -107,6 +108,7 @@
 
   // // Create file types.proto
   //
+  // syntax = "proto2";
   // package com.google.proto;
   //
   // enum Type {
@@ -121,6 +123,7 @@
   //   optional int32 zipCode = 4;
   // }
 
+  // syntax = "proto2";
   // package com.google.proto;
   //
   // import "types.proto";
@@ -141,6 +144,7 @@
 
   // // Create file types.proto
   //
+  // syntax = "proto2";
   // package test.proto;
   //
   // enum Type {
@@ -155,6 +159,7 @@
   //   optional int32 zipCode = 4;
   // }
 
+  // syntax = "proto2";
   // package com.google.proto;
   //
   // import public "types.proto";
@@ -173,6 +178,7 @@
 
   // // Create file public-types.proto
   //
+  // syntax = "proto2";
   // package test.proto;
   //
   // enum Type {
@@ -189,10 +195,12 @@
 
   // // Create file types.proto
   //
+  // syntax = "proto2";
   // package com.google.proto;
   //
   // import public "public-types.proto";
 
+  // syntax = "proto2";
   // package com.google.proto;
   //
   // import "types.proto";
@@ -212,4 +220,4 @@
   private static TypeRef typeOf(Property p) {
     return (TypeRef) p.getType();
   }
-}
+}
\ No newline at end of file
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_localExtensionsFrom_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_localExtensionsFrom_Test.java
index 6524ed1..11ad3b2 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_localExtensionsFrom_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelFinder_localExtensionsFrom_Test.java
@@ -43,7 +43,7 @@
   // extend Person {}
   @Test public void should_return_extensions_of_message() {
     Message m = xtext.find("Person", " {", Message.class);
-    List<Extend> extensions = new ArrayList<Extend>(finder.localExtensionsOf(m));
+    List<MessageExtension> extensions = new ArrayList<MessageExtension>(finder.localExtensionsOf(m));
     Message referred = extensions.get(0).getMessage().getType();
     assertSame(m, referred);
   }
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 f3f045c..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
@@ -20,7 +20,7 @@
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Tests for <code>{@link ModelFinder#messageFrom(Extend)}</code>.
+ * Tests for <code>{@link ModelFinder#messageFrom(MessageExtension)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -42,13 +42,13 @@
   //
   // extend Person {}
   @Test public void should_return_message_from_extension() {
-    Extend extension = xtext.find("Person", " {}", Extend.class);
+    MessageExtension extension = xtext.find("Person", " {}", MessageExtension.class);
     Message message = finder.messageFrom(extension);
     assertThat(message.getName(), equalTo("Person"));
   }
 
   @Test public void should_return_null_if_extension_is_not_referring_to_message() {
-    Extend extension = mock(Extend.class);
+    MessageExtension extension = mock(MessageExtension.class);
     when(extension.getMessage()).thenReturn(null);
     assertNull(finder.messageFrom(extension));
   }
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 6a6dcd9..55daf4d 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.*;
@@ -55,8 +56,8 @@
         highlight((ComplexType) element, acceptor);
         continue;
       }
-      if (element instanceof Extend) {
-        highlight((Extend) element, acceptor);
+      if (element instanceof MessageExtension) {
+        highlight((MessageExtension) element, acceptor);
         continue;
       }
       if (element instanceof Service) {
@@ -65,9 +66,9 @@
     }
   }
 
-  private void highlight(Extend extend, IHighlightedPositionAcceptor acceptor) {
-    highlightFirstFeature(extend, EXTEND_MESSAGE__MESSAGE, acceptor, MESSAGE_ID);
-    for (MessageElement element : extend.getElements()) {
+  private void highlight(MessageExtension extension, IHighlightedPositionAcceptor acceptor) {
+    highlightFirstFeature(extension, MESSAGE_EXTENSION__MESSAGE, acceptor, MESSAGE_ID);
+    for (MessageElement element : extension.getElements()) {
       highlight(element, acceptor);
     }
   }
@@ -102,8 +103,8 @@
       highlight((ComplexType) element, acceptor);
       return;
     }
-    if (element instanceof Extend) {
-      highlight((Extend) element, acceptor);
+    if (element instanceof MessageExtension) {
+      highlight((MessageExtension) element, acceptor);
     }
   }
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
index b4499ce..e3c10a6 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
@@ -41,7 +41,7 @@
   private static final Map<Class<?>, String> IMAGES_BY_TYPE = new HashMap<Class<?>, String>();
   static {
     IMAGES_BY_TYPE.put(Enum.class, "enum.gif");
-    IMAGES_BY_TYPE.put(Extend.class, "extend.gif");
+    IMAGES_BY_TYPE.put(MessageExtension.class, "extend.gif");
     IMAGES_BY_TYPE.put(Extensions.class, "extensions.gif");
     IMAGES_BY_TYPE.put(Group.class, "group.gif");
     IMAGES_BY_TYPE.put(Import.class, "import.gif");
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 ae4e1df..69e1631 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
@@ -38,8 +38,8 @@
       Option option = (Option) o;
       return labelFor(option);
     }
-    if (o instanceof Extend) {
-      Extend extend = (Extend) o;
+    if (o instanceof MessageExtension) {
+      MessageExtension extend = (MessageExtension) o;
       return labelFor(extend);
     }
     if (o instanceof Extensions) {
@@ -98,7 +98,7 @@
     }
   }
 
-  private Object labelFor(Extend e) {
+  private Object labelFor(MessageExtension e) {
     return messageName(e.getMessage());
   }
 
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 47dcb5e..5344ad1 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
@@ -21,7 +21,7 @@
   'syntax' '=' name=STRING ';';
 
 ProtobufElement:
-  Package | Import | Option | ComplexType | Extend | Service;
+  Package | Import | Option | ComplexType | MessageExtension | Service;
 
 Package:
   'package' name=QualifiedName ';';
@@ -47,7 +47,7 @@
   '}' (';')?;
 
 MessageElement:
-  Option | Extensions | ComplexType | Property | Extend;
+  Option | Extensions | ComplexType | Property | MessageExtension;
 
 Extensions:
   'extensions' ranges+=Range (',' ranges+=Range)* ';';
@@ -65,7 +65,7 @@
   '}' (';')?;
 
 GroupElement:
-  Option | Property | Group | Enum | Extend;
+  Option | Property | Group | Enum | MessageExtension;
 
 Property:
   modifier=Modifier type=AbstractTypeRef name=Name '=' index=(LONG | HEX)
@@ -176,7 +176,7 @@
 terminal NUMBER:
   '0'..'9';
 
-Extend:
+MessageExtension:
   'extend' message=MessageRef '{'
   elements+=MessageElement*
   '}' (';')?;
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 df316a9..2c45cc3 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
@@ -37,13 +37,13 @@
    * @param m the given message.
    * @return all the <strong>local</strong> extensions of the given message, or an empty collection if none is found.
    */
-  public Collection<Extend> localExtensionsOf(Message m) {
+  public Collection<MessageExtension> localExtensionsOf(Message m) {
     return extensionsOf(m, rootOf(m));
   }
   
-  public Collection<Extend> extensionsOf(Message m, Protobuf root) {
-    Set<Extend> extensions = new HashSet<Extend>();
-    for (Extend extension : getAllContentsOfType(root, Extend.class)) {
+  public Collection<MessageExtension> extensionsOf(Message m, Protobuf root) {
+    Set<MessageExtension> extensions = new HashSet<MessageExtension>();
+    for (MessageExtension extension : getAllContentsOfType(root, MessageExtension.class)) {
       Message referred = messageFrom(extension);
       if (m.equals(referred)) extensions.add(extension);
     }
@@ -55,7 +55,7 @@
    * @param e the given extension.
    * @return the message from the given extension, or {@code null} if the extension is not referring to a message.
    */
-  public Message messageFrom(Extend e) {
+  public Message messageFrom(MessageExtension e) {
     MessageRef ref = e.getMessage();
     return ref == null ? null : ref.getType();
   }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldScopeFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldScopeFinder.java
index eacb2ed..146186a 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldScopeFinder.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldScopeFinder.java
@@ -119,8 +119,8 @@
       Message propertyType = modelFinder.messageTypeOf((Property) e);
       if (propertyType == null) return emptyList();
       Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
-      for (Extend extend : modelFinder.localExtensionsOf(propertyType)) {
-        for (MessageElement element : extend.getElements()) {
+      for (MessageExtension extension : modelFinder.localExtensionsOf(propertyType)) {
+        for (MessageElement element : extension.getElements()) {
           if (!(element instanceof IndexedElement)) continue;
           IndexedElement current = (IndexedElement) element;
           descriptions.addAll(qualifiedNameDescriptions.qualifiedNamesForOption(current));
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 97ddcbc..53d3947 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
@@ -38,8 +38,8 @@
     OptionType optionType = optionTypeFrom(criteria);
     if (!isExtendingOptionMessage(target, optionType)) return emptySet();
     Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
-    Extend extend = (Extend) target;
-    for (MessageElement e : extend.getElements()) {
+    MessageExtension extension = (MessageExtension) target;
+    for (MessageElement e : extension.getElements()) {
       descriptions.addAll(qualifiedNamesDescriptions.qualifiedNamesForOption(e));
     }
     return descriptions;
@@ -49,8 +49,8 @@
     OptionType optionType = optionTypeFrom(criteria);
     if (!isExtendingOptionMessage(target, optionType)) return emptySet();
     Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
-    Extend extend = (Extend) target;
-    for (MessageElement e : extend.getElements()) {
+    MessageExtension extension = (MessageExtension) target;
+    for (MessageElement e : extension.getElements()) {
       List<QualifiedName> names = localNamesProvider.namesForOption(e);
       int nameCount = names.size();
       for (int i = level; i < nameCount; i++) {
@@ -68,8 +68,8 @@
   }
 
   private boolean isExtendingOptionMessage(Object o, OptionType optionType) {
-    if (!(o instanceof Extend)) return false;
-    Message message = modelFinder.messageFrom((Extend) o);
+    if (!(o instanceof MessageExtension)) return false;
+    Message message = modelFinder.messageFrom((MessageExtension) o);
     if (message == null) return false;
     return optionType.messageName().equals(message.getName());
   }
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 c4e8de8..ff28159 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
@@ -11,14 +11,14 @@
 import static java.util.Collections.emptySet;
 import static org.eclipse.xtext.resource.EObjectDescription.create;
 
-import com.google.eclipse.protobuf.model.util.*;
-import com.google.eclipse.protobuf.protobuf.*;
-import com.google.inject.*;
+import java.util.*;
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.xtext.resource.IEObjectDescription;
 
-import java.util.*;
+import com.google.eclipse.protobuf.model.util.*;
+import com.google.eclipse.protobuf.protobuf.*;
+import com.google.inject.Inject;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -91,9 +91,8 @@
     Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
     Message propertyType = modelFinder.messageTypeOf(p);
     // check first in descriptor.proto
-    
-    for (Extend extend : modelFinder.extensionsOf(propertyType, modelFinder.rootOf(p))) {
-      for (MessageElement element : extend.getElements()) {
+    for (MessageExtension extension : modelFinder.extensionsOf(propertyType, modelFinder.rootOf(p))) {
+      for (MessageElement element : extension.getElements()) {
         if (!(element instanceof Property)) continue;
         descriptions.addAll(qualifiedNameDescriptions.qualifiedNames(element));
       }
