diff --git a/src/action/action_build.cpp b/src/action/action_build.cpp
index 3e56532b8..e452de637 100644
--- a/src/action/action_build.cpp
+++ b/src/action/action_build.cpp
@@ -189,14 +189,11 @@ global void HandleActionBuild(Unit* unit)
 
     build=MakeUnit(type,unit->Player);
     build->Constructed=1;
-#ifdef NEW_FOW
     build->CurrentSightRange=0;
-#endif
     PlaceUnit(build,x,y);
-#ifdef NEW_FOW
     build->CurrentSightRange=build->Type->TileWidth < build->Type->TileHeight
 				? build->Type->TileHeight : build->Type->TileWidth;
-#endif
+
 
 /* Done by PlaceUnit now
 #ifdef HIERARCHIC_PATHFINDER
@@ -249,9 +246,7 @@ global void HandleActionBuild(Unit* unit)
     unit->Value=build->Value;		// worker holding value while building
 
     RemoveUnit(unit,build);		// automaticly: CheckUnitToBeDrawn(unit)
-#ifdef NEW_FOW
     build->CurrentSightRange=0;
-#endif
     unit->X=x;
     unit->Y=y;
     unit->Orders[0].Action=UnitActionStill;
@@ -373,12 +368,10 @@ global void HandleActionBuilded(Unit* unit)
 	} else if( unit->Player==ThisPlayer ) {
 	    UpdateButtonPanel();
 	}
-#ifdef NEW_FOW
 	unit->CurrentSightRange=unit->Stats->SightRange;
 	MapMarkSight(unit->Player,unit->X+unit->Type->TileWidth/2,
 			    unit->Y+unit->Type->TileWidth/2,
 			    unit->CurrentSightRange);
-#endif
         CheckUnitToBeDrawn(unit);
 	return;
     }
diff --git a/src/action/action_die.cpp b/src/action/action_die.cpp
index 24bd022e4..7536927cd 100644
--- a/src/action/action_die.cpp
+++ b/src/action/action_die.cpp
@@ -72,11 +72,9 @@ global void HandleActionDie(Unit* unit)
 	    return;
 	}
 
-#ifdef NEW_FOW
 	//Fixes sight from death
 	MapUnmarkSight(unit->Player,unit->X,unit->Y,unit->CurrentSightRange);
 	//unit->CurrentSightRange=unit->Type->Stats->SightRange;
-#endif
 
 	unit->State=unit->Type->CorpseScript;
 	unit->Type=unit->Type->CorpseType;
diff --git a/src/action/action_move.cpp b/src/action/action_move.cpp
index ac4a3c9cf..4ed2e2051 100644
--- a/src/action/action_move.cpp
+++ b/src/action/action_move.cpp
@@ -147,7 +147,7 @@ local int ActionMoveGeneric(Unit* unit,const Animation* anim)
 	//
 	x+=unit->Type->TileWidth/2;
 	y+=unit->Type->TileHeight/2;
-#ifdef NEW_FOW
+
 	MapMarkNewSight(unit->Player,x,y,unit->Stats->SightRange,xd,yd);
 	if ( unit->Type->Transporter ) {
 	    for( i=0; i<MAX_UNITS_ONBOARD; ++i ) {
@@ -157,11 +157,7 @@ local int ActionMoveGeneric(Unit* unit,const Animation* anim)
 		}
 	    }
 	}
-#else
-	if( unit->Player==ThisPlayer ) {
-	    MapMarkNewSight(x,y,unit->Stats->SightRange,xd,yd);
-	}
-#endif
+
 	if( unit->Type->CanSeeSubmarine ) {
 	    MarkSubmarineSeen(unit->Player,x,y,unit->Stats->SightRange);
 	}
diff --git a/src/action/action_train.cpp b/src/action/action_train.cpp
index c3f1603b2..0e92ac100 100644
--- a/src/action/action_train.cpp
+++ b/src/action/action_train.cpp
@@ -109,10 +109,9 @@ global void HandleActionTrain(Unit* unit)
 	nunit->X=unit->X;
 	nunit->Y=unit->Y;
 	type=unit->Type;
-#ifdef NEW_FOW
 	// Set unit to belong to the building building it.
 	nunit->Next=unit;
-#endif
+
 	DropOutOnSide(nunit,LookingW,type->TileWidth,type->TileHeight);
 
 	// set life span
diff --git a/src/action/command.cpp b/src/action/command.cpp
index f7f6009bd..bbb890438 100644
--- a/src/action/command.cpp
+++ b/src/action/command.cpp
@@ -149,7 +149,6 @@ global void CommandQuit(int player)
 	    }
 	    Players[i].Allied&=~(1 << player);
 	    Players[i].Enemy&=~(1 << player);
-#ifdef NEW_FOW
 	    // Check all tiles and mark unseen ones as explored.
 	    if( Players[player].SharedVision&(1<<i)
 		    && (Players[i].SharedVision&(1<<player)) ) {
@@ -164,7 +163,6 @@ global void CommandQuit(int player)
 		    }
 		}
 	    }
-#endif
 	    Players[i].SharedVision&=~(1<<player);
 	    Players[player].Allied&=~(1<<i);
 	    Players[player].Enemy&=~(1<<i);
@@ -1405,7 +1403,6 @@ global void CommandSharedVision(int player,int state,int opponent)
     Unit* unit;
     
     if( state==0 ) {
-#ifdef NEW_FOW
 	// Check all tiles and mark unseen ones as explored.
 	if( Players[player].SharedVision&(1<<opponent)
 		&& (Players[opponent].SharedVision&(1<<player)) ) {
@@ -1420,11 +1417,9 @@ global void CommandSharedVision(int player,int state,int opponent)
 		}
 	    }
 	}
-#endif
 	Players[player].SharedVision&=~(1<<opponent);
     } else {
 	Players[player].SharedVision|=(1<<opponent);
-#ifdef NEW_FOW
 	// Check all tiles and mark SeenTiles for wood
 	if( Players[player].SharedVision&(1<<opponent)
 		&& Players[opponent].SharedVision&(1<<player)
@@ -1440,7 +1435,6 @@ global void CommandSharedVision(int player,int state,int opponent)
 		}
 	    }
 	}
-#endif
     }
     // MUST update seen buildings when vision is shared or unshared
     for( i=0; i<NumUnits; ++i ) {
diff --git a/src/game/game.cpp b/src/game/game.cpp
index a83591fcd..6bfff78fd 100644
--- a/src/game/game.cpp
+++ b/src/game/game.cpp
@@ -312,12 +312,6 @@ global void CreateGame(char* filename, WorldMap* map)
     }
     //GamePaused=1;
 
-    if( NetworkFildes!=-1 && TheMap.NoFogOfWar ) {
-	// FIXME: In multiplayer the map setup didn't reveal placed units.
-	TheMap.NoFogOfWar = 0;
-	MapUpdateVisible();
-	TheMap.NoFogOfWar = 1;
-    }
     if( FlagRevealMap ) {
 	RevealMap();
     }
diff --git a/src/include/map.h b/src/include/map.h
index 08a015010..43e5b75aa 100644
--- a/src/include/map.h
+++ b/src/include/map.h
@@ -220,9 +220,7 @@ typedef struct _map_field_ {
     // FIXME: Value can be removed, walls and regeneration can be handled
     //	      different.
     unsigned char	Value;		/// HP for walls/ Wood Regeneration
-#ifdef NEW_FOW
     unsigned char Visible[PlayerMax];	/// Seen counter 0 unexplored
-#endif
 #ifdef UNIT_ON_MAP
     union {
 	Unit*		Units;		/// An unit on the map field
@@ -253,11 +251,6 @@ typedef struct _map_field_ {
 #endif
 } MapField;
 
-#ifndef NEW_FOW
-// 0 Unexplored, 1 Explored, 2 PartialVisible, 3 CompleteVisible
-#define MapFieldExplored	0x0002	/// Field explored
-#endif
-
 // Not used until now:
 //#define MapFieldArray		0x0004	/// More than one unit on the field
 
@@ -400,7 +393,6 @@ extern  void MarkDrawEntireMap(void);
 //
 //	in map_fog.c
 //
-#ifdef NEW_FOW
     /// Mark the sight in range
 extern void MapMarkSight(const Player*,int,int,int);
     /// Mark the new sight in range
@@ -409,18 +401,10 @@ extern void MapMarkNewSight(const Player*,int,int,int,int,int);
 extern void MapUnmarkSight(const Player*,int,int,int);
     /// Find if a tile is visible (With shared vision)
 extern int IsTileVisible(const Player* player, int x, int y);
-#else
-    /// Mark the sight in range
-extern void MapMarkSight(int tx,int ty,int range);
-    /// Mark the new sight in range
-extern void MapMarkNewSight(int,int,int,int,int);
-#endif
     /// Mark tiles with fog of war to be redrawn
 extern void MapUpdateFogOfWar(int x,int y);
     ///	Update fog of war
 extern void UpdateFogOfWarChange(void);
-    /// Update visible areas for fog of war
-extern void MapUpdateVisible(void);
 
     /// Draw the map fog of war
 extern void DrawMapFogOfWar(const Viewport* vp,int x,int y);
@@ -556,7 +540,6 @@ extern void MapSetWall(unsigned x,unsigned y,int humanwall);
 #define CanMoveToMask(x,y,mask) \
 	!(TheMap.Fields[(x)+(y)*TheMap.Width].Flags&(mask))
 
-#ifdef NEW_FOW
 
     /// Check if a field for the user is explored
 #define IsMapFieldExplored(player,x,y) \
@@ -566,19 +549,6 @@ extern void MapSetWall(unsigned x,unsigned y,int humanwall);
 #define IsMapFieldVisible(player,x,y) \
     (IsTileVisible((player),(x),(y))>1)
 
-#else
-
-    /// Check if a field for the user is explored
-#define IsMapFieldExplored(player,x,y) \
-    (TheMap.Fields[(y)*TheMap.Width+(x)].Flags&MapFieldExplored)
-
-    /// Check if a field for the user is visibile
-#define IsMapFieldVisible(player,x,y) \
-    (TheMap.Visible[0][((y)*TheMap.Width+(x))/32] \
-	&(1<<(((y)*TheMap.Width+(x))%32)))
-
-#endif
-
 #ifdef UNITS_ON_MAP
     /// Is there a building on this field
 #define BuildingOnMapField(mf)	((mf)->Building != 0xffff)
diff --git a/src/include/unit.h b/src/include/unit.h
index a8f3ee5fd..79b48c975 100644
--- a/src/include/unit.h
+++ b/src/include/unit.h
@@ -485,9 +485,7 @@ struct _unit_ {
     UnitType*	SeenType;		/// Pointer to last seen unit-type
     Player*     Player;			/// Owner of this unit
     UnitStats*	Stats;			/// Current unit stats
-#ifdef NEW_FOW
     int		CurrentSightRange;	/// Unit's Current Sight Range
-#endif
 
 //	DISPLAY:
     UnitColors	Colors;			/// Player colors
@@ -680,9 +678,7 @@ extern Unit** UnitSlotFree;		/// First free unit slot
 
 extern Unit* Units[MAX_UNIT_SLOTS];	/// Units used
 extern int NumUnits;			/// Number of units used
-#if defined(NEW_FOW) && defined(BUILDING_DESTROYED)
 extern Unit* DestroyedBuildings;	/// List of DestroyedBuildings
-#endif
 extern Unit* CorpseList;		/// List of Corpses On Map
 
 //	in unit_draw.c (FIXME: could be moved into the user interface?)
@@ -746,10 +742,9 @@ extern void NearestOfUnit(const Unit* unit,int tx,int ty,int *dx,int *dy);
 extern void MarkSubmarineSeen(const Player* player,int x,int y,int range);
     /// Returns true, if unit is visible on the map
 extern int UnitVisibleOnMap(const Unit* unit);
-#if defined(NEW_FOW) && defined(BUILDING_DESTROYED)
     /// Returns true, if building is known on the map
-extern int BuildingVisibleOnMap(Unit* unit);
-#endif
+extern int BuildingVisibleOnMap(const Unit* unit);
+
     /// Updates seen data
 extern void UnitsMarkSeen(int x,int y);
     /// Checks and updates if a Unit's seen information
diff --git a/src/map/map.cpp b/src/map/map.cpp
index ad82139bb..a1a6cadd9 100644
--- a/src/map/map.cpp
+++ b/src/map/map.cpp
@@ -132,21 +132,12 @@ global void RevealMap(void)
 
     for (ix = 0; ix < TheMap.Width; ++ix) {
 	for (iy = 0; iy < TheMap.Height; ++iy) {
-#ifdef NEW_FOW
 	    int i;
 	    for (i = 0; i < PlayerMax; ++i) {
 		if (!TheMap.Fields[ix+iy*TheMap.Width].Visible[i]) {
 		    TheMap.Fields[ix+iy*TheMap.Width].Visible[i]=1;
 		}
 	    }
-#else
-	    TheMap.Fields[ix+iy*TheMap.Width].Flags |= MapFieldExplored;
-
-	    if (TheMap.NoFogOfWar) {
-		TheMap.Visible[0][((iy)*TheMap.Width+(ix))/32] |= 
-			(1<<(((iy)*TheMap.Width+(ix))%32));
-	    }
-#endif
 	    MapMarkSeenTile(ix, iy);
 	    UnitsMarkSeen(ix, iy);
 	}
diff --git a/src/map/map_fog.cpp b/src/map/map_fog.cpp
index 6f4c0ae9e..260dfba6f 100644
--- a/src/map/map_fog.cpp
+++ b/src/map/map_fog.cpp
@@ -150,23 +150,6 @@ local void* FogOfWarAlphaTable;
 --	Functions
 ----------------------------------------------------------------------------*/
 
