updated for version 7.0-182
diff --git a/src/undo.c b/src/undo.c
index d56302d..7167cab 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -341,11 +341,15 @@
 	uhp->uh_alt_next = old_curhead;
 	if (old_curhead != NULL)
 	{
+	    uhp->uh_alt_prev = old_curhead->uh_alt_prev;
+	    if (uhp->uh_alt_prev != NULL)
+		uhp->uh_alt_prev->uh_alt_next = uhp;
 	    old_curhead->uh_alt_prev = uhp;
 	    if (curbuf->b_u_oldhead == old_curhead)
 		curbuf->b_u_oldhead = uhp;
 	}
-	uhp->uh_alt_prev = NULL;
+	else
+	    uhp->uh_alt_prev = NULL;
 	if (curbuf->b_u_newhead != NULL)
 	    curbuf->b_u_newhead->uh_prev = uhp;
 
@@ -856,6 +860,11 @@
 	uhp = curbuf->b_u_curhead;
 	while (uhp != NULL)
 	{
+	    /* Go back to the first branch with a mark. */
+	    while (uhp->uh_alt_prev != NULL
+					&& uhp->uh_alt_prev->uh_walk == mark)
+		uhp = uhp->uh_alt_prev;
+
 	    /* Find the last branch with a mark, that's the one. */
 	    last = uhp;
 	    while (last->uh_alt_next != NULL
@@ -865,6 +874,8 @@
 	    {
 		/* Make the used branch the first entry in the list of
 		 * alternatives to make "u" and CTRL-R take this branch. */
+		while (uhp->uh_alt_prev != NULL)
+		    uhp = uhp->uh_alt_prev;
 		if (last->uh_alt_next != NULL)
 		    last->uh_alt_next->uh_alt_prev = last->uh_alt_prev;
 		last->uh_alt_prev->uh_alt_next = last->uh_alt_next;
diff --git a/src/version.c b/src/version.c
index 434059d..db1d34f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    182,
+/**/
     181,
 /**/
     180,