diff --git a/src/evalfunc.c b/src/evalfunc.c
index f5d1da7..f5a0bd8 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -6414,7 +6414,7 @@
 # ifdef FEAT_MOUSE_PTERM
 	"mouse_pterm",
 # endif
-# ifdef FEAT_MOUSE_SGR
+# ifdef FEAT_MOUSE_XTERM
 	"mouse_sgr",
 # endif
 # ifdef FEAT_SYSMOUSE
diff --git a/src/feature.h b/src/feature.h
index 284c8e0..e16fc62 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -1026,9 +1026,6 @@
 # ifdef FEAT_BIG
 #  define FEAT_MOUSE_URXVT
 # endif
-# ifdef FEAT_BIG
-#  define FEAT_MOUSE_SGR
-# endif
 # if defined(FEAT_NORMAL) && defined(MSWIN)
 #  define DOS_MOUSE
 # endif
@@ -1057,11 +1054,6 @@
 # define FEAT_MOUSE_XTERM
 #endif
 
-/* sgr is a small variation of mouse_xterm, and shares its code */
-#if defined(FEAT_MOUSE_SGR) && !defined(FEAT_MOUSE_XTERM)
-# define FEAT_MOUSE_XTERM
-#endif
-
 /* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
 #if !defined(FEAT_MOUSE_TTY) \
 	&& (defined(FEAT_MOUSE_XTERM) \
@@ -1072,8 +1064,7 @@
 	    || defined(FEAT_MOUSE_JSB) \
 	    || defined(FEAT_MOUSE_PTERM) \
 	    || defined(FEAT_SYSMOUSE) \
-	    || defined(FEAT_MOUSE_URXVT) \
-	    || defined(FEAT_MOUSE_SGR))
+	    || defined(FEAT_MOUSE_URXVT))
 # define FEAT_MOUSE_TTY		/* include non-GUI mouse support */
 #endif
 #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
diff --git a/src/misc2.c b/src/misc2.c
index e513c1b..30ac958 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -2453,10 +2453,8 @@
 #ifdef FEAT_MOUSE_URXVT
     {K_URXVT_MOUSE,	(char_u *)"UrxvtMouse"},
 #endif
-#ifdef FEAT_MOUSE_SGR
     {K_SGR_MOUSE,	(char_u *)"SgrMouse"},
     {K_SGR_MOUSERELEASE, (char_u *)"SgrMouseRelelase"},
-#endif
     {K_LEFTMOUSE,	(char_u *)"LeftMouse"},
     {K_LEFTMOUSE_NM,	(char_u *)"LeftMouseNM"},
     {K_LEFTDRAG,	(char_u *)"LeftDrag"},
diff --git a/src/os_unix.c b/src/os_unix.c
index 0d9f69e..b398297 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -3596,7 +3596,6 @@
     }
 # endif
 
-# ifdef FEAT_MOUSE_SGR
     if (ttym_flags == TTYM_SGR)
     {
 	/* SGR mode supports columns above 223 */
@@ -3606,7 +3605,6 @@
 		   : IF_EB("\033[?1006l", ESC_STR "[?1006l")));
 	mouse_ison = on;
     }
-# endif
 
 # ifdef FEAT_BEVAL_TERM
     if (bevalterm_ison != (p_bevalterm && on))
@@ -3864,11 +3862,10 @@
     else
 	del_mouse_termcode(KS_URXVT_MOUSE);
 # endif
-# ifdef FEAT_MOUSE_SGR
     if (use_xterm_mouse() == 4
-#  ifdef FEAT_GUI
+# ifdef FEAT_GUI
 	    && !gui.in_use
-#  endif
+# endif
 	    )
     {
 	set_mouse_termcode(KS_SGR_MOUSE, (char_u *)(term_is_8bit(T_NAME)
@@ -3890,7 +3887,6 @@
 	del_mouse_termcode(KS_SGR_MOUSE);
 	del_mouse_termcode(KS_SGR_MOUSE_RELEASE);
     }
-# endif
 }
 #endif
 
diff --git a/src/term.c b/src/term.c
index 8ee9264..c058171 100644
--- a/src/term.c
+++ b/src/term.c
@@ -2126,13 +2126,11 @@
 	has_mouse_termcode |= HMT_URXVT;
     else
 #   endif
-#   ifdef FEAT_MOUSE_SGR
     if (n == KS_SGR_MOUSE)
 	has_mouse_termcode |= HMT_SGR;
     else if (n == KS_SGR_MOUSE_RELEASE)
 	has_mouse_termcode |= HMT_SGR_REL;
     else
-#   endif
 	has_mouse_termcode |= HMT_NORMAL;
 #  endif
 }
@@ -2175,13 +2173,11 @@
 	has_mouse_termcode &= ~HMT_URXVT;
     else
 #   endif
-#   ifdef FEAT_MOUSE_SGR
     if (n == KS_SGR_MOUSE)
 	has_mouse_termcode &= ~HMT_SGR;
     else if (n == KS_SGR_MOUSE_RELEASE)
 	has_mouse_termcode &= ~HMT_SGR_REL;
     else
-#   endif
 	has_mouse_termcode &= ~HMT_NORMAL;
 #  endif
 }
