diff --git a/doc/todo.html b/doc/todo.html
index 4b7a563bd..22c192686 100644
--- a/doc/todo.html
+++ b/doc/todo.html
@@ -48,6 +48,7 @@
 <LI>Let target of attack command blink, if selected (like right click)
 <LI>gryphon rider attack animation could trigger oops (internal error).
 <LI>Wood counter should be reseted, avoiding evil tricks.
+<LI>Win32 version default.pud, both players are red! Linux SDL is ok!
 <LI>More suggestions?
 </UL>
 
diff --git a/src/action/actions.cpp b/src/action/actions.cpp
index 3b477c709..54f3b2f9d 100644
--- a/src/action/actions.cpp
+++ b/src/action/actions.cpp
@@ -228,6 +228,11 @@ local void HandleUnitAction(Unit* unit)
 */
 global void UnitActions(void)
 {
+#ifdef NEW_UNIT
+    UnitConflicts();			// start attacking
+
+    DebugLevel0("FIXME:\n");
+#else
     Unit* unit;
     int i;
 
@@ -243,6 +248,7 @@ global void UnitActions(void)
 	}
 	HandleUnitAction(unit);
     }
+#endif
 }
 
 //@}
diff --git a/src/include/unit.h b/src/include/unit.h
index aa465c16d..6bbb701c9 100644
--- a/src/include/unit.h
+++ b/src/include/unit.h
@@ -163,8 +163,10 @@ typedef enum _unit_voice_group_ {
 */
 struct _unit_ {
 #ifdef NEW_UNIT
-    short	Count;			/// Reference counter
+    short	Refs;			/// Reference counter
     UnitRef	Slot;			/// Assignd slot number
+    UnitRef	UnitSlot;		/// slot number in Units
+    UnitRef	PlayerSlot;		/// slot number in Player->Units
     Unit*	Next;			/// generic link pointer
 #else
     // FIXME: this will be removed
@@ -188,10 +190,10 @@ struct _unit_ {
 
     unsigned	Attacked : 1;		/// unit is attacked
     // FIXME: next not used!
-    unsigned	Visible : 1;		/// unit is visible (submarine)
+    //unsigned	Visible : 1;		/// unit is visible (submarine)
+    unsigned	Destroyed : 1;		/// unit is destroyed pending reference
     unsigned	Removed : 1;		/// unit is removed (not on map)
     unsigned	Selected : 1;		/// unit is selected
-    // FIXME: next not used!
     unsigned	Constructed : 1;	/// unit is in construction
 
     unsigned	Mana : 8;		/// mana points
@@ -282,8 +284,7 @@ struct _unit_ {
 #ifdef NEW_UNIT
 #define UnitNumber(unit)	((unit)->Slot)
 #else
-#define UnitNumber(unit) \
-    ((unit) - UnitsPool)
+#define UnitNumber(unit)	((unit)-UnitsPool)
 #endif
 
 /**
@@ -306,8 +307,11 @@ struct _unit_ {
 ----------------------------------------------------------------------------*/
 
 #ifdef NEW_UNIT
-extern Unit* UnitSlots[MAX_UNIT_SLOTS];	/// All units
+extern Unit* UnitSlots[MAX_UNIT_SLOTS];	/// All possible units
 extern Unit** UnitSlotFree; 		/// First free unit slot
+
+extern Unit* Units[MAX_UNIT_SLOTS];	/// Units used
+extern int NumUnits;			/// Number of units used
 #else
 extern int NumUnits;			/// Number of units used
 extern Unit** Units;			/// Units used
diff --git a/src/include/unittype.h b/src/include/unittype.h
index 29b77a0da..62fbcc47f 100644
--- a/src/include/unittype.h
+++ b/src/include/unittype.h
@@ -68,6 +68,7 @@ typedef struct __animations__ {
 */
 typedef struct _missile_config_ {
     char*	Name;			/// config missile name
+    // FIXME: void* is needed,because of recursive headers :(
     void*	Missile;		/// identifier to use to run time
 } MissileConfig;
 
diff --git a/src/map/minimap.cpp b/src/map/minimap.cpp
index 41cd2b5e3..92bdfb870 100644
--- a/src/map/minimap.cpp
+++ b/src/map/minimap.cpp
@@ -211,18 +211,20 @@ global void CreateMinimap(void)
 */
 global void DrawMinimap(int vx,int vy)
 {
-    Unit* unit;
+    static int RedPhase;
     int mx;
     int my;
+    int flags;
+    int x;
+    int y;
+#ifndef NEW_UNIT
+    UnitType* type;
+    Unit* unit;
+    int i;
     int w;
     int h;
     int h0;
-    UnitType* type;
-    int flags;
-    static int RedPhase;
-    int i;
-    int x;
-    int y;
+#endif
 
     RedPhase^=1;
 
@@ -250,6 +252,9 @@ global void DrawMinimap(int vx,int vy)
 	}
     }
 
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:");
+#else
     //
     //	Draw units on map
     //
@@ -309,6 +314,7 @@ global void DrawMinimap(int vx,int vy)
 	    }
 	}
     }
+#endif
 }
 
 local int OldMinimapCursorX;		/// Save MinimapCursorX
