diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/AstWalker.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/AstWalker.java
index 0fb78fd..2dc7e34 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/AstWalker.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/AstWalker.java
@@ -60,7 +60,7 @@
   private Collection<IEObjectDescription> local(EObject start, ScopeFinder scopeFinder, Object criteria, int level) {
     Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
     for (EObject element : start.eContents()) {
-      descriptions.addAll(scopeFinder.descriptions(element, criteria, level));
+      descriptions.addAll(scopeFinder.local(element, criteria, level));
       if (element instanceof Message) {
         descriptions.addAll(local(element, scopeFinder, criteria, level + 1));
       }
@@ -75,12 +75,12 @@
     return imported(allImports, modelFinder.packageOf(start), resourceSet, scopeFinder, criteria);
   }
 
-  private Collection<IEObjectDescription> imported(List<Import> allImports, Package aPackage,
+  private Collection<IEObjectDescription> imported(List<Import> allImports, Package fromImporter,
       ResourceSet resourceSet, ScopeFinder scopeFinder, Object criteria) {
     Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
     for (Import anImport : allImports) {
       if (imports.isImportingDescriptor(anImport)) {
-        descriptions.addAll(scopeFinder.fromProtoDescriptor(anImport, criteria));
+        descriptions.addAll(scopeFinder.inDescriptor(anImport, criteria));
         continue;
       }
       Resource imported = resources.importedResource(anImport, resourceSet);
@@ -88,12 +88,12 @@
       if (rootOfImported instanceof NonProto2) continue;
       if (rootOfImported != null) {
         descriptions.addAll(publicImported(rootOfImported, scopeFinder, criteria));
-        if (arePackagesRelated(aPackage, rootOfImported)) {
+        if (arePackagesRelated(fromImporter, rootOfImported)) {
           descriptions.addAll(local(rootOfImported, scopeFinder, criteria));
           continue;
         }
+        descriptions.addAll(imported(fromImporter, imported, scopeFinder, criteria));
       }
-      descriptions.addAll(local(imported, scopeFinder, criteria));
     }
     return descriptions;
   }
@@ -111,12 +111,13 @@
     return packages.areRelated(aPackage, p);
   }
 
-  private Collection<IEObjectDescription> local(Resource resource, ScopeFinder scopeFinder, Object criteria) {
+  private Collection<IEObjectDescription> imported(Package fromImporter, Resource resource,
+      ScopeFinder scopeFinder, Object criteria) {
     Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
     TreeIterator<Object> contents = getAllContents(resource, true);
     while (contents.hasNext()) {
       Object next = contents.next();
-      descriptions.addAll(scopeFinder.descriptions(next, criteria));
+      descriptions.addAll(scopeFinder.imported(fromImporter, next, criteria));
       // TODO verify that call to 'importedNamesProvider.namesOf' is not necessary
     }
     return descriptions;
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 53d3947..33d7416 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
@@ -14,6 +14,7 @@
 import com.google.eclipse.protobuf.model.util.ModelFinder;
 import com.google.eclipse.protobuf.naming.LocalNamesProvider;
 import com.google.eclipse.protobuf.protobuf.*;
+import com.google.eclipse.protobuf.protobuf.Package;
 import com.google.inject.Inject;
 
 import org.eclipse.xtext.naming.QualifiedName;
@@ -30,11 +31,7 @@
   @Inject private ModelFinder modelFinder;
   @Inject private QualifiedNameDescriptions qualifiedNamesDescriptions;
 
-  @Override public Collection<IEObjectDescription> fromProtoDescriptor(Import anImport, Object criteria) {
-    return emptySet();
-  }
-
-  @Override public Collection<IEObjectDescription> descriptions(Object target, Object criteria) {
+  @Override public Collection<IEObjectDescription> imported(Package fromImporter, Object target, Object criteria) {
     OptionType optionType = optionTypeFrom(criteria);
     if (!isExtendingOptionMessage(target, optionType)) return emptySet();
     Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
@@ -45,7 +42,11 @@
     return descriptions;
   }
 
-  @Override public Collection<IEObjectDescription> descriptions(Object target, Object criteria, int level) {
+  @Override public Collection<IEObjectDescription> inDescriptor(Import anImport, Object criteria) {
+    return emptySet();
+  }
+
+  @Override public Collection<IEObjectDescription> local(Object target, Object criteria, int level) {
     OptionType optionType = optionTypeFrom(criteria);
     if (!isExtendingOptionMessage(target, optionType)) return emptySet();
     Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ScopeFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ScopeFinder.java
index f6223f5..7b8fa64 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ScopeFinder.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ScopeFinder.java
@@ -9,6 +9,7 @@
 package com.google.eclipse.protobuf.scoping;
 
 import com.google.eclipse.protobuf.protobuf.Import;
+import com.google.eclipse.protobuf.protobuf.Package;
 
 import org.eclipse.xtext.resource.IEObjectDescription;
 
@@ -19,9 +20,9 @@
  */
 interface ScopeFinder {
 
-  Collection<IEObjectDescription> fromProtoDescriptor(Import anImport, Object criteria);
+  Collection<IEObjectDescription> imported(Package fromImporter, Object target, Object criteria);
 
-  Collection<IEObjectDescription> descriptions(Object target, Object criteria);
+  Collection<IEObjectDescription> inDescriptor(Import anImport, Object criteria);
 
-  Collection<IEObjectDescription> descriptions(Object target, Object criteria, int level);
+  Collection<IEObjectDescription> local(Object target, Object criteria, int level);
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeScopeFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeScopeFinder.java
index 001979a..ce3a3e1 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeScopeFinder.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeScopeFinder.java
@@ -13,6 +13,7 @@
 
 import com.google.eclipse.protobuf.naming.LocalNamesProvider;
 import com.google.eclipse.protobuf.protobuf.*;
+import com.google.eclipse.protobuf.protobuf.Package;
 import com.google.inject.Inject;
 
 import org.eclipse.emf.ecore.EObject;
@@ -29,8 +30,14 @@
   @Inject private ProtoDescriptorProvider descriptorProvider;
   @Inject private LocalNamesProvider localNamesProvider;
   @Inject private QualifiedNameDescriptions qualifiedNamesDescriptions;
+  
+  @Override public Collection<IEObjectDescription> imported(Package fromImporter, Object target, Object criteria) {
+    if (!isInstance(target, criteria)) return emptySet();
+    EObject e = (EObject) target;
+    return qualifiedNamesDescriptions.qualifiedNames(e);
+  }
 
-  @Override public Collection<IEObjectDescription> fromProtoDescriptor(Import anImport, Object criteria) {
+  @Override public Collection<IEObjectDescription> inDescriptor(Import anImport, Object criteria) {
     Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
     ProtoDescriptor descriptor = descriptorProvider.descriptor(anImport.getImportURI());
     for (ComplexType type : descriptor.allTypes()) {
@@ -39,14 +46,8 @@
     }
     return descriptions;
   }
-  
-  @Override public Collection<IEObjectDescription> descriptions(Object target, Object criteria) {
-    if (!isInstance(target, criteria)) return emptySet();
-    EObject e = (EObject) target;
-    return qualifiedNamesDescriptions.qualifiedNames(e);
-  }
 
-  @Override public Collection<IEObjectDescription> descriptions(Object target, Object criteria, int level) {
+  @Override public Collection<IEObjectDescription> local(Object target, Object criteria, int level) {
     if (!isInstance(target, criteria)) return emptySet();
     EObject e = (EObject) target;
     Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
