Index: code/branches/presentationHS13/src/modules/docking/Dock.cc
===================================================================
--- code/branches/presentationHS13/src/modules/docking/Dock.cc	(revision 9904)
+++ code/branches/presentationHS13/src/modules/docking/Dock.cc	(revision 9907)
@@ -69,4 +69,6 @@
         XMLPortObject(Dock, DockingAnimation, "animations", addAnimation, getAnimation, xmlelement, mode);
         XMLPortEventSink(Dock, BaseObject, "execute", execute, xmlelement, mode);
+        XMLPortEventSink(Dock, BaseObject, "undocking", undocking, xmlelement, mode);
+
     }
 
@@ -76,5 +78,53 @@
 
         XMLPortEventSink(Dock, BaseObject, "execute", execute, xmlelement, mode);
-    }
+
+        XMLPortEventSink(Dock, BaseObject, "undocking", undocking, xmlelement, mode);
+    }
+
+
+    bool Dock::undocking(bool bTriggered, BaseObject* trigger)
+    {
+
+    	PlayerTrigger* pTrigger = orxonox_cast<PlayerTrigger*>(trigger);
+    	PlayerInfo* player = NULL;
+
+    	// Check whether it is a player trigger and extract pawn from it
+    	if(pTrigger != NULL)
+    	{
+    	      if(!pTrigger->isForPlayer()) {  // The PlayerTrigger is not exclusively for Pawns which means we cannot extract one.
+    	      orxout(verbose, context::docking) << "Docking:execute PlayerTrigger was not triggered by a player.." << endl;
+    	      return false;
+    	      }
+    	      player = pTrigger->getTriggeringPlayer();
+    	}
+    	else
+    	{
+    	      orxout(verbose, context::docking) << "Docking::execute Not a player trigger, can't extract pawn from it.." << endl;
+    	      return false;
+    	}
+    	if(player == NULL)
+    	{
+    	      orxout(verbose, context::docking) << "Docking::execute Can't retrieve PlayerInfo from Trigger. (" << trigger->getIdentifier()->getName() << ")" << endl;
+    	      return false;
+    	}
+
+ 	    if(bTriggered)
+    	{
+    	      // Add player to this Docks candidates
+    	      candidates_.insert(player);
+
+    	      // Show docking dialog
+    	      this->showUndockingDialogHelper(player);
+    	}
+    	else
+    	{
+    	      // Remove player from candidates list
+    	      candidates_.erase(player);
+    	}
+
+    	return true;
+    }
+
+
 
     bool Dock::execute(bool bTriggered, BaseObject* trigger)
@@ -119,4 +169,22 @@
         return true;
     }
+
+
+    void Dock::showUndockingDialogHelper(PlayerInfo* player)
+        {
+            assert(player);
+
+            if(!player->isHumanPlayer())
+                return;
+
+            if(GameMode::isMaster())
+            {
+                if(GameMode::showsGraphics())
+                    GUIManager::showGUI("UndockingDialog");
+            }
+            else
+                callStaticNetworkFunction(Dock::showDockingDialog, player->getClientID());
+
+        }
 
     void Dock::showDockingDialogHelper(PlayerInfo* player)
@@ -177,4 +245,5 @@
         if (animations_.empty())
             return dockingAnimationFinished(player);
+
         else
             DockingAnimation::invokeAnimation(true, player, animations_);
Index: code/branches/presentationHS13/src/modules/docking/Dock.h
===================================================================
--- code/branches/presentationHS13/src/modules/docking/Dock.h	(revision 9904)
+++ code/branches/presentationHS13/src/modules/docking/Dock.h	(revision 9907)
@@ -62,4 +62,5 @@
             // Trigger interface
             bool execute(bool bTriggered, BaseObject* trigger);
+            bool undocking(bool bTriggered, BaseObject* trigger);
 
             // XML interface
@@ -85,4 +86,6 @@
             void dock()
                 { this->dock(HumanController::getLocalControllerSingleton()->getPlayer()); }
+            void undock()
+                { this->undock(HumanController::getLocalControllerSingleton()->getPlayer()); }
             static unsigned int getNumberOfActiveDocks();
             static Dock* getActiveDockAtIndex(unsigned int index);
@@ -95,4 +98,5 @@
             // Network functions
             void showDockingDialogHelper(PlayerInfo* player);
+            void showUndockingDialogHelper(PlayerInfo* player);
             static void showDockingDialog();
 
