diff --git a/src/globals.h b/src/globals.h
index 16fd53f..132902e 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -368,8 +368,8 @@
 EXTERN int	cterm_normal_fg_bold INIT(= 0);
 EXTERN int	cterm_normal_bg_color INIT(= 0);
 #ifdef FEAT_TERMGUICOLORS
-EXTERN long_u	cterm_normal_fg_gui_color INIT(= INVALCOLOR);
-EXTERN long_u	cterm_normal_bg_gui_color INIT(= INVALCOLOR);
+EXTERN guicolor_T cterm_normal_fg_gui_color INIT(= INVALCOLOR);
+EXTERN guicolor_T cterm_normal_bg_gui_color INIT(= INVALCOLOR);
 #endif
 
 #ifdef FEAT_AUTOCMD
diff --git a/src/gui.c b/src/gui.c
index 6f1d8f5..31ddd03 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -4741,7 +4741,7 @@
     int
 gui_get_lightness(guicolor_T pixel)
 {
-    long_u	rgb = gui_mch_get_rgb(pixel);
+    long_u	rgb = (long_u)gui_mch_get_rgb(pixel);
 
     return  (int)(  (((rgb >> 16) & 0xff) * 299)
 		   + (((rgb >> 8) & 0xff) * 587)
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index ee73db3..added7b 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -7020,7 +7020,7 @@
 /*
  * Return the RGB value of a pixel as long.
  */
-    long_u
+    guicolor_T
 gui_mch_get_rgb(guicolor_T pixel)
 {
 #if GTK_CHECK_VERSION(3,0,0)
@@ -7031,9 +7031,10 @@
     gdk_colormap_query_color(gtk_widget_get_colormap(gui.drawarea),
 			     (unsigned long)pixel, &color);
 
-    return (((unsigned)color.red   & 0xff00) << 8)
+    return (guicolor_T)(
+	    (((unsigned)color.red   & 0xff00) << 8)
 	 |  ((unsigned)color.green & 0xff00)
-	 | (((unsigned)color.blue  & 0xff00) >> 8);
+	 | (((unsigned)color.blue  & 0xff00) >> 8));
 #endif
 }
 
diff --git a/src/gui_mac.c b/src/gui_mac.c
index d750b3b..8d79e55 100644
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -5181,10 +5181,10 @@
 /*
  * Return the RGB value of a pixel as long.
  */
-    long_u
+    guicolor_T
 gui_mch_get_rgb(guicolor_T pixel)
 {
-    return (Red(pixel) << 16) + (Green(pixel) << 8) + Blue(pixel);
+    return (guicolor_T)((Red(pixel) << 16) + (Green(pixel) << 8) + Blue(pixel));
 }
 
 
diff --git a/src/gui_photon.c b/src/gui_photon.c
index 1000a5e..7b1462a 100644
--- a/src/gui_photon.c
+++ b/src/gui_photon.c
@@ -1933,10 +1933,11 @@
 /*
  * Return the RGB value of a pixel as a long.
  */
-    long_u
+    guicolor_T
 gui_mch_get_rgb(guicolor_T pixel)
 {
-    return PgRGB(PgRedValue(pixel), PgGreenValue(pixel), PgBlueValue(pixel));
+    return (guicolor_T)(PgRGB(PgRedValue(pixel),
+				     PgGreenValue(pixel), PgBlueValue(pixel)));
 }
 
     void
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 78db43e..773454f 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -2263,11 +2263,11 @@
 /*
  * Return the RGB value of a pixel as a long.
  */
-    long_u
+    guicolor_T
 gui_mch_get_rgb(guicolor_T pixel)
 {
-    return (GetRValue(pixel) << 16) + (GetGValue(pixel) << 8)
-							   + GetBValue(pixel);
+    return (guicolor_T)((GetRValue(pixel) << 16) + (GetGValue(pixel) << 8)
+							   + GetBValue(pixel));
 }
 
 #if defined(FEAT_GUI_DIALOG) || defined(PROTO)
diff --git a/src/gui_x11.c b/src/gui_x11.c
index 7f09880..2e3252d 100644
--- a/src/gui_x11.c
+++ b/src/gui_x11.c
@@ -3095,7 +3095,7 @@
 /*
  * Return the RGB value of a pixel as a long.
  */
-    long_u
+    guicolor_T
 gui_mch_get_rgb(guicolor_T pixel)
 {
     XColor	xc;
@@ -3105,8 +3105,8 @@
     xc.pixel = pixel;
     XQueryColor(gui.dpy, colormap, &xc);
 
-    return ((xc.red & 0xff00) << 8) + (xc.green & 0xff00)
-						   + ((unsigned)xc.blue >> 8);
+    return (guicolor_T)(((xc.red & 0xff00) << 8) + (xc.green & 0xff00)
+						   + ((unsigned)xc.blue >> 8));
 }
 
 /*
diff --git a/src/proto/gui_gtk_x11.pro b/src/proto/gui_gtk_x11.pro
index f663dba..124e2ae 100644
--- a/src/proto/gui_gtk_x11.pro
+++ b/src/proto/gui_gtk_x11.pro
@@ -66,7 +66,7 @@
 void gui_mch_menu_hidden(vimmenu_T *menu, int hidden);
 void gui_mch_draw_menubar(void);
 void gui_mch_enable_scrollbar(scrollbar_T *sb, int flag);
-long_u gui_mch_get_rgb(guicolor_T pixel);
+guicolor_T gui_mch_get_rgb(guicolor_T pixel);
 void gui_mch_getmouse(int *x, int *y);
 void gui_mch_setmouse(int x, int y);
 void gui_mch_mousehide(int hide);
diff --git a/src/proto/gui_mac.pro b/src/proto/gui_mac.pro
index ebe13f3..9b59f1f 100644
--- a/src/proto/gui_mac.pro
+++ b/src/proto/gui_mac.pro
@@ -78,7 +78,7 @@
 void gui_mch_menu_hidden(vimmenu_T *menu, int hidden);
 void gui_mch_draw_menubar(void);
 int gui_mch_get_lightness(guicolor_T pixel);
-long_u gui_mch_get_rgb(guicolor_T pixel);
+guicolor_T gui_mch_get_rgb(guicolor_T pixel);
 int gui_mch_get_mouse_x(void);
 int gui_mch_get_mouse_y(void);
 void gui_mch_setmouse(int x, int y);
diff --git a/src/proto/gui_photon.pro b/src/proto/gui_photon.pro
index b03479c..7681b87 100644
--- a/src/proto/gui_photon.pro
+++ b/src/proto/gui_photon.pro
@@ -25,7 +25,7 @@
 void gui_mch_mousehide(int hide);
 void gui_mch_getmouse(int *x, int *y);
 void gui_mch_setmouse(int x, int y);
-long_u gui_mch_get_rgb(guicolor_T pixel);
+guicolor_T gui_mch_get_rgb(guicolor_T pixel);
 void gui_mch_new_colors(void);
 guicolor_T gui_mch_get_color(char_u *name);
 void gui_mch_set_fg_color(guicolor_T color);
diff --git a/src/proto/gui_w32.pro b/src/proto/gui_w32.pro
index 20a92b9..2eccf74 100644
--- a/src/proto/gui_w32.pro
+++ b/src/proto/gui_w32.pro
@@ -35,7 +35,7 @@
 void gui_mch_set_menu_pos(int x, int y, int w, int h);
 void gui_mch_menu_hidden(vimmenu_T *menu, int hidden);
 void gui_mch_draw_menubar(void);
-long_u gui_mch_get_rgb(guicolor_T pixel);
+guicolor_T gui_mch_get_rgb(guicolor_T pixel);
 void gui_mch_activate_window(void);
 void gui_mch_show_toolbar(int showit);
 void gui_mch_show_tabline(int showit);
diff --git a/src/proto/gui_x11.pro b/src/proto/gui_x11.pro
index ccaf99f..1e4410e 100644
--- a/src/proto/gui_x11.pro
+++ b/src/proto/gui_x11.pro
@@ -24,7 +24,7 @@
 GuiFontset gui_mch_get_fontset(char_u *name, int giveErrorIfMissing, int fixed_width);
 int fontset_height(XFontSet fs);
 int fontset_height2(XFontSet fs);
-guicolor_T gui_mch_get_color(char_u *reqname);
+guicolor_T gui_mch_get_color(char_u *name);
 void gui_mch_set_fg_color(guicolor_T color);
 void gui_mch_set_bg_color(guicolor_T color);
 void gui_mch_set_sp_color(guicolor_T color);
@@ -58,7 +58,7 @@
 void gui_mch_set_blinking(long waittime, long on, long off);
 void gui_mch_stop_blink(void);
 void gui_mch_start_blink(void);
-long_u gui_mch_get_rgb(guicolor_T pixel);
+guicolor_T gui_mch_get_rgb(guicolor_T pixel);
 void gui_x11_callbacks(Widget textArea, Widget vimForm);
 void gui_mch_getmouse(int *x, int *y);
 void gui_mch_setmouse(int x, int y);
diff --git a/src/proto/term.pro b/src/proto/term.pro
index 93c6cb0..0c238d3 100644
--- a/src/proto/term.pro
+++ b/src/proto/term.pro
@@ -1,7 +1,7 @@
 /* term.c */
 guicolor_T termgui_mch_get_color(char_u *name);
 guicolor_T termgui_get_color(char_u *name);
-long_u termgui_mch_get_rgb(guicolor_T color);
+guicolor_T termgui_mch_get_rgb(guicolor_T color);
 int set_termname(char_u *term);
 void set_mouse_termcode(int n, char_u *s);
 void del_mouse_termcode(int n);
@@ -25,8 +25,8 @@
 void term_set_winsize(int width, int height);
 void term_fg_color(int n);
 void term_bg_color(int n);
-void term_fg_rgb_color(long_u rgb);
-void term_bg_rgb_color(long_u rgb);
+void term_fg_rgb_color(guicolor_T rgb);
+void term_bg_rgb_color(guicolor_T rgb);
 void term_settitle(char_u *title);
 void ttest(int pairs);
 void add_long_to_buf(long_u val, char_u *dst);
diff --git a/src/screen.c b/src/screen.c
index 64e159a..b580aee 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -7865,7 +7865,7 @@
 	    else if (aep != NULL && cterm_normal_fg_bold &&
 #ifdef FEAT_TERMGUICOLORS
 			(p_tgc ?
-			    (aep->ae_u.cterm.fg_rgb != (long_u)INVALCOLOR):
+			    (aep->ae_u.cterm.fg_rgb != INVALCOLOR):
 #endif
 			    (t_colors > 1 && aep->ae_u.cterm.fg_color)
 #ifdef FEAT_TERMGUICOLORS
@@ -7894,9 +7894,9 @@
 #ifdef FEAT_TERMGUICOLORS
 		if (p_tgc)
 		{
-		    if (aep->ae_u.cterm.fg_rgb != (long_u)INVALCOLOR)
+		    if (aep->ae_u.cterm.fg_rgb != INVALCOLOR)
 			term_fg_rgb_color(aep->ae_u.cterm.fg_rgb);
-		    if (aep->ae_u.cterm.bg_rgb != (long_u)INVALCOLOR)
+		    if (aep->ae_u.cterm.bg_rgb != INVALCOLOR)
 			term_bg_rgb_color(aep->ae_u.cterm.bg_rgb);
 		}
 		else
@@ -7956,8 +7956,8 @@
 		    if (aep != NULL &&
 #ifdef FEAT_TERMGUICOLORS
 			    (p_tgc ?
-				(aep->ae_u.cterm.fg_rgb != (long_u)INVALCOLOR ||
-				 aep->ae_u.cterm.bg_rgb != (long_u)INVALCOLOR):
+				(aep->ae_u.cterm.fg_rgb != INVALCOLOR
+				 || aep->ae_u.cterm.bg_rgb != INVALCOLOR):
 #endif
 				(aep->ae_u.cterm.fg_color || aep->ae_u.cterm.bg_color)
 #ifdef FEAT_TERMGUICOLORS
@@ -8014,9 +8014,9 @@
 #ifdef FEAT_TERMGUICOLORS
 	    if (p_tgc)
 	    {
-		if (cterm_normal_fg_gui_color != (long_u)INVALCOLOR)
+		if (cterm_normal_fg_gui_color != INVALCOLOR)
 		    term_fg_rgb_color(cterm_normal_fg_gui_color);
-		if (cterm_normal_bg_gui_color != (long_u)INVALCOLOR)
+		if (cterm_normal_bg_gui_color != INVALCOLOR)
 		    term_bg_rgb_color(cterm_normal_bg_gui_color);
 	    }
 	    else
@@ -8049,10 +8049,9 @@
     {
 	/* set Normal cterm colors */
 #ifdef FEAT_TERMGUICOLORS
-	if (p_tgc ?
-		(cterm_normal_fg_gui_color != (long_u)INVALCOLOR
-		 || cterm_normal_bg_gui_color != (long_u)INVALCOLOR):
-		(cterm_normal_fg_color > 0 || cterm_normal_bg_color > 0))
+	if (p_tgc ? (cterm_normal_fg_gui_color != INVALCOLOR
+		 || cterm_normal_bg_gui_color != INVALCOLOR)
+		: (cterm_normal_fg_color > 0 || cterm_normal_bg_color > 0))
 #else
 	if (cterm_normal_fg_color > 0 || cterm_normal_bg_color > 0)
 #endif
@@ -8983,7 +8982,7 @@
 		|| gui.in_use
 #endif
 #ifdef FEAT_TERMGUICOLORS
-		|| (p_tgc && cterm_normal_bg_gui_color == (long_u)INVALCOLOR)
+		|| (p_tgc && cterm_normal_bg_gui_color == INVALCOLOR)
 		|| (!p_tgc && cterm_normal_bg_color == 0)
 #else
 		|| cterm_normal_bg_color == 0
diff --git a/src/structs.h b/src/structs.h
index 4488bf8..f918442 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -92,8 +92,7 @@
 # ifdef FEAT_XCLIPBOARD
 #  include <X11/Intrinsic.h>
 # endif
-# define guicolor_T long_u		/* avoid error in prototypes and
-					 * make FEAT_TERMGUICOLORS work */
+# define guicolor_T long
 # define INVALCOLOR ((guicolor_T)0x1ffffff)
 #endif
 
@@ -929,8 +928,8 @@
 	    short_u	    fg_color;	/* foreground color number */
 	    short_u	    bg_color;	/* background color number */
 # ifdef FEAT_TERMGUICOLORS
-	    long_u	    fg_rgb;	/* foreground color RGB */
-	    long_u	    bg_rgb;	/* background color RGB */
+	    guicolor_T	    fg_rgb;	/* foreground color RGB */
+	    guicolor_T	    bg_rgb;	/* background color RGB */
 # endif
 	} cterm;
 # ifdef FEAT_GUI
diff --git a/src/syntax.c b/src/syntax.c
index ff8cbb4..f8be5e3 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -8488,7 +8488,7 @@
 	    return gui.norm_pixel;
 #endif
 #ifdef FEAT_TERMGUICOLORS
-	if (cterm_normal_fg_gui_color != (long_u)INVALCOLOR)
+	if (cterm_normal_fg_gui_color != INVALCOLOR)
 	    return cterm_normal_fg_gui_color;
 	/* Guess that the foreground is black or white. */
 	return GUI_GET_COLOR((char_u *)(*p_bg == 'l' ? "black" : "white"));
@@ -8503,7 +8503,7 @@
 	    return gui.back_pixel;
 #endif
 #ifdef FEAT_TERMGUICOLORS
-	if (cterm_normal_bg_gui_color != (long_u)INVALCOLOR)
+	if (cterm_normal_bg_gui_color != INVALCOLOR)
 	    return cterm_normal_bg_gui_color;
 	/* Guess that the background is white or black. */
 	return GUI_GET_COLOR((char_u *)(*p_bg == 'l' ? "white" : "black"));
@@ -8782,9 +8782,9 @@
 		if (spell_aep->ae_u.cterm.bg_color > 0)
 		    new_en.ae_u.cterm.bg_color = spell_aep->ae_u.cterm.bg_color;
 #ifdef FEAT_TERMGUICOLORS
-		if (spell_aep->ae_u.cterm.fg_rgb != (long_u)INVALCOLOR)
+		if (spell_aep->ae_u.cterm.fg_rgb != INVALCOLOR)
 		    new_en.ae_u.cterm.fg_rgb = spell_aep->ae_u.cterm.fg_rgb;
-		if (spell_aep->ae_u.cterm.bg_rgb != (long_u)INVALCOLOR)
+		if (spell_aep->ae_u.cterm.bg_rgb != INVALCOLOR)
 		    new_en.ae_u.cterm.bg_rgb = spell_aep->ae_u.cterm.bg_rgb;
 #endif
 	    }
@@ -9076,7 +9076,7 @@
 		color = HL_TABLE()[id - 1].sg_gui_bg;
 	    if (color == INVALCOLOR)
 		return NULL;
-	    rgb = GUI_MCH_GET_RGB(color);
+	    rgb = (long_u)GUI_MCH_GET_RGB(color);
 	    sprintf((char *)buf, "#%02x%02x%02x",
 				      (unsigned)(rgb >> 16),
 				      (unsigned)(rgb >> 8) & 255,
diff --git a/src/term.c b/src/term.c
index 4d505e3..9879ba8 100644
--- a/src/term.c
+++ b/src/term.c
@@ -77,9 +77,6 @@
 static struct builtin_term *find_builtin_term(char_u *name);
 static void parse_builtin_tcap(char_u *s);
 static void term_color(char_u *s, int n);
-#ifdef FEAT_TERMGUICOLORS
-static void term_rgb_color(char_u *s, long_u rgb);
-#endif
 static void gather_termleader(void);
 #ifdef FEAT_TERMRESPONSE
 static void req_codes_from_term(void);
@@ -1282,10 +1279,10 @@
     return t;
 }
 
-    long_u
+    guicolor_T
 termgui_mch_get_rgb(guicolor_T color)
 {
-    return (long_u)color;
+    return color;
 }
 #endif
 
@@ -2634,24 +2631,13 @@
 }
 
 #if defined(FEAT_TERMGUICOLORS) || defined(PROTO)
-    void
-term_fg_rgb_color(long_u rgb)
-{
-    term_rgb_color(T_8F, rgb);
-}
 
-    void
-term_bg_rgb_color(long_u rgb)
-{
-    term_rgb_color(T_8B, rgb);
-}
-
-#define RED(rgb)   ((rgb>>16)&0xFF)
-#define GREEN(rgb) ((rgb>> 8)&0xFF)
-#define BLUE(rgb)  ((rgb    )&0xFF)
+#define RED(rgb)   (((long_u)(rgb) >> 16) & 0xFF)
+#define GREEN(rgb) (((long_u)(rgb) >>  8) & 0xFF)
+#define BLUE(rgb)  (((long_u)(rgb)      ) & 0xFF)
 
     static void
-term_rgb_color(char_u *s, long_u rgb)
+term_rgb_color(char_u *s, guicolor_T rgb)
 {
 #define MAX_COLOR_STR_LEN 100
     char	buf[MAX_COLOR_STR_LEN];
@@ -2660,6 +2646,18 @@
 				  (char *)s, RED(rgb), GREEN(rgb), BLUE(rgb));
     OUT_STR(buf);
 }
+
+    void
+term_fg_rgb_color(guicolor_T rgb)
+{
+    term_rgb_color(T_8F, rgb);
+}
+
+    void
+term_bg_rgb_color(guicolor_T rgb)
+{
+    term_rgb_color(T_8B, rgb);
+}
 #endif
 
 #if (defined(FEAT_TITLE) && (defined(UNIX) || defined(VMS) \
diff --git a/src/version.c b/src/version.c
index 70bed2c..644cd6b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -764,6 +764,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2243,
+/**/
     2242,
 /**/
     2241,
