diff --git a/src/info.c b/src/info.c
index a726bc230e60088e1a4ca99054036e58c564c397..822c27d764518483d22d376a12eccd48dc4950ef 100644
--- a/src/info.c
+++ b/src/info.c
@@ -2266,9 +2266,9 @@ state_t states[NUMSTATES] =
 	{SPR_FL03, 0, 2, {A_FlickyCheck},   S_FLICKY_03_AIM, S_FLICKY_03_FLAP1, S_FLICKY_03_OUT},   // S_FLICKY_03_OUT
 	{SPR_FL03, 1, 1, {A_FlickyAim},            ANGLE_45,       32*FRACUNIT, S_FLICKY_03_HOP},   // S_FLICKY_03_AIM
 	{SPR_FL03, 1, 1, {A_FlickyHop},          7*FRACUNIT,        2*FRACUNIT, S_FLICKY_03_UP},    // S_FLICKY_03_HOP
-	{SPR_FL03, 2, 2, {A_FlickyFlutter}, S_FLICKY_03_AIM, S_FLICKY_03_FLAP1, S_FLICKY_03_UP},    // S_FLICKY_03_UP
-	{SPR_FL03, 3, 2, {A_FlickyFlutter}, S_FLICKY_03_AIM,                 0, S_FLICKY_03_FLAP2}, // S_FLICKY_03_FLAP1
-	{SPR_FL03, 4, 2, {A_FlickyFlutter}, S_FLICKY_03_AIM,                 0, S_FLICKY_03_FLAP1}, // S_FLICKY_03_FLAP2
+	{SPR_FL03, 2, 2, {A_FlickyFlutter}, S_FLICKY_03_HOP, S_FLICKY_03_FLAP1, S_FLICKY_03_UP},    // S_FLICKY_03_UP
+	{SPR_FL03, 3, 2, {A_FlickyFlutter}, S_FLICKY_03_HOP,                 0, S_FLICKY_03_FLAP2}, // S_FLICKY_03_FLAP1
+	{SPR_FL03, 4, 2, {A_FlickyFlutter}, S_FLICKY_03_HOP,                 0, S_FLICKY_03_FLAP1}, // S_FLICKY_03_FLAP2
 
 	// Seal
 	{SPR_FL04, 0, 2, {A_FlickyCheck}, S_FLICKY_04_AIM,                 0, S_FLICKY_04_OUT},   // S_FLICKY_04_OUT
diff --git a/src/p_enemy.c b/src/p_enemy.c
index 46aeb42a93daf951fe6ab496d758bfccea0388f9..225271d6a98673846f0e910ff5712d5d468f9780 100644
--- a/src/p_enemy.c
+++ b/src/p_enemy.c
@@ -10419,8 +10419,6 @@ void A_FlickySpawn(mobj_t *actor)
 	P_InternalFlickySpawn(actor, locvar1, ((locvar2) ? locvar2 : 8*FRACUNIT), true);
 }
 
-#define FLICKYHITWALL if (actor->momx == actor->momy && actor->momy == 0) actor->threshold = 1;
-
 // Internal Flicky bubbling function.
 void P_InternalFlickyBubble(mobj_t *actor)
 {
@@ -10456,10 +10454,16 @@ void A_FlickyAim(mobj_t *actor)
 {
 	INT32 locvar1 = var1;
 	INT32 locvar2 = var2;
+	boolean flickyhitwall = false;
+
 #ifdef HAVE_BLUA
 	if (LUA_CallAction("A_FlickyAim", actor))
 		return;
 #endif
+
+	if (actor->momx == actor->momy && actor->momy == 0)
+		flickyhitwall = true;
+
 	P_InternalFlickyBubble(actor);
 	P_InstaThrust(actor, 0, 0);
 
@@ -10475,11 +10479,8 @@ void A_FlickyAim(mobj_t *actor)
 		angle_t posvar;
 		fixed_t chasevar, chasex, chasey;
 		
-		if (actor->threshold)
-		{
+		if (flickyhitwall)
 			actor->movedir *= -1;
-			actor->threshold = 0;
-		}
 
 		posvar = ((R_PointToAngle2(actor->target->x, actor->target->y, actor->x, actor->y) + actor->movedir*locvar1) >> ANGLETOFINESHIFT) & FINEMASK;
 		chasevar = FixedSqrt(max(FRACUNIT, P_AproxDistance(actor->target->x - actor->x, actor->target->y - actor->y) - locvar2)) + locvar2;
@@ -10490,7 +10491,7 @@ void A_FlickyAim(mobj_t *actor)
 		if (P_AproxDistance(chasex - actor->x, chasey - actor->y))
 			actor->angle = R_PointToAngle2(actor->x, actor->y, chasex, chasey);
 	}
-	else if (actor->threshold)
+	else if (flickyhitwall)
 	{
 		actor->angle += ANGLE_180;
 		actor->threshold = 0;
@@ -10505,8 +10506,6 @@ void P_InternalFlickyFly(mobj_t *actor, fixed_t flyspeed, fixed_t targetdist, fi
 	flyspeed = FixedMul(flyspeed, actor->scale);
 	actor->flags |= MF_NOGRAVITY;
 
-	FLICKYHITWALL
-
 	var1 = ANG30;
 	var2 = 32*FRACUNIT;
 	A_FlickyAim(actor);
@@ -10598,8 +10597,6 @@ void A_FlickyCoast(mobj_t *actor)
 #endif
 	if (actor->eflags & MFE_UNDERWATER)
 	{
-		FLICKYHITWALL
-
 		actor->momx = (11*actor->momx)/12;
 		actor->momy = (11*actor->momy)/12;
 		actor->momz = (11*actor->momz)/12;
@@ -10687,9 +10684,6 @@ void A_FlickyCheck(mobj_t *actor)
 	if (LUA_CallAction("A_FlickyCheck", actor))
 		return;
 #endif
-
-	FLICKYHITWALL
-
 	if (locvar2 && P_MobjFlip(actor)*actor->momz < 1)
 		P_SetMobjState(actor, locvar2);
 	else if (locvar1 && ((!(actor->eflags & MFE_VERTICALFLIP) && actor->z <= actor->floorz)
@@ -10715,9 +10709,6 @@ void A_FlickyHeightCheck(mobj_t *actor)
 	if (LUA_CallAction("A_FlickyHeightCheck", actor))
 		return;
 #endif
-
-	FLICKYHITWALL
-
 	if (locvar1 && actor->target && P_MobjFlip(actor)*actor->momz < 1
 	&& ((P_MobjFlip(actor)*((actor->z + actor->height/2) - (actor->target->z + actor->target->height/2)) < locvar2)
 	|| (actor->z - actor->height < actor->floorz) || (actor->z + 2*actor->height > actor->ceilingz)))