diff --git a/extras/conf/udb/Includes/SRB222_linedefs.cfg b/extras/conf/udb/Includes/SRB222_linedefs.cfg
index da54414da166ba09be21f84ca103d31e73ec0781..6a9d9943132d455ffdc20d87c77cb98e8d9ad6a5 100644
--- a/extras/conf/udb/Includes/SRB222_linedefs.cfg
+++ b/extras/conf/udb/Includes/SRB222_linedefs.cfg
@@ -3607,7 +3607,7 @@ udmf
 				type = 12;
 				enum
 				{
-					1 = "Add to current translucency";
+					1 = "Add to current light level";
 					2 = "Interrupt ongoing fades";
 					4 = "Speed is duration";
 				}
@@ -5166,7 +5166,7 @@ udmf
 
 		602
 		{
-			title = "Start Adjustable Pulsating Light";
+			title = "Adjustable Pulsating Light";
 			prefix = "(602)";
 			arg0
 			{
@@ -5224,7 +5224,7 @@ udmf
 
 		604
 		{
-			title = "Start Adjustable Blinking Light";
+			title = "Adjustable Blinking Light";
 			prefix = "(604)";
 			arg0
 			{
diff --git a/extras/conf/udb/Includes/SRB222_things.cfg b/extras/conf/udb/Includes/SRB222_things.cfg
index 0cb0287c51205cf9e751ae8e61858048d3897bb3..c5a881c5cecb4c42559df830e3ec53d375f26489 100644
--- a/extras/conf/udb/Includes/SRB222_things.cfg
+++ b/extras/conf/udb/Includes/SRB222_things.cfg
@@ -258,11 +258,6 @@ doom
 			sprite = "TRETA1";
 			width = 16;
 			height = 32;
-			arg0
-			{
-				title = "Death trigger tag";
-				type = 15;
-			}
 		}
 		111
 		{
@@ -2709,11 +2704,6 @@ doom
 			sprite = "KOOPA0";
 			width = 16;
 			height = 48;
-			arg0
-			{
-				title = "Death trigger tag";
-				type = 15;
-			}
 		}
 		1807
 		{
@@ -2721,11 +2711,6 @@ doom
 			sprite = "MAXEA0";
 			width = 8;
 			height = 16;
-			arg0
-			{
-				title = "Death trigger tag";
-				type = 15;
-			}
 		}
 		1808
 		{
@@ -3640,6 +3625,11 @@ udmf
 			sprite = "TRETA1";
 			width = 16;
 			height = 32;
+			arg0
+			{
+				title = "Death trigger tag";
+				type = 15;
+			}
 		}
 		111
 		{
@@ -4041,7 +4031,7 @@ udmf
 			{
 				title = "Speed up when hit?";
 				type = 11;
-				enum = "noyes";
+				enum = "yesno";
 			}
 		}
 		202
@@ -5039,7 +5029,7 @@ udmf
 			{
 				title = "Play sound?";
 				type = 11;
-				enum = "noyes";
+				enum = "yesno";
 			}
 		}
 		542
@@ -6009,7 +5999,17 @@ udmf
 			{
 				title = "Flags";
 				type = 12;
-				enum = "maceflags";
+				enum
+				{
+					1 = "Red spring";
+					2 = "No sounds";
+					4 = "Player-turnable chain";
+					8 = "Swing instead of spin";
+					16 = "Make chain from end item";
+					32 = "Spawn link at origin";
+					64 = "Clip inside ground";
+					128 = "No distance check";
+				}
 			}
 		}
 		1107
@@ -7471,6 +7471,11 @@ udmf
 			sprite = "KOOPA0";
 			width = 16;
 			height = 48;
+			arg0
+			{
+				title = "Death trigger tag";
+				type = 15;
+			}
 		}
 		1807
 		{
@@ -7478,6 +7483,11 @@ udmf
 			sprite = "MAXEA0";
 			width = 8;
 			height = 16;
+			arg0
+			{
+				title = "Death trigger tag";
+				type = 15;
+			}
 		}
 		1808
 		{
diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c
index 4b97e8779e2b3bb01ed735a855c4a71f34231b92..ddc23414ad73bbb27f6e4ac6ec885034c3513056 100644
--- a/src/hardware/hw_main.c
+++ b/src/hardware/hw_main.c
@@ -1434,34 +1434,10 @@ static void HWR_ProcessSeg(void) // Sort of like GLWall::Process in GZDoom
 
 			// set alpha for transparent walls
 			// ooops ! this do not work at all because render order we should render it in backtofront order
-			switch (gl_linedef->special)
-			{
-				//  Translucent
-				case 102:
-				case 121:
-				case 123:
-				case 124:
-				case 125:
-				case 141:
-				case 142:
-				case 144:
-				case 145:
-				case 174:
-				case 175:
-				case 192:
-				case 195:
-				case 221:
-				case 253:
-				case 256:
-					blendmode = PF_Translucent;
-					break;
-				default:
-					if (gl_linedef->alpha >= 0 && gl_linedef->alpha < FRACUNIT)
-						blendmode = HWR_TranstableToAlpha(R_GetLinedefTransTable(gl_linedef->alpha), &Surf);
-					else
-						blendmode = PF_Masked;
-					break;
-			}
+			if (gl_linedef->alpha >= 0 && gl_linedef->alpha < FRACUNIT)
+				blendmode = HWR_TranstableToAlpha(R_GetLinedefTransTable(gl_linedef->alpha), &Surf);
+			else
+				blendmode = PF_Masked;
 
 			if (gl_curline->polyseg && gl_curline->polyseg->translucency > 0)
 			{
diff --git a/src/p_ceilng.c b/src/p_ceilng.c
index ed385be33acb5ba72e7dc699c87255c0af2a72cf..aa31e4301442daf78d8a1128ff6cf57ef3e7c159 100644
--- a/src/p_ceilng.c
+++ b/src/p_ceilng.c
@@ -86,14 +86,17 @@ void T_MoveCeiling(ceiling_t *ceiling)
 				if (dest == lines[ceiling->sourceline].frontsector->ceilingheight)
 				{
 					dest = lines[ceiling->sourceline].backsector->ceilingheight;
-					ceiling->speed = ceiling->origspeed = lines[ceiling->sourceline].args[3] << (FRACBITS - 2); // return trip, use args[3]
+					ceiling->origspeed = lines[ceiling->sourceline].args[3] << (FRACBITS - 2); // return trip, use args[3]
 				}
 				else
 				{
 					dest = lines[ceiling->sourceline].frontsector->ceilingheight;
-					ceiling->speed = ceiling->origspeed = lines[ceiling->sourceline].args[2] << (FRACBITS - 2); // going frontways, use args[2]
+					ceiling->origspeed = lines[ceiling->sourceline].args[2] << (FRACBITS - 2); // going frontways, use args[2]
 				}
 
+				if (ceiling->type == bounceCeilingCrush)
+					ceiling->speed = ceiling->origspeed;
+
 				if (dest < ceiling->sector->ceilingheight) // must move down
 				{
 					ceiling->direction = -1;
diff --git a/src/p_floor.c b/src/p_floor.c
index 85a1f54a8ca494995f120667295717c9f69c7240..87d6c7e3149c9ce02825e115e41256efd235e0df 100644
--- a/src/p_floor.c
+++ b/src/p_floor.c
@@ -207,13 +207,15 @@ void T_MoveFloor(floormove_t *movefloor)
 				if (movefloor->floordestheight == lines[movefloor->sourceline].frontsector->floorheight)
 				{
 					movefloor->floordestheight = lines[movefloor->sourceline].backsector->floorheight;
-					movefloor->speed = movefloor->origspeed = lines[movefloor->sourceline].args[3] << (FRACBITS - 2); // return trip, use args[3]
+					movefloor->origspeed = lines[movefloor->sourceline].args[3] << (FRACBITS - 2); // return trip, use args[3]
 				}
 				else
 				{
 					movefloor->floordestheight = lines[movefloor->sourceline].frontsector->floorheight;
-					movefloor->speed = movefloor->origspeed = lines[movefloor->sourceline].args[2] << (FRACBITS - 2); // forward again, use args[2]
+					movefloor->origspeed = lines[movefloor->sourceline].args[2] << (FRACBITS - 2); // forward again, use args[2]
 				}
+				if (movefloor->type == bounceFloorCrush)
+					movefloor->speed = movefloor->origspeed;
 				movefloor->direction = (movefloor->floordestheight < movefloor->sector->floorheight) ? -1 : 1;
 				movefloor->delaytimer = movefloor->delay;
 				remove = false;
diff --git a/src/p_mobj.c b/src/p_mobj.c
index 46510200e3e903aba37f8dbee43222cf8fdf025b..f70c1121801a713970b8385da8e71c4dccf3532e 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -12731,7 +12731,7 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj, boolean
 		}
 		break;
 	case MT_EGGMOBILE2:
-		if (mthing->args[5])
+		if (!mthing->args[5])
 			mobj->flags2 |= MF2_AMBUSH;
 		break;
 	case MT_EGGMOBILE3:
diff --git a/src/p_setup.c b/src/p_setup.c
index 2e3fb1967229e3cb1d35caaa4745951986b7f22f..cd0e8abf24bef8cabe731377bbb467b5218131ed 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -3791,10 +3791,10 @@ static void P_ConvertBinaryMap(void)
 
 			//Flags
 			if (lines[i].flags & ML_EFFECT1)
-				lines[i].args[2] = TMFL_NOBOSSES;
+				lines[i].args[2] |= TMFL_NOBOSSES;
 			//Replicate old hack: Translucent FOFs set to full opacity cut cyan pixels
 			if (lines[i].flags & ML_EFFECT6 || lines[i].args[1] == 256)
-				lines[i].args[2] = TMFL_SPLAT;
+				lines[i].args[2] |= TMFL_SPLAT;
 
 			break;
 		case 259: //Custom FOF
@@ -4746,13 +4746,13 @@ static void P_ConvertBinaryMap(void)
 					lines[i].special = 0;
 					break;
 				}
-				lines[i].args[1] = sides[lines[i].sidenum[1]].rowoffset >> FRACBITS;
-				lines[i].args[2] = sides[lines[i].sidenum[1]].textureoffset >> FRACBITS;
+				lines[i].args[1] = sides[lines[i].sidenum[1]].textureoffset >> FRACBITS;
+				lines[i].args[2] = sides[lines[i].sidenum[1]].rowoffset >> FRACBITS;
 			}
 			else
 			{
-				lines[i].args[1] = sides[lines[i].sidenum[0]].rowoffset >> FRACBITS;
-				lines[i].args[2] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
+				lines[i].args[1] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
+				lines[i].args[2] = sides[lines[i].sidenum[0]].rowoffset >> FRACBITS;
 			}
 			lines[i].special = 500;
 			break;