Index: code/branches/presentationHS13/src/modules/docking/MoveToDockingTarget.cc
===================================================================
--- code/branches/presentationHS13/src/modules/docking/MoveToDockingTarget.cc	(revision 9904)
+++ code/branches/presentationHS13/src/modules/docking/MoveToDockingTarget.cc	(revision 9907)
@@ -66,6 +66,9 @@
     {
         //TODO: Investigate strange things...
-        this->parent_->detach((WorldEntity*)player->getControllableEntity());
+    	//this->parent_->detach((WorldEntity*)player->getControllableEntity());
 
+    	//TODO: Check the issue with this detach call.
+    	//I have removed the line because the detach call only caused a warning and terminated. And because I didn't find a attach call either.
+    	//Didn't find the need for the line.
         this->parent_->undockingAnimationFinished(player);
         return true;
Index: code/branches/presentationHS13/src/modules/objects/ForceField.cc
===================================================================
--- code/branches/presentationHS13/src/modules/objects/ForceField.cc	(revision 9904)
+++ code/branches/presentationHS13/src/modules/objects/ForceField.cc	(revision 9907)
@@ -45,7 +45,11 @@
     /*static*/ const std::string ForceField::modeSphere_s = "sphere";
     /*static*/ const std::string ForceField::modeInvertedSphere_s = "invertedSphere";
+
+    /*static*/ const std::string ForceField::modeHomogen_s = "homogen";
+
     /*static*/ const std::string ForceField::modeNewtonianGravity_s = "newtonianGravity";
     /*static*/ const float ForceField::gravConstant_ = 6.673e-11;
     /*static*/ const float ForceField::attenFactor_ = 1;
+
 
     /**
@@ -89,4 +93,5 @@
         XMLPortParam(ForceField, "length", setLength  , getLength  , xmlelement, mode).defaultValues(2000);
         XMLPortParam(ForceField, "mode", setMode, getMode, xmlelement, mode);
+        XMLPortParam(ForceField, "forcedirection", setForceDirection, getForceDirection, xmlelement, mode).defaultValues(Vector3(0,-400,0));
     }
     
@@ -196,4 +201,19 @@
             }
         }
+        else if(this->mode_ == forceFieldMode::homogen)
+        {
+        	// Iterate over all objects that could possibly be affected by the ForceField.
+        	for (ObjectList<MobileEntity>::iterator it = ObjectList<MobileEntity>::begin(); it != ObjectList<MobileEntity>::end(); ++it)
+        	{
+        		Vector3 distanceVector = it->getWorldPosition() - this->getWorldPosition();
+        	    float distance = distanceVector.length();
+        	    if (distance < this->radius_ && distance > this->massRadius_)
+        	    {
+        	    	// Add a Acceleration in forceDirection_.
+        	    	// Vector3(0,0,0) is the direction, where the force should work.
+        	    	it->addAcceleration(forceDirection_ , Vector3(0,0,0));
+        	    }
+        	}
+        }
     }
 
@@ -214,4 +234,8 @@
         else if(mode == ForceField::modeNewtonianGravity_s)
             this->mode_ = forceFieldMode::newtonianGravity;
+
+        else if(mode == ForceField::modeHomogen_s)
+            this->mode_ = forceFieldMode::homogen;
+
         else
         {
@@ -239,4 +263,8 @@
             case forceFieldMode::newtonianGravity:
                 return ForceField::modeNewtonianGravity_s;
+
+            case forceFieldMode::homogen:
+                return ForceField::modeHomogen_s;
+
             default:
                 return ForceField::modeTube_s;
Index: code/branches/presentationHS13/src/modules/objects/ForceField.h
===================================================================
--- code/branches/presentationHS13/src/modules/objects/ForceField.h	(revision 9904)
+++ code/branches/presentationHS13/src/modules/objects/ForceField.h	(revision 9907)
@@ -1,2 +1,3 @@
+
 /*
  *   ORXONOX - the hottest 3D action shooter ever to exist
@@ -57,5 +58,6 @@
             sphere, //!< The ForceField has a spherical shape.
             invertedSphere, //!< The ForceField has a spherical shape but "inverted" behavior.
-            newtonianGravity //!< The ForceField imitates Newtonian gravitation for use in stellar bodies.
+            newtonianGravity, //!< The ForceField imitates Newtonian gravitation for use in stellar bodies.
+            homogen //!< Local homogenous Force field with changeable direction for the Space Station
         };
     }
@@ -66,4 +68,5 @@
 
         The following parameters can be set to specify the behavior of the ForceField.
+        - @b forcedirection The direction and the strength of the homogenous force field. Default is 0,-400,0.
         - @b velocity The amount of force the ForceField excerts. Default is 100.
         - @b diameter The diameter of the ForceField. Default is 500.
@@ -147,4 +150,11 @@
                 { return this->halfLength_*2; }
 
+            inline void setForceDirection(Vector3 forcedir)
+                { this->forceDirection_ = forcedir; }
+
+            inline Vector3 getForceDirection()
+                { return this->forceDirection_; }
+
+
             void setMode(const std::string& mode); //!< Set the mode of the ForceField.
             const std::string& getMode(void); //!< Get the mode of the ForceField.
@@ -156,4 +166,6 @@
             static const std::string modeInvertedSphere_s;
             static const std::string modeNewtonianGravity_s;
+
+            static const std::string modeHomogen_s;
 
             float velocity_; //!< The velocity of the ForceField.
@@ -167,4 +179,5 @@
             //! Attenuation factor for Newtonian ForceFields
             static const float attenFactor_;
+            Vector3 forceDirection_;
   };
 }
