diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeDescriptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeDescriptions.java
index 2258513..835d74b 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeDescriptions.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeDescriptions.java
@@ -21,6 +21,7 @@
 import org.eclipse.xtext.resource.IEObjectDescription;
 
 import com.google.eclipse.protobuf.model.util.*;
+import com.google.eclipse.protobuf.parser.NonProto2;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Package;
 import com.google.inject.Inject;
@@ -98,6 +99,7 @@
       }
       Resource importedResource = resources.importedResource(anImport, resourceSet);
       Protobuf rootOfImported = finder.rootOf(importedResource);
+      if (rootOfImported instanceof NonProto2) continue;
       if (rootOfImported != null) {
         descriptions.addAll(publicImported(rootOfImported, targetType));
         if (arePackagesRelated(aPackage, rootOfImported)) {
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 3c610fc..07f30b4 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
@@ -22,6 +22,7 @@
   public static String expectedTrueOrFalse;
   public static String fieldNumberAlreadyUsed;
   public static String fieldNumbersMustBePositive;
+  public static String importingNonProto2;
   public static String importNotFound;
   public static String missingFieldNumber;
   public static String multiplePackages;
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 fdbabb1..688c504 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
@@ -5,6 +5,7 @@
 expectedTrueOrFalse = Expected "true" or "false".
 fieldNumberAlreadyUsed = Field number %d has already been used in \"%s\" by field \"%s\".
 fieldNumbersMustBePositive = Field numbers must be positive integers.
+importingNonProto2 = Importing non-proto2 file. This may result in errors related to unresolved references.
 importNotFound = Import \"%s\" was not found.
 missingFieldNumber = Missing field number.
 multiplePackages = Multiple package definitions.
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 e3b7e6e..ca2221d 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
@@ -15,6 +15,7 @@
 
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.*;
 import org.eclipse.xtext.naming.*;
 import org.eclipse.xtext.scoping.impl.ImportUriResolver;
 import org.eclipse.xtext.validation.Check;
@@ -35,9 +36,11 @@
   public static final String MORE_THAN_ONE_PACKAGE_ERROR = "moreThanOnePackage";
 
   @Inject private FieldOptions fieldOptions;
+  @Inject private ModelFinder finder;
   @Inject private ImportUriResolver uriResolver;
   @Inject private IQualifiedNameProvider qualifiedNameProvider;
   @Inject private Properties properties;
+  @Inject private Resources resources;
 
   @Check public void checkIsProto2(Protobuf protobuf) {
     if (protobuf instanceof NonProto2) {
@@ -58,15 +61,36 @@
       error(expectedTrueOrFalse, FIELD_OPTION__VALUE);
     }
   }
+  
+  @Check public void checkIsImportingNonProto2File(Import anImport) {
+    if (!retryUntilItIsResolved(anImport)) return;
+    Resource imported = importedResource(anImport);
+    Protobuf root = finder.rootOf(imported);
+    if (root instanceof NonProto2) {
+      warning(importingNonProto2, IMPORT__IMPORT_URI);
+    }
+  }
+  
+  private Resource importedResource(Import anImport) {
+    ResourceSet resourceSet = resourceSet(anImport);
+    return resources.importedResource(anImport, resourceSet);
+  }
+  
+  private ResourceSet resourceSet(EObject e) {
+    Protobuf root = finder.rootOf(e);
+    return root.eResource().getResourceSet();
+  }
 
   @Check public void checkImportIsResolved(Import anImport) {
-    boolean isResolved = isResolved(anImport);
-    if (isResolved) return;
-    uriResolver.apply(anImport);
-    isResolved = isResolved(anImport);
-    if (isResolved) return;
+    if (retryUntilItIsResolved(anImport)) return;
     error(format(importNotFound, anImport.getImportURI()), IMPORT__IMPORT_URI);
   }
+  
+  private boolean retryUntilItIsResolved(Import anImport) {
+    if (isResolved(anImport)) return true;
+    uriResolver.apply(anImport);
+    return isResolved(anImport);
+  }
 
   private boolean isResolved(Import anImport) {
     String importUri = anImport.getImportURI();
