diff --git a/docs/rh-log.txt b/docs/rh-log.txt
index d765f1372..b069981e2 100644
--- a/docs/rh-log.txt
+++ b/docs/rh-log.txt
@@ -1,3 +1,23 @@
+October 19, 2007 (Changes by Graf Zahl)
+- Fixed: POwered up weapons with a different ready state than their base
+  weapon didn't change back when the powerup expired.
+- Fixed: The powered up version of Heretic's Gauntlets missed the proper
+  state assignments for Ready, Lower and Raise.
+
+October 17, 2007 (Changes by Graf Zahl)
+- Fixed: The Strife player was missing its pain state.
+
+October 12, 2007 (Changes by Graf Zahl)
+- Fixed: Revenant missiles couldn't home in on targets with a height lower than
+  40.
+- Fixed: The code which checked for hitscan traces hitting actors from above
+  and below must test whether the calculated hit position is actually inside 
+  the actor being checked. If it crosses the top/bottom plane outside the
+  bounding box there can't be a hit.
+- Changed: State labels in code pointer calls must now be enclosed in quotation marks.
+  This was done to ensure compatibility with parsers that will parse these as
+  identifier-aware script code later.
+
 October 8, 2007 (Changes by Graf Zahl)
 - Fixed: The code that checked hitscans entering an actor from above and below
   calculated the hit position wrong.
diff --git a/src/b_think.cpp b/src/b_think.cpp
index 77d2940c0..059876c08 100644
--- a/src/b_think.cpp
+++ b/src/b_think.cpp
@@ -183,7 +183,7 @@ void DCajunMaster::ThinkForMove (AActor *actor, ticcmd_t *cmd)
 		}
 
 		//Strafing.
-		if (b->enemy->flags & MF3_ISMONSTER) //It's just a monster so take it down cool.
+		if (b->enemy->flags3 & MF3_ISMONSTER) //It's just a monster so take it down cool.
 		{
 			cmd->ucmd.sidemove = b->sleft ? -SIDEWALK : SIDEWALK;
 		}
diff --git a/src/g_doom/a_revenant.cpp b/src/g_doom/a_revenant.cpp
index ad4000e4f..0ce16f927 100644
--- a/src/g_doom/a_revenant.cpp
+++ b/src/g_doom/a_revenant.cpp
@@ -104,7 +104,15 @@ void A_Tracer (AActor *self)
 
 	if (dist < 1)
 		dist = 1;
-	slope = (dest->z+40*FRACUNIT - self->z) / dist;
+
+	if (dest->height >= 56*FRACUNIT)
+	{
+		slope = (dest->z+40*FRACUNIT - self->z) / dist;
+	}
+	else
+	{
+		slope = (dest->z + self->height*2/3 - self->z) / dist;
+	}
 
 	if (slope < self->momz)
 		self->momz -= FRACUNIT/8;
diff --git a/src/g_heretic/a_hereticweaps.cpp b/src/g_heretic/a_hereticweaps.cpp
index e1285afa7..3c23368ee 100644
--- a/src/g_heretic/a_hereticweaps.cpp
+++ b/src/g_heretic/a_hereticweaps.cpp
@@ -1535,6 +1535,9 @@ END_DEFAULTS
 
 IMPLEMENT_STATELESS_ACTOR (AGauntletsPowered, Heretic, -1, 0)
 	PROP_Weapon_Flags (WIF_WIMPY_WEAPON|WIF_POWERED_UP|WIF_BOT_MELEE)
+	PROP_Weapon_UpState (S_GAUNTLETUP2)
+	PROP_Weapon_DownState (S_GAUNTLETDOWN2)
+	PROP_Weapon_ReadyState (S_GAUNTLETREADY2)
 	PROP_Weapon_AtkState (S_GAUNTLETATK2)
 	PROP_Weapon_HoldAtkState (S_GAUNTLETATK2+2)
 	PROP_Weapon_SisterType ("Gauntlets")