-#ifdef NEW_FOW
-/**
-**	Mask
-*/
-local int MapExploredMask(void)
-{
-    return 8;
-}
-
-/**
-**	Mask
-*/
-local int MapVisibleMask(void)
-{
-    return 8;
-}
-
 /**
 **	Find the Number of Units that can see this square using a long
 **	lookup. So when a 225 Viewed square can be calculated properly.
@@ -255,13 +238,11 @@ global void MapMarkSight(const Player* player,int tx,int ty,int range)
     int width;
     int v;
     int p;
-#if defined(NEW_FOW) && defined(BUILDING_DESTROYED)
     int w;
     int h;
     Unit** corpses;
     Unit* unit;
     Unit* remove;
-#endif
 
     // Mark as seen
     if( !range ) {			// zero sight range is zero sight range
@@ -302,7 +283,6 @@ global void MapMarkSight(const Player* player,int tx,int ty,int range)
 		    case 1:		// Unseen
 			// FIXME: mark for screen update
 			TheMap.Fields[i+y*TheMap.Width].Visible[p]=2;
-#ifdef BUILDING_DESTROYED
 			if( player->Type == PlayerPerson ) {
 			    corpses = &DestroyedBuildings;
 			    while( *corpses ) {
@@ -324,7 +304,6 @@ global void MapMarkSight(const Player* player,int tx,int ty,int range)
 				}
 			    }
                         }
-#endif
 			if( IsTileVisible(ThisPlayer,i,y) > 1) {
 			    MapMarkSeenTile(i,y);
 			    UnitsMarkSeen(i,y);
@@ -392,7 +371,6 @@ global void MapUnmarkSight(const Player* player,int tx,int ty,int range)
     p=player->Player;
     ++range;
     range=range*range;
-    // FIXME: Can be speed optimized, no * += ...
     while( height-->=0 ) {
 	for( i=x; i<=x+width; ++i ) {
 	    if( PythagTree[abs(i-tx)][abs(y-ty)]<=range ) {
@@ -401,10 +379,11 @@ global void MapUnmarkSight(const Player* player,int tx,int ty,int range)
 		    case 255:
 			TheMap.Fields[i+y*TheMap.Width].Visible[p] =
 			    LookupSight(player,i,y);
-			++TheMap.Fields[i+y*TheMap.Width].Visible[p];
+			DebugCheck( TheMap.Fields[i+y*TheMap.Width].Visible[p] < 254 );
 		    case 0:		// Unexplored
 		    case 1:
-			// We are at minimum, don't do anything.
+			// We are at minimum, don't do anything shouldn't happen.
+			DebugCheck( 1 );
 			break;
 		    case 2:
 		    	// Check visible Tile, then deduct...
@@ -441,86 +420,6 @@ global void MapMarkNewSight(const Player* player,int tx,int ty,int range
     MapUnmarkSight(player,tx-dx,ty-dy,range);
 }
 
-#else
-
-/**
-**	Mark the sight of unit. (Explore and make visible.)
-**
-**	@param tx	X center position.
-**	@param ty	Y center position.
-**	@param range	Radius to mark.
-*/
-global void MapMarkSight(int tx,int ty,int range)
-{
-    int i;
-    int x;
-    int y;
-    int height;
-    int width;
-
-    if( !range ) {			// zero sight range is zero sight range
-	DebugLevel0Fn("Zero sight range\n");
-	return;
-    }
-
-    x=tx-range;
-    y=ty-range;
-    width=height=range+range;
-
-    //	Clipping
-    if( y<0 ) {
-	height+=y;
-	y=0;
-    }
-    if( x<0 ) {
-	width+=x;
-	x=0;
-    }
-    if( y+height>=TheMap.Height ) {
-	height=TheMap.Height-y-1;
-    }
-    if( x+width>=TheMap.Width ) {
-	width=TheMap.Width-x-1;
-    }
-
-    ++range;
-    range=range*range;
-    while( height-->=0 ) {
-	for( i=x; i<=x+width; ++i ) {
-	    if( PythagTree[abs(i-tx)][abs(y-ty)]<=range ) {
-		// FIXME: can combine more bits
-		if( !IsMapFieldVisible(ThisPlayer,i,y) ) {
-		    TheMap.Fields[i+y*TheMap.Width].Flags |= MapFieldExplored;
-		    TheMap.Visible[0][(i+y*TheMap.Width)/32]
-			    |= 1<<((i+y*TheMap.Width)%32);
-		    MapMarkSeenTile(i,y);
-		    //MustRedrawRow[y]=NEW_MAPDRAW;
-		    //MustRedrawTile[y*MapWidth+i]=NEW_MAPDRAW;
-		}
-	    }
-	}
-	++y;
-    }
-}
-
-/**
-**	Mark the new sight of unit. (Explore and make visible.)
-**
-**	@param tx	X map tile position of center.
-**	@param ty	Y map tile position of center.
-**	@param range	Radius to mark.
-**	@param dx	Unused: Delta in tiles in X direction.
-**	@param dy	Unused: Delta in tiles in Y direction.
-*/
-global void MapMarkNewSight(int tx,int ty,int range
-	,int dx __attribute__((unused)),int dy __attribute__((unused)))
-{
-    // FIXME: must write this
-    MapMarkSight(tx,ty,range);
-}
-
-#endif
-
 /**
 **	Update the fog of war, for the view point. Called from UpdateDisplay.
 **
@@ -540,10 +439,8 @@ global void MapUpdateFogOfWar(int x,int y)
     int n;
     int i;
     int sx,sy,ex,ey,dx,dy;
-#ifndef NEW_FOW
     int vis;
     int last;
-#endif
 
     // Tiles not visible last frame but are this frame must be redrawn.
     redraw_row=MustRedrawRow;
@@ -557,7 +454,6 @@ global void MapUpdateFogOfWar(int x,int y)
     while( dy<=ey ) {
 	sx=x+sy;
 	dx=TheUI.MapX;
-#ifdef NEW_FOW
 	while( dx<=ex ) {
 #ifdef NEW_MAPDRAW
 	    *redraw_row=NEW_MAPDRAW;
@@ -570,29 +466,6 @@ global void MapUpdateFogOfWar(int x,int y)
 	    ++sx;
 	    dx+=TileSizeX;
 	}
-#else
-	while( dx<=ex ) {
-	    last=TheMap.Fields[sx].VisibleLastFrame;
-#ifdef NEW_FOW
-	    vis=IsTileVisible(ThisPlayer->Player,x,y);
-	    if( vis > 1 && (!last || last&MapFieldPartiallyVisible) ) {
-#else
-	    vis=TheMap.Fields[sx].Flags&MapFieldVisible;
-	    if( vis && (!last || last&MapFieldPartiallyVisible) ) {
-#endif
-#ifdef NEW_MAPDRAW
-		*redraw_row=NEW_MAPDRAW;
-		*redraw_tile=NEW_MAPDRAW;
-#else
-		*redraw_row=*redraw_tile=1;
-#endif
-	    }
-
-	    ++redraw_tile;
-	    ++sx;
-	    dx+=TileSizeX;
-	}
-#endif
 	++redraw_row;
 	sy+=TheMap.Width;
 	dy+=TileSizeY;
@@ -628,9 +501,6 @@ global void UpdateFogOfWarChange(void)
 	for( y=0; y<TheMap.Height; y++ ) {
 	    for( x=0; x<TheMap.Width; ++x ) {
 		if( IsMapFieldExplored(ThisPlayer,x,y) ) {
-#ifndef NEW_FOW
-		    TheMap.Visible[0][(x+y*w)/32] |= 1<<((x+y*w)%32);
-#endif
 		    MapMarkSeenTile( x,y );
 		    UnitsMarkSeen( x,y );
 		}
@@ -640,132 +510,6 @@ global void UpdateFogOfWarChange(void)
     MarkDrawEntireMap();
 }
 
-/**
-**	Update visible of the map.
-**
-**	@todo	This function could be improved in speed and functionality.
-**		and is not needed in new fog of war.
-*/
-global void MapUpdateVisible(void)
-{
-#ifdef NEW_FOW
-    return;
-#else
-    int x;
-    int y;
-    Unit* unit;
-    Unit** units;
-    Unit* mine;
-    int nunits;
-    int i;
-    int j;
-    int shared_vision;
-#ifdef DEBUG
-    unsigned long t;
-#endif
-
-    shared_vision=0;
-
-    // No fog - only update revealers for holy vision
-    if ( TheMap.NoFogOfWar ) {
-	for( j=0; j<NumPlayers; ++j ) {
-	    if( &Players[j]!=ThisPlayer &&
-		!( (ThisPlayer->SharedVision&(1<<j)) &&
-		   (Players[j].SharedVision&(1<<ThisPlayer->Player)) ) ) {
-		continue;
-	    }
-
-	    nunits=Players[j].TotalNumUnits;
-	    units=Players[j].Units;
-
-	    if( &Players[j]==ThisPlayer ) {
-		for( i=0; i<nunits; ++i ) {
-		    unit=units[i];
-		    x=unit->X+unit->Type->TileWidth/2;
-		    y=unit->Y+unit->Type->TileHeight/2;
-		    if( unit->Removed && unit->Revealer ) {
-			MapMarkSight(x,y,10);
-		    }
-		}
-	    } else {
-		shared_vision=1;
-	    }
-	}
-	if( !shared_vision ) {
-	    // No shared vision, nothing else to update
-	    return;
-	}
-    }
-
-    // FIXME: rewrite this function, faster and better
-#ifdef DEBUG
-    t=GetTicks();
-#endif
-
-    //
-    //	Clear all visible flags.
-    //
-    if( !shared_vision ) {
-	memset(TheMap.Visible[0],0,(TheMap.Width*TheMap.Height)/8);
-    }
-
-    DebugLevel3Fn("Ticks Clear %lu\n" _C_ GetTicks()-t);
-
-    MarkDrawEntireMap();
-
-    DebugLevel3Fn("Ticks Mark  %lu\n" _C_ GetTicks()-t);
-
-    //
-    //	Mark all units visible range.
-    //
-    for( j=0; j<NumPlayers; ++j ) {
-	if( &Players[j]!=ThisPlayer &&
-	    !( (ThisPlayer->SharedVision&(1<<j)) &&
-	       (Players[j].SharedVision&(1<<ThisPlayer->Player)) ) ) {
-	    continue;
-	}
-
-	nunits=Players[j].TotalNumUnits;
-	units=Players[j].Units;
-	for( i=0; i<nunits; i++ ) {
-	    unit=units[i];
-	    x=unit->X+unit->Type->TileWidth/2;
-	    y=unit->Y+unit->Type->TileHeight/2;
-	    if( unit->Removed ) {
-		if( unit->Revealer ) {
-		    MapMarkSight(x,y,10);
-		    continue;
-		}
-		//
-		//	If peon is in the mine, the mine has a sight range too.
-		//  This is quite dirty code...
-		//  This is not a big deal as far as only mines are
-		//  concerned, but for more units (like parasited ones
-		//  in *craft), maybe we should create a dedicated queue...
-		if( unit->Orders[0].Action==UnitActionMineGold ) {
-		    mine=GoldMineOnMap(unit->X,unit->Y);
-		    if( mine ) {  // Somtimes, the peon is at home :).
-			MapMarkSight(mine->X+mine->Type->TileWidth/2
-				     ,mine->Y+mine->Type->TileHeight/2
-				     ,mine->Stats->SightRange);
-		    }
-		} else {
-		    continue;
-		}
-	    }
-
-	    if( unit->Orders[0].Action==UnitActionBuilded ) {
-		MapMarkSight(x,y,3);
-	    } else {
-		MapMarkSight(x,y,unit->Stats->SightRange);
-	    }
-	}
-    }
-
-    DebugLevel3Fn("Ticks Total %lu\n" _C_ GetTicks()-t);
-#endif
-}
-
 /*----------------------------------------------------------------------------
 --	Draw fog solid
 ----------------------------------------------------------------------------*/
