diff --git a/src/channel.c b/src/channel.c
index 470092e..66ba55d 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -4460,8 +4460,7 @@
 	}
 
 	if (argvars[2].v_type == VAR_DICT)
-	    if (dict_find(argvars[2].vval.v_dict, (char_u *)"callback", -1)
-									!= NULL)
+	    if (dict_has_key(argvars[2].vval.v_dict, "callback"))
 		callback_present = TRUE;
 
 	if (eval || callback_present)
@@ -4482,7 +4481,7 @@
 	    if (di != NULL)
 		id = di->di_tv.vval.v_number;
 	}
-	if (dict_find(d, (char_u *)"jsonrpc", -1) == NULL)
+	if (!dict_has_key(d, "jsonrpc"))
 	    dict_add_string(d, "jsonrpc", (char_u *)"2.0");
 	text = json_encode_lsp_msg(&argvars[1]);
     }
diff --git a/src/dict.c b/src/dict.c
index c2dc6a7..88cc4b3 100644
--- a/src/dict.c
+++ b/src/dict.c
@@ -649,6 +649,15 @@
 }
 
 /*
+ * Returns TRUE if "key" is present in Dictionary "d".
+ */
+    int
+dict_has_key(dict_T *d, char *key)
+{
+    return dict_find(d, (char_u *)key, -1) != NULL;
+}
+
+/*
  * Get a typval_T item from a dictionary and copy it into "rettv".
  * Returns FAIL if the entry doesn't exist or out of memory.
  */
@@ -1582,8 +1591,8 @@
     if (argvars[0].vval.v_dict == NULL)
 	return;
 
-    rettv->vval.v_number = dict_find(argvars[0].vval.v_dict,
-				      tv_get_string(&argvars[1]), -1) != NULL;
+    rettv->vval.v_number = dict_has_key(argvars[0].vval.v_dict,
+				(char *)tv_get_string(&argvars[1]));
 }
 
 #endif // defined(FEAT_EVAL)
diff --git a/src/evalwindow.c b/src/evalwindow.c
index a47a0c0..f6bc79f 100644
--- a/src/evalwindow.c
+++ b/src/evalwindow.c
@@ -1220,27 +1220,27 @@
 	emsg(_(e_invalid_argument));
     else
     {
-	if (dict_find(dict, (char_u *)"lnum", -1) != NULL)
+	if (dict_has_key(dict, "lnum"))
 	    curwin->w_cursor.lnum = (linenr_T)dict_get_number(dict, (char_u *)"lnum");
-	if (dict_find(dict, (char_u *)"col", -1) != NULL)
+	if (dict_has_key(dict, "col"))
 	    curwin->w_cursor.col = (colnr_T)dict_get_number(dict, (char_u *)"col");
-	if (dict_find(dict, (char_u *)"coladd", -1) != NULL)
+	if (dict_has_key(dict, "coladd"))
 	    curwin->w_cursor.coladd = (colnr_T)dict_get_number(dict, (char_u *)"coladd");
-	if (dict_find(dict, (char_u *)"curswant", -1) != NULL)
+	if (dict_has_key(dict, "curswant"))
 	{
 	    curwin->w_curswant = (colnr_T)dict_get_number(dict, (char_u *)"curswant");
 	    curwin->w_set_curswant = FALSE;
 	}
 
-	if (dict_find(dict, (char_u *)"topline", -1) != NULL)
+	if (dict_has_key(dict, "topline"))
 	    set_topline(curwin, (linenr_T)dict_get_number(dict, (char_u *)"topline"));
 #ifdef FEAT_DIFF
-	if (dict_find(dict, (char_u *)"topfill", -1) != NULL)
+	if (dict_has_key(dict, "topfill"))
 	    curwin->w_topfill = (int)dict_get_number(dict, (char_u *)"topfill");
 #endif
-	if (dict_find(dict, (char_u *)"leftcol", -1) != NULL)
+	if (dict_has_key(dict, "leftcol"))
 	    curwin->w_leftcol = (colnr_T)dict_get_number(dict, (char_u *)"leftcol");
-	if (dict_find(dict, (char_u *)"skipcol", -1) != NULL)
+	if (dict_has_key(dict, "skipcol"))
 	    curwin->w_skipcol = (colnr_T)dict_get_number(dict, (char_u *)"skipcol");
 
 	check_cursor();
diff --git a/src/filepath.c b/src/filepath.c
index 3786ef6..1bde420 100644
--- a/src/filepath.c
+++ b/src/filepath.c
@@ -1605,7 +1605,7 @@
 	return FAIL;
     }
 
