diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
index 0798fb2..615996d 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
@@ -48,10 +48,11 @@
   IScope scope_TypeReference_type(TypeReference typeRef, EReference reference) {
     Protobuf root = finder.rootOf(typeRef);
     Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
-    EObject message = typeRef.eContainer().eContainer();
-    descriptions.addAll(typesIn(message));
-    descriptions.addAll(typesIn(message.eContainer()));
-    descriptions.addAll(typesIn(root));
+    EObject current = typeRef.eContainer().eContainer(); // get message of the property containing the TypeReference
+    while (current != null) {
+      descriptions.addAll(typesIn(current));
+      current = current.eContainer();
+    }
     descriptions.addAll(importedTypes(root, Type.class));
     return createScope(descriptions);
   }
@@ -69,7 +70,7 @@
     return createScope(descriptions);
   }
 
-  private Collection<IEObjectDescription> messagesIn(EObject root) {
+  private Collection<IEObjectDescription> messagesIn(Protobuf root) {
     return children(root, Message.class);
   }
 
@@ -81,13 +82,15 @@
     List<IEObjectDescription> descriptions = new ArrayList<IEObjectDescription>();
     for (EObject element : root.eContents()) {
       if (!targetType.isInstance(element)) continue;
-      T type = targetType.cast(element);
-      List<QualifiedName> names = alternativeNamesProvider.alternativeFullyQualifiedNames(type);
+      List<QualifiedName> names = alternativeNamesProvider.alternativeFullyQualifiedNames(element);
       int nameCount = names.size();
-      for (int i = level; i < nameCount; i++) descriptions.add(create(names.get(i), type));
-      descriptions.add(create(nameProvider.getFullyQualifiedName(type), type));
-      if (!(element instanceof Message)) continue;
-      descriptions.addAll(children(element, targetType, level + 1));
+      for (int i = level; i < nameCount; i++) {
+        descriptions.add(create(names.get(i), element));
+      }
+      descriptions.add(create(nameProvider.getFullyQualifiedName(element), element));
+      if (element instanceof Message) {
+        descriptions.addAll(children(element, targetType, level + 1));
+      }
     }
     return descriptions;
   }
