diff --git a/src/move.c b/src/move.c
index ec1ad38ad7711828ece170877210c6ab99297b2a..767134f56d2004e03950590ba99c811f941d6337 100644
--- a/src/move.c
+++ b/src/move.c
@@ -2681,6 +2681,7 @@ halfpage(int flag, linenr_T Prenum)
 	    if (curwin->w_topfill > 0)
 	    {
 		i = 1;
+		--n;
 		--curwin->w_topfill;
 	    }
 	    else
diff --git a/src/testdir/test_diffmode.vim b/src/testdir/test_diffmode.vim
index a3f6d5867b39d952fd28efd5d58688c7492bb65e..c0c5d0d44e1cbb110b7a8b6ef64e054530d4ee22 100644
--- a/src/testdir/test_diffmode.vim
+++ b/src/testdir/test_diffmode.vim
@@ -1130,4 +1130,24 @@ func Test_diff_multilineconceal()
   redraw
 endfunc
 
+func Test_diff_and_scroll()
+  " this was causing an ml_get error
+  set ls=2
+  for i in range(winheight(0) * 2) 
+    call setline(i, i < winheight(0) - 10 ? i : i + 10) 
+  endfor
+  vnew
+  for i in range(winheight(0)*2 + 10) 
+    call setline(i, i < winheight(0) - 10 ? 0 : i) 
+  endfor
+  diffthis
+  wincmd p
+  diffthis
+  execute 'normal ' . winheight(0) . "\<C-d>"
+
+  bwipe!
+  bwipe!
+  set ls&
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 6be113dcac77b2b177a3ced16dfa26c3200be0a7..95b0857fa4bc357fdc6070e4fefd7e0ad4650a8a 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 */
+/**/
+    1211,
 /**/
     1210,
 /**/