diff --git a/src/stratagus/missile.cpp b/src/stratagus/missile.cpp
index fbb0b207d..5beedf267 100644
--- a/src/stratagus/missile.cpp
+++ b/src/stratagus/missile.cpp
@@ -203,7 +203,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-lightning",
     "lightning.png",
-    32,32,
+    32,32, 30,
     { NULL },
     { NULL },
     MissileClassPointToPointWithHit,
@@ -215,18 +215,20 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-griffon-hammer",
     "gryphon hammer.png",
-    32,32,
+    32,32, 15,
     { NULL },
     { "fireball hit" },
     MissileClassPointToPoint3Bounces,
     0,
     1,
+    16,
+    1,
     "missile-explosion",	NULL,
     },
 { MissileTypeType,
     "missile-dragon-breath",
     "dragon breath.png",
-    32,32,
+    32,32, 5,
     { NULL },
     { "fireball hit" },
     MissileClassPointToPoint3Bounces,
@@ -239,7 +241,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-fireball",
     "fireball.png",
-    32,32,
+    32,32, 5,
     { NULL },
     { "fireball hit" },
     MissileClassPointToPoint,
@@ -251,7 +253,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-flame-shield",
     "flame shield.png",
-    32,48,
+    32,48, 6,
     { NULL },
     { NULL },
     MissileClassFlameShield,
@@ -263,7 +265,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-blizzard",
     "blizzard.png",
-    32,32,
+    32,32, 4,
     { NULL },
     { NULL },
     MissileClassBlizzard,
@@ -276,7 +278,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-death-and-decay",
     "death and decay.png",
-    32,32,
+    32,32, 8,
     { NULL },
     { NULL },
     MissileClassDeathDecay,
@@ -288,7 +290,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-big-cannon",
     "big cannon.png",
-    16,16,
+    16,16, 20,
     { NULL },
     { "explosion" },
     MissileClassPointToPoint,
@@ -301,7 +303,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-exorcism",
     "exorcism.png",
-    48,48,
+    48,48, 10,
     { NULL },
     { NULL },
     MissileClassPointToPoint,
@@ -313,7 +315,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-heal-effect",
     "heal effect.png",
-    48,48,
+    48,48, 10,
     { NULL },
     { NULL },
     MissileClassStayWithDelay,
@@ -325,7 +327,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-touch-of-death",
     "touch of death.png",
-    32,32,
+    32,32, 30,
     { NULL },
     { NULL },
     MissileClassPointToPointWithHit,
@@ -337,7 +339,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-rune",
     "rune.png",
-    16,16,
+    16,16, 4,
     { NULL },
     { NULL },
     MissileClassStayWithDelay,
@@ -349,7 +351,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-whirlwind",
     "tornado.png",
-    56,56,
+    56,56, 4,
     { NULL },
     { NULL },
     MissileClassWhirlwind,
@@ -361,7 +363,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-catapult-rock",
     "catapult rock.png",
-    32,32,
+    32,32, 15,
     { NULL },
     { "explosion" },
     MissileClassPointToPointWithDelay,
@@ -374,7 +376,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-ballista-bolt",
     "ballista bolt.png",
-    64,64,
+    64,64, 5,
     { NULL },
     { "explosion" },
     MissileClassPointToPoint,
@@ -387,7 +389,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-arrow",
     "arrow.png",
-    40,40,
+    40,40, 5,
     { NULL },
     { "bow hit" },
     MissileClassPointToPoint,
@@ -399,7 +401,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-axe",
     "axe.png",
-    32,32,
+    32,32, 15,
     { NULL },
     { "bow hit" },
     MissileClassPointToPoint,
@@ -411,7 +413,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-submarine-missile",
     "submarine missile.png",
-    40,40,
+    40,40, 5,
     { NULL },
     { "explosion" },
     MissileClassPointToPoint,
@@ -424,7 +426,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-turtle-missile",
     "turtle missile.png",
-    40,40,
+    40,40, 5,
     { NULL },
     { "explosion" },
     MissileClassPointToPoint,
@@ -437,7 +439,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-small-fire",
     "small fire.png",
-    32,48,
+    32,48, 6,
     { NULL },
     { NULL },
     MissileClassFire,
@@ -449,7 +451,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-big-fire",
     "big fire.png",
-    48,48,
+    48,48, 10,
     { NULL },
     { NULL },
     MissileClassFire,
@@ -461,7 +463,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-impact",
     "ballista-catapult impact.png",
-    48,48,
+    48,48, 10,
     { NULL },
     { NULL },
     MissileClassStayWithDelay,
@@ -473,7 +475,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-normal-spell",
     "normal spell.png",
-    32,32,
+    32,32, 6,
     { NULL },
     { NULL },
     MissileClassStayWithDelay,
@@ -485,7 +487,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-explosion",
     "explosion.png",
-    64,64,
+    64,64, 20,
     { NULL },
     { NULL },
     MissileClassStayWithDelay,
@@ -497,7 +499,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-small-cannon",
     "cannon.png",
-    32,32,
+    32,32, 15,
     { NULL },
     { "explosion" },
     MissileClassPointToPointWithDelay,
@@ -510,7 +512,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-cannon-explosion",
     "cannon explosion.png",
-    32,32,
+    32,32, 4,
     { NULL },
     { NULL },
     MissileClassStayWithDelay,
@@ -522,7 +524,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-cannon-tower-explosion",
     "cannon-tower explosion.png",
-    32,32,
+    32,32, 4,
     { NULL },
     { NULL },
     MissileClassStayWithDelay,
@@ -534,7 +536,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-daemon-fire",
     "daemon fire.png",
-    32,32,
+    32,32, 15,
     { NULL },
     { NULL },
     MissileClassPointToPoint,
@@ -546,7 +548,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-green-cross",
     "green cross.png",
-    32,32,
+    32,32, 4,
     { NULL },
     { NULL },
     MissileClassCycleOnce,
@@ -558,7 +560,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-none",
     NULL,
-    32,32,
+    32,32, 0,
     { NULL },
     { NULL },
     MissileClassNone,
@@ -570,7 +572,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-blizzard-hit",
     "blizzard.png",
-    32,32,
+    32,32, 4,
     { NULL },
     { NULL },
     MissileClassStayWithDelay,
@@ -582,7 +584,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-death-coil",
     "touch of death.png",
-    32,32,
+    32,32, 30,
     { NULL },
     { NULL },
     MissileClassPointToPoint,
@@ -594,7 +596,7 @@ global MissileType DefaultMissileTypes[] = {
 { MissileTypeType,
     "missile-custom",
     NULL,
-    32,32,
+    32,32, 0,
     { NULL },
     { NULL },
     MissileClassCustom,
@@ -634,6 +636,8 @@ global int NumMissileTypes;		/// number of missile-types made.
 global MissileType* MissileTypeSmallFire;	/// Small fire missile-type
 global MissileType* MissileTypeBigFire;		/// Big fire missile-type
 global MissileType* MissileTypeGreenCross;	/// Green cross missile-type
+    /// missile-type for the explosion missile
+global MissileType* MissileTypeExplosion;
 
 IfDebug(
 global int NoWarningMissileType;		/// quiet ident lookup.
@@ -674,6 +678,11 @@ global void LoadMissileSprites(void)
 	    ShowLoadProgress("\tMissile %s\n",file);
 	    MissileTypes[i].Sprite=LoadSprite(
 		    file,MissileTypes[i].Width,MissileTypes[i].Height);
+
+	    // Correct the number of frames in graphic
+	    DebugCheck( MissileTypes[i].Sprite->NumFrames
+			<MissileTypes[i].Frames );
+	    MissileTypes[i].Sprite->NumFrames=MissileTypes[i].Frames;
 	}
     }
     NumMissileTypes=i;
@@ -707,11 +716,19 @@ global void LoadMissileSprites(void)
     MissileTypeSmallFire=MissileTypeByIdent("missile-small-fire");
     MissileTypeBigFire=MissileTypeByIdent("missile-big-fire");
     MissileTypeGreenCross=MissileTypeByIdent("missile-green-cross");
+    MissileTypeExplosion = MissileTypeByIdent("missile-explosion");
 
     // FIXME: FIXME: FIXME: very dirty hacks
+    DebugCheck( MissileTypeSmallFire->Sprite->NumFrames!=6 );
     MissileTypeSmallFire->Sprite->NumFrames=6;
+    DebugCheck( MissileTypeByIdent("missile-death-and-decay")
+		->Sprite->NumFrames!=8 );
     MissileTypeByIdent("missile-death-and-decay")->Sprite->NumFrames=8;
+    DebugCheck( MissileTypeByIdent("missile-normal-spell")
+		->Sprite->NumFrames!=6 );
     MissileTypeByIdent("missile-normal-spell")->Sprite->NumFrames=6;
+    DebugCheck( MissileTypeByIdent("missile-flame-shield")
+		->Sprite->NumFrames!=6 );
     MissileTypeByIdent("missile-flame-shield")->Sprite->NumFrames=6;
 }
 
@@ -724,7 +741,7 @@ global void LoadMissileSprites(void)
 */
 global MissileType* MissileTypeByIdent(const char* ident)
 {
-    MissileType** type;
+    MissileType* const* type;
 
     type=(MissileType**)hash_find(MissileTypeHash,(char*)ident);
 
@@ -732,7 +749,7 @@ global MissileType* MissileTypeByIdent(const char* ident)
 	return *type;
     }
 
-    IfDebug( 
+    IfDebug(
 	if( !NoWarningMissileType ) {
 	    DebugLevel0Fn("Missile %s not found\n",ident);
 	}
@@ -828,7 +845,7 @@ found:
     missile->Type=type;
     missile->Frame=0;
     missile->State=0;
-    missile->Wait=type->Sleep;		// initial wait = sleep 
+    missile->Wait=type->Sleep;		// initial wait = sleep
     missile->Delay=type->Delay;		// initial delay
 
     missile->SourceUnit=NULL;
@@ -1457,7 +1474,7 @@ global void MissileHit(Missile* missile)
 	//	Can the unit attack the this unit-type?
 	//	NOTE: perhaps this should be come a property of the missile.
 	//
-	if( CanTarget(missile->SourceUnit->Type,goal->Type) ) { 
+	if( CanTarget(missile->SourceUnit->Type,goal->Type) ) {
 	    if( goal->X==x && goal->Y==y ) {
 		MissileHitsGoal(missile,goal,1);
 	    } else {
@@ -1804,7 +1821,7 @@ global void SaveMissileTypes(FILE* file)
 	}
 	fprintf(file," 'size '(%d %d)",mt->Width,mt->Height);
 	if( mt->Sprite ) {
-	    fprintf(file," 'frames %d",VideoGraphicFrames(mt->Sprite));
+	    fprintf(file," 'frames %d",mt->Frames);
 	}
 	fprintf(file,"\n ");
 	if( mt->FiredSound.Name ) {
@@ -1836,7 +1853,6 @@ global void SaveMissileTypes(FILE* file)
 local void SaveMissile(const Missile* missile,FILE* file)
 {
     char* s1;
-    extern char* UnitReference(const Unit*);
 
     fprintf(file,"(missile 'type '%s",missile->Type->Ident);
     fprintf(file," 'pos '(%d %d) 'goal '(%d %d)",
@@ -1885,6 +1901,11 @@ global void SaveMissiles(FILE* file)
 global void CleanMissileTypes(void)
 {
     DebugLevel0Fn("FIXME: not written\n");
+
+    MissileTypeSmallFire=NULL;
+    MissileTypeBigFire=NULL;
+    MissileTypeGreenCross=NULL;
+    MissileTypeExplosion=NULL;
 }