-    if (dict_find(tv->vval.v_dict, (char_u *)"sort", -1) != NULL)
+    if (dict_has_key(tv->vval.v_dict, "sort"))
 	compare = dict_get_string(tv->vval.v_dict, (char_u *)"sort", FALSE);
     else
     {
diff --git a/src/highlight.c b/src/highlight.c
index 6add298..724c4ba 100644
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -718,7 +718,7 @@
 # ifdef FEAT_BEVAL_TIP
 	gui_init_tooltip_font();
 # endif
-# if defined(FEAT_MENU) && (defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_MOTIF))
+# if defined(FEAT_MENU) && defined(FEAT_GUI_MOTIF)
 	gui_init_menu_font();
 # endif
     }
@@ -2134,7 +2134,7 @@
 	|| do_menu
 #  endif
 #  ifdef FEAT_BEVAL_TIP
-	// In Athena & Motif, the Tooltip highlight group is always a fontset
+	// In Motif, the Tooltip highlight group is always a fontset
 	|| do_tooltip
 #  endif
 	    )
@@ -2156,7 +2156,7 @@
 	// fontset.  Same for the Menu group.
 	if (do_normal)
 	    gui_init_font(arg, TRUE);
-#   if (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) && defined(FEAT_MENU)
+#   if defined(FEAT_GUI_MOTIF) && defined(FEAT_MENU)
 	if (do_menu)
 	{
 #    ifdef FONTSET_ALWAYS
@@ -2170,7 +2170,7 @@
 #    ifdef FEAT_BEVAL_GUI
 	if (do_tooltip)
 	{
-	    // The Athena widget set cannot currently handle switching between
+	    // The Athena widget set could not handle switching between
 	    // displaying a single font and a fontset.
 	    // If the XtNinternational resource is set to True at widget
 	    // creation, then a fontset is always used, otherwise an
@@ -2194,7 +2194,7 @@
 	    if (do_normal)
 		gui_init_font(arg, FALSE);
 #ifndef FONTSET_ALWAYS
-# if (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) && defined(FEAT_MENU)
+# if defined(FEAT_GUI_MOTIF) && defined(FEAT_MENU)
 	    if (do_menu)
 	    {
 		gui.menu_font = HL_TABLE()[idx].sg_font;
@@ -4411,7 +4411,7 @@
     if (dict_get_bool(dict, (char_u *)"default", VVAL_FALSE) == VVAL_TRUE)
 	dodefault = TRUE;
 
-    if (dict_find(dict, (char_u *)"cleared", -1) != NULL)
+    if (dict_has_key(dict, "cleared"))
     {
 	varnumber_T	cleared;
 
@@ -4425,7 +4425,7 @@
 	}
     }
 
-    if (dict_find(dict, (char_u *)"linksto", -1) != NULL)
+    if (dict_has_key(dict, "linksto"))
     {
 	char_u	*linksto;
 
diff --git a/src/json.c b/src/json.c
index b23bfa0..5be8f7f 100644
--- a/src/json.c
+++ b/src/json.c
@@ -1027,8 +1027,8 @@
 
 	    case JSON_OBJECT:
 		if (cur_item != NULL
-			&& dict_find(top_item->jd_tv.vval.v_dict,
-						 top_item->jd_key, -1) != NULL)
+			&& dict_has_key(top_item->jd_tv.vval.v_dict,
+						(char *)top_item->jd_key))
 		{
 		    semsg(_(e_duplicate_key_in_json_str), top_item->jd_key);
 		    clear_tv(cur_item);
diff --git a/src/match.c b/src/match.c
index 5041d6b..ce35bac 100644
--- a/src/match.c
+++ b/src/match.c
@@ -938,7 +938,7 @@
 	return FAIL;
     }
 
-    if (dict_find(tv->vval.v_dict, (char_u *)"conceal", -1) != NULL)
+    if (dict_has_key(tv->vval.v_dict, "conceal"))
 	*conceal_char = dict_get_string(tv->vval.v_dict,
 						   (char_u *)"conceal", FALSE);
 
@@ -1088,11 +1088,11 @@
 		emsg(_(e_invalid_argument));
 		return;
 	    }
-	    if (!(dict_find(d, (char_u *)"group", -1) != NULL
-			&& (dict_find(d, (char_u *)"pattern", -1) != NULL
-			    || dict_find(d, (char_u *)"pos1", -1) != NULL)
-			&& dict_find(d, (char_u *)"priority", -1) != NULL
-			&& dict_find(d, (char_u *)"id", -1) != NULL))
+	    if (!(dict_has_key(d, "group")
+			&& (dict_has_key(d, "pattern")
+			    || dict_has_key(d, "pos1"))
+			&& dict_has_key(d, "priority")
+			&& dict_has_key(d, "id")))
 	    {
 		emsg(_(e_invalid_argument));
 		return;
@@ -1113,7 +1113,7 @@
 	    char_u	*conceal;
 
 	    d = li->li_tv.vval.v_dict;
-	    if (dict_find(d, (char_u *)"pattern", -1) == NULL)
+	    if (!dict_has_key(d, "pattern"))
 	    {
 		if (s == NULL)
 		{
@@ -1142,7 +1142,7 @@
 	    group = dict_get_string(d, (char_u *)"group", TRUE);
 	    priority = (int)dict_get_number(d, (char_u *)"priority");
 	    id = (int)dict_get_number(d, (char_u *)"id");
-	    conceal = dict_find(d, (char_u *)"conceal", -1) != NULL
+	    conceal = dict_has_key(d, "conceal")
 			      ? dict_get_string(d, (char_u *)"conceal", TRUE)
 			      : NULL;
 	    if (i == 0)
diff --git a/src/popupwin.c b/src/popupwin.c
index c3251ea..9c0cade 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -1957,7 +1957,7 @@
 
     if (d != NULL)
     {
-	if (dict_find(d, (char_u *)"tabpage", -1) != NULL)
+	if (dict_has_key(d, "tabpage"))
 	    tabnr = (int)dict_get_number(d, (char_u *)"tabpage");
 	else if (type == TYPE_NOTIFICATION)
 	    tabnr = -1;  // notifications are global by default
diff --git a/src/proto/dict.pro b/src/proto/dict.pro
index 7db011d..30a3055 100644
--- a/src/proto/dict.pro
+++ b/src/proto/dict.pro
@@ -27,6 +27,7 @@
 int dict_add_dict(dict_T *d, char *key, dict_T *dict);
 long dict_len(dict_T *d);
 dictitem_T *dict_find(dict_T *d, char_u *key, int len);
+int dict_has_key(dict_T *d, char *key);
 int dict_get_tv(dict_T *d, char_u *key, typval_T *rettv);
 char_u *dict_get_string(dict_T *d, char_u *key, int save);
 varnumber_T dict_get_number(dict_T *d, char_u *key);
diff --git a/src/quickfix.c b/src/quickfix.c
index c2162e9..e38011b 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -6859,7 +6859,7 @@
 {
     int		flags = QF_GETLIST_NONE;
 
-    if (dict_find(what, (char_u *)"all", -1) != NULL)
+    if (dict_has_key(what, "all"))
     {
 	flags |= QF_GETLIST_ALL;
 	if (!loclist)
@@ -6867,40 +6867,40 @@
 	    flags &= ~ QF_GETLIST_FILEWINID;
     }
 
-    if (dict_find(what, (char_u *)"title", -1) != NULL)
+    if (dict_has_key(what, "title"))
 	flags |= QF_GETLIST_TITLE;
 
-    if (dict_find(what, (char_u *)"nr", -1) != NULL)
+    if (dict_has_key(what, "nr"))
 	flags |= QF_GETLIST_NR;
 
-    if (dict_find(what, (char_u *)"winid", -1) != NULL)
+    if (dict_has_key(what, "winid"))
 	flags |= QF_GETLIST_WINID;
 
-    if (dict_find(what, (char_u *)"context", -1) != NULL)
+    if (dict_has_key(what, "context"))
 	flags |= QF_GETLIST_CONTEXT;
 
-    if (dict_find(what, (char_u *)"id", -1) != NULL)
+    if (dict_has_key(what, "id"))
 	flags |= QF_GETLIST_ID;
 
-    if (dict_find(what, (char_u *)"items", -1) != NULL)
+    if (dict_has_key(what, "items"))
 	flags |= QF_GETLIST_ITEMS;
 
-    if (dict_find(what, (char_u *)"idx", -1) != NULL)
+    if (dict_has_key(what, "idx"))
 	flags |= QF_GETLIST_IDX;
 
-    if (dict_find(what, (char_u *)"size", -1) != NULL)
+    if (dict_has_key(what, "size"))
 	flags |= QF_GETLIST_SIZE;
 
-    if (dict_find(what, (char_u *)"changedtick", -1) != NULL)
+    if (dict_has_key(what, "changedtick"))
 	flags |= QF_GETLIST_TICK;
 
-    if (loclist && dict_find(what, (char_u *)"filewinid", -1) != NULL)
+    if (loclist && dict_has_key(what, "filewinid"))
 	flags |= QF_GETLIST_FILEWINID;
 
-    if (dict_find(what, (char_u *)"qfbufnr", -1) != NULL)
+    if (dict_has_key(what, "qfbufnr"))
 	flags |= QF_GETLIST_QFBUFNR;
 
-    if (dict_find(what, (char_u *)"quickfixtextfunc", -1) != NULL)
+    if (dict_has_key(what, "quickfixtextfunc"))
 	flags |= QF_GETLIST_QFTF;
 
     return flags;
@@ -7241,7 +7241,7 @@
     }
 
     // If the 'valid' field is present it overrules the detected value.
-    if ((dict_find(d, (char_u *)"valid", -1)) != NULL)
+    if (dict_has_key(d, "valid"))
 	valid = (int)dict_get_bool(d, (char_u *)"valid", FALSE);
 
     status =  qf_add_entry(qfl,
diff --git a/src/search.c b/src/search.c
index 98241a4..a66075f 100644
--- a/src/search.c
+++ b/src/search.c
@@ -4878,7 +4878,7 @@
 		return;
 	    }
 	}
-	if (dict_find(d, (char_u *)"matchseq", -1) != NULL)
+	if (dict_has_key(d, "matchseq"))
 	    matchseq = TRUE;
     }
 
diff --git a/src/sign.c b/src/sign.c
index 3d9c387..673d902 100644
--- a/src/sign.c
+++ b/src/sign.c
@@ -2786,7 +2786,7 @@
 	    if (buf == NULL)
 		goto cleanup;
 	}
-	if (dict_find(dict, (char_u *)"id", -1) != NULL)
+	if (dict_has_key(dict, "id"))
 	{
 	    sign_id = dict_get_number(dict, (char_u *)"id");
 	    if (sign_id <= 0)
diff --git a/src/tag.c b/src/tag.c
index b7ac9c1..577a4b7 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -4313,7 +4313,7 @@
     int		retval;
 
     // check that the field name doesn't exist yet
-    if (dict_find(dict, (char_u *)field_name, -1) != NULL)
+    if (dict_has_key(dict, field_name))
     {
 	if (p_verbose > 0)
 	{
diff --git a/src/terminal.c b/src/terminal.c
index 75f7a08..0849f2c 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -4311,13 +4311,13 @@
 	if (p != NULL)
 	    get_bad_opt(p, &ea);
 
-	if (dict_find(dict, (char_u *)"bin", -1) != NULL)
+	if (dict_has_key(dict, "bin"))
 	    ea.force_bin = FORCE_BIN;
-	if (dict_find(dict, (char_u *)"binary", -1) != NULL)
+	if (dict_has_key(dict, "binary"))
 	    ea.force_bin = FORCE_BIN;
-	if (dict_find(dict, (char_u *)"nobin", -1) != NULL)
+	if (dict_has_key(dict, "nobin"))
 	    ea.force_bin = FORCE_NOBIN;
-	if (dict_find(dict, (char_u *)"nobinary", -1) != NULL)
+	if (dict_has_key(dict, "nobinary"))
 	    ea.force_bin = FORCE_NOBIN;
     }
 
diff --git a/src/testing.c b/src/testing.c
index c053487..3340123 100644
--- a/src/testing.c
+++ b/src/testing.c
@@ -1285,10 +1285,10 @@
     list_T	*l;
     listitem_T	*li;
 
-    if (dict_find(args, (char_u *)"files", -1) == NULL
-	    || dict_find(args, (char_u *)"row", -1) == NULL
-	    || dict_find(args, (char_u *)"col", -1) == NULL
-	    || dict_find(args, (char_u *)"modifiers", -1) == NULL)
+    if (!dict_has_key(args, "files")
+	    || !dict_has_key(args, "row")
+	    || !dict_has_key(args, "col")
+	    || !dict_has_key(args, "modifiers"))
 	return FALSE;
 
     (void)dict_get_tv(args, (char_u *)"files", &t);
@@ -1341,10 +1341,10 @@
     int		forward;
     int		retval;
 
-    if (dict_find(args, (char_u *)"find_text", -1) == NULL
-	    || dict_find(args, (char_u *)"repl_text", -1) == NULL
-	    || dict_find(args, (char_u *)"flags", -1) == NULL
-	    || dict_find(args, (char_u *)"forward", -1) == NULL)
+    if (!dict_has_key(args, "find_text")
+	    || !dict_has_key(args, "repl_text")
+	    || !dict_has_key(args, "flags")
+	    || !dict_has_key(args, "forward"))
 	return FALSE;
 
     find_text = dict_get_string(args, (char_u *)"find_text", TRUE);
@@ -1370,16 +1370,16 @@
     int_u	mods;
     int		move;
 
-    if (dict_find(args, (char_u *)"row", -1) == NULL
-	    || dict_find(args, (char_u *)"col", -1) == NULL)
+    if (!dict_has_key(args, "row")
+	    || !dict_has_key(args, "col"))
 	return FALSE;
 
     // Note: "move" is optional, requires fewer arguments
     move = (int)dict_get_bool(args, (char_u *)"move", FALSE);
 
-    if (!move && (dict_find(args, (char_u *)"button", -1) == NULL
-	    || dict_find(args, (char_u *)"multiclick", -1) == NULL
-	    || dict_find(args, (char_u *)"modifiers", -1) == NULL))
+    if (!move && (!dict_has_key(args, "button")
+	    || !dict_has_key(args, "multiclick")
+	    || !dict_has_key(args, "modifiers")))
 	return FALSE;
 
     row = (int)dict_get_number(args, (char_u *)"row");
@@ -1408,9 +1408,9 @@
     int		dragging;
     scrollbar_T *sb = NULL;
 
-    if (dict_find(args, (char_u *)"which", -1) == NULL
-	    || dict_find(args, (char_u *)"value", -1) == NULL
-	    || dict_find(args, (char_u *)"dragging", -1) == NULL)
+    if (!dict_has_key(args, "which")
+	    || !dict_has_key(args, "value")
+	    || !dict_has_key(args, "dragging"))
 	return FALSE;
 
     which = dict_get_string(args, (char_u *)"which", FALSE);
@@ -1443,7 +1443,7 @@
 #  ifdef FEAT_GUI_TABLINE
     int		tabnr;
 
-    if (dict_find(args, (char_u *)"tabnr", -1) == NULL)
+    if (!dict_has_key(args, "tabnr"))
 	return FALSE;
 
     tabnr = (int)dict_get_number(args, (char_u *)"tabnr");
@@ -1461,8 +1461,8 @@
     int	tabnr;
     int	item;
 
-    if (dict_find(args, (char_u *)"tabnr", -1) == NULL
-	    || dict_find(args, (char_u *)"item", -1) == NULL)
+    if (!dict_has_key(args, "tabnr")
+	    || !dict_has_key(args, "item"))
 	return FALSE;
 
     tabnr = (int)dict_get_number(args, (char_u *)"tabnr");
diff --git a/src/textprop.c b/src/textprop.c
index 6c81d4a..f5cf6b8 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -331,14 +331,14 @@
     }
 
     dict = argvars[0].vval.v_dict;
-    if (dict == NULL || dict_find(dict, (char_u *)"type", -1) == NULL)
+    if (dict == NULL || !dict_has_key(dict, "type"))
     {
 	emsg(_(e_missing_property_type_name));
 	return;
     }
     type_name = dict_get_string(dict, (char_u *)"type", FALSE);
 
-    if (dict_find(dict, (char_u *)"id", -1) != NULL)
+    if (dict_has_key(dict, "id"))
 	id = dict_get_number(dict, (char_u *)"id");
 
     if (get_bufnr_from_arg(&argvars[0], &buf) == FAIL)
@@ -391,14 +391,14 @@
     buf_T	*buf = default_buf;
     int		id = 0;
 
-    if (dict == NULL || dict_find(dict, (char_u *)"type", -1) == NULL)
+    if (dict == NULL || !dict_has_key(dict, "type"))
     {
 	emsg(_(e_missing_property_type_name));
 	return;
     }
     type_name = dict_get_string(dict, (char_u *)"type", FALSE);
 
-    if (dict_find(dict, (char_u *)"end_lnum", -1) != NULL)
+    if (dict_has_key(dict, "end_lnum"))
     {
 	end_lnum = dict_get_number(dict, (char_u *)"end_lnum");
 	if (end_lnum < start_lnum)
@@ -410,7 +410,7 @@
     else
 	end_lnum = start_lnum;
 
-    if (dict_find(dict, (char_u *)"length", -1) != NULL)
+    if (dict_has_key(dict, "length"))
     {
 	long length = dict_get_number(dict, (char_u *)"length");
 
@@ -421,7 +421,7 @@
 	}
 	end_col = start_col + length;
     }
-    else if (dict_find(dict, (char_u *)"end_col", -1) != NULL)
+    else if (dict_has_key(dict, "end_col"))
     {
 	end_col = dict_get_number(dict, (char_u *)"end_col");
 	if (end_col <= 0)
@@ -435,7 +435,7 @@
     else
 	end_col = 1;
 
-    if (dict_find(dict, (char_u *)"id", -1) != NULL)
+    if (dict_has_key(dict, "id"))
 	id = dict_get_number(dict, (char_u *)"id");
 
     if (dict_arg != NULL && get_bufnr_from_arg(dict_arg, &buf) == FAIL)
@@ -777,12 +777,12 @@
 
     skipstart = dict_get_bool(dict, (char_u *)"skipstart", 0);
 
-    if (dict_find(dict, (char_u *)"id", -1) != NULL)
+    if (dict_has_key(dict, "id"))
     {
 	id = dict_get_number(dict, (char_u *)"id");
 	id_found = TRUE;
     }
-    if (dict_find(dict, (char_u *)"type", -1))
+    if (dict_has_key(dict, "type"))
     {
 	char_u	    *name = dict_get_string(dict, (char_u *)"type", FALSE);
 	proptype_T  *type = lookup_prop_type(name, buf);
@@ -1202,9 +1202,9 @@
 
     do_all = dict_get_bool(dict, (char_u *)"all", FALSE);
 
-    if (dict_find(dict, (char_u *)"id", -1) != NULL)
+    if (dict_has_key(dict, "id"))
 	id = dict_get_number(dict, (char_u *)"id");
-    if (dict_find(dict, (char_u *)"type", -1))
+    if (dict_has_key(dict, "type"))
     {
 	char_u	    *name = dict_get_string(dict, (char_u *)"type", FALSE);
 	proptype_T  *type = lookup_prop_type(name, buf);
diff --git a/src/time.c b/src/time.c
index 00275ef..53ac853 100644
--- a/src/time.c
+++ b/src/time.c
@@ -848,7 +848,7 @@
 	    semsg(_(e_invalid_argument_str), tv_get_string(&argvars[2]));
 	    return;
 	}
-	if (dict_find(dict, (char_u *)"repeat", -1) != NULL)
+	if (dict_has_key(dict, "repeat"))
 	    repeat = dict_get_number(dict, (char_u *)"repeat");
     }
 
diff --git a/src/version.c b/src/version.c
index 8b7450c..bf10411 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4683,
+/**/
     4682,
 /**/
     4681,