diff --git a/src/g_shared/a_weapons.cpp b/src/g_shared/a_weapons.cpp
index de59ee222..b3deed82b 100644
--- a/src/g_shared/a_weapons.cpp
+++ b/src/g_shared/a_weapons.cpp
@@ -498,7 +498,8 @@ void AWeapon::EndPowerup ()
 	{
 		if (GetReadyState() != SisterWeapon->GetReadyState())
 		{
-			if (Owner->player->PendingWeapon == NULL)
+			if (Owner->player->PendingWeapon == NULL ||
+				Owner->player->PendingWeapon == WP_NOCHANGE)
 				Owner->player->PendingWeapon = SisterWeapon;
 		}
 		else
diff --git a/src/g_strife/a_spectral.cpp b/src/g_strife/a_spectral.cpp
index 4d024771f..248d6f1cf 100644
--- a/src/g_strife/a_spectral.cpp
+++ b/src/g_strife/a_spectral.cpp
@@ -350,7 +350,14 @@ void A_Tracer2 (AActor *self)
 	{
 		dist = 1;
 	}
-	slope = (dest->z + 40*FRACUNIT - self->z) / dist;
+	if (dest->height >= 56*FRACUNIT)
+	{
+		slope = (dest->z+40*FRACUNIT - self->z) / dist;
+	}
+	else
+	{
+		slope = (dest->z + self->height*2/3 - self->z) / dist;
+	}
 	if (slope < self->momz)
 	{
 		self->momz -= FRACUNIT/8;
diff --git a/src/p_lnspec.cpp b/src/p_lnspec.cpp
index abcf2aaba..f2da090be 100644
--- a/src/p_lnspec.cpp
+++ b/src/p_lnspec.cpp
@@ -1273,7 +1273,7 @@ FUNC(LS_Thing_Hate)
 						hatee == hater ||					// can't hate self
 						!(hatee->flags & MF_SHOOTABLE) ||	// can't hate nonshootable things
 						hatee->health <= 0 ||				// can't hate dead things
-						(hatee->flags & MF2_DORMANT));		// can't target dormant things
+						(hatee->flags2 & MF2_DORMANT));	
 			}
 
 			if (hatee != NULL && hatee != hater && (arg2 == 0 || (hater->goal != NULL && hater->target != hater->goal)))
diff --git a/src/p_map.cpp b/src/p_map.cpp
index faa7c5c37..d82a3014e 100644
--- a/src/p_map.cpp
+++ b/src/p_map.cpp
@@ -4314,7 +4314,7 @@ void PIT_CeilingRaise (AActor *thing)
 		}
 		P_CheckFakeFloorTriggers (thing, oldz);
 	}