diff --git a/src/network/network.cpp b/src/network/network.cpp
index c20364db2..3e8f6995e 100644
--- a/src/network/network.cpp
+++ b/src/network/network.cpp
@@ -917,18 +917,16 @@ local void Abort(void) { abort(); }
 */
 local Unit* NetworkValidUnit(int nr,int id)
 {
-    Unit* unit;
-#if 0
-	// Old code. deadlocks abound.
-    unit=UnitsPool+ntohl(nr);
+#ifdef NEW_UNIT
+    nr = ntohl(nr);
 
-    // Id is incremented when the unit's slot is freed.
-    if( unit->Id!=ntohl(id) ) {
-	DebugLevel0("Unit slot reused or empty?\n");
-	Abort();
-	return NoUnitP;
+    if( UnitSlots[nr]->Slot==nr ) {
+	return UnitSlots[nr];
     }
+    DebugLevel0("Couldn't find unit %x", nr);
+    return NoUnitP;
 #else
+    Unit* unit;
     int i;
 
     nr = ntohl(nr);
@@ -936,21 +934,26 @@ local Unit* NetworkValidUnit(int nr,int id)
 	if (UnitsPool[i].Id == nr)
 	    break;
     }
-    if (i >= NumUnits) {
-	DebugLevel0("Couldn't find unit %x", nr);
-	Abort();
-	return NoUnitP;
-    }
-    unit = UnitsPool + i;
-#endif
+    IfDebug(
+	if (i >= NumUnits) {
+	    DebugLevel0("Couldn't find unit %x", nr);
+	    Abort();
+	    return NoUnitP;
+	}
+    );
 
-    if( UnitUnusable(unit) ) {
-	DebugLevel0("Unit Dying?\n");
-	Abort();
-	return NoUnitP;
-    }
+    unit = UnitsPool + i;
+
+    IfDebug(
+	if( UnitUnusable(unit) ) {
+	    DebugLevel0("Unit Dying?\n");
+	    Abort();
+	    return NoUnitP;
+	}
+    );
 
     return unit;
+#endif
 }
 
 /**
@@ -1298,13 +1301,22 @@ global void NetworkSendCommand(int command,Unit* unit,int x,int y
     // We must find another solution than this one...
     // guess this is a networked crash :)
     message.Data.Command.UnitNr=htonl(UnitNumber(unit));
+#ifdef NEW_UNIT
+    message.Data.Command.DestId=0;
+#else
     message.Data.Command.UnitId=htonl(unit->Id);
+#endif
     message.Data.Command.X=htonl(x);
     message.Data.Command.Y=htonl(y);
     if( dest ) {
 	// We must find another solution than this one...
+#ifdef NEW_UNIT
+	message.Data.Command.DestNr=htonl(UnitNumber(dest));
+	message.Data.Command.DestId=0;
+#else
 	message.Data.Command.DestNr=htonl(UnitNumber(dest));
 	message.Data.Command.DestId=htonl(dest->Id);
+#endif
     } else {
 	message.Data.Command.DestNr=htonl(-1);
 	message.Data.Command.DestId=htonl(-1);
diff --git a/src/sound/sound.cpp b/src/sound/sound.cpp
index 44bc53a1b..8303aadcc 100644
--- a/src/sound/sound.cpp
+++ b/src/sound/sound.cpp
@@ -167,6 +167,9 @@ local SoundId ChooseUnitVoiceSoundId(Unit *unit,UnitVoiceGroup voice) {
 */
 global void PlayUnitSound(Unit* unit,UnitVoiceGroup unit_voice_group)
 {
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:\n");
+#else
     InsertSoundRequest(unit,
 		       unit->Id,
 		       ViewPointDistanceToUnit(unit),
@@ -176,6 +179,7 @@ global void PlayUnitSound(Unit* unit,UnitVoiceGroup unit_voice_group)
 			||unit_voice_group==VoiceBuilding),
 		       0);
     DebugLevel3("Playing %d\n",unit_voice_group);
