diff --git a/mercurial/context.py b/mercurial/context.py
index e18ef2e112198ab3475e84399bf965191d799708_bWVyY3VyaWFsL2NvbnRleHQucHk=..d19f491e5d5b19d0bc3ee81cb8b9df09c772a1b2_bWVyY3VyaWFsL2NvbnRleHQucHk= 100644
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -1327,6 +1327,21 @@
 
         return [modified, added, removed, deleted, unknown, ignored, clean]
 
+    def _buildstatus(self, other, s, match, listignored, listclean,
+                        listunknown):
+        """build a status with respect to another context
+
+        This includes logic for maintaining the fast path of status when
+        comparing the working directory against its parent, which is to skip
+        building a new manifest if self (working directory) is not comparing
+        against its parent (repo['.']).
+        """
+        if other != self._repo['.']:
+            s = super(workingctx, self)._buildstatus(other, s, match,
+                                                     listignored, listclean,
+                                                     listunknown)
+        return s
+
     def status(self, ignored=False, clean=False, unknown=False, match=None):
         """Explicit status query
         Unless this method is used to query the working copy status, the
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
index e18ef2e112198ab3475e84399bf965191d799708_bWVyY3VyaWFsL2xvY2FscmVwby5weQ==..d19f491e5d5b19d0bc3ee81cb8b9df09c772a1b2_bWVyY3VyaWFsL2xvY2FscmVwby5weQ== 100644
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -1551,11 +1551,8 @@
 
         r = [[], [], [], [], [], [], []]
         r = ctx2._prestatus(ctx1, r, match, listignored, listclean, listunknown)
-
-        if not parentworking:
-            r = ctx2._buildstatus(ctx1, r, match, listignored, listclean,
-                                  listunknown)
-
+        r = ctx2._buildstatus(ctx1, r, match, listignored, listclean,
+                              listunknown)
         r = ctx2._poststatus(ctx1, r, match, listignored, listclean,
                              listunknown)