diff --git a/mercurial/context.py b/mercurial/context.py
index 412ac613fd89cbd82fd56f6f08308e5cd95f58d8_bWVyY3VyaWFsL2NvbnRleHQucHk=..8864528874f77272742551223b8265ff4d125534_bWVyY3VyaWFsL2NvbnRleHQucHk= 100644
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -120,7 +120,7 @@
         mf2 = self._manifestmatches(match, s)
 
         modified, added, clean = [], [], []
-        deleted, unknown, ignored = s[3], [], []
+        deleted, unknown, ignored = s[3], s[4], s[5]
         withflags = mf1.withflags() | mf2.withflags()
         for fn, mf2node in mf2.iteritems():
             if fn in mf1:
diff --git a/tests/test-status.t b/tests/test-status.t
index 412ac613fd89cbd82fd56f6f08308e5cd95f58d8_dGVzdHMvdGVzdC1zdGF0dXMudA==..8864528874f77272742551223b8265ff4d125534_dGVzdHMvdGVzdC1zdGF0dXMudA== 100644
--- a/tests/test-status.t
+++ b/tests/test-status.t
@@ -280,6 +280,12 @@
   R removed
   C deleted
 
+status against non-parent with unknown file (issue4321)
+
+  $ touch unknown
+  $ hg status --rev 0 unknown
+  ? unknown
+
 status of removed but existing in working directory.  "? removed" should
 not be included: