diff --git a/src/p_enemy.c b/src/p_enemy.c
index 9bc487baa9387f6ebbeff727d55caed9932af892..b688cbf039e7874390be8043ada646574faaf8c1 100644
--- a/src/p_enemy.c
+++ b/src/p_enemy.c
@@ -3477,29 +3477,32 @@ void A_ParticleSpawn(mobj_t *actor)
 	if (!actor->health)
 		return;
 
-	if ((actor->lastlook) && (actor->threshold))
+	if (!actor->lastlook)
+		return;
+
+	if (!actor->threshold)
+		return;
+
+	for (i = 0; i < actor->lastlook; i++)
 	{
-		for (i = 0; i < actor->lastlook; i++)
-		{
-			spawn = P_SpawnMobj(
-				actor->x + FixedMul(FixedMul(actor->friction, actor->scale), FINECOSINE(actor->angle>>ANGLETOFINESHIFT)),
-				actor->y + FixedMul(FixedMul(actor->friction, actor->scale), FINESINE(actor->angle>>ANGLETOFINESHIFT)),
-				actor->z,
-				(mobjtype_t)actor->threshold);
-			P_SetScale(spawn, actor->scale);
-			spawn->momz = FixedMul(actor->movefactor, spawn->scale);
-			spawn->destscale = spawn->scale/100;
-			spawn->scalespeed = spawn->scale/actor->health;
-			spawn->tics = (tic_t)actor->health;
-			spawn->flags2 |= (actor->flags2 & MF2_OBJECTFLIP);
-			spawn->angle += P_RandomKey(36)*ANG10; // irrelevant for default objects but might make sense for some custom ones
-			if (spawn->frame & FF_ANIMATE)
-				spawn->frame += P_RandomKey(spawn->state->var1);
-
-			actor->angle += actor->movedir;
-		}
-		actor->angle += (angle_t)actor->movecount;
+		spawn = P_SpawnMobj(
+			actor->x + FixedMul(FixedMul(actor->friction, actor->scale), FINECOSINE(actor->angle>>ANGLETOFINESHIFT)),
+			actor->y + FixedMul(FixedMul(actor->friction, actor->scale), FINESINE(actor->angle>>ANGLETOFINESHIFT)),
+			actor->z,
+			(mobjtype_t)actor->threshold);
+		P_SetScale(spawn, actor->scale);
+		spawn->momz = FixedMul(actor->movefactor, spawn->scale);
+		spawn->destscale = spawn->scale/100;
+		spawn->scalespeed = spawn->scale/actor->health;
+		spawn->tics = (tic_t)actor->health;
+		spawn->flags2 |= (actor->flags2 & MF2_OBJECTFLIP);
+		spawn->angle += P_RandomKey(36)*ANG10; // irrelevant for default objects but might make sense for some custom ones
+		if (spawn->frame & FF_ANIMATE)
+			spawn->frame += P_RandomKey(spawn->state->var1);
+
+		actor->angle += actor->movedir;
 	}
+	actor->angle += (angle_t)actor->movecount;
 }
 
 // Function: A_BunnyHop
diff --git a/src/p_floor.c b/src/p_floor.c
index 921d11b6cbc5447e9a6017cdf8eddb3beecada78..c3e506fcd559e24f36efd21a97217c67e45967b1 100644
--- a/src/p_floor.c
+++ b/src/p_floor.c
@@ -1135,10 +1135,7 @@ void T_MarioBlock(levelspecthink_t *block)
 	);
 
 	if (block->sector->ceilingheight >= block->ceilingwasheight + 32*FRACUNIT) // Go back down now..
-	{
 		block->direction = -block->direction;
-		block->sector->floorspeed = 0;
-	}
 	else if (block->sector->ceilingheight <= block->ceilingwasheight)
 	{
 		block->sector->ceilingheight = block->ceilingwasheight;
@@ -1146,6 +1143,9 @@ void T_MarioBlock(levelspecthink_t *block)
 		P_RemoveThinker(&block->thinker);
 		block->sector->floordata = NULL;
 		block->sector->ceilingdata = NULL;
+		block->sector->floorspeed = 0;
+		block->sector->ceilspeed = 0;
+		block->direction = 0;
 	}
 
 	for (i = -1; (i = P_FindSectorFromTag((INT16)block->vars[0], i)) >= 0 ;)
@@ -1802,7 +1802,7 @@ static mobj_t *SearchMarioNode(msecnode_t *node)
 void T_MarioBlockChecker(levelspecthink_t *block)
 {
 	line_t *masterline = block->sourceline;
-	if (block->sector->floorspeed) // Don't update the textures when the block's being bumped upwards.
+	if (block->vars[2] == 1) // Don't update the textures when the block's being bumped upwards.
 		return;
 	if (SearchMarioNode(block->sector->touching_thinglist))
 	{
@@ -3181,7 +3181,6 @@ INT32 EV_MarioBlock(ffloor_t *rover, sector_t *sector, mobj_t *puncher)
 		block->thinker.function.acp1 = (actionf_p1)T_MarioBlock;
 
 		// Set up the fields
-		roversec->floorspeed = 1; // Flag to prevent side changing.
 		block->sector = roversec;
 		block->vars[0] = sector->tag; // actionsector
 		block->vars[1] = 4*FRACUNIT; // speed
diff --git a/src/p_spec.c b/src/p_spec.c
index 760bf2363f348b4fc641e085ea69a058974dbe27..a8561997bdccdc8f4637f5379c12c7958f06a46b 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -4989,7 +4989,7 @@ static ffloor_t *P_AddFakeFloor(sector_t *sec, sector_t *sec2, line_t *master, f
 
 	if ((flags & FF_MARIO))
 	{
-		if (!(master->flags & ML_NOCLIMB)) // Don't change the textures of a brick block, just a question block
+		if (!(flags & FF_SHATTERBOTTOM)) // Don't change the textures of a brick block, just a question block
 			P_AddBlockThinker(sec2, master);
 		CheckForMarioBlocks = true;
 	}
@@ -5348,12 +5348,12 @@ void T_LaserFlash(laserthink_t *flash)
 	if (!ffloor || !(ffloor->flags & FF_EXISTS))
 		return;
 
-	if (leveltime & 1)
+	if (leveltime & 2)
 		//ffloor->flags |= FF_RENDERALL;
-		ffloor->alpha = 0xC0;
+		ffloor->alpha = 0xB0;
 	else
 		//ffloor->flags &= ~FF_RENDERALL;
-		ffloor->alpha = 0x60;
+		ffloor->alpha = 0x90;
 
 	sourcesec = ffloor->master->frontsector; // Less to type!