diff --git a/mercurial/destutil.py b/mercurial/destutil.py
index 52d08a93de1f54a23f8fb3ebb58eb8502af699c8_bWVyY3VyaWFsL2Rlc3R1dGlsLnB5..7fc759c0c430f958ae593868b50eb78033fa7a76_bWVyY3VyaWFsL2Rlc3R1dGlsLnB5 100644
--- a/mercurial/destutil.py
+++ b/mercurial/destutil.py
@@ -76,6 +76,15 @@
                 movemark = repo['.'].node()
     return node, movemark, None
 
+def _destupdatebook(repo, clean, check):
+    """decide on an update destination from active bookmark"""
+    # we also move the active bookmark, if any
+    activemark = None
+    node, movemark = bookmarks.calculateupdate(repo.ui, repo, None)
+    if node is not None:
+        activemark = node
+    return node, movemark, activemark
+
 def destupdate(repo, clean=False, check=False):
     """destination for bare update operation
 
@@ -91,5 +100,7 @@
     movemark = activemark = None
 
     node, movemark, activemark = _destupdateobs(repo, clean, check)
+    if node is None:
+        node, movemark, activemark = _destupdatebook(repo, clean, check)
 
     if node is None:
@@ -94,10 +105,5 @@
 
     if node is None:
-        # we also move the active bookmark, if any
-        node, movemark = bookmarks.calculateupdate(repo.ui, repo, None)
-        if node is not None:
-            activemark = node
-
         if node is None:
             try:
                 node = repo.branchtip(wc.branch())