diff --git a/src/edit.c b/src/edit.c
index a43891f71cec1b0f76f108a2e8e6f4f5205c1315..b24c514fce13e485cd5f74f76e94ca4c9fa2ebf6 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -2146,11 +2146,11 @@ ins_compl_add(str, len, icase, fname, kind, extra, info, cdir, flags)
     else
 	match->cp_fname = NULL;
     match->cp_flags = flags;
-    if (kind != NULL)
+    if (kind != NULL && *kind != NUL)
 	match->cp_kind = vim_strsave(kind);
-    if (extra != NULL)
+    if (extra != NULL && *extra != NUL)
 	match->cp_extra = vim_strsave(extra);
-    if (info != NULL)
+    if (info != NULL && *info != NUL)
 	match->cp_info = vim_strsave(info);
 
     /*
diff --git a/src/globals.h b/src/globals.h
index adde27108eb2270d5c4a4c9a7fd386bad3aab0eb..86d8ad9ca672802f040aa4c41806a80780af0cf5 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -410,7 +410,8 @@ EXTERN int	drag_sep_line INIT(= FALSE);	/* dragging vert separator */
 
 #ifdef FEAT_DIFF
 /* Value set from 'diffopt'. */
-EXTERN int	diff_context INIT(= 6);	/* context for folds */
+EXTERN int	diff_context INIT(= 6);		/* context for folds */
+EXTERN int	diff_foldcolumn INIT(= 2);	/* 'foldcolumn' for diff mode */
 EXTERN int	diff_need_scrollbind INIT(= FALSE);
 #endif
 
diff --git a/src/option.c b/src/option.c
index bbb1187ac199434c5bfcfae285b48e4049aa55a1..0686b853c24fac0ad28aac0a8b9419a4caa0bdb9 100644
--- a/src/option.c
+++ b/src/option.c
@@ -1923,6 +1923,13 @@ static struct vimoption
     {"prompt",	    NULL,   P_BOOL|P_VI_DEF,
 			    (char_u *)&p_prompt, PV_NONE,
 			    {(char_u *)TRUE, (char_u *)0L}},
+    {"pumheight",   "ph",   P_NUM|P_VI_DEF,
+#ifdef FEAT_INS_EXPAND
+			    (char_u *)&p_ph, PV_NONE,
+#else
+			    (char_u *)NULL, PV_NONE,
+#endif
+			    {(char_u *)0L, (char_u *)0L}},
     {"quoteescape", "qe",   P_STRING|P_ALLOCED|P_VI_DEF,
 #ifdef FEAT_TEXTOBJ
 			    (char_u *)&p_qe, PV_QE,
@@ -3194,7 +3201,7 @@ set_init_1()
 	}
     }
 # else
-#  ifdef MACOS
+#  ifdef MACOS_CONVERT
     if (mch_getenv((char_u *)"LANG") == NULL)
     {
 	char	buf[20];
diff --git a/src/option.h b/src/option.h
index 9be7524b221c173723aabb97f9e1ff24d336b0f5..794e83b97287b7eb2ddfb8699ea3dddd4cf19b44 100644
--- a/src/option.h
+++ b/src/option.h
@@ -378,6 +378,7 @@ EXTERN int	p_confirm;	/* 'confirm' */
 EXTERN int	p_cp;		/* 'compatible' */
 #ifdef FEAT_INS_EXPAND
 EXTERN char_u	*p_cot;		/* 'completeopt' */
+EXTERN long	p_ph;		/* 'pumheight' */
 #endif
 EXTERN char_u	*p_cpo;		/* 'cpoptions' */
 #ifdef FEAT_CSCOPE
diff --git a/src/testdir/test61.in b/src/testdir/test61.in
new file mode 100644
index 0000000000000000000000000000000000000000..749d8ad04c27aa34208ccd8a52ce1f6f2f85a5e2
--- /dev/null
+++ b/src/testdir/test61.in
@@ -0,0 +1,52 @@
+Tests for undo tree.
+Since this script is sourced we need to explicitly break changes up in
+undo-able pieces.  Do that by setting 'undolevels'.
+
+STARTTEST
+:" Delete three characters and undo
+Gx:set ul=100
+x:set ul=100
+x:.w! test.out
+g-:.w >>test.out
+g-:.w >>test.out
+g-:.w >>test.out
+g-:.w >>test.out
+:"
+:/^111/w >>test.out
+:" Delete three other characters and go back in time step by step
+$x:set ul=100
+x:set ul=100
+x:.w >>test.out
+:sleep 1
+g-:.w >>test.out
+g-:.w >>test.out
+g-:.w >>test.out
+g-:.w >>test.out
+g-:.w >>test.out
+g-:.w >>test.out
+g-:.w >>test.out
+g-:.w >>test.out
+10g+:.w >>test.out
+:"
+:/^222/w >>test.out
+:" Delay for three seconds and go some seconds forward and backward
+:sleep 2
+Aa:set ul=100
+Ab:set ul=100
+Ac:set ul=100
+:.w >>test.out
+:ear 1s
+:.w >>test.out
+:ear 3s
+:.w >>test.out
+:later 1s
+:.w >>test.out
+:later 1h
+:.w >>test.out
+:qa!
+ENDTEST
+
+1111 -----
+2222 -----
+
+123456789