diff --git a/src/p_inter.c b/src/p_inter.c
index 3aed35f84..0c81d7833 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 bfec5af78..7163dbe79 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;