-	else if ((thing->flags & MF2_PASSMOBJ) && !isgood && thing->z + thing->height < thing->ceilingz)
+	else if ((thing->flags2 & MF2_PASSMOBJ) && !isgood && thing->z + thing->height < thing->ceilingz)
 	{
 		if (!P_TestMobjZ (thing) && onmobj->z <= thing->z)
 		{
diff --git a/src/p_trace.cpp b/src/p_trace.cpp
index eba70c36a..6cfcf6bbb 100644
--- a/src/p_trace.cpp
+++ b/src/p_trace.cpp
@@ -319,6 +319,10 @@ static bool PTR_TraceIterator (intercept_t *in)
 		hitx = trace.x + FixedMul (Vx, dist);
 		hity = trace.y + FixedMul (Vy, dist);
 		hitz = StartZ + FixedMul (Vz, dist);
+
+		// calculated coordinate is outside the actor's bounding box
+		if (abs(hitx - in->d.thing->x) > in->d.thing->radius ||
+			abs(hity - in->d.thing->y) > in->d.thing->radius) return true;
 	}
 	else if (hitz < in->d.thing->z)
 	{ // trace enters below actor
@@ -332,6 +336,10 @@ static bool PTR_TraceIterator (intercept_t *in)
 		hitx = trace.x + FixedMul (Vx, dist);
 		hity = trace.y + FixedMul (Vy, dist);
 		hitz = StartZ + FixedMul (Vz, dist);
+
+		// calculated coordinate is outside the actor's bounding box
+		if (abs(hitx - in->d.thing->x) > in->d.thing->radius ||
+			abs(hity - in->d.thing->y) > in->d.thing->radius) return true;
 	}
 
 
diff --git a/src/sc_man.cpp b/src/sc_man.cpp
index b309e9be3..4ed641758 100644
--- a/src/sc_man.cpp
+++ b/src/sc_man.cpp
@@ -772,6 +772,7 @@ FString SC_TokenName (int token, const char *string)
 		"'^='",
 		"'|='",
 		"'>>'",
+		"'>>>'",
 		"'<<'",
 		"'++'",
 		"'--'",
diff --git a/src/thingdef/thingdef_states.cpp b/src/thingdef/thingdef_states.cpp
index 92f0a1f95..9ab6b8a94 100644
--- a/src/thingdef/thingdef_states.cpp
+++ b/src/thingdef/thingdef_states.cpp
@@ -788,7 +788,9 @@ do_stop:
 									if (JumpParameters.Size()==0) JumpParameters.Push(NAME_None);
 
 									v = -(int)JumpParameters.Size();
-									FString statestring = ParseStateString();
+									// This forces quotation marks around the state name.
+									SC_MustGetToken(TK_StringConst);
+									FString statestring = sc_String; // ParseStateString();
 									const PClass *stype=NULL;
 									int scope = statestring.IndexOf("::");
 									if (scope >= 0)
diff --git a/wadsrc/decorate/doom/doomplayer.txt b/wadsrc/decorate/doom/doomplayer.txt
index ace1356b2..fcdc1d396 100644
--- a/wadsrc/decorate/doom/doomplayer.txt
+++ b/wadsrc/decorate/doom/doomplayer.txt
@@ -37,14 +37,14 @@ ACTOR DoomPlayer : PlayerPawn
 		PLAY G 4 A_Pain
 		Goto Spawn
 	Death:
-		PLAY H 10 A_PlayerSkinCheck(AltSkinDeath)
+		PLAY H 10 A_PlayerSkinCheck("AltSkinDeath")
 		PLAY I 10 A_PlayerScream
 		PLAY J 10 A_NoBlocking
 		PLAY KLM 10
 		PLAY N -1
 		Stop
 	XDeath:
-		PLAY O 5 A_PlayerSkinCheck(AltSkinXDeath)
+		PLAY O 5 A_PlayerSkinCheck("AltSkinXDeath")
 		PLAY P 5 A_XScream
 		PLAY Q 5 A_NoBlocking
 		PLAY RSTUV 5
diff --git a/wadsrc/decorate/heretic/hereticplayer.txt b/wadsrc/decorate/heretic/hereticplayer.txt
index f3c0ab3ee..fa7dc96e8 100644
--- a/wadsrc/decorate/heretic/hereticplayer.txt
+++ b/wadsrc/decorate/heretic/hereticplayer.txt
@@ -29,7 +29,7 @@ ACTOR HereticPlayer : PlayerPawn
 		PLAY G 4 A_Pain
 		Goto Spawn
 	Death:
-		PLAY H 6 A_PlayerSkinCheck(AltSkinDeath)
+		PLAY H 6 A_PlayerSkinCheck("AltSkinDeath")
 		PLAY I 6 A_PlayerScream
 		PLAY JK 6
 		PLAY L 6 A_NoBlocking
@@ -37,7 +37,7 @@ ACTOR HereticPlayer : PlayerPawn
 		PLAY P -1
 		Stop
 	XDeath:
-		PLAY Q 0 A_PlayerSkinCheck(AltSkinXDeath)
+		PLAY Q 0 A_PlayerSkinCheck("AltSkinXDeath")
 		PLAY Q 5 A_PlayerScream
 		PLAY R 0 A_NoBlocking
 		PLAY R 5 A_SkullPop
@@ -99,7 +99,7 @@ ACTOR BloodySkull : PlayerChunk
 	{
 	Spawn:
 		BSKL A 0
-		BSKL ABCDE 5 A_CheckFloor(Hit)
+		BSKL ABCDE 5 A_CheckFloor("Hit")
 		Goto Spawn+1
 	Hit:
 		BSKL F 16 A_CheckPlayerDone
diff --git a/wadsrc/decorate/strife/strifeplayer.txt b/wadsrc/decorate/strife/strifeplayer.txt
index 6048e8ade..e93c68043 100644
--- a/wadsrc/decorate/strife/strifeplayer.txt
+++ b/wadsrc/decorate/strife/strifeplayer.txt
@@ -31,6 +31,10 @@ ACTOR StrifePlayer : PlayerPawn
 	Melee:
 		PLAY F 6
 		goto Missile
+	Pain:
+		PLAY Q 4
+		PLAY Q 4 A_Pain
+		Goto Spawn
 	Death:
 		PLAY H 3
 		PLAY I 3 A_PlayerScream