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 e0c805a4bcfa0978dafbf6d5ff6f2264baff0a09..77d009194e1592a7e655596b4d37dd14c5ec19f2 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -5206,6 +5206,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;