diff --git a/src/stratagus/oldmissile.cpp b/src/stratagus/oldmissile.cpp
index 39917848c..5481d0f09 100644
--- a/src/stratagus/oldmissile.cpp
+++ b/src/stratagus/oldmissile.cpp
@@ -9,11 +9,10 @@
 //	   FreeCraft - A free fantasy real time strategy game engine
 //
 /**@name missile.c	-	The missiles. */
-/*
-**	(c) Copyright 1998-2000 by Lutz Sammer
-**
-**	$Id$
-*/
+//
+//	(c) Copyright 1998-2000 by Lutz Sammer
+//
+//	$Id$
 
 //@{
 
@@ -477,7 +476,7 @@ global MissileType* MissileTypeByIdent(const char* ident)
 	return *type;
     }
 
-    DebugLevel0(__FUNCTION__": Missile %s not found\n",ident);
+    DebugLevel0Fn("Missile %s not found\n",ident);
     return NULL;
 }
 
@@ -496,7 +495,7 @@ global Missile* MakeMissile(MissileType* type,int sx,int sy,int dx,int dy)
 {
     Missile* missile;
 
-    DebugLevel3(__FUNCTION__": type %Zd(%s) at %d,%d to %d,%d\n"
+    DebugLevel3Fn("type %Zd(%s) at %d,%d to %d,%d\n"
 	    ,type-MissileTypes,type->Name,sx,sy,dx,dy);
 
     //
@@ -566,7 +565,7 @@ local int CalculateDamageStats(const UnitStats* attacker_stats
     damage+=attacker_stats->PiercingDamage+1;	// round up
     damage/=2;
     damage*=((SyncRand()>>15)&1)+1;
-    DebugLevel3("Damage done %d\n",damage);
+    DebugLevel3Fn("Damage done %d\n",damage);
 
     return damage;
 }
@@ -597,7 +596,7 @@ global void FireMissile(Unit* unit)
     Unit* goal;
     Missile* missile;
 
-    DebugLevel3(__FUNCTION__":\n");
+    DebugLevel3Fn("\n");
 
     if( ((MissileType*)unit->Type->Missile.Missile)->Class==MissileClassNone ) {
 	// Hit immediately
@@ -617,7 +616,7 @@ global void FireMissile(Unit* unit)
 		return;
 	    }
 
-	    DebugLevel1("Missile-none hits no unit, shouldn't happen!\n");
+	    DebugLevel1Fn("Missile-none hits no unit, shouldn't happen!\n");
 	    return;
 	}
 
@@ -625,7 +624,7 @@ global void FireMissile(Unit* unit)
 #ifdef NEW_UNIT
 	// Check if goal is correct unit.
 	if( goal->Destroyed ) {
-	    DebugLevel0(__FUNCTION__": destroyed unit\n");
+	    DebugLevel0Fn("destroyed unit\n");
 	    if( !--goal->Refs ) {
 		ReleaseUnit(goal);
 	    }
@@ -635,7 +634,7 @@ global void FireMissile(Unit* unit)
 	}
 #endif
 	if( goal->Removed ) {
-	    DebugLevel3("Missile-none hits removed unit!\n");
+	    DebugLevel3Fn("Missile-none hits removed unit!\n");
 #ifdef NEW_UNIT
 	    --goal->Refs;
 #endif
@@ -643,7 +642,7 @@ global void FireMissile(Unit* unit)
 	    return;
 	}
 	if( !goal->HP || goal->Command.Action==UnitActionDie ) {
-	    DebugLevel3("Missile-none hits dead unit!\n");
+	    DebugLevel3Fn("Missile-none hits dead unit!\n");
 #ifdef NEW_UNIT
 	    --goal->Refs;
 #endif
@@ -664,7 +663,7 @@ global void FireMissile(Unit* unit)
 #ifdef NEW_UNIT
 	// Check if goal is correct unit.
 	if( goal->Destroyed ) {
-	    DebugLevel0(__FUNCTION__": destroyed unit\n");
+	    DebugLevel0Fn("destroyed unit\n");
 	    if( !--goal->Refs ) {
 		ReleaseUnit(goal);
 	    }
@@ -676,7 +675,7 @@ global void FireMissile(Unit* unit)
 	DebugCheck( !goal->Type );	// Target invalid?
 	// Fire to nearest point of unit!
 	NearestOfUnit(goal,unit->X,unit->Y,&dx,&dy);
-	DebugLevel3("Fire to unit at %d,%d\n",dx,dy);
+	DebugLevel3Fn("Fire to unit at %d,%d\n",dx,dy);
 	dx=dx*TileSizeX+TileSizeX/2;
 	dy=dy*TileSizeY+TileSizeY/2;
     } else {
@@ -719,7 +718,7 @@ local int MissileVisible(const Missile* missile)
 	    || (tileMinY>MapY+MapHeight) || (tileMaxY<MapY)) {
 	return 0;
     }
-    DebugLevel3("Missile bounding box %d %d %d %d (Map %d %d %d %d)\n",
+    DebugLevel3Fn("Missile bounding box %d %d %d %d (Map %d %d %d %d)\n",
 		tileMinX,tileMaxX,tileMinY,tileMaxY,
 		MapX,MapX+MapWidth,MapY,MapY+MapHeight);
     return 1;
@@ -758,6 +757,11 @@ global void DrawMissiles(void)
 	if (MissileVisible(missile)) {
 	    x=missile->X-MapX*TileSizeX+TheUI.MapX;
 	    y=missile->Y-MapY*TileSizeY+TheUI.MapY;
+	    // FIXME: I should copy SourcePlayer for second level missiles.
+	    if( missile->SourcePlayer ) {
+		GraphicPlayerPixels(missile->SourcePlayer
+			,missile->Type->Sprite);
+	    }
 	    DrawMissile(missile->Type,missile->Frame,x,y);
 	}
     }
@@ -839,7 +843,7 @@ local int PointToPointMissile(Missile* missile)
 	missile->Xstep=xstep;
 	missile->Ystep=ystep;
 	++missile->State;
-	DebugLevel3("Init: %d,%d, %d,%d, =%d\n"
+	DebugLevel3Fn("Init: %d,%d, %d,%d, =%d\n"
 		,dx,dy,xstep,ystep,missile->D);
 	return 0;
     } else {
@@ -945,7 +949,7 @@ global void MissileHit(const Missile* missile)
     goal=UnitOnMapTile(x,y);
     if( !goal || !goal->HP ) {
 	if( WallOnMap(x,y) ) {
-	    DebugLevel3("Missile on wall?\n");
+	    DebugLevel3Fn("Missile on wall?\n");
 	    // FIXME: don't use UnitTypeByIdent here, this is slow!
 	    if( HumanWallOnMap(x,y) ) {
 		HitWall(x,y,CalculateDamageStats(missile->SourceStats,
@@ -956,7 +960,7 @@ global void MissileHit(const Missile* missile)
 	    }
 	    return;
 	}
-	DebugLevel0(__FUNCTION__": Oops nothing to hit (%d,%d)?\n",x,y);
+	DebugLevel0Fn("Oops nothing to hit (%d,%d)?\n",x,y);
 	return;
     }
 
@@ -1004,7 +1008,7 @@ global void MissileActions(void)
 			missile->Frame-=
 				VideoGraphicFrames(missile->Type->Sprite);
 		    }
-		    DebugLevel3("Frame %d of %d\n"
+		    DebugLevel3Fn("Frame %d of %d\n"
 			    ,missile->Frame
 			    ,VideoGraphicFrames(missile->Type->Sprite));
 		}
@@ -1054,7 +1058,7 @@ global void MissileActions(void)
 			missile->Frame-=
 				VideoGraphicFrames(missile->Type->Sprite);
 		    }
-		    DebugLevel3("Frame %d of %d\n"
+		    DebugLevel3Fn("Frame %d of %d\n"
 			    ,missile->Frame
 			    ,VideoGraphicFrames(missile->Type->Sprite));
 		}
@@ -1172,7 +1176,7 @@ global int ViewPointDistanceToMissile(const Missile* missile)
     x=(missile->X+missile->Type->Width/2)/TileSizeX;
     y=(missile->Y+missile->Type->Height/2)/TileSizeY;	// pixel -> tile
 
-    DebugLevel3(__FUNCTION__": Missile %p at %d %d\n",missile,x,y);
+    DebugLevel3Fn("Missile %p at %d %d\n",missile,x,y);
 
     return ViewPointDistance(x,y);
 }