diff --git a/src/info.c b/src/info.c
index 6e4d381190e4121b1ade8d629ad478e7649f4868..39dcdf6548515b456e957302a136c682cc0475e3 100644
--- a/src/info.c
+++ b/src/info.c
@@ -12066,7 +12066,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
 		100,            // mass
 		0,              // damage
 		sfx_s3k90,      // activesound
-		MF_SOLID|MF_NOGRAVITY|MF_RUNSPAWNFUNC|MF_PAPERCOLLISION, // flags
+		MF_SOLID|MF_NOGRAVITY|MF_RUNSPAWNFUNC|MF_PAPERCOLLISION|MF_NOCLIPHEIGHT, // flags
 		S_NULL          // raisestate
 	},
 
diff --git a/src/p_map.c b/src/p_map.c
index 906ca8c519fb62a883d9eff6db7460c3c9dcea5e..abd4174d67c1748a65266082e64f55183a295f37 100644
--- a/src/p_map.c
+++ b/src/p_map.c
@@ -844,7 +844,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
 			angle_t ang = R_PointToAngle2(0, 0, dx, dy) - thing->angle;
 			fixed_t s = FINESINE((ang >> ANGLETOFINESHIFT) & FINEMASK);
 			S_StartSound(tmthing, thing->info->activesound);
-			thing->extravalue2 += FixedMul(s, dm);
+			thing->extravalue2 += 2*FixedMul(s, dm)/3;
 			return true;
 		}
 	}
diff --git a/src/p_mobj.c b/src/p_mobj.c
index 7163dbe79f3c9184714dfcb1bfee57f2ad5a6cb6..d9210441ac8a609e6fd9c21583978c57ce535668 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -8536,6 +8536,7 @@ void P_MobjThinker(mobj_t *mobj)
 					fixed_t s0 = -96*FINESINE(fa);
 					angle_t fma;
 					fixed_t c, s;
+					angle_t angdiff;
 
 					// Adjust angular speed
 					fixed_t da = AngleFixed(mobj->angle - oang);
@@ -8546,6 +8547,18 @@ void P_MobjThinker(mobj_t *mobj)
 					// Update angle
 					mobj->angle += FixedAngle(mobj->extravalue2);
 
+					angdiff = mobj->angle - FixedAngle(mobj->extravalue1);
+					if (angdiff > (ANGLE_90 - ANG2) && angdiff < ANGLE_180)
+					{
+						mobj->angle = FixedAngle(mobj->extravalue1) + (ANGLE_90 - ANG2);
+						mobj->extravalue2 /= 2;
+					}
+					else if (angdiff < (ANGLE_270 + ANG2) && angdiff >= ANGLE_180)
+					{
+						mobj->angle = FixedAngle(mobj->extravalue1) + (ANGLE_270 + ANG2);
+						mobj->extravalue2 /= 2;
+					}
+
 					// Update position
 					fma = (mobj->angle >> ANGLETOFINESHIFT) & FINEMASK;
 					c = 48*FINECOSINE(fma);