diff --git a/src/include/unit.h b/src/include/unit.h
index e85036975..93154bfbc 100644
--- a/src/include/unit.h
+++ b/src/include/unit.h
@@ -608,6 +608,8 @@ extern void InitUnitsMemory(void);
 extern void ReleaseUnit(Unit* unit);
     ///	Create a new unit
 extern Unit* MakeUnit(UnitType* type,Player* player);
+    /// Place an unit on map
+extern void PlaceUnit(Unit* unit,int x,int y);
     ///	Create a new unit and place on map
 extern Unit* MakeUnitAndPlace(int x,int y,UnitType* type,Player* player);
     /// FIXME: more docu
@@ -618,7 +620,7 @@ extern void UnitLost(const Unit* unit);
 extern void UpdateForNewUnit(const Unit* unit,int upgrade);
     /// FIXME: more docu
 extern void NearestOfUnit(const Unit* unit,int tx,int ty,int *dx,int *dy);
-    /// Mark submarine as seen.
+    /// Mark submarine as seen
 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);
@@ -682,7 +684,7 @@ extern Unit* UnitOnScreen(Unit* unit,unsigned x,unsigned y);
 extern void DestroyUnit(Unit* unit);
     /// FIXME: more docu
 extern void DestroyAllInside(Unit* source);
-    /// Hit unit with damage, if destroyed give attacker the points.
+    /// Hit unit with damage, if destroyed give attacker the points
 extern void HitUnit(const Unit* attacker,Unit* target,int damage);
 
     /// Returns the map distance between two points
@@ -694,10 +696,10 @@ extern int MapDistanceToUnit(int x,int y,const Unit* dest);
     ///	Returns the map distance between two units
 extern int MapDistanceBetweenUnits(const Unit* src,const Unit* dst);
 
-    /// FIXME: more docu
+    /// Calculate the distance from current view point to coordinate
 extern int ViewPointDistance(int x,int y);
-    /// FIXME: more docu
-extern int ViewPointDistanceToUnit(Unit* dest);
+    /// Calculate the distance from current view point to unit
+extern int ViewPointDistanceToUnit(const Unit* dest);
 
     /// Return true, if unit is an enemy of the player
 extern int IsEnemy(const Player* player,const Unit* dest);
@@ -706,8 +708,12 @@ extern int IsAllied(const Player* player,const Unit* dest);
     /// Can this unit-type attack the other (destination)
 extern int CanTarget(const UnitType* type,const UnitType* dest);
 
-extern void SaveUnit(const Unit* unit,FILE* file);	/// save unit-structure
-extern void SaveUnits(FILE* file);			/// save all units
+    /// Generate a unit reference, a printable unique string for unit
+extern char* UnitReference(const Unit*);
+    /// save unit-structure
+extern void SaveUnit(const Unit* unit,FILE* file);
+    /// save all units
+extern void SaveUnits(FILE* file);
 
     /// Initialize unit module
 extern void InitUnits(void);
@@ -797,6 +803,10 @@ extern Unit* AttackUnitsInReactRange(const Unit* unit);
 
     /// Initialize data structures for groups
 extern void InitGroups(void);
+    /// Save groups
+extern void SaveGroups(FILE* file);
+    /// Cleanup groups
+extern void CleanGroups(void);
 
     // 2 functions to conseal the groups internal data structures...
     /// Get the number of units in a particular group
@@ -841,6 +851,13 @@ extern int AddSelectedUnitsInRectangle(int tx,int ty,int w,int h);
     /// Select the units in the selection rectangle
 extern int SelectUnitsInRectangle(int tx,int ty,int w,int h);
 
+    /// Init selections
+extern void InitSelections(void);
+    /// Save current selection state
+extern void SaveSelections(FILE* file);
+    /// Clean up selections
+extern void CleanSelections(void);
+
 //	in ccl_unit.c
 
     /// register ccl features