diff --git a/src/fold.c b/src/fold.c
index 420bcf1..2cd4dcd 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -107,7 +107,7 @@
 
 // hasAnyFolding() {{{2
 /*
- * Return TRUE if there may be folded lines in the current window.
+ * Return TRUE if there may be folded lines in window "win".
  */
     int
 hasAnyFolding(win_T *win)
@@ -551,7 +551,7 @@
     return retval;
 }
 
-// foldCreateAllowed() {{{2
+// foldManualAllowed() {{{2
 /*
  * Return TRUE if it's allowed to manually create or delete a fold.
  * Give an error message and return FALSE if not.
@@ -1089,7 +1089,7 @@
 	mb_adjust_cursor();
 }
 
-// cursor_foldstart() {{{2
+// foldAdjustCursor() {{{2
 /*
  * Move the cursor to the first line of a closed fold.
  */
diff --git a/src/memline.c b/src/memline.c
index a1c29cf..5ca50fc 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -2686,7 +2686,7 @@
     colnr_T
 ml_get_pos_len(pos_T *pos)
 {
-    return ml_get_buf_len(curbuf, curwin->w_cursor.lnum) - pos->col;
+    return ml_get_buf_len(curbuf, pos->lnum) - pos->col;
 }
 
 // return length (excluding the NUL) of the cursor line
@@ -3582,7 +3582,7 @@
  * Replace a line for the current buffer.  Like ml_replace() with:
  * "len_arg" is the length of the text, excluding NUL.
  * If "has_props" is TRUE then "line_arg" includes the text properties and
- * "len_arg" includes the NUL of the text.
+ * "len_arg" includes the NUL of the text and text properties.
  * When "copy" is TRUE copy the text into allocated memory, otherwise
  * "line_arg" must be allocated and will be consumed here.
  */
diff --git a/src/ops.c b/src/ops.c
index 3216f3c..dbdf119 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -849,8 +849,8 @@
 	    }
 	    else
 		beginline(0);		    // cursor in column 0
-	    truncate_line(FALSE);   // delete the rest of the line
-				    // leave cursor past last char in line
+	    truncate_line(FALSE);   // delete the rest of the line,
+				    // leaving cursor past last char in line
 	    if (oap->line_count > 1)
 		u_clearline();	    // "U" command not possible after "2cc"
 	}
@@ -1494,16 +1494,13 @@
     void
 op_insert(oparg_T *oap, long count1)
 {
-    long		ins_len, pre_textlen = 0;
-    char_u		*firstline, *ins_text;
+    long		pre_textlen = 0;
     colnr_T		ind_pre_col = 0, ind_post_col;
     int			ind_pre_vcol = 0, ind_post_vcol = 0;
     struct block_def	bd;
     int			i;
     pos_T		t1;
     pos_T		start_insert;
-			// offset when cursor was moved in insert mode
-    int			offset = 0;
 
     // edit() changes this - record it for OP_APPEND
     bd.is_MAX = (curwin->w_curswant == MAXCOL);
@@ -1540,14 +1537,9 @@
 	// Get indent information
 	ind_pre_col = (colnr_T)getwhitecols_curline();
 	ind_pre_vcol = get_indent();
-	firstline = ml_get(oap->start.lnum) + bd.textcol;
 	pre_textlen = ml_get_len(oap->start.lnum) - bd.textcol;
-
 	if (oap->op_type == OP_APPEND)
-	{
-	    firstline += bd.textlen;
 	    pre_textlen -= bd.textlen;
-	}
     }
 
     if (oap->op_type == OP_APPEND)
@@ -1601,10 +1593,14 @@
 
     if (oap->block_mode)
     {
+	long			ins_len;
+	char_u			*firstline, *ins_text;
 	struct block_def	bd2;
 	int			did_indent = FALSE;
 	size_t			len;
 	int			add;
+	// offset when cursor was moved in insert mode
+	int			offset = 0;
 
 	// If indent kicked in, the firstline might have changed
 	// but only do that, if the indent actually increased.
@@ -2654,6 +2650,7 @@
     uvarnumber_T	n;
     uvarnumber_T	oldn;
     char_u	*ptr;
+    int		linelen;
     int		c;
     int		todel;
     int		do_hex;
@@ -2687,9 +2684,10 @@
 
     curwin->w_cursor = *pos;
     ptr = ml_get(pos->lnum);
+    linelen = ml_get_len(pos->lnum);
     col = pos->col;
 
-    if (*ptr == NUL || col + !!save_coladd >= (int)STRLEN(ptr))
+    if (col + !!save_coladd >= linelen)
 	goto theend;
 
     /*
@@ -2869,8 +2867,7 @@
 	// get the number value (unsigned)
 	if (visual && VIsual_mode != 'V')
 	    maxlen = (curbuf->b_visual.vi_curswant == MAXCOL
-		    ? (int)STRLEN(ptr) - col
-		    : length);
+		    ? linelen - col : length);
 
 	int overflow = FALSE;
 	vim_str2nr(ptr + col, &pre, &length,
diff --git a/src/quickfix.c b/src/quickfix.c
index 006c134..0bf4cfe 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -6203,7 +6203,7 @@
 	else
 	{
 	    char_u  *str = ml_get_buf(buf, lnum, FALSE);
-	    int	    line_len = ml_get_buf_len(buf, lnum);
+	    colnr_T linelen = ml_get_buf_len(buf, lnum);
 	    int	    score;
 	    int_u   matches[MAX_FUZZY_MATCHES];
 	    int_u   sz = ARRAY_LENGTH(matches);
@@ -6242,7 +6242,7 @@
 		if ((flags & VGR_GLOBAL) == 0)
 		    break;
 		col = matches[pat_len - 1] + col + 1;
-		if (col > line_len)
+		if (col > linelen)
 		    break;
 	    }
 	}
@@ -6612,7 +6612,7 @@
 	goto theend;
     }
 
-    // Jump to first match if the current window is not 'winfixbuf'
+    // Jump to first match.
     if (!qf_list_empty(qf_get_curlist(qi)))
     {
 	if ((args.flags & VGR_NOJUMP) == 0)
diff --git a/src/spellsuggest.c b/src/spellsuggest.c
index ded04af..c6e6183 100644
--- a/src/spellsuggest.c
+++ b/src/spellsuggest.c
@@ -508,7 +508,6 @@
 	++badlen;
 	end_visual_mode();
 	// make sure we don't include the NUL at the end of the line
-	line = ml_get_curline();
 	if (badlen > ml_get_curline_len() - (int)curwin->w_cursor.col)
 	    badlen = ml_get_curline_len() - (int)curwin->w_cursor.col;
     }
diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim
index dc68a15..b180637 100644
--- a/src/testdir/test_normal.vim
+++ b/src/testdir/test_normal.vim
@@ -2364,6 +2364,14 @@
   %d
   call assert_beeps('norm! ~')
 
+  " Test with multiple lines
+  call setline(1, ['AA', 'BBBB', 'CCCCCC', 'DDDDDDDD'])
+  norm! ggguG
+  call assert_equal(['aa', 'bbbb', 'cccccc', 'dddddddd'], getline(1, '$'))
+  norm! GgUgg
+  call assert_equal(['AA', 'BBBB', 'CCCCCC', 'DDDDDDDD'], getline(1, '$'))
+  %d
+
   " Test for changing case across lines using 'whichwrap'
   call setline(1, ['aaaaaa', 'aaaaaa'])
   normal! gg10~
diff --git a/src/version.c b/src/version.c
index 6bdf896..78c496b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    177,
+/**/
     176,
 /**/
     175,
