  
          if not (
              hasattr(request, 'portal') and 
+@@ -608,8 +669,9 @@
              hasattr(request, 'credentialFactories') and
              hasattr(request, 'loginInterfaces')
          ):

-            myURL = request.urlForResource(self)
-            if myURL != "/":
-                parentURL = parentForURL(myURL)
+        def gotParent(parent):
+            if parent is None:
+                return ()
+            else:
+                return parent.principalCollections(request)
 
-                parent = waitForDeferred(request.locateResource(parentURL))
-                yield parent
-                parent = parent.getResult()
+        d = request.locateResource(parentForURL(myURL))
+        d.addCallback(gotParent)
+        return d
 
-                if parent:
-                    principalCollections = waitForDeferred(parent.principalCollections(request))

+        principals are the same.
+
         @param request: the L{IRequest} for the request in progress.
         @param authid: a string containing the
             authentication/authorization identifier for the principal
@@ -1155,12 +1217,47 @@
         @param authid: a string containing the
             authentication/authorization identifier for the principal
             to lookup.