@@ -1941,11 +1685,10 @@ global void DrawMapFogOfWar(const Viewport* vp, int x,int y)
     int ey;
     char* redraw_row;
     char* redraw_tile;
-#ifdef NEW_FOW
     int p;
     int my;
     int mx;
-#endif
+
 #ifdef TIMEIT
     u_int64_t sv=rdtsc();
     u_int64_t ev;
@@ -1955,9 +1698,7 @@ global void DrawMapFogOfWar(const Viewport* vp, int x,int y)
     redraw_row=MustRedrawRow;		// flags must redraw or not
     redraw_tile=MustRedrawTile;
 
-#ifdef NEW_FOW
     p=ThisPlayer->Player;
-#endif
 
     ex = vp->EndX;
     sy = y*TheMap.Width;
@@ -1979,7 +1720,6 @@ global void DrawMapFogOfWar(const Viewport* vp, int x,int y)
                   (*redraw_tile)--;
 #else
                   *redraw_tile=0;
-#ifdef NEW_FOW
 		    mx=(dx-vp->X)/TileSizeX + vp->MapX;
 		    my=(dy-vp->Y)/TileSizeY + vp->MapY;
 		    if( IsTileVisible(ThisPlayer,mx,my) || ReplayRevealMap ) {
@@ -1991,20 +1731,10 @@ global void DrawMapFogOfWar(const Viewport* vp, int x,int y)
 			VideoDrawTile(TheMap.Tiles[UNEXPLORED_TILE],dx,dy);
 #endif
 		    }