+#endif
 }
 
 /**
diff --git a/src/stratagus/oldmissile.cpp b/src/stratagus/oldmissile.cpp
index 3deda7834..c0b72c59c 100644
--- a/src/stratagus/oldmissile.cpp
+++ b/src/stratagus/oldmissile.cpp
@@ -514,9 +514,15 @@ global void FireMissile(Unit* unit)
 	    dx=unit->Command.Data.Move.DX;
 	    dy=unit->Command.Data.Move.DY;
 	    if( WallOnMap(dx,dy) ) {
-		// FIXME: don't use UnitTypeByIdent here, this is slow!
-		HitWall(dx,dy,CalculateDamageStats(unit->Stats,
-			UnitTypeByIdent("unit-human-wall")->Stats));
+		if( HumanWallOnMap(dx,dy) ) {
+		    // FIXME: don't use UnitTypeByIdent here, this is slow!
+		    HitWall(dx,dy,CalculateDamageStats(unit->Stats,
+			    UnitTypeByIdent("unit-human-wall")->Stats));
+		} else {
+		    // FIXME: don't use UnitTypeByIdent here, this is slow!
+		    HitWall(dx,dy,CalculateDamageStats(unit->Stats,
+			    UnitTypeByIdent("unit-orc-wall")->Stats));
+		}
 		return;
 	    }
 
@@ -525,11 +531,17 @@ global void FireMissile(Unit* unit)
 	}
 
 	// FIXME: make sure thats the correct unit.
+#ifdef NEW_UNIT
+	// Check if goal is correct unit.
+
+#endif
+
 	if( goal->Removed ) {
 	    DebugLevel1("Missile-none hits removed unit!\n");
 	    return;
 	}
 	if( !goal->HP || goal->Command.Action==UnitActionDie ) {
+	    DebugLevel1("Missile-none hits dead unit!\n");
 	    return;
 	}
 
diff --git a/src/stratagus/stratagus.cpp b/src/stratagus/stratagus.cpp
index 6aa248f7a..43ce5a383 100644
--- a/src/stratagus/stratagus.cpp
+++ b/src/stratagus/stratagus.cpp
@@ -344,7 +344,7 @@ local const char* MapName;		/// Filename for the map to load
 
     /// Name, Version, Copyright
 local char NameLine[] =
-    "ALE Clone V" VERSION ", (c) 1998-2000 by The FreeCraft Project.";
+    "FreeCraft V" VERSION ", (c) 1998-2000 by The FreeCraft Project.";
 
 /**
 **	Main, called from guile main.
@@ -507,7 +507,7 @@ global volatile void Exit(int err)
 		,PfCounterFail,PfCounterNotReachable
 		,PfCounterOk,PfCounterDepth);
     );
-    fprintf(stderr,"Thanks for playing ALE Clone.\n");
+    fprintf(stderr,"Thanks for playing FreeCraft.\n");
     exit(err);
 }
 
diff --git a/src/ui/script_ui.cpp b/src/ui/script_ui.cpp
index 1fd843445..18a903c35 100644
--- a/src/ui/script_ui.cpp
+++ b/src/ui/script_ui.cpp
@@ -247,7 +247,7 @@ local SCM CclDefineUI(SCM list)
 	}
     }
     if( !ui ) {
-	ui=calloc(sizeof(UI),1);
+	ui=calloc(1,sizeof(UI));
 	v=malloc(sizeof(UI*)*(i+2));
 	memcpy(v,UI_Table,i*sizeof(UI*));
 	CclFree(UI_Table);
diff --git a/src/unit/script_unittype.cpp b/src/unit/script_unittype.cpp
index b984f5424..ba9718b59 100644
--- a/src/unit/script_unittype.cpp
+++ b/src/unit/script_unittype.cpp
@@ -619,7 +619,7 @@ local Animation * GetSingleAnimation(SCM list){
   //printf("list %p %d",list,gh_list_p(list));
   length = gh_length(list);
 
-  finallist = (Animation *)calloc(sizeof(Animation),length);
+  finallist = (Animation *)calloc(length,sizeof(Animation));
   while(list){
     SCM value;
     Animation anim;
@@ -667,7 +667,7 @@ local SCM CclAnimType(SCM list)
   {
     int length = gh_length(list)-1;
     Animation ** whole_animation = 
-      (Animation **)calloc(sizeof(Animation*),length);
+      (Animation **)calloc(length,sizeof(Animation*));
     int type = gh_scm2int(gh_car(list));
     int cur = 0;
 
@@ -686,7 +686,7 @@ local SCM CclAnimType(SCM list)
       for( i=0; i<UnitTypeInternalMax; ++i ) {
 	unittype=UnitTypeByWcNum(i);
 	if( !unittype->Animations ) {
-	    unittype->Animations=calloc(sizeof(*unittype->Animations),1);
+	    unittype->Animations=calloc(1,sizeof(*unittype->Animations));
 	}
 	// FIXME: animations are shared?
 	CclFree(unittype->Animations->Still);
@@ -699,7 +699,7 @@ local SCM CclAnimType(SCM list)
       for( i=0; i<UnitTypeInternalMax; ++i ) {
 	unittype=UnitTypeByWcNum(i);
 	if( !unittype->Animations ) {
-	    unittype->Animations=calloc(sizeof(*unittype->Animations),1);
+	    unittype->Animations=calloc(1,sizeof(*unittype->Animations));
 	}
 	CclFree(unittype->Animations->Move);
 	unittype->Animations->Move=whole_animation[i];
@@ -711,7 +711,7 @@ local SCM CclAnimType(SCM list)
       for( i=0; i<UnitTypeInternalMax; ++i ) {
 	unittype=UnitTypeByWcNum(i);
 	if( !unittype->Animations ) {
-	    unittype->Animations=calloc(sizeof(*unittype->Animations),1);
+	    unittype->Animations=calloc(1,sizeof(*unittype->Animations));
 	}
 	CclFree(unittype->Animations->Die);
 	unittype->Animations->Die=whole_animation[i];
@@ -723,7 +723,7 @@ local SCM CclAnimType(SCM list)
       for( i=0; i<UnitTypeInternalMax; ++i ) {
 	unittype=UnitTypeByWcNum(i);
 	if( !unittype->Animations ) {
-	    unittype->Animations=calloc(sizeof(*unittype->Animations),1);
+	    unittype->Animations=calloc(1,sizeof(*unittype->Animations));
 	}
 	CclFree(unittype->Animations->Attack);
 	unittype->Animations->Attack=whole_animation[i];
diff --git a/src/unit/unit.cpp b/src/unit/unit.cpp
index 4585f07b3..facacfcd5 100644
--- a/src/unit/unit.cpp
+++ b/src/unit/unit.cpp
@@ -46,6 +46,13 @@
 --	Variables
 ----------------------------------------------------------------------------*/
 
