diff --git a/src/mark.c b/src/mark.c
index 948a1826ec16665d1c4602a603e17918ebaa2346..aa9445ed03529f91aa25726b6243acffcab2558c 100644
--- a/src/mark.c
+++ b/src/mark.c
@@ -704,6 +704,7 @@ ex_marks(exarg_T *eap)
     char_u	*arg = eap->arg;
     int		i;
     char_u	*name;
+    pos_T	*posp, *startp, *endp;
 
     if (arg != NULL && *arg == NUL)
 	arg = NULL;
@@ -731,8 +732,17 @@ ex_marks(exarg_T *eap)
     show_one_mark(']', arg, &curbuf->b_op_end, NULL, TRUE);
     show_one_mark('^', arg, &curbuf->b_last_insert, NULL, TRUE);
     show_one_mark('.', arg, &curbuf->b_last_change, NULL, TRUE);
-    show_one_mark('<', arg, &curbuf->b_visual.vi_start, NULL, TRUE);
-    show_one_mark('>', arg, &curbuf->b_visual.vi_end, NULL, TRUE);
+
+    // Show the marks as where they will jump to.
+    startp = &curbuf->b_visual.vi_start;
+    endp = &curbuf->b_visual.vi_end;
+    if ((LT_POS(*startp, *endp) || endp->lnum == 0) && startp->lnum != 0)
+	posp = startp;
+    else
+	posp = endp;
+    show_one_mark('<', arg, posp, NULL, TRUE);
+    show_one_mark('>', arg, posp == startp ? endp : startp, NULL, TRUE);
+
     show_one_mark(-1, arg, NULL, NULL, FALSE);
 }
 
diff --git a/src/testdir/test_marks.vim b/src/testdir/test_marks.vim
index e4ab562fd62ade6b497e1db875376f4bc0f6a0bc..40242c083bfedc9ba1fd0e8206b2385163048ec8 100644
--- a/src/testdir/test_marks.vim
+++ b/src/testdir/test_marks.vim
@@ -105,33 +105,43 @@ func Test_marks_cmd()
   new Xtwo
   call setline(1, ['ccc', 'ddd'])
   norm! $mcGmD
+  exe "norm! GVgg\<Esc>G"
   w!
 
   b Xone
   let a = split(execute('marks'), "\n")
   call assert_equal(9, len(a))
-  call assert_equal('mark line  col file/text', a[0])
-  call assert_equal(" '      2    0 bbb", a[1])
-  call assert_equal(' a      1    0 aaa', a[2])
-  call assert_equal(' B      2    2 bbb', a[3])
-  call assert_equal(' D      2    0 Xtwo', a[4])
-  call assert_equal(' "      1    0 aaa', a[5])
-  call assert_equal(' [      1    0 aaa', a[6])
-  call assert_equal(' ]      2    0 bbb', a[7])
-  call assert_equal(' .      2    0 bbb', a[8])
+  call assert_equal(['mark line  col file/text',
+        \ " '      2    0 bbb",
+        \ ' a      1    0 aaa',
+        \ ' B      2    2 bbb',
+        \ ' D      2    0 Xtwo',
+        \ ' "      1    0 aaa',
+        \ ' [      1    0 aaa',
+        \ ' ]      2    0 bbb',
+        \ ' .      2    0 bbb'], a)
 
   b Xtwo
   let a = split(execute('marks'), "\n")
-  call assert_equal(9, len(a))
-  call assert_equal('mark line  col file/text', a[0])
-  call assert_equal(" '      1    0 ccc", a[1])
-  call assert_equal(' c      1    2 ccc', a[2])
-  call assert_equal(' B      2    2 Xone', a[3])
-  call assert_equal(' D      2    0 ddd', a[4])
-  call assert_equal(' "      2    0 ddd', a[5])
-  call assert_equal(' [      1    0 ccc', a[6])
-  call assert_equal(' ]      2    0 ddd', a[7])
-  call assert_equal(' .      2    0 ddd', a[8])
+  call assert_equal(11, len(a))
+  call assert_equal(['mark line  col file/text',
+        \ " '      1    0 ccc",
+        \ ' c      1    2 ccc',
+        \ ' B      2    2 Xone',
+        \ ' D      2    0 ddd',
+        \ ' "      2    0 ddd',
+        \ ' [      1    0 ccc',
+        \ ' ]      2    0 ddd',
+        \ ' .      2    0 ddd',
+        \ ' <      1    0 ccc',
+        \ ' >      2    0 ddd'], a)
+  norm! Gdd
+  w!
+  let a = split(execute('marks <>'), "\n")
+  call assert_equal(3, len(a))
+  call assert_equal(['mark line  col file/text',
+        \ ' <      1    0 ccc',
+        \ ' >      2    0 -invalid-'], a)
 
   b Xone
   delmarks aB
diff --git a/src/version.c b/src/version.c
index 444870e3f243685c885525830794fb83cf82cc8d..89fd043453e47d1019d13002886ce3ebe6a766f2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1252,
 /**/
     1251,
 /**/