Code cleanup.
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;
   }