@@ -5069,8 +5069,8 @@ static void P_ConvertBinaryMap(void)
 		case 136: //Pyre Fly
 			mapthings[i].args[0] = !!(mapthings[i].options & MTF_AMBUSH);
 			break;
-		case 202: //Egg Slimer
-			mapthings[i].args[5] = !!(mapthings[i].options & MTF_AMBUSH);
+		case 201: //Egg Slimer
+			mapthings[i].args[5] = !(mapthings[i].options & MTF_AMBUSH);
 			break;
 		case 203: //Egg Colosseum
 			mapthings[i].args[5] = LE_BOSS4DROP + mapthings[i].extrainfo * LE_PARAMWIDTH;
@@ -5201,13 +5201,13 @@ static void P_ConvertBinaryMap(void)
 			mapthings[i].args[0] = !(mapthings[i].options & MTF_AMBUSH);
 			break;
 		case 700: //Water ambience A
-		case 701: //Water ambience A
-		case 702: //Water ambience A
-		case 703: //Water ambience A
-		case 704: //Water ambience A
-		case 705: //Water ambience A
-		case 706: //Water ambience A
-		case 707: //Water ambience A
+		case 701: //Water ambience B
+		case 702: //Water ambience C
+		case 703: //Water ambience D
+		case 704: //Water ambience E
+		case 705: //Water ambience F
+		case 706: //Water ambience G
+		case 707: //Water ambience H
 			mapthings[i].args[0] = 35;
 			P_WriteConstant(sfx_amwtr1 + mapthings[i].type - 700, &mapthings[i].stringargs[0]);
 			mapthings[i].type = 700;
diff --git a/src/p_spec.c b/src/p_spec.c
index 79d71f12278c501223d81a9e75113426a176fae4..3a77960772ad5acae9ca8fe89bf3b8c8aa2bfb6f 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -1647,7 +1647,7 @@ static boolean P_ActivateLinedefExecutorsInSector(line_t *triggerline, mobj_t *a
 	size_t linecnt = ctlsector->linecount;
 	size_t i;
 
-	if (triggerline->flags & ML_EFFECT5) // disregard order for efficiency
+	if (!udmf && triggerline->flags & ML_EFFECT5) // disregard order for efficiency
 	{
 		for (i = 0; i < linecnt; i++)
 			P_ActivateLinedefExecutor(ctlsector->lines[i], actor, caller);