diff --git a/extras/conf/udb/Includes/SRB222_things.cfg b/extras/conf/udb/Includes/SRB222_things.cfg
index 9d557060eed0570c815097da4c54f47300eb3681..0cb0287c51205cf9e751ae8e61858048d3897bb3 100644
--- a/extras/conf/udb/Includes/SRB222_things.cfg
+++ b/extras/conf/udb/Includes/SRB222_things.cfg
@@ -5465,6 +5465,11 @@ udmf
 			{
 				title = "Rising distance";
 			}
+			arg6
+			{
+				title = "Heights control linedef";
+				type = 15;
+			}
 		}
 		758
 		{
diff --git a/src/p_mobj.c b/src/p_mobj.c
index 7b6f14fa4efe83b652e3e22408f4648aeff576e8..46510200e3e903aba37f8dbee43222cf8fdf025b 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -12430,8 +12430,8 @@ static boolean P_SetupParticleGen(mapthing_t *mthing, mobj_t *mobj)
 	INT32 line;
 	const size_t mthingi = (size_t)(mthing - mapthings);
 
-	// Find the corresponding linedef special, using angle as tag
-	line = Tag_FindLineSpecial(15, mthing->angle);
+	// Find the corresponding linedef special, using args[6] as tag
+	line = mthing->args[6] ? Tag_FindLineSpecial(15, mthing->args[6]) : -1;
 
 	type = mthing->stringargs[0] ? get_number(mthing->stringargs[0]) : MT_PARTICLE;
 
diff --git a/src/p_setup.c b/src/p_setup.c
index 2f815a2288fb6d8c9edcbf96c86af5e810f6c848..c6cfdfe1d56222f21c36fe647b578b151344222f 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -5248,6 +5248,7 @@ static void P_ConvertBinaryMap(void)
 			mapthings[i].args[2] = sides[lines[j].sidenum[0]].textureoffset >> FRACBITS;
 			mapthings[i].args[3] = sides[lines[j].sidenum[0]].rowoffset >> FRACBITS;
 			mapthings[i].args[4] = lines[j].backsector ? sides[lines[j].sidenum[1]].textureoffset >> FRACBITS : 0;
+			mapthings[i].args[6] = mapthings[i].angle;
 			if (sides[lines[j].sidenum[0]].toptexture)
 				P_WriteConstant(sides[lines[j].sidenum[0]].toptexture, &mapthings[i].stringargs[0]);
 			break;