diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java
index 52c5409..c82b6eb 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java
@@ -26,4 +26,6 @@
   public static String Error_expectedFieldNumber;
   public static String Error_missingFieldNumber;
   public static String Error_fieldNumbersMustBePositive;
+  public static String Error_unrecognizedSyntaxIdentifier;
+  public static String Error_expectedSyntaxIdentifier;
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties
index 6ececf8..dcb7afe 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties
@@ -2,3 +2,5 @@
 Error_expectedFieldNumber = Expected field number.
 Error_missingFieldNumber = Missing field number.
 Error_fieldNumbersMustBePositive = Field numbers must be positive integers.
+Error_unrecognizedSyntaxIdentifier = Unrecognized syntax identifier \"%s\".  This parser only recognizes \"proto2\".
+Error_expectedSyntaxIdentifier = Expected syntax identifier.
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 94a11a8..84bd3ba 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
@@ -9,10 +9,11 @@
 package com.google.eclipse.protobuf.validation;
 
 import static com.google.eclipse.protobuf.validation.Messages.*;
+import static java.lang.String.format;
 
 import org.eclipse.xtext.validation.Check;
 
-import com.google.eclipse.protobuf.protobuf.Property;
+import com.google.eclipse.protobuf.protobuf.*;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -31,4 +32,10 @@
     error(msg, property.eClass().getEStructuralFeature("index"));
   }
 
+  @Check public void checkSyntaxIsProto2(Syntax syntax) {
+    String name = syntax.getName();
+    if ("proto2".equals(name)) return;
+    String msg = (name == null) ? Error_expectedSyntaxIdentifier : format(Error_unrecognizedSyntaxIdentifier, name);
+    error(msg, syntax.eClass().getEStructuralFeature("name"));
+  }
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java
index b35c79a..f22837a 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java
@@ -27,18 +27,17 @@
   @Override public SyntaxErrorMessage getSyntaxErrorMessage(IParserErrorContext context) {
     String message = context.getDefaultMessage();
     EObject currentContext = context.getCurrentContext();
-    if (currentContext instanceof Property) message = mapToProtocMessage((Property) currentContext, message);
+    if (currentContext instanceof Property) message =  mapToProtocMessage(message, (Property) currentContext);
+    if (currentContext == null && message.contains("RULE_STRING")) return null;
     return new SyntaxErrorMessage(message, SYNTAX_DIAGNOSITC);
   }
 
-  private String mapToProtocMessage(Property property, String message) {
-    if (message.contains("RULE_ID") && property.getName() == null) return Error_expectedFieldName;
-    if (message.equals("mismatched input ';' expecting '='") && property.getIndex() == 0) return Error_missingFieldNumber;
+  private String mapToProtocMessage(String message, Property property) {
+    if (message.contains("RULE_ID") && property.getName() == null)
+      return Error_expectedFieldName;
+    if (message.equals("mismatched input ';' expecting '='") && property.getIndex() == 0)
+      return Error_missingFieldNumber;
     return message;
   }
 
-  @Override public SyntaxErrorMessage getSyntaxErrorMessage(IValueConverterErrorContext context) {
-    return new SyntaxErrorMessage(context.getDefaultMessage(), SYNTAX_DIAGNOSITC);
-  }
-
 }