+#ifdef NEW_UNIT
+global Unit* UnitSlots[MAX_UNIT_SLOTS];	/// All possible units
+global Unit** UnitSlotFree; 		/// First free unit slot
+
+global Unit* Units[MAX_UNIT_SLOTS];	/// Array of used slots
+global int NumUnits;			/// Number of slots used
+#else
 // The pool is currently hardcoded to MAX_UNITS
 global Unit* UnitsPool;			/// All units in play
 
@@ -54,6 +61,7 @@ global Unit** Units;			/// Array of used slots
 
 static Unit** FreeUnits;		/// Array of free slots
 static int NumFreeUnits;		/// Number of free slots
+#endif
 
 /*----------------------------------------------------------------------------
 --	Functions
@@ -64,6 +72,18 @@ static int NumFreeUnits;		/// Number of free slots
 */
 global void InitUnitsMemory(void)
 {
+#ifdef NEW_UNIT
+    Unit** slot;
+
+    // Initiallize the "list" of free unit slots
+
+    slot=UnitSlots+MAX_UNIT_SLOTS;
+    *--slot=NULL;
+    do {
+	slot[-1]=(void*)slot;
+    } while( --slot>UnitSlots );
+    UnitSlotFree=slot;
+#else
     int i;
 
     UnitsPool=(Unit*)calloc(MAX_UNITS,sizeof(Unit));
@@ -92,6 +112,7 @@ global void InitUnitsMemory(void)
     while( i-->0 ) {
 	FreeUnits[i]=&UnitsPool[MAX_UNITS-1-i];
     }
+#endif
 }
 
 /**
@@ -101,6 +122,34 @@ global void InitUnitsMemory(void)
 */
 global void FreeUnitMemory(Unit* unit)
 {
+#ifdef NEW_UNIT
+    Player* player;
+    Unit** slot;
+
+    if( unit->Refs>1 ) {
+	DebugLevel0(__FUNCTION__": too much references\n");
+    }
+
+    //	Remove the unit from the player's units list.
+    //		FIXME: a backpointer is faster
+
+    player=unit->Player;
+    if( player ) {
+	// looking for the unit slot...
+	for( slot=player->Units; *slot!=unit; slot++ ) {
+	    ;
+	}
+	*slot=player->Units[--player->TotalNumUnits];
+	player->Units[player->TotalNumUnits]=NULL;
+    }
+
+    slot=UnitSlots+unit->Slot;
+    DebugCheck( *slot!=unit );
+
+    *slot=(void*)UnitSlotFree;
+    free(unit);
+
+#else
     Unit** tmp;
     unsigned tmp_id;
     Player* player;
@@ -132,6 +181,7 @@ global void FreeUnitMemory(Unit* unit)
 
     // Update the 'free slots' array
     FreeUnits[NumFreeUnits++]=unit;
+#endif
 }
 
 /**
@@ -145,6 +195,9 @@ global void FreeUnitMemory(Unit* unit)
 global Unit* MakeUnit(UnitType* type,Player* player)
 {
     Unit* unit;
+#ifdef NEW_UNIT
+    Unit** slot;
+#endif
 
     IfDebug(
 	if( type>UnitTypes+sizeof(UnitTypes)/sizeof(*UnitTypes)
@@ -156,6 +209,18 @@ global Unit* MakeUnit(UnitType* type,Player* player)
 
     DebugLevel3(__FUNCTION__": %s(%Zd)\n",type->Name,player-Players);
 
+#ifdef NEW_UNIT
+    if( !(slot=UnitSlotFree) ) {	// should not happen!
+	DebugLevel0(__FUNCTION__": Maximum of units reached\n");
+	return NoUnitP;
+    }
+    UnitSlotFree=(void*)*slot;
+    *slot=unit=calloc(1,sizeof(Unit));
+    unit->Refs=1;
+    unit->Slot=slot-UnitSlots;
+
+    ...
+#else
     if( NumFreeUnits ) {
 	unit=FreeUnits[--NumFreeUnits];
 	FreeUnits[NumFreeUnits]=NULL;
@@ -164,6 +229,7 @@ global Unit* MakeUnit(UnitType* type,Player* player)
 	DebugLevel0("Maximum of units reached\n");
 	return NoUnitP;
     }
+#endif
 
     DebugLevel3(__FUNCTION__": %p %Zd\n",unit,UnitNumber(unit));
 
@@ -597,6 +663,9 @@ global int UnitVisible(const Unit* unit)
 */
 global void UnitIncrementMana(void)
 {
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:");
+#else
     Unit* unit;
     int i;
 
@@ -620,6 +689,7 @@ global void UnitIncrementMana(void)
 	    --unit->Blink;
 	}
     }
