diff --git a/src/k_kart.c b/src/k_kart.c
index f4ce654f58e5caa3e05bab98a4f6a31d9724a480..a6615be07fef0bf58580cbd2433cc803d3255c49 100644
--- a/src/k_kart.c
+++ b/src/k_kart.c
@@ -3883,6 +3883,42 @@ void K_DropItems(player_t *player)
 	K_StripItems(player);
 }
 
+void K_DropRocketSneaker(player_t *player)
+{
+	mobj_t *shoe = player->mo;
+	fixed_t flingangle;
+	boolean leftshoe = true; //left shoie is first
+	while ((shoe = shoe->hnext) && !P_MobjWasRemoved(shoe))
+	{
+		shoe->flags2 &= ~MF2_DONTDRAW;
+		shoe->flags &= ~MF_NOGRAVITY;
+		shoe->angle += ANGLE_45;
+
+		if (shoe->eflags & MFE_VERTICALFLIP)
+			shoe->z -= shoe->height;
+		else
+			shoe->z += shoe->height;
+
+		//left shoe goes off tot eh left, right shoe off to the right
+		if (leftshoe)
+			flingangle = -(ANG60);
+		else
+			flingangle = ANG60;
+		
+		S_StartSound(shoe, shoe->info->deathsound);
+		P_SetObjectMomZ(shoe, 8*FRACUNIT, false);
+		P_InstaThrust(shoe, R_PointToAngle2(shoe->target->x, shoe->target->y, shoe->x, shoe->y)+flingangle, 16*FRACUNIT);
+		shoe->momx += shoe->target->momx;
+		shoe->momy += shoe->target->momy;
+		shoe->momz += shoe->target->momz;
+		shoe->extravalue2 = 1;
+
+		leftshoe = false;
+	}
+	P_SetTarget(&player->mo->hnext, NULL);
+	player->kartstuff[k_rocketsneakertimer] = 0;
+}
+
 // When an item in the hnext chain dies.
 void K_RepairOrbitChain(mobj_t *orbit)
 {
diff --git a/src/k_kart.h b/src/k_kart.h
index 86ae0fcc5b2f8fb289a526dc1bc5e122c7945a3a..e6241f8ae5e113afc25a46718c87e8aff085211d 100644
--- a/src/k_kart.h
+++ b/src/k_kart.h
@@ -55,6 +55,7 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue);
 INT32 K_GetKartDriftSparkValue(player_t *player);
 void K_KartUpdatePosition(player_t *player);
 void K_DropItems(player_t *player);
+void K_DropRocketSneaker(player_t *player);
 void K_StripItems(player_t *player);
 void K_StripOther(player_t *player);
 void K_MomentumToFacing(player_t *player);
diff --git a/src/p_inter.c b/src/p_inter.c
index abb12811e18cfdd88f602989b45c2cfd07fe3c11..54fe01030be0db949587dca51f0e81590377e2d2 100644
--- a/src/p_inter.c
+++ b/src/p_inter.c
@@ -408,6 +408,9 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
 			}
 			else
 			{
+				if (player->kartstuff[k_rocketsneakertimer])
+					K_DropRocketSneaker(player);
+
 				K_DropItems(player); //K_StripItems(player);
 				//K_StripOther(player);
 				player->kartstuff[k_itemroulette] = 1;
diff --git a/src/p_mobj.c b/src/p_mobj.c
index f7f2afe3471bdca9c717228423f96c04bdb6f5fb..82a003a0e8f988e646ff926960dbab5e50946b7d 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -8312,18 +8312,7 @@ void P_MobjThinker(mobj_t *mobj)
 
 				if (!mobj->extravalue2)
 				{
-					if (mobj->eflags & MFE_VERTICALFLIP)
-						mobj->z -= mobj->height;
-					else
-						mobj->z += mobj->height;
-
-					S_StartSound(mobj, mobj->info->deathsound);
-					P_SetObjectMomZ(mobj, 8*FRACUNIT, false);
-					P_InstaThrust(mobj, R_PointToAngle2(mobj->target->x, mobj->target->y, mobj->x, mobj->y)+ANGLE_90, 16*FRACUNIT);
-					mobj->momx += mobj->target->momx;
-					mobj->momy += mobj->target->momy;
-					mobj->momz += mobj->target->momz;
-					mobj->extravalue2 = 1;
+					K_DropRocketSneaker(mobj->target->player);
 				}
 				else if (P_IsObjectOnGround(mobj))
 				{