diff --git a/src/g_demo.c b/src/g_demo.c
index 9d3b8601584385d06bbd14e5ff8a2ec4ea63ca3c..9f955f13ba1b6804b2a19b1c7594212289a0cac1 100644
--- a/src/g_demo.c
+++ b/src/g_demo.c
@@ -784,6 +784,19 @@ void G_GhostTicker(void)
 						mobj = P_SpawnGhostMobj(g->mo); // does a large portion of the work for us
 						mobj->frame = (mobj->frame & ~FF_FRAMEMASK)|tr_trans60<<FF_TRANSSHIFT; // P_SpawnGhostMobj sets trans50, we want trans60
 					}
+					else if (type == MT_THOKEFFECT)
+					{
+					    mobj = P_SpawnMobjFromMobj(g->mo, 0, 0, g->mo->scale * 24, type);
+                		mobj->angle = g->mo->angle + ANGLE_90;
+                		mobj->fuse = 7;
+                		mobj->scale = FRACUNIT / 3;
+                		mobj->destscale = 10*FRACUNIT;
+                		mobj->colorized = true;
+                		mobj->color = g->mo->color;
+                		mobj->momx = -g->mo->momx / 2;
+                		mobj->momy = -g->mo->momy / 2;
+					}
+
 					else
 					{
 						mobj = P_SpawnMobjFromMobj(g->mo, 0, 0, -FixedDiv(FixedMul(g->mo->info->height, g->mo->scale) - g->mo->height,3*FRACUNIT), MT_THOK);
@@ -1074,6 +1087,18 @@ void G_ReadMetalTic(mobj_t *metal)
 				{
 					mobj = P_SpawnGhostMobj(metal); // does a large portion of the work for us
 				}
+				else if (type == MT_THOKEFFECT)
+				{
+					mobj = P_SpawnMobjFromMobj(metal, 0, 0, metal->scale * 24, type);
+                	mobj->angle = metal->angle + ANGLE_90;
+                	mobj->fuse = 7;
+                	mobj->scale = FRACUNIT / 3;
+                	mobj->destscale = 10*FRACUNIT;
+                	mobj->colorized = true;
+                	mobj->color = metal->color;
+                	mobj->momx = -metal->momx / 2;
+                	mobj->momy = -metal->momy / 2;
+				}
 				else
 				{
 					mobj = P_SpawnMobjFromMobj(metal, 0, 0, -FixedDiv(FixedMul(metal->info->height, metal->scale) - metal->height,3*FRACUNIT), MT_THOK);