@@ -4690,7 +4686,6 @@
 		    if (tp[1 + (tp[0] != CSI)] == '>' && semicols == 2)
 		    {
 			int need_flush = FALSE;
-# ifdef FEAT_MOUSE_SGR
 			int is_iterm2 = FALSE;
 			int is_mintty = FALSE;
 
@@ -4698,7 +4693,6 @@
 			// (77 is ASCII 'M' for mintty.)
 			if (STRNCMP(tp + extra - 3, "77;", 3) == 0)
 			    is_mintty = TRUE;
-# endif
 
 			/* if xterm version >= 141 try to get termcap codes */
 			if (version >= 141)
@@ -4718,12 +4712,10 @@
 			     * 256, libvterm supports even more. */
 			    if (mch_getenv((char_u *)"COLORS") == NULL)
 				may_adjust_color_count(256);
-# ifdef FEAT_MOUSE_SGR
 			    /* Libvterm can handle SGR mouse reporting. */
 			    if (!option_was_set((char_u *)"ttym"))
 				set_option_value((char_u *)"ttym", 0L,
 							   (char_u *)"sgr", 0);
-# endif
 			}
 
 			if (version == 95)
@@ -4734,14 +4726,11 @@
 				is_not_xterm = TRUE;
 				is_mac_terminal = TRUE;
 			    }
-# ifdef FEAT_MOUSE_SGR
 			    // iTerm2 sends 0;95;0
 			    if (STRNCMP(tp + extra - 2, "0;95;0c", 7) == 0)
 				is_iterm2 = TRUE;
-			    else
-# endif
 			    // old iTerm2 sends 0;95;
-			    if (STRNCMP(tp + extra - 2, "0;95;c", 6) == 0)
+			    else if (STRNCMP(tp + extra - 2, "0;95;c", 6) == 0)
 				is_not_xterm = TRUE;
 			}
 
@@ -4749,17 +4738,14 @@
 			 * by the user already. */
 			if (!option_was_set((char_u *)"ttym"))
 			{
-# ifdef FEAT_MOUSE_SGR
 			    /* Xterm version 277 supports SGR.  Also support
 			     * Terminal.app, iTerm2 and mintty. */
 			    if (version >= 277 || is_iterm2 || is_mac_terminal
 				    || is_mintty)
 				set_option_value((char_u *)"ttym", 0L,
 							  (char_u *)"sgr", 0);
-			    else
-# endif
 			    /* if xterm version >= 95 use mouse dragging */
-			    if (version >= 95)
+			    else if (version >= 95)
 				set_option_value((char_u *)"ttym", 0L,
 						       (char_u *)"xterm2", 0);
 			}
@@ -5127,11 +5113,8 @@
 # ifdef FEAT_MOUSE_URXVT
 		|| key_name[0] == KS_URXVT_MOUSE
 # endif
-# ifdef FEAT_MOUSE_SGR
 		|| key_name[0] == KS_SGR_MOUSE
-		|| key_name[0] == KS_SGR_MOUSE_RELEASE
-# endif
-		)
+		|| key_name[0] == KS_SGR_MOUSE_RELEASE)
 	{
 	    is_click = is_drag = FALSE;
 
@@ -5163,7 +5146,7 @@
 		 */
 		for (;;)
 		{
-#ifdef FEAT_GUI
+#  ifdef FEAT_GUI
 		    if (gui.in_use)
 		    {
 			/* GUI uses more bits for columns > 223 */
@@ -5177,7 +5160,7 @@
 							 + bytes[4] - ' ' - 1;
 		    }
 		    else
-#endif
+#  endif
 		    {
 			num_bytes = get_bytes_from_buf(tp + slen, bytes, 3);
 			if (num_bytes == -1)	/* not enough coordinates */
@@ -5191,21 +5174,21 @@
 		    /* If the following bytes is also a mouse code and it has
 		     * the same code, dump this one and get the next.  This
 		     * makes dragging a whole lot faster. */
-#ifdef FEAT_GUI
+#  ifdef FEAT_GUI
 		    if (gui.in_use)
 			j = 3;
 		    else
-#endif
+#  endif
 			j = termcodes[idx].len;
 		    if (STRNCMP(tp, tp + slen, (size_t)j) == 0
 			    && tp[slen + j] == mouse_code
 			    && tp[slen + j + 1] != NUL
 			    && tp[slen + j + 2] != NUL
-#ifdef FEAT_GUI
+#  ifdef FEAT_GUI
 			    && (!gui.in_use
 				|| (tp[slen + j + 3] != NUL
 					&& tp[slen + j + 4] != NUL))
-#endif
+#  endif
 			    )
 			slen += j;
 		    else
@@ -5213,7 +5196,6 @@
 		}
 	    }
 
-# if defined(FEAT_MOUSE_URXVT) || defined(FEAT_MOUSE_SGR)
 	    if (key_name[0] == KS_URXVT_MOUSE
 		|| key_name[0] == KS_SGR_MOUSE
 		|| key_name[0] == KS_SGR_MOUSE_RELEASE)
@@ -5267,17 +5249,13 @@
 		 * modifier keys (alt/shift/ctrl/meta) state. */
 		modifiers = 0;
 	    }
-# endif
 
 	if (key_name[0] == (int)KS_MOUSE
-#ifdef FEAT_MOUSE_URXVT
+#  ifdef FEAT_MOUSE_URXVT
 	    || key_name[0] == (int)KS_URXVT_MOUSE
-#endif
-#ifdef FEAT_MOUSE_SGR
+#  endif
 	    || key_name[0] == KS_SGR_MOUSE
-	    || key_name[0] == KS_SGR_MOUSE_RELEASE
-#endif
-	    )
+	    || key_name[0] == KS_SGR_MOUSE_RELEASE)
 	{
 #  if !defined(MSWIN)
 		/*
diff --git a/src/version.c b/src/version.c
index 277c842..9114570 100644
--- a/src/version.c
+++ b/src/version.c
@@ -426,7 +426,7 @@
 #endif
 
 #if defined(UNIX) || defined(VMS)
-# ifdef FEAT_MOUSE_SGR
+# ifdef FEAT_MOUSE_XTERM
 	"+mouse_sgr",
 # else
 	"-mouse_sgr",
@@ -780,6 +780,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1034,
+/**/
     1033,
 /**/
     1032,
