diff --git a/src/map/map_fog.cpp b/src/map/map_fog.cpp
index b4d4d1558..3f1bf582b 100644
--- a/src/map/map_fog.cpp
+++ b/src/map/map_fog.cpp
@@ -9,11 +9,10 @@
 //	   FreeCraft - A free fantasy real time strategy game engine
 //
 /**@name map_fog.c	-	The map fog of war handling. */
-/*
-**	(c) Copyright 1999,2000 by Lutz Sammer and Vladi Shabanski
-**
-**	$Id$
-*/
+//
+//	(c) Copyright 1999-2001 by Lutz Sammer and Vladi Shabanski
+//
+//	$Id$
 
 //@{
 
@@ -338,7 +337,11 @@ global void MapUpdateVisible(void)
 	    //  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...
+#ifdef NEW_ORDERS
+	    if( unit->Orders[0].Action==UnitActionMineGold ) {
+#else
 	    if( unit->Command.Action==UnitActionMineGold ) {
+#endif
 	        mine=GoldMineOnMap(unit->X,unit->Y);
 		if( mine ) {  // Somtimes, the peon is at home :).
 #ifdef NEW_FOW
diff --git a/src/stratagus/oldmissile.cpp b/src/stratagus/oldmissile.cpp
index e7adf5728..697984540 100644
--- a/src/stratagus/oldmissile.cpp
+++ b/src/stratagus/oldmissile.cpp
@@ -660,9 +660,16 @@ global void FireMissile(Unit* unit)
     //	None missile hits immediately!
     //
     if( ((MissileType*)unit->Type->Missile.Missile)->Class==MissileClassNone ) {
+#ifdef NEW_ORDERS
+	// No goal, take target coordinates
+	if( !(goal=unit->Orders[0].Goal) ) {
+	    dx=unit->Orders[0].X;
+	    dy=unit->Orders[0].Y;
+#else
 	if( !(goal=unit->Command.Data.Move.Goal) ) {
 	    dx=unit->Command.Data.Move.DX;
 	    dy=unit->Command.Data.Move.DY;
+#endif
 	    if( WallOnMap(dx,dy) ) {
 		if( HumanWallOnMap(dx,dy) ) {
 		    // FIXME: don't use UnitTypeByIdent here, this is slow!
@@ -692,7 +699,12 @@ global void FireMissile(Unit* unit)
 		ReleaseUnit(goal);
 	    }
 	    // FIXME: should I clear this here?
+#ifdef NEW_ORDERS
+	    goal=unit->Orders[0].Goal=NULL;
+#else
 	    unit->Command.Data.Move.Goal=NULL;
+#endif
+
 	    return;
 	}
 	if( goal->Removed ) {
@@ -704,10 +716,18 @@ global void FireMissile(Unit* unit)
 #ifdef REFS_DEBUG
 	    DebugCheck( !goal->Refs );
 #endif
+#ifdef NEW_ORDERS
+	    goal=unit->Orders[0].Goal=NULL;
+#else
 	    unit->Command.Data.Move.Goal=NULL;
+#endif
 	    return;
 	}
+#ifdef NEW_ORDERS
+	if( !goal->HP || goal->Orders[0].Action==UnitActionDie ) {
+#else
 	if( !goal->HP || goal->Command.Action==UnitActionDie ) {
+#endif
 	    DebugLevel3Fn("Missile-none hits dead unit!\n");
 #ifdef REFS_DEBUG
 	    DebugCheck( !goal->Refs );
@@ -716,7 +736,11 @@ global void FireMissile(Unit* unit)
 #ifdef REFS_DEBUG
 	    DebugCheck( !goal->Refs );
 #endif
+#ifdef NEW_ORDERS
+	    goal=unit->Orders[0].Goal=NULL;
+#else
 	    unit->Command.Data.Move.Goal=NULL;
+#endif
 	    return;
 	}
 
@@ -729,7 +753,11 @@ global void FireMissile(Unit* unit)
 
     x=unit->X*TileSizeX+TileSizeX/2;	// missile starts in tile middle
     y=unit->Y*TileSizeY+TileSizeY/2;
+#ifdef NEW_ORDERS
+    if( (goal=unit->Orders[0].Goal) ) {
+#else
     if( (goal=unit->Command.Data.Move.Goal) ) {
+#endif
 	// Check if goal is correct unit.
 	if( goal->Destroyed ) {
 	    DebugLevel0Fn("destroyed unit\n");
@@ -740,7 +768,11 @@ global void FireMissile(Unit* unit)
 		ReleaseUnit(goal);
 	    }
 	    // FIXME: should I clear this here?
+#ifdef NEW_ORDERS
+	    goal=unit->Orders[0].Goal=NULL;
+#else
 	    unit->Command.Data.Move.Goal=NULL;
+#endif
 	    return;
 	}
 	DebugCheck( !goal->Type );	// Target invalid?
@@ -748,8 +780,13 @@ global void FireMissile(Unit* unit)
 	NearestOfUnit(goal,unit->X,unit->Y,&dx,&dy);
 	DebugLevel3Fn("Fire to unit at %d,%d\n",dx,dy);
     } else {
+#ifdef NEW_ORDERS
+	dx=unit->Orders[0].X;
+	dy=unit->Orders[0].Y;
+#else
 	dx=unit->Command.Data.Move.DX;
 	dy=unit->Command.Data.Move.DY;
+#endif
     }
 
     //
diff --git a/src/stratagus/selection.cpp b/src/stratagus/selection.cpp
index 5d35138b1..03f7537f7 100644
--- a/src/stratagus/selection.cpp
+++ b/src/stratagus/selection.cpp
@@ -9,11 +9,10 @@
 //	   FreeCraft - A free fantasy real time strategy game engine
 //
 /**@name selection.c	-	The units' selection. */
-/*
-**	(c) Copyright 1999,2000 by Patrice Fortier
-**
-**	$Id$
-*/
+//
+//	(c) Copyright 1999-2001 by Patrice Fortier
+//
+//	$Id$
 
 //@{
 
@@ -188,9 +187,15 @@ global int SelectUnitsByType(Unit* base)
 
     // if unit is a cadaver or hidden (not on map)
     // no unit can be selected.
+#ifdef NEW_ORDERS
+    if( base->Removed || base->Orders[0].Action==UnitActionDie ) {
+        return 0;
+    }
+#else
     if( base->Removed || base->Command.Action==UnitActionDie ) {
         return 0;
     }
+#endif
 
     UnSelectAll();
     Selected[0]=base;
@@ -386,10 +391,17 @@ global int SelectUnitsInRectangle(int tx,int ty,int w,int h)
 	    continue;
 	}
 	// FIXME: Can we get this?
+#ifdef NEW_ORDERS
+	if( !unit->Removed && unit->Orders[0].Action!=UnitActionDie ) { 
+	    SelectSingleUnit(unit);
+	    return 1;
+	}
+#else
 	if( !unit->Removed && unit->Command.Action!=UnitActionDie ) { 
 	    SelectSingleUnit(unit);
 	    return 1;
 	}
+#endif
     }
 
     //
@@ -432,10 +444,17 @@ global int SelectUnitsInRectangle(int tx,int ty,int w,int h)
 	    // FIXME: isn't it enough to see a field of the building?
 	    continue;
 	}
+#ifdef NEW_ORDERS
+	if( !unit->Removed && unit->Orders[0].Action!=UnitActionDie ) {
+	    SelectSingleUnit(unit);
+	    return 1;
+	}
+#else
 	if( !unit->Removed && unit->Command.Action!=UnitActionDie ) {
 	    SelectSingleUnit(unit);
 	    return 1;
 	}
+#endif
     }
 
     return 0;
diff --git a/src/stratagus/spells.cpp b/src/stratagus/spells.cpp
index 3dc236661..925048456 100644
--- a/src/stratagus/spells.cpp
+++ b/src/stratagus/spells.cpp
@@ -3,7 +3,7 @@
 //    |    __) \_  __ \_/ __ \_/ __ \/    \  \/\_  __ \__  \\   __\\   __\ 
 //    |     \   |  | \/\  ___/\  ___/\     \____|  | \// __ \|  |   |  |
 //    \___  /   |__|    \___  >\___  >\______  /|__|  (____  /__|   |__|
-//        \/                        \/     \/          \/                        \/
+//	  \/		    \/	   \/	     \/		   \/
 //  ______________________                           ______________________
 //                        T H E   W A R   B E G I N S
 //         FreeCraft - A free fantasy real time strategy game engine
@@ -728,8 +728,15 @@ global int SpellCast( int SpellId, Unit* unit, Unit* target, int x, int y )
 
 	   for( i=0; i<NumUnits; ++i ) {
 	       // FIXME: this tries to draw all corps, ohje
-	       if( (Units[i]->Type->Vanishes || Units[i]->Command.Action==UnitActionDie)
-	           && Units[i]->X == x && Units[i]->Y == y ) {
+#ifdef NEW_ORDERS
+	       if( (Units[i]->Type->Vanishes
+		    || Units[i]->Orders[0].Action==UnitActionDie)
+		      && Units[i]->X == x && Units[i]->Y == y ) {
+#else
+	       if( (Units[i]->Type->Vanishes
+		    || Units[i]->Command.Action==UnitActionDie)
+		      && Units[i]->X == x && Units[i]->Y == y ) {
+#endif
  	           //FIXME: URGENT: remove corpse
 		   //RemoveUnit( Units[i] );
 	           //UnitLost( Units[i] );