+#endif
 }
 
 /**
@@ -953,6 +1023,9 @@ global void DropOutNearest(Unit* unit,int gx,int gy,int addx,int addy)
 */
 global void DropOutAll(const Unit* source)
 {
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:");
+#else
     Unit* unit;
     int i;
 
@@ -968,6 +1041,7 @@ global void DropOutAll(const Unit* source)
 		    ,source->Type->TileHeight);
 	}
     }
+#endif
 }
 
 /*----------------------------------------------------------------------------
@@ -989,9 +1063,11 @@ global int CanBuildHere(UnitType* type,unsigned x,unsigned y)
     Unit* table[MAX_UNITS];
     int n;
     int i;
+#ifndef NEW_UNIT
     Unit* unit;
     int dx;
     int dy;
+#endif
 
     //
     //	Can't build outside the map
@@ -1008,6 +1084,9 @@ global int CanBuildHere(UnitType* type,unsigned x,unsigned y)
 	//	Gold deposit can't be build too near to gold-mine.
 	//
 	// FIXME: use unit-cache here.
+#ifdef NEW_UNIT
+	DebugLevel0("FIXME:");
+#else
         int i;
 	for( i=0; i<NumUnits; i++ ) {
 	  unit=Units[i];
@@ -1030,6 +1109,7 @@ global int CanBuildHere(UnitType* type,unsigned x,unsigned y)
 	    }
 	  }
 	}
+#endif
 	return 1;
     }
 
@@ -1056,6 +1136,9 @@ next:
 	//
 	//	Oil deposit can't be build too near to oil-patch.
 	//
+#ifdef NEW_UNIT
+	DebugLevel0("FIXME:");
+#else
 	// FIXME: use unit-cache here.
 	int i;
 	for( i=0; i<NumUnits; i++ ) {
@@ -1079,6 +1162,7 @@ next:
 	      }
 	    }
 	}
+#endif
     }
 
     if( type->GivesOil ) {
@@ -1192,6 +1276,11 @@ global int CanBuildUnitType(Unit* unit,UnitType* type,int x,int y)
 */
 global Unit* FindGoldMine(int x,int y)
 {
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:");
+
+    return NULL;
+#else
     Unit* unit;
     Unit* best;
     int best_d;
@@ -1219,6 +1308,7 @@ global Unit* FindGoldMine(int x,int y)
     }
     DebugLevel3(__FUNCTION__": %Zd %d,%d\n",UnitNumber(best),best->X,best->Y);
     return best;
