diff --git a/src/p_inter.c b/src/p_inter.c
index 3aed35f842862e447ebbfc61324bf06c93afd1e6..0c81d7833247387b9c30f60ce40666eff8b1e601 100644
--- a/src/p_inter.c
+++ b/src/p_inter.c
@@ -3660,9 +3660,6 @@ void P_PlayerRingBurst(player_t *player, INT32 num_rings)
 		}
 		if (player->mo->eflags & MFE_VERTICALFLIP)
 			mo->momz *= -1;
-
-		if (P_IsObjectOnGround(player->mo))
-			player->powers[pw_carry] = CR_NONE;
 	}
 
 	player->losstime += 10*TICRATE;
diff --git a/src/p_mobj.c b/src/p_mobj.c
index bfec5af7874a0403d5f2d31da38b0ef9c5c0bd8f..7163dbe79f3c9184714dfcb1bfee57f2ad5a6cb6 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -8948,7 +8948,7 @@ void P_PushableThinker(mobj_t *mobj)
 	if (mobj->type == MT_MINECART && mobj->health)
 	{
 		// If player is ded, remove this minecart
-		if (!mobj->target || P_MobjWasRemoved(mobj->target) || !mobj->target->health)
+		if (!mobj->target || P_MobjWasRemoved(mobj->target) || !mobj->target->health || !mobj->target->player || mobj->target->player->powers[pw_carry] != CR_MINECART)
 		{
 			P_KillMobj(mobj, NULL, NULL, 0);
 			return;