diff --git a/src/info.c b/src/info.c
index e58a1f3a79a1e774839200083fd47413e90ec424..93d6f1b64d107fb1e27e8b0734d7d7bcd09f032e 100644
--- a/src/info.c
+++ b/src/info.c
@@ -1067,7 +1067,7 @@ state_t states[NUMSTATES] =
 	{SPR_GSNP, 1, 2,       {A_Chase},          0,              0,               S_GSNAPPER3},      // S_GSNAPPER2
 	{SPR_GSNP, 2, 2,       {A_Chase},          0,              0,               S_GSNAPPER4},      // S_GSNAPPER3
 	{SPR_GSNP, 3, 2,       {A_Chase},          0,              0,               S_GSNAPPER1},      // S_GSNAPPER4
-	{SPR_GSNP, 0, -1,      {A_KillSegments},   0,              0,               S_XPLD_FLICKY},    // S_SNAPPER_XPLD
+	{SPR_GSNP, 0, 0,       {A_KillSegments},   0,              0,               S_XPLD_FLICKY},    // S_SNAPPER_XPLD
 	{SPR_GSNL, 0, -1,      {NULL},             0,              0,               S_NULL},           // S_SNAPPER_LEG
 	{SPR_GSNL, 1, -1,      {NULL},             0,              0,               S_NULL},           // S_SNAPPER_LEGRAISE
 	{SPR_GSNH, 0, -1,      {NULL},             0,              0,               S_NULL},           // S_SNAPPER_HEAD
@@ -2428,16 +2428,16 @@ state_t states[NUMSTATES] =
 	{SPR_ADST, 6|FF_ANIMATE, 24, {NULL}, 3, 8, S_NULL}, // S_ARIDDUST3
 
 	// Minecart
-	{SPR_NULL, 0,                            1, {NULL},                 0, 0, S_MINECART_IDLE}, // S_MINECART_IDLE
-	{SPR_NULL, 0,                           45, {NULL},                 0, 0, S_NULL},          // S_MINECART_DTH1
-	{SPR_MCRT, 8|FF_PAPERSPRITE,            -1, {NULL},                 0, 0, S_NULL},          // S_MINECARTEND
-	{SPR_MCRT, 0|FF_PAPERSPRITE,            -1, {NULL},                 0, 0, S_NULL},          // S_MINECARTSEG_FRONT
-	{SPR_MCRT, 1|FF_PAPERSPRITE,            -1, {NULL},                 0, 0, S_NULL},          // S_MINECARTSEG_BACK
-	{SPR_MCRT, 2|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL},                 2, 3, S_NULL},          // S_MINECARTSEG_LEFT
-	{SPR_MCRT, 5|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL},                 2, 3, S_NULL},          // S_MINECARTSEG_RIGHT
-	{SPR_LCKN, 2|FF_FULLBRIGHT,              2, {NULL},                 0, 0, S_NULL},          // S_MINECARTSIDEMARK1
-	{SPR_LCKN, 0|FF_FULLBRIGHT,              2, {NULL},                 0, 0, S_NULL},          // S_MINECARTSIDEMARK2
-	{SPR_MCSP, FF_FULLBRIGHT,                1, {A_MinecartSparkThink}, 0, 0, S_MINECARTSPARK}, // S_MINECARTSPARK
+	{SPR_NULL, 0,                            1, {NULL},                 0, 0, S_MINECART_IDLE},   // S_MINECART_IDLE
+	{SPR_NULL, 0,                            0, {A_KillSegments},       0, 0, S_TNTBARREL_EXPL3}, // S_MINECART_DTH1
+	{SPR_MCRT, 8|FF_PAPERSPRITE,            -1, {NULL},                 0, 0, S_NULL},            // S_MINECARTEND
+	{SPR_MCRT, 0|FF_PAPERSPRITE,            -1, {NULL},                 0, 0, S_NULL},            // S_MINECARTSEG_FRONT
+	{SPR_MCRT, 1|FF_PAPERSPRITE,            -1, {NULL},                 0, 0, S_NULL},            // S_MINECARTSEG_BACK
+	{SPR_MCRT, 2|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL},                 2, 3, S_NULL},            // S_MINECARTSEG_LEFT
+	{SPR_MCRT, 5|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL},                 2, 3, S_NULL},            // S_MINECARTSEG_RIGHT
+	{SPR_LCKN, 2|FF_FULLBRIGHT,              2, {NULL},                 0, 0, S_NULL},            // S_MINECARTSIDEMARK1
+	{SPR_LCKN, 0|FF_FULLBRIGHT,              2, {NULL},                 0, 0, S_NULL},            // S_MINECARTSIDEMARK2
+	{SPR_MCSP, FF_FULLBRIGHT,                1, {A_MinecartSparkThink}, 0, 0, S_MINECARTSPARK},   // S_MINECARTSPARK
 
 	// Saloon door
 	{SPR_SALD, 0|FF_PAPERSPRITE, -1, {NULL},              0, 0, S_NULL}, // S_SALOONDOOR
diff --git a/src/p_enemy.c b/src/p_enemy.c
index 235193f9bd02f3cd7bcc135bb3486a82093a9e38..b7bb730e174132ef860d7a7c6cf7b551de6e3139 100644
--- a/src/p_enemy.c
+++ b/src/p_enemy.c
@@ -13209,7 +13209,7 @@ void A_CanarivoreGas(mobj_t *actor)
 //
 // Function: A_KillSegments
 //
-// Description: Causes segments attached via tracer chain to be killed; forces into next state.
+// Description: Causes segments attached via tracer chain to be killed.
 //
 // var1 = Fuse (if 0, default to TICRATE/2).
 // var2 = Unused
@@ -13236,8 +13236,6 @@ void A_KillSegments(mobj_t *actor)
 		P_Thrust(kseg, R_PointToAngle2(actor->x, actor->y, kseg->x, kseg->y), 3*actor->scale);
 		kseg->momz = 3*actor->scale;
 	}
-
-	P_SetMobjState(actor, actor->state->nextstate);
 }
 
 static void P_SnapperLegPlace(mobj_t *mo)
diff --git a/src/p_inter.c b/src/p_inter.c
index a92cde9f0b85abd878833d1f70eb92c4de0002dc..4c2d192972d4180301256f0c214604e031d26e98 100644
--- a/src/p_inter.c
+++ b/src/p_inter.c
@@ -2604,6 +2604,11 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
 			target->fuse = TICRATE*2;
 			break;
 
+		case MT_MINECART:
+			A_Scream(target);
+			target->momx = target->momy = target->momz = 0;
+			break;
+
 		case MT_PLAYER:
 			{
 				target->fuse = TICRATE*3; // timer before mobj disappears from view (even if not an actual player)
@@ -2633,14 +2638,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
 	}
 
 	// Final state setting - do something instead of P_SetMobjState;
-	if (target->type == MT_MINECART)
-	{
-		A_KillSegments(target); // found in green snapper's code - the minecart segments need hardcode-side support to flash while they have a nonzero fuse
-		A_Scream(target);
-		P_SetMobjState(target, S_TNTBARREL_EXPL3);
-		target->momx = target->momy = target->momz = 0;
-	}
-	else if (target->type == MT_SPIKE && target->info->deathstate != S_NULL)
+	if (target->type == MT_SPIKE && target->info->deathstate != S_NULL)
 	{
 		const angle_t ang = ((inflictor) ? inflictor->angle : 0) + ANGLE_90;
 		const fixed_t scale = target->scale;