diff --git a/extras/conf/udb/Includes/SRB222_linedefs.cfg b/extras/conf/udb/Includes/SRB222_linedefs.cfg
index 6da66ae211d35c519c14daaebf40b2812aec6efd..681955b3551015928ce23735b3352ab2786d3a6b 100644
--- a/extras/conf/udb/Includes/SRB222_linedefs.cfg
+++ b/extras/conf/udb/Includes/SRB222_linedefs.cfg
@@ -3918,6 +3918,16 @@ udmf
 					2 = "Remove";
 				}
 			}
+			arg3
+			{
+				title = "Override gravity?";
+				type = 11;
+				enum
+				{
+					0 = "No";
+					1 = "Yes";
+				}
+			}
 			stringarg0
 			{
 				title = "Gravity value";
diff --git a/src/p_setup.c b/src/p_setup.c
index b58df7c677c9eeba54c3ce9433ecb73a95d8be0c..1a6d9444ed40cd5dcd46c23dd127b6648c6c5e5c 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -1727,6 +1727,8 @@ static void ParseTextmapSectorParameter(UINT32 i, const char *param, const char
 		sectors[i].specialflags |= SSF_ROPEHANG;
 	else if (fastcmp(param, "jumpflip") && fastcmp("true", val))
 		sectors[i].specialflags |= SSF_JUMPFLIP;
+	else if (fastcmp(param, "gravityoverride") && fastcmp("true", val))
+		sectors[i].specialflags |= SSF_GRAVITYOVERRIDE;
 	else if (fastcmp(param, "friction"))
 		sectors[i].friction = FLOAT_TO_FIXED(atof(val));
 	else if (fastcmp(param, "gravity"))
@@ -2582,6 +2584,8 @@ static void P_WriteTextmap(void)
 			fprintf(f, "ropehang = true;\n");
 		if (wsectors[i].specialflags & SSF_JUMPFLIP)
 			fprintf(f, "jumpflip = true;\n");
+		if (wsectors[i].specialflags & SSF_GRAVITYOVERRIDE)
+			fprintf(f, "gravityoverride = true;\n");
 		if (wsectors[i].friction != ORIG_FRICTION)
 			fprintf(f, "friction = %f;\n", FIXED_TO_FLOAT(wsectors[i].friction));
 		if (wsectors[i].gravity != FRACUNIT)
diff --git a/src/p_spec.c b/src/p_spec.c
index 4ebf5ccd3e67897a90b53a3046fcdafc6325516f..2b9d672f32d6c78beed1f8f632472b812d015fa2 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -3826,6 +3826,9 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
 					sectors[secnum].flags |= MSF_GRAVITYFLIP;
 				else if (line->args[2] == TMF_REMOVE)
 					sectors[secnum].flags &= ~MSF_GRAVITYFLIP;
+
+				if (line->args[3])
+					sectors[secnum].specialflags |= SSF_GRAVITYOVERRIDE;
 			}
 		}
 		break;
diff --git a/src/r_defs.h b/src/r_defs.h
index 38c6e25f7eab51364515a88d468c2f7067eb9501..d7c9a6ece900ef5c9253a5a7ba106d562de27111 100644
--- a/src/r_defs.h
+++ b/src/r_defs.h
@@ -315,7 +315,7 @@ typedef enum
 	SSF_FINISHLINE = 1<<17,
 	SSF_ROPEHANG = 1<<18,
 	SSF_JUMPFLIP = 1<<19,
-	SSF_GRAVITYOVERRIDE = 1<<20,
+	SSF_GRAVITYOVERRIDE = 1<<20, // combine with MSF_GRAVITYFLIP
 } sectorspecialflags_t;
 
 typedef enum