diff --git a/extras/conf/udb/Includes/SRB222_linedefs.cfg b/extras/conf/udb/Includes/SRB222_linedefs.cfg
index b82ab30c91c4ec1ca5d3f448d66d53789e99620d..b36ca21f9890db4d066d5c0553fc581abdb21ebb 100644
--- a/extras/conf/udb/Includes/SRB222_linedefs.cfg
+++ b/extras/conf/udb/Includes/SRB222_linedefs.cfg
@@ -4584,6 +4584,31 @@ udmf
 				enum = "setadd";
 			}
 		}
+
+		468
+		{
+			title = "Change Linedef Argument";
+			prefix = "(468)";
+			arg0
+			{
+				title = "Linedef tag";
+				type = 15;
+			}
+			arg1
+			{
+				title = "Argument";
+			}
+			arg2
+			{
+				title = "Value";
+			}
+			arg3
+			{
+				title = "Set/Add?";
+				type = 11;
+				enum = "setadd";
+			}
+		}
 	}
 
 	linedefexecpoly
diff --git a/src/p_spec.c b/src/p_spec.c
index ca08ad8756966efd78175d6162eba4d3fd3f40ea..5b2532f936bc44c35061a1b65516672cb064b179 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -3778,6 +3778,29 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
 			}
 			break;
 
+		case 468: // Change linedef executor argument
+		{
+			INT32 linenum;
+
+			if (!udmf)
+				break;
+
+			if (line->args[1] < 0 || line->args[1] >= NUMLINEARGS)
+			{
+				CONS_Debug(DBG_GAMELOGIC, "Linedef type 468: Invalid linedef arg %d\n", line->args[1]);
+				break;
+			}
+
+			TAG_ITER_LINES(line->args[0], linenum)
+			{
+				if (line->args[3])
+					lines[linenum].args[line->args[1]] += line->args[2];
+				else
+					lines[linenum].args[line->args[1]] = line->args[2];
+			}
+		}
+		break;
+
 		case 480: // Polyobj_DoorSlide
 		case 481: // Polyobj_DoorSwing
 			PolyDoor(line);