diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/client/gui-gtk/mapview.c freeciv/client/gui-gtk/mapview.c
--- FreecivCVS/client/gui-gtk/mapview.c	Tue Jul  4 08:53:37 2000
+++ freeciv/client/gui-gtk/mapview.c	Fri Jul  7 02:14:17 2000
@@ -1172,30 +1172,33 @@
     put_overlay_tile_gpixmap(p, 0, 1, sprites.upkeep.unhappy[unhappy-1]);
 }
 
-
 /**************************************************************************
 ...
 **************************************************************************/
 void put_nuke_mushroom_pixmaps(int abs_x0, int abs_y0)
 {
   int x, y;
-  
-  for(y=0; y<3; y++)
+
+  for(y=0; y<3; y++) {
     for(x=0; x<3; x++) {
+      int map_x = map_canvas_adjust_x(x-1+abs_x0)*NORMAL_TILE_WIDTH;
+      int map_y = map_canvas_adjust_y(y-1+abs_y0)*NORMAL_TILE_HEIGHT;
       struct Sprite *mysprite = sprites.explode.nuke[y][x];
 
-      gdk_draw_pixmap( map_canvas->window, civ_gc, mysprite->pixmap,
-		0, 0,
-		map_canvas_adjust_x(x-1+abs_x0)*NORMAL_TILE_WIDTH, 
-		map_canvas_adjust_y(y-1+abs_y0)*NORMAL_TILE_HEIGHT,
-		NORMAL_TILE_WIDTH,
-		NORMAL_TILE_HEIGHT );
+      gdk_draw_pixmap(single_tile_pixmap, civ_gc, map_canvas_store,
+		      map_x, map_y, 0, 0,
+		      NORMAL_TILE_WIDTH, NORMAL_TILE_HEIGHT);
+      pixmap_put_overlay_tile(single_tile_pixmap, 0, 0, mysprite);
+      gdk_draw_pixmap(map_canvas->window, civ_gc, single_tile_pixmap,
+		      0, 0, map_x, map_y,
+		      NORMAL_TILE_WIDTH, NORMAL_TILE_HEIGHT);
     }
+  }
 
-  gdk_flush ();
+  gdk_flush();
   sleep(1);
 
-  update_map_canvas(map_canvas_adjust_x(abs_x0-1), 
+  update_map_canvas(map_canvas_adjust_x(abs_x0-1),
                     map_canvas_adjust_y(abs_y0-1),
 		    3, 3, 1);
 }
diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/client/gui-xaw/mapview.c freeciv/client/gui-xaw/mapview.c
--- FreecivCVS/client/gui-xaw/mapview.c	Tue Jul  4 08:53:37 2000
+++ freeciv/client/gui-xaw/mapview.c	Fri Jul  7 02:06:17 2000
@@ -1106,30 +1106,33 @@
     pixmap_put_overlay_tile(pm, 0, 1, sprites.upkeep.unhappy[unhappy-1]);
 }
 
-
 /**************************************************************************
 ...
 **************************************************************************/
 void put_nuke_mushroom_pixmaps(int abs_x0, int abs_y0)
 {
   int x, y;
-  
-  for(y=0; y<3; y++)
+
+  for(y=0; y<3; y++) {
     for(x=0; x<3; x++) {
+      int map_x = map_canvas_adjust_x(x-1+abs_x0)*NORMAL_TILE_WIDTH;
+      int map_y = map_canvas_adjust_y(y-1+abs_y0)*NORMAL_TILE_HEIGHT;
       struct Sprite *mysprite = sprites.explode.nuke[y][x];
-      XCopyArea(display, mysprite->pixmap, XtWindow(map_canvas), 
-		civ_gc, 
-		0, 0, 
-		NORMAL_TILE_WIDTH,
-		NORMAL_TILE_HEIGHT,
-		map_canvas_adjust_x(x-1+abs_x0)*NORMAL_TILE_WIDTH, 
-		map_canvas_adjust_y(y-1+abs_y0)*NORMAL_TILE_HEIGHT);
+
+      XCopyArea(display, map_canvas_store, single_tile_pixmap, civ_gc,
+		map_x, map_y, NORMAL_TILE_WIDTH, NORMAL_TILE_HEIGHT,
+		0, 0);
+      pixmap_put_overlay_tile(single_tile_pixmap, 0, 0, mysprite);
+      XCopyArea(display, single_tile_pixmap, XtWindow(map_canvas), civ_gc,
+		0, 0, NORMAL_TILE_WIDTH, NORMAL_TILE_HEIGHT,
+		map_x, map_y);
     }
+  }
 
   XSync(display, 0);
   sleep(1);
 
-  update_map_canvas(map_canvas_adjust_x(abs_x0-1), 
+  update_map_canvas(map_canvas_adjust_x(abs_x0-1),
                     map_canvas_adjust_y(abs_y0-1),
 		    3, 3, 1);
 }