diff --git a/mercurial/destutil.py b/mercurial/destutil.py
index 7fc759c0c430f958ae593868b50eb78033fa7a76_bWVyY3VyaWFsL2Rlc3R1dGlsLnB5..bde739aced83f5b209e974e6878a69a0e349cfad_bWVyY3VyaWFsL2Rlc3R1dGlsLnB5 100644
--- a/mercurial/destutil.py
+++ b/mercurial/destutil.py
@@ -85,6 +85,21 @@
         activemark = node
     return node, movemark, activemark
 
+def _destupdatebranch(repo, clean, check):
+    """decide on an update destination from current branch"""
+    wc = repo[None]
+    movemark = node = None
+    try:
+        node = repo.branchtip(wc.branch())
+        if bookmarks.isactivewdirparent(repo):
+            movemark = repo['.'].node()
+    except error.RepoLookupError:
+        if wc.branch() == 'default': # no default branch!
+            node = repo.lookup('tip') # update to tip
+        else:
+            raise error.Abort(_("branch %s not found") % wc.branch())
+    return node, movemark, None
+
 def destupdate(repo, clean=False, check=False):
     """destination for bare update operation
 
@@ -96,9 +111,8 @@
     - activemark: a bookmark to activate at the end of the update.
     """
     node = None
-    wc = repo[None]
     movemark = activemark = None
 
     node, movemark, activemark = _destupdateobs(repo, clean, check)
     if node is None:
         node, movemark, activemark = _destupdatebook(repo, clean, check)
@@ -100,7 +114,6 @@
     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:
@@ -106,12 +119,5 @@
     if node is None:
-        if node is None:
-            try:
-                node = repo.branchtip(wc.branch())
-            except error.RepoLookupError:
-                if wc.branch() == 'default': # no default branch!
-                    node = repo.lookup('tip') # update to tip
-                else:
-                    raise error.Abort(_("branch %s not found") % wc.branch())
+        node, movemark, activemark = _destupdatebranch(repo, clean, check)
     rev = repo[node].rev()
 
     _destupdatevalidate(repo, rev, clean, check)