+#endif
 }
 
 /**
@@ -1226,6 +1316,10 @@ global Unit* FindGoldMine(int x,int y)
 */
 global Unit* GoldDepositOnMap(int tx,int ty)
 {
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:");
+    return NULL;
+#else
     Unit* unit;
     UnitType* type;
     int i;
@@ -1247,6 +1341,7 @@ global Unit* GoldDepositOnMap(int tx,int ty)
 	return unit;
     }
     return NoUnitP;
+#endif
 }
 
 /**
@@ -1256,6 +1351,10 @@ global Unit* GoldDepositOnMap(int tx,int ty)
 */
 global Unit* FindGoldDeposit(const Player* player,int x,int y)
 {
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:");
+    return NULL;
+#else
     Unit* unit;
     Unit* best;
     Unit** units;
@@ -1289,6 +1388,7 @@ global Unit* FindGoldDeposit(const Player* player,int x,int y)
 
     DebugLevel3(__FUNCTION__": %Zd %d,%d\n",UnitNumber(best),best->X,best->Y);
     return best;
+#endif
 }
 
 /**
@@ -1296,6 +1396,10 @@ global Unit* FindGoldDeposit(const Player* player,int x,int y)
 */
 global Unit* WoodDepositOnMap(int tx,int ty)
 {
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:");
+    return NULL;
+#else
     Unit* unit;
     UnitType* type;
     int i;
@@ -1317,6 +1421,7 @@ global Unit* WoodDepositOnMap(int tx,int ty)
 	return unit;
     }
     return NoUnitP;
