diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -294,21 +294,29 @@
     'Update rebased mq patches - finalize and then import them'
     mqrebase = {}
     for p in repo.mq.applied:
-        if repo[p.rev].rev() in state:
-            repo.ui.debug('revision %d is an mq patch (%s), finalize it.\n' %
+        repo.ui.debug('revision %d is an mq patch (%s), finalize it.\n' %
                                         (repo[p.rev].rev(), p.name))
-            mqrebase[repo[p.rev].rev()] = (p.name, isagitpatch(repo, p.name))
+        mqrebase[repo[p.rev].rev()] = (p.name, isagitpatch(repo, p.name))
 
     if mqrebase:
         repo.mq.finish(repo, mqrebase.keys())
 
         # We must start import from the newest revision
         for rev in sorted(mqrebase, reverse=True):
-            if rev not in skipped:
-                repo.ui.debug('import mq patch %d (%s)\n'
+            if rev not in skipped and rev in state:
+                repo.ui.debug('import rebased revision as mq patch %d (%s)\n'
                               % (state[rev], mqrebase[rev][0]))
                 repo.mq.qimport(repo, (), patchname=mqrebase[rev][0],
                             git=mqrebase[rev][1],rev=[str(state[rev])])
+            if rev not in state:
+                repo.ui.debug('trying to import mq patch (%s)\n'
+                              % (mqrebase[rev][0]))
+                try:
+                    repo.mq.qimport(repo, (), patchname=mqrebase[rev][0],
+                            git=mqrebase[rev][1],rev=[str(repo[rev])])
+                except util.Abort:
+                    repo.ui.warn('revision %s cannot be imported again as mq'
+                                    ' patch\n' % (rev))
         repo.mq.save_dirty()
 
 def storestatus(repo, originalwd, target, state, collapse, keep, keepbranches,

