diff --git a/hgext/mq.py b/hgext/mq.py
index ac31d87608d63de58682b0fed4e4fb5b9fde5918_aGdleHQvbXEucHk=..c89379d47e959804e03f349ec5b3fb6b2eaf2d3b_aGdleHQvbXEucHk= 100644
--- a/hgext/mq.py
+++ b/hgext/mq.py
@@ -3026,7 +3026,7 @@
                 if i == 0:
                     q.pop(repo, all=True)
                 else:
-                    q.pop(repo, str(i - 1))
+                    q.pop(repo, q.applied[i - 1].name)
                 break
     if popped:
         try:
diff --git a/tests/test-mq-guards.t b/tests/test-mq-guards.t
index ac31d87608d63de58682b0fed4e4fb5b9fde5918_dGVzdHMvdGVzdC1tcS1ndWFyZHMudA==..c89379d47e959804e03f349ec5b3fb6b2eaf2d3b_dGVzdHMvdGVzdC1tcS1ndWFyZHMudA== 100644
--- a/tests/test-mq-guards.t
+++ b/tests/test-mq-guards.t
@@ -541,3 +541,28 @@
   guards deactivated
   $ hg qselect not-new not-c not-d
   number of guarded, applied patches has changed from 0 to 1
+
+test that "qselect --reapply" reapplies patches successfully when the
+already applied patch becomes unguarded and it follows the already
+guarded (= not yet applied) one.
+
+  $ hg qpop -q -a
+  patch queue now empty
+  $ hg qselect not-new not-c
+  number of unguarded, unapplied patches has changed from 1 to 2
+  $ hg qpush -q -a
+  patch d.patch is empty
+  now at: b.patch
+  $ hg qapplied -v
+  0 G new.patch
+  1 G c.patch
+  2 A d.patch
+  3 A b.patch
+  $ hg qselect -q --reapply not-c not-b
+  now at: d.patch
+  cannot push 'b.patch' - guarded by '-not-b'
+  $ hg qseries -v
+  0 U new.patch
+  1 G c.patch
+  2 A d.patch
+  3 G b.patch