+#endif
 }
 
 /**
@@ -1574,6 +1679,10 @@ global Unit* FindOilDeposit(const Player* player,int x,int y)
 */
 global Unit* UnitOnScreen(Unit* ounit,unsigned x,unsigned y)
 {
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:");
+    return NULL;
+#else
     Unit* unit;
     Unit* nunit;
     Unit* funit;			// first possible unit
@@ -1635,6 +1744,7 @@ global Unit* UnitOnScreen(Unit* ounit,unsigned x,unsigned y)
 	return funit;
     }
     return nunit;
+#endif
 }
 
 /*----------------------------------------------------------------------------
@@ -1816,6 +1926,9 @@ global void DestroyAllInside(Unit* source)
 	return;
     }
 
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:");
+#else
     //
     // Destroy all units in buildings or Resources (mines...)
     //
@@ -1828,6 +1941,7 @@ global void DestroyAllInside(Unit* source)
 	    DestroyUnit(unit);
 	}
     }
+#endif
 }
 
 /**
@@ -2237,9 +2351,11 @@ global void SaveUnit(const Unit* unit,FILE* file)
     if( unit->Attacked ) {
 	fprintf(file,"\t'attacked\n");
     }
+    /*
     if( unit->Visible ) {
 	fprintf(file,"\t'visible\n");
     }
+    */
     if( unit->Removed ) {
 	fprintf(file,"\t'removed\n");
     }
@@ -2281,6 +2397,9 @@ global void SaveUnit(const Unit* unit,FILE* file)
 */
 global void SaveUnits(FILE* file)
 {
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:");
+#else
     Unit** unit;
 
     fprintf(file,"\n;;; -----------------------------------------\n");
@@ -2288,6 +2407,7 @@ global void SaveUnits(FILE* file)
     for( unit=Units; unit<&Units[NumUnits]; ++unit ) {
 	SaveUnit(*unit,file);
     }
+#endif
 }
 
 //@}
diff --git a/src/unit/unit_draw.cpp b/src/unit/unit_draw.cpp
index 3373963cc..487cf11db 100644
--- a/src/unit/unit_draw.cpp
+++ b/src/unit/unit_draw.cpp
@@ -681,12 +681,16 @@ global void DrawUnits(void)
     //
     //	2a) corpse aren't in the cache.
     //
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:");
+#else
     for( i=0; i<NumUnits; ++i ) {
 	unit=Units[i];
 	if( unit->Type->Vanishes || unit->Command.Action==UnitActionDie ) {
 	    DrawUnit(unit);
 	}
     }
+#endif
     //
     //	2b) buildings
     //
diff --git a/src/unit/unit_find.cpp b/src/unit/unit_find.cpp
index f940b0d7c..b8ec1f71f 100644
--- a/src/unit/unit_find.cpp
+++ b/src/unit/unit_find.cpp
@@ -57,6 +57,10 @@ global int SelectUnits(int x1,int y1,int x2,int y2,Unit** table)
 */
 global int FindUnitsByType(int type,Unit** table)
 {
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:");
+    return 1;
+#else
     Unit* unit;
     int num,i;
 
@@ -67,6 +71,7 @@ global int FindUnitsByType(int type,Unit** table)
 	}
     }
     return num;
+#endif
 }
 
 /**
@@ -134,6 +139,9 @@ global Unit* UnitOnMapTile(unsigned tx,unsigned ty)
 */
 global Unit* TargetOnMapTile(Unit* source,unsigned tx,unsigned ty)
 {
+#ifdef NEW_UNIT
+    DebugLevel0("FIXME:");
+#else
     Unit* unit;
     UnitType* type;
     int i;
@@ -143,7 +151,7 @@ global Unit* TargetOnMapTile(Unit* source,unsigned tx,unsigned ty)
     for( i=0; i<NumUnits; i++ ) {
 	unit=Units[i];
 	// unusable unit ?
-	// if( UnitUnusable(unit) ) {
+	// if( UnitUnusable(unit) ) 
 	if( unit->Removed || unit->Command.Action==UnitActionDie ) {
 	    continue;
 	}
@@ -157,6 +165,7 @@ global Unit* TargetOnMapTile(Unit* source,unsigned tx,unsigned ty)
 	}
 	return unit;
     }
+#endif
     return NoUnitP;
 }