-#else
-		    if( TheMap.Fields[sx].Flags&MapFieldExplored || ReplayRevealMap ) {
-			DrawFogOfWarTile(sx,sy,dx,dy);
-		    } else {
-#ifdef USE_OPENGL
-			MapDrawTile(UNEXPLORED_TILE,dx,dy);
-#else
-			VideoDrawTile(TheMap.Tiles[UNEXPLORED_TILE],dx,dy);
-#endif
-		    }
-#endif
 #endif
 
-#if defined(NEW_FOW) && defined(DEBUG) && !defined(HIERARCHIC_PATHFINDER) && 0
+// Used to debug NEW_FOW problems
+#if !defined(HIERARCHIC_PATHFINDER) && 0
 extern int VideoDrawText(int x,int y,unsigned font,const unsigned char* text);
 #define GameFont 1
 	{
diff --git a/src/map/map_save.cpp b/src/map/map_save.cpp
index 0e8f5f291..e8d774399 100644
--- a/src/map/map_save.cpp
+++ b/src/map/map_save.cpp
@@ -60,9 +60,7 @@ global void SaveMap(FILE* file)
 {
     int w;
     int h;
-#ifdef NEW_FOW
     int i;
-#endif
 
     fprintf(file,"\n;;; -----------------------------------------\n");
     fprintf(file,";;; MODULE: map $Id$\n");
@@ -93,20 +91,11 @@ global void SaveMap(FILE* file)
 	    if( mf->Value ) {
 		fprintf(file," %d",mf->Value);
 	    }
-#ifdef NEW_FOW
 	    for( i=0; i < PlayerMax; ++i ) {
 		if( mf->Visible[i] == 1) {
 		    fprintf(file," explored %d",i);
 		}
 	    }
-#else
-	    if( IsMapFieldVisible(ThisPlayer,w,h) ) {
-		fprintf(file," visible");
-	    }
-	    if( mf->Flags&MapFieldExplored ) {
-		fprintf(file," explored");
-	    }
-#endif
 	    if( mf->Flags&MapFieldHuman ) {
 		fprintf(file," human");
 	    }
diff --git a/src/map/minimap.cpp b/src/map/minimap.cpp
index 187ba123d..44c2c67b0 100644
--- a/src/map/minimap.cpp
+++ b/src/map/minimap.cpp
@@ -234,9 +234,6 @@ global void DrawMinimap(int vx __attribute__((unused)),
     int w;
     int h;
     int h0;
-#ifndef NEW_FOW
-    int flags;
-#endif
 
     x=(FrameCounter/FRAMES_PER_SECOND)&1;
     if( (new_phase=red_phase-x) ) {
@@ -259,7 +256,6 @@ global void DrawMinimap(int vx __attribute__((unused)),
     if( MinimapWithTerrain ) {
 	for( my=0; my<MINIMAP_H; ++my ) {
 	    for( mx=0; mx<MINIMAP_W; ++mx ) {
-#ifdef NEW_FOW
 		if( IsMapFieldVisible(ThisPlayer,Minimap2MapX[mx],(Minimap2MapY[my]/TheMap.Width))
 			|| (IsMapFieldExplored(ThisPlayer,Minimap2MapX[mx],
 					(Minimap2MapY[my]/TheMap.Width)) &&
@@ -268,16 +264,6 @@ global void DrawMinimap(int vx __attribute__((unused)),
 		    VideoDrawPixel(((unsigned char*)MinimapGraphic->Frames)
 			    [mx+my*MINIMAP_W],x+mx,y+my);
 		}
-#else
-		flags=Minimap2MapX[mx]+Minimap2MapY[my];
-		if( (TheMap.Fields[flags].Flags&MapFieldExplored &&
-			( (TheMap.Visible[0][flags/32]&(1<<(flags%32)))
-			    || ((mx&1)==(my&1)) ))
-			    || ReplayRevealMap ) {
-		    VideoDrawPixel(((unsigned char*)MinimapGraphic->Frames)
-			    [mx+my*MINIMAP_W],x+mx,y+my);
-		}
-#endif
 	    }
 	}
     }
diff --git a/src/map/script_map.cpp b/src/map/script_map.cpp
index 9d84e2f4c..a8d7008e5 100644
--- a/src/map/script_map.cpp
+++ b/src/map/script_map.cpp
@@ -160,21 +160,10 @@ local SCM CclFreeCraftMap(SCM list)
 			    if( gh_exact_p(gh_car(field)) ) {
 				TheMap.Fields[i].Value=
 					gh_scm2int(gh_car(field));
-
-#ifdef NEW_FOW
 			    } else if( gh_eq_p(gh_car(field),
 					gh_symbol2scm("explored")) ) {
 				field=gh_cdr(field);
 				TheMap.Fields[i].Visible[gh_scm2int(gh_car(field))] = 1;
-#else
-			    } else if( gh_eq_p(gh_car(field),
-					gh_symbol2scm("visible")) ) {
-				TheMap.Visible[0][i/32] |= 1<<(i%32);
-			    } else if( gh_eq_p(gh_car(field),
-					gh_symbol2scm("explored")) ) {
-				TheMap.Fields[i].Flags|=MapFieldExplored;
-#endif
-
 			    } else if( gh_eq_p(gh_car(field),
 					gh_symbol2scm("human")) ) {
 				TheMap.Fields[i].Flags|=MapFieldHuman;
diff --git a/src/stratagus/mainloop.cpp b/src/stratagus/mainloop.cpp
index be1de73e8..4a0a34032 100644
--- a/src/stratagus/mainloop.cpp
+++ b/src/stratagus/mainloop.cpp
@@ -695,22 +695,19 @@ global void GameMainLoop(void)
 		case 1:
 		    UnitIncrementHealth();	// berserker healing
 		    break;
-		case 2:				// fog of war calculations
-		    MapUpdateVisible();
-		    break;
-		case 3:				// minimap update
+		case 2:				// minimap update
 		    MustRedraw|=RedrawMinimap;
 		    break;
-		case 4:				// computer players
+		case 3:				// computer players
 		    PlayersEachSecond();
 		    break;
-		case 5:				// forest grow
+		case 4:				// forest grow
 		    RegenerateForest();
 		    break;
-		case 6:				// overtaking units
+		case 5:				// overtaking units
 		    RescueUnits();
 		    break;
-		case 7:
+		case 6:
 		    BurnBuildings();		// burn buildings
 		    break;
 	    }
diff --git a/src/stratagus/missile.cpp b/src/stratagus/missile.cpp
index 4881ef6a6..7aa9b4e59 100644
--- a/src/stratagus/missile.cpp
+++ b/src/stratagus/missile.cpp
@@ -599,7 +599,6 @@ global void FireMissile(Unit* unit)
     }
 
     if( goal && RevealAttacker ) {	// attacking units are seen
-#ifdef NEW_FOW
 	Unit* target;
 	// FIXME: Don't use UnitTypeByIdent during runtime.
 	target = MakeUnit(UnitTypeByIdent("unit-reveal-attacker"), unit->Player);
@@ -611,11 +610,6 @@ global void FireMissile(Unit* unit)
 	target->CurrentSightRange=target->Stats->SightRange;
 	MapMarkSight(target->Player,unit->X,unit->Y,target->CurrentSightRange);
 	CheckUnitToBeDrawn(target);
-#else
-	if( goal->Player==ThisPlayer || IsSharedVision(ThisPlayer,goal) ) {
-	    MapMarkSight(unit->X,unit->Y,1);
-	}
-#endif
     }
 
     //
diff --git a/src/stratagus/script.cpp b/src/stratagus/script.cpp
index 162f3c5cf..8d346ebe1 100644
--- a/src/stratagus/script.cpp
+++ b/src/stratagus/script.cpp
@@ -737,9 +737,6 @@ global void InitCcl(void)
 #ifdef HIERARCHIC_PATHFINDER
     gh_define("freecraft-feature-hierarchic-pathfinder",SCM_BOOL_T);
 #endif
-#ifdef NEW_FOW
-    gh_define("freecraft-feature-new-fow",SCM_BOOL_T);
-#endif
 #ifdef NEW_AI
     gh_define("freecraft-feature-new-ai",SCM_BOOL_T);
 #endif
diff --git a/src/stratagus/spells.cpp b/src/stratagus/spells.cpp
index 215bbf014..7bcd2edc8 100644
--- a/src/stratagus/spells.cpp
+++ b/src/stratagus/spells.cpp
@@ -1545,10 +1545,9 @@ local int CastHolyVision(Unit* unit, const SpellType* spell, Unit* target,
     target->X = x;
     target->Y = y;
     target->TTL=GameCycle+CYCLES_PER_SECOND+CYCLES_PER_SECOND/2;
-#ifdef NEW_FOW
     target->CurrentSightRange=target->Stats->SightRange;
     MapMarkSight(target->Player,x,y,target->CurrentSightRange);
-#endif
+
     //target->TTL=GameCycle+target->Type->DecayRate*6*CYCLES_PER_SECOND;
     CheckUnitToBeDrawn(target);
     PlayGameSound(spell->Casted.Sound,MaxSampleVolume);
diff --git a/src/stratagus/stratagus.cpp b/src/stratagus/stratagus.cpp
index 728ae6b54..33bc0c6e7 100644
--- a/src/stratagus/stratagus.cpp
+++ b/src/stratagus/stratagus.cpp
@@ -1217,9 +1217,6 @@ local void PrintHeader(void)
 #ifdef NEW_MAPDRAW
     "NEW-MAPDRAW "
 #endif
-#ifdef NEW_FOW
-    "NEW-FOW "
-#endif
 #ifdef NEW_AI
     "NEW-AI "
 #endif
diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp
index c9723f8d2..2f9286196 100644
--- a/src/ui/interface.cpp
+++ b/src/ui/interface.cpp
@@ -987,12 +987,10 @@ global int HandleCheats(const char* Input)
     } else if (strcmp(Input, "fow on") == 0) {
 	TheMap.NoFogOfWar = 0;
 	UpdateFogOfWarChange();
-	MapUpdateVisible();
 	SetMessage("Fog Of War is now ON");
     } else if (strcmp(Input, "fow off") == 0) {
 	TheMap.NoFogOfWar = 1;
 	UpdateFogOfWarChange();
-	MapUpdateVisible();
 	SetMessage("Fog Of War is now OFF");
     } else if (strcmp(Input, "fast debug") == 0) {
 	SpeedMine = 10;	// speed factor for mine gold
diff --git a/src/ui/menus.cpp b/src/ui/menus.cpp
index 2d4a926fc..60c83668e 100644
--- a/src/ui/menus.cpp
+++ b/src/ui/menus.cpp
@@ -1859,12 +1859,10 @@ local void SetFogOfWar(Menuitem *mi __attribute__((unused)))
     if (!TheMap.NoFogOfWar) {
 	TheMap.NoFogOfWar = 1;
 	UpdateFogOfWarChange();
-	MapUpdateVisible();
 	CommandLog("input", NoUnitP, FlushCommands, -1, -1, NoUnitP, "fow off", -1);
     } else {
 	TheMap.NoFogOfWar = 0;
 	UpdateFogOfWarChange();
-	MapUpdateVisible();
 	CommandLog("input", NoUnitP, FlushCommands, -1, -1, NoUnitP, "fow on", -1);
     }
     MustRedraw &= ~RedrawMinimap;
diff --git a/src/unit/script_unit.cpp b/src/unit/script_unit.cpp
index 3301630e7..0ce548d64 100644
--- a/src/unit/script_unit.cpp
+++ b/src/unit/script_unit.cpp
@@ -553,21 +553,6 @@ local SCM CclUnit(SCM list)
 	} else if( gh_eq_p(value,gh_symbol2scm("next")) ) {
 	    unit->Next=UnitSlots[gh_scm2int(gh_car(list))];
 	    list=gh_cdr(list);
-	    DebugLevel0Fn("FIXME: 'next of unit %d\n" _C_ slot);
-#if 0
-	    // This is currently not used.
-	    if( !gh_null_p(value) ) {
-		str=gh_scm2newstr(value,NULL);
-
-		slot=strtol(str+1,NULL,16);
-		unit->Next=UnitSlots[slot];
-		if( !UnitSlots[slot] ) {
-		    DebugLevel0Fn("FIXME: Forward reference not supported\n");
-		}
-		free(str);
-	    }
-#endif
-#ifdef NEW_FOW
 	} else if( gh_eq_p(value,gh_symbol2scm("current-sight-range")) ) {
 	    unit->CurrentSightRange=gh_scm2int(gh_car(list));
 	    list=gh_cdr(list);
@@ -576,8 +561,7 @@ local SCM CclUnit(SCM list)
 	    list=gh_cdr(list);
 	    MapMarkSight(player,gh_scm2int(gh_car(value)),
 				gh_scm2int(gh_cadr(value)),
-				unit->CurrentSightRange);
-#endif    
+				unit->CurrentSightRange);   
 	} else if( gh_eq_p(value,gh_symbol2scm("tile")) ) {
 	    value=gh_car(list);
 	    list=gh_cdr(list);
@@ -743,27 +727,19 @@ local SCM CclUnit(SCM list)
 		// HACK: the building is not ready yet
 		unit->Player->UnitTypesCount[type->Type]--;
 	    }
-	    // FIXME: Does not load CorpseList Properly
-#if defined(NEW_FOW) && defined(BUILDING_DESTROYED)
+	    // FIXME: (mr-russ) Does not load CorpseList Properly
 	    if( unit->Type->Building &&
 		( unit->Orders[0].Action==UnitActionDie || unit->Destroyed )) {
 		DeadBuildingCacheInsert(unit);
 	    } else if( unit->Orders[0].Action==UnitActionDie ) {
 		CorpseCacheInsert(unit);
 	    }
-#else
-	    if( unit->Orders[0].Action==UnitActionDie ) {
-		CorpseCacheInsert(unit);
-	    }
-#endif
-#ifdef NEW_FOW
 	    if( unit->Orders[0].Action==UnitActionDie &&
 		unit->Type->CorpseScript ) {
 		MapMarkSight(unit->Player,unit->X+unit->Type->TileWidth/2,
 					unit->Y+unit->Type->TileHeight/2,
 					unit->CurrentSightRange);
 	    }
-#endif
 	} else if( gh_eq_p(value,gh_symbol2scm("saved-order")) ) {
 	    value=gh_car(list);
 	    list=gh_cdr(list);
diff --git a/src/unit/unit.cpp b/src/unit/unit.cpp
index 1431a885f..0f0de19e8 100644
--- a/src/unit/unit.cpp
+++ b/src/unit/unit.cpp
@@ -164,7 +164,6 @@ global void ReleaseUnit(Unit* unit)
 	//
 	unit->Destroyed=1;		// mark as destroyed
 
-#if defined(NEW_FOW) && defined(BUILDING_DESTROYED)
 	// Mark building as can't be destroyed, since it's still seen
         if( unit->Type->Building ) {
 	    int i;
@@ -196,7 +195,6 @@ global void ReleaseUnit(Unit* unit)
 	if( unit->Type->Building && unit->Visible != 0x0000 ) {
 	    return;
 	}
-#endif
 	RefsDebugCheck( !unit->Refs );
 	if( --unit->Refs>0 ) {
 	    DebugLevel2Fn("%lu:More references of %d #%d\n" _C_ GameCycle
@@ -210,15 +208,11 @@ global void ReleaseUnit(Unit* unit)
 
     // Update Corpse Cache
     if( unit->Orders[0].Action == UnitActionDie ) {
-#if defined(NEW_FOW) && defined(BUILDING_DESTROYED)
 	if( unit->Type->Building ) {
 	    DeadBuildingCacheRemove(unit);
 	} else {
 	    CorpseCacheRemove(unit);
 	}
-#else
-	CorpseCacheRemove(unit);
-#endif
     }
 
     RefsDebugCheck( unit->Refs );
@@ -541,7 +535,6 @@ global void PlaceUnit(Unit* unit,int x,int y)
     //	Units under construction have no sight range.
     //
     if( !unit->Constructed ) {
-#ifdef NEW_FOW
 	//
 	//	Update fog of war, if unit belongs to player on this computer
 	//
@@ -553,12 +546,7 @@ global void PlaceUnit(Unit* unit,int x,int y)
 	unit->Next = NULL;
 	unit->CurrentSightRange=unit->Stats->SightRange;
 	MapMarkSight(unit->Player,x,y,unit->CurrentSightRange);
-#else
-	if( unit->Player==ThisPlayer || 
-	    (ThisPlayer && IsSharedVision(ThisPlayer,unit)) ) {
-	    MapMarkSight(x,y,unit->Stats->SightRange);
-	}
-#endif
+
 	if( type->CanSeeSubmarine ) {
 	    MarkSubmarineSeen(unit->Player,x,y,unit->Stats->SightRange);
 	}
@@ -635,7 +623,6 @@ global void RemoveUnit(Unit* unit, Unit* host)
     const UnitType* type;
     unsigned flags;
 
-#ifdef NEW_FOW
     if( unit->Removed && unit->Next ) {
 	MapUnmarkSight(unit->Player,unit->Next->X+unit->Next->Type->TileWidth/2
 				,unit->Next->Y+unit->Next->Type->TileHeight/2
@@ -651,7 +638,6 @@ global void RemoveUnit(Unit* unit, Unit* host)
 			host->Y+host->Type->TileWidth/2,
 			unit->CurrentSightRange);
     }
-#endif
 
     if( unit->Removed ) {		// could happen!
 	// If unit is removed (inside) and building is destroyed.
@@ -1070,7 +1056,6 @@ global int UnitVisibleOnMap(const Unit* unit)
     return 0;
 }
 
-#if defined(NEW_FOW) && defined(BUILDING_DESTROYED)
 /**
 **	Returns true, if unit is visible for this player on the map.
 **	An unit is visible, if any field could be seen.
@@ -1080,7 +1065,7 @@ global int UnitVisibleOnMap(const Unit* unit)
 **	@param unit	Unit to be checked.
 **	@return		True if visible, false otherwise.
 */
-global int BuildingVisibleOnMap(Unit* unit)
+global int BuildingVisibleOnMap(const Unit* unit)
 {
     int x;
     int y;
@@ -1109,7 +1094,6 @@ global int BuildingVisibleOnMap(Unit* unit)
 
     return 0;
 }
-#endif
 
 /**
 **	FIXME: docu
@@ -1267,11 +1251,7 @@ global int UnitVisibleInViewport(const Viewport* vp, const Unit* unit)
 	    return 0;
 	}
 	// Visible submarine
-#if defined(NEW_FOW) && defined(BUILDING_DESTROYED)
 	if ( !(unit->Visible&(1<<ThisPlayer->Player)) && !unit->Type->Building ) {
-#else
-        if ( !(unit->Visible&(1<<ThisPlayer->Player)) ) {
-#endif
 	    return 0;
 	}
     }
@@ -1785,14 +1765,12 @@ global void ChangeUnitOwner(Unit* unit,Player* oldplayer,Player* newplayer)
     *unit->PlayerSlot=unit;
 
     unit->Player=newplayer;
-#ifdef NEW_FOW
     MapUnmarkSight(oldplayer,unit->X+unit->Type->TileWidth/2
 	,unit->Y+unit->Type->TileHeight/2
 	,unit->CurrentSightRange);
     MapMarkSight(unit->Player,unit->X+unit->Type->TileWidth/2
 	,unit->Y+unit->Type->TileHeight/2
 	,unit->CurrentSightRange);
-#endif
 
     //
     //	Must change food/gold and other.
@@ -2042,18 +2020,12 @@ global void DropOutOnSide(Unit* unit,int heading,int addx,int addy)
     int y;
     int i;
     int mask;
-#ifndef NEW_FOW
-    int n;
-    int nb;
-    Unit* table[UnitMax];
-#endif
 
     //FIXME: vladi: this debug check fails when used for teleporting...
     //DebugCheck( !unit->Removed );
 
     // FIXME: better and quicker solution, to find the building.
     x=y=-1;
-#ifdef NEW_FOW
     if( unit->Next ) {
 	x=unit->Next->X;
 	y=unit->Next->Y;
@@ -2062,24 +2034,7 @@ global void DropOutOnSide(Unit* unit,int heading,int addx,int addy)
 	y=unit->Y;
 	DebugLevel0Fn("No building?\n");
     }
-#else
-    n=SelectUnitsOnTile(unit->X,unit->Y,table);
-    for( nb=i=0; i<n; ++i ) {
-	if( UnitUnusable(table[i]) ) {
-	    continue;
-	}
-	if( table[i]->Type->Building ) {
-	    nb++;
-	    x=table[i]->X;
-	    y=table[i]->Y;
-	}
-    }
-    if (!nb) {	//Check if there actually is a building.
-	DebugLevel0Fn("No building?\n");
-	x=unit->X;
-	y=unit->Y;
-    }
-#endif
+
     mask=UnitMovementMask(unit);
 
     if( heading<LookingNE || heading>LookingNW) {
@@ -2176,16 +2131,12 @@ global void DropOutNearest(Unit* unit,int gx,int gy,int addx,int addy)
     int bestd;
     int mask;
     int n;
-#ifndef NEW_FOW
-    Unit* table[UnitMax];
-#endif
 
     DebugLevel3Fn("%d\n" _C_ UnitNumber(unit));
     DebugCheck( !unit->Removed );
 
     // FIXME: better and quicker solution, to find the building.
     x=y=-1;
-#ifdef NEW_FOW
     if( unit->Next ) {
 	x=unit->Next->X;
 	y=unit->Next->Y;
@@ -2194,18 +2145,7 @@ global void DropOutNearest(Unit* unit,int gx,int gy,int addx,int addy)
 	x=unit->X;
 	y=unit->Y;
     }
-#else
-    n=SelectUnitsOnTile(unit->X,unit->Y,table);
-    for( i=0; i<n; ++i ) {
-	if( UnitUnusable(table[i]) ) {
-	    continue;
-	}
-	if( table[i]->Type->Building ) {
-	    x=table[i]->X;
-	    y=table[i]->Y;
-	}
-    }
-#endif
+
     DebugCheck( x==-1 || y==-1 );
     mask=UnitMovementMask(unit);
 
@@ -2280,6 +2220,8 @@ global void DropOutAll(const Unit* source)
 {
     // FIXME: Rewrite this use source->Next;
     // FIXME: above is wrong, NEW_FOW use Next in another way.
+    // FIXME: (mr-russ) can't use source->Next, it's on map, and Next
+    // 		points to next unit on tile.
     Unit** table;
     Unit* unit;
     int i;
@@ -2723,11 +2665,7 @@ global Unit* FindGoldMine(const Unit* unit,int x,int y)
 		//
 		//	Look if there is a mine
 		//
-#ifdef NEW_FOW
 		if ( (mine=GoldMineOnMap(x,y)) && IsMapFieldExplored(unit->Player,x,y) ) {
-#else
-		if ( (mine=GoldMineOnMap(x,y)) ) {
-#endif
 		    if( destu ) {
 			n=max(abs(destx-x),abs(desty-y));
 			if( n<bestd ) {
@@ -3110,11 +3048,7 @@ global int FindWoodInSight(const Unit* unit,int* px,int* py)
 		//
 		//	Look if there is wood
 		//
-#ifdef NEW_FOW
 		if ( ForestOnMap(x,y) && IsMapFieldExplored(unit->Player,x,y) ) {
-#else
-		if ( ForestOnMap(x,y) ) {
-#endif
 		    if( destu ) {
 			n=max(abs(destx-x),abs(desty-y));
 			if( n<bestd ) {
@@ -3505,31 +3439,21 @@ global void LetUnitDie(Unit* unit)
 		    || !unit->Type->Animations->Die );
 	    UnitShowAnimation(unit,unit->Type->Animations->Die);
 	    DebugLevel0Fn("Frame %d\n" _C_ unit->Frame);
-#if defined(NEW_FOW) && defined(BUILDING_DESTROYED)
 	    unit->Visible = 0xffff;
 	    DeadBuildingCacheInsert(unit);	//Insert into corpse list
-#else
-	    CorpseCacheInsert(unit);
-#endif
-#ifdef NEW_FOW
-	MapMarkSight(unit->Player,unit->X,unit->Y,1);
-#endif
-	UnitMarkSeen(unit);
-#ifdef NEW_FOW
-	MapUnmarkSight(unit->Player,unit->X,unit->Y,1);
-#endif
+	    // FIXME: (mr-russ) Hack to make sure we see our own building destroyed
+	    MapMarkSight(unit->Player,unit->X,unit->Y,1);
+	    UnitMarkSeen(unit);
+	    MapUnmarkSight(unit->Player,unit->X,unit->Y,1);
 	    UnitMarkSeen(unit);
 	    return;
 	}
 
 	// no corpse available
-#ifdef NEW_FOW
+	// FIXME: (mr-russ) Hack to make sure we see our own building destroyed
 	MapMarkSight(unit->Player,unit->X,unit->Y,1);
-#endif
 	UnitMarkSeen(unit);
-#ifdef NEW_FOW
 	MapUnmarkSight(unit->Player,unit->X,unit->Y,1);
-#endif
 	ReleaseUnit(unit);
 	return;
     }
@@ -3567,14 +3491,12 @@ global void LetUnitDie(Unit* unit)
     unit->Orders[0].Action=UnitActionDie;
     CorpseCacheInsert(unit);	//Insert into corpse list
 
-#ifdef NEW_FOW
     if( unit->Type->CorpseType ) {
 	unit->CurrentSightRange=unit->Type->CorpseType->Stats->SightRange;
     } else {
 	unit->CurrentSightRange=0;
     }
     MapMarkSight(unit->Player,unit->X,unit->Y,unit->CurrentSightRange);
-#endif
 }
 
 /**
@@ -4267,9 +4189,7 @@ global void SaveUnit(const Unit* unit,FILE* file)
     }
     fprintf(file,"'direction %d\n  ",unit->Direction);
     fprintf(file,"'attacked %d\n ",unit->Attacked);
-#ifdef NEW_FOW
     fprintf(file," 'current-sight-range %d",unit->CurrentSightRange);
-#endif
     if( unit->Burning ) {
 	fprintf(file," 'burning");
     }
@@ -4285,13 +4205,11 @@ global void SaveUnit(const Unit* unit,FILE* file)
     if( unit->Selected ) {
 	fprintf(file," 'selected");
     }
-#ifdef NEW_FOW
     if( unit->Next && unit->Removed ) {
 	fprintf(file," 'host-tile '(%d %d) ",
 		unit->Next->X+unit->Next->Type->TileWidth/2,
 		unit->Next->Y+unit->Next->Type->TileHeight/2);
     }
-#endif
     fprintf(file," 'visible \"");
     for( i=0; i<PlayerMax; ++i ) {
 	fputc((unit->Visible&(1<<i)) ? 'X' : '_',file);
diff --git a/src/unit/unit_draw.cpp b/src/unit/unit_draw.cpp
index 54ba5c23e..1c851450b 100644
--- a/src/unit/unit_draw.cpp
+++ b/src/unit/unit_draw.cpp
@@ -1757,11 +1757,7 @@ local void DrawBuilding(Unit* unit)
     int constructed;
 
 
-#if defined(NEW_FOW) && defined(BUILDING_DESTROYED)
     visible=BuildingVisibleOnMap(unit);
-#else
-    visible=UnitVisibleOnMap(unit);
-#endif
     
     if( ReplayRevealMap ) {
 	type = unit->Type;
@@ -1913,7 +1909,6 @@ global void DrawUnits(const void* v)
 	corpses=&(*corpses)->Next;
     }
 
-#if defined(NEW_FOW) && defined(BUILDING_DESTROYED)
     //
     //  2a1) Destroyed Buildings
     //
@@ -1926,7 +1921,6 @@ global void DrawUnits(const void* v)
 	}
 	corpses=&(*corpses)->Next;
     }
-#endif
     //
     //  2b) buildings
     //
diff --git a/src/unit/upgrade.cpp b/src/unit/upgrade.cpp
index 550950936..c4b8e539c 100644
--- a/src/unit/upgrade.cpp
+++ b/src/unit/upgrade.cpp
@@ -40,9 +40,7 @@
 #include "depend.h"
 #include "interface.h"
 
-#ifdef NEW_FOW
 #include "map.h"
-#endif
 
 #include "myendian.h"
 
@@ -1278,17 +1276,15 @@ local void ConvertUnitTypeTo(Player* player,const UnitType* src,UnitType* dst)
 		    -unit->Stats->HitPoints;
 	    // don't have such unit now
 	    player->UnitTypesCount[src->Type]--;
-#ifdef NEW_FOW
-	    // UnMark the Unit sight for conversion
-	    if (unit->CurrentSightRange != dst->Stats[player->Player].SightRange ||
+	    // UnMark the Unit sight for conversion if on map
+	    if ((unit->CurrentSightRange != dst->Stats[player->Player].SightRange ||
 		src->TileWidth != dst->TileWidth ||
-		src->TileHeight != dst->TileHeight) {
+		src->TileHeight != dst->TileHeight) && !unit->Removed) {
 		MapUnmarkSight(player,
 			unit->X+unit->Type->TileWidth/2,
 			unit->Y+unit->Type->TileHeight/2,
 			unit->CurrentSightRange);
 	    }
-#endif
 	    unit->Type=dst;
 	    unit->Stats=&dst->Stats[player->Player];
 	    // and we have new one...
@@ -1297,17 +1293,15 @@ local void ConvertUnitTypeTo(Player* player,const UnitType* src,UnitType* dst)
 	    if( dst->CanCastSpell ) {
 		unit->Mana=MAGIC_FOR_NEW_UNITS;
 	    }
-#ifdef NEW_FOW
-	    if (unit->CurrentSightRange != dst->Stats[player->Player].SightRange ||
+	    if ((unit->CurrentSightRange != dst->Stats[player->Player].SightRange ||
 		src->TileWidth != dst->TileWidth ||
-		src->TileHeight != dst->TileHeight) {
+		src->TileHeight != dst->TileHeight) && !unit->Removed) {
 		unit->CurrentSightRange=dst->Stats[player->Player].SightRange;
 		MapMarkSight(player,
 			unit->X+unit->Type->TileWidth/2,
 			unit->Y+unit->Type->TileHeight/2,
 			unit->CurrentSightRange);
 	    }
-#endif
 	    
 	    CheckUnitToBeDrawn(unit);
 	//
@@ -1391,7 +1385,6 @@ local void ApplyUpgradeModifier(Player * player, const UpgradeModifier * um)
 	    // upgrade stats     
 	    UnitTypes[z].Stats[pn].AttackRange += um->Modifier.AttackRange;
 	    UnitTypes[z].Stats[pn].SightRange += um->Modifier.SightRange;
-#ifdef NEW_FOW
 	    //If Sight range is upgraded, we need to change EVERY unit
 	    //to the new range, otherwise the counters get confused.
 	    if (um->Modifier.SightRange) {
@@ -1401,7 +1394,8 @@ local void ApplyUpgradeModifier(Player * player, const UpgradeModifier * um)
 		numunits = FindUnitsByType(&UnitTypes[z],sightupgrade);
 		numunits--; // Change to 0 Start not 1 start
 		while (numunits >= 0) {
-		    if (sightupgrade[numunits]->Player->Player == player->Player) {
+		    if (sightupgrade[numunits]->Player->Player == player->Player &&
+		    	!sightupgrade[numunits]->Removed) {
 			/// Marking First is faster
 			MapMarkSight(player,
 					sightupgrade[numunits]->X+UnitTypes[z].TileWidth/2,
@@ -1416,7 +1410,6 @@ local void ApplyUpgradeModifier(Player * player, const UpgradeModifier * um)
 		    numunits--;
 		}
 	    }
-#endif
 	    UnitTypes[z].Stats[pn].BasicDamage += um->Modifier.BasicDamage;
 	    UnitTypes[z].Stats[pn].PiercingDamage
 		    += um->Modifier.PiercingDamage;