Index: orxonox/trunk/src/lib/physics/physics_engine.cc
===================================================================
--- orxonox/trunk/src/lib/physics/physics_engine.cc	(revision 4557)
+++ orxonox/trunk/src/lib/physics/physics_engine.cc	(revision 4558)
@@ -1,3 +1,3 @@
-/* 
+/*
    orxonox - the future of 3D-vertical-scrollers
 
@@ -28,5 +28,5 @@
    \brief standard constructor
 */
-PhysicsEngine::PhysicsEngine() 
+PhysicsEngine::PhysicsEngine()
 {
    this->setClassName ("PhysicsEngine");
@@ -46,5 +46,5 @@
 
 */
-PhysicsEngine::~PhysicsEngine () 
+PhysicsEngine::~PhysicsEngine ()
 {
   PhysicsEngine::singletonRef = NULL;
@@ -71,5 +71,5 @@
 void PhysicsEngine::removePhysicsInterface(PhysicsInterface* physicsInterface)
 {
-  this->interfaces->remove(physicsInterface);  
+  this->interfaces->remove(physicsInterface);
 }
 
@@ -99,5 +99,5 @@
    \brief adds A Physical Connection to the List of Connections
    \param connection the Connection to add
-   
+
    Usually this is done through the constructor of PhysicshConnections
 */
@@ -110,5 +110,5 @@
    \brief removes A Physical Connection from the List of Connections
    \param connection the Connection to remove
-   
+
    Usually this is done through the destructor of PhysicsConnections
 */
@@ -130,4 +130,6 @@
 void PhysicsEngine::tick(float dt)
 {
+  /* go through all the PhysicsInterface(s) and tick them,
+  meaning let the fields work */
   tIterator<PhysicsConnection>* itPC = this->connections->getIterator();
   PhysicsConnection* enumPC = itPC->nextElement();
@@ -135,9 +137,10 @@
     {
       enumPC->apply();
+
       enumPC = itPC->nextElement();
     }
   delete itPC;
 
-
+  /* actually tick all the PhysicsInterfaces. Move the objects around */
   tIterator<PhysicsInterface>* itPI = this->interfaces->getIterator();
   PhysicsInterface* enumPI = itPI->nextElement();
@@ -145,4 +148,5 @@
     {
       enumPI->tickPhys(dt);
+
       enumPI = itPI->nextElement();
     }
Index: orxonox/trunk/src/lib/physics/physics_engine.h
===================================================================
--- orxonox/trunk/src/lib/physics/physics_engine.h	(revision 4557)
+++ orxonox/trunk/src/lib/physics/physics_engine.h	(revision 4558)
@@ -1,6 +1,6 @@
-/*! 
+/*!
     \file physics_engine.h
-    \brief Definition of the ... singleton Class
-    
+    \brief Definition of the PhysicsEngine-singleton Class
+
 */
 
@@ -18,5 +18,5 @@
 
 
-//! A default singleton class.
+//! A class, that brings things into motion through Physics.
 class PhysicsEngine : public BaseObject {
 
@@ -41,9 +41,11 @@
  private:
   PhysicsEngine(void);
-  static PhysicsEngine* singletonRef;      //!< the singleton reference of the PhysicsEngine
 
-  tList<PhysicsInterface>* interfaces;     //!< a list of physically based objects
-  tList<Field>* fields;                    //!< a list of physicsl fields.
-  tList<PhysicsConnection>* connections;   //!< a list of physical connections
+ private:
+  static PhysicsEngine*         singletonRef;         //!< the singleton reference of the PhysicsEngine
+
+  tList<PhysicsInterface>*      interfaces;           //!< a list of physically based objects
+  tList<Field>*                 fields;               //!< a list of physicsl fields.
+  tList<PhysicsConnection>*     connections;          //!< a list of physical connections
 };
 
Index: orxonox/trunk/src/lib/physics/physics_interface.cc
===================================================================
--- orxonox/trunk/src/lib/physics/physics_interface.cc	(revision 4557)
+++ orxonox/trunk/src/lib/physics/physics_interface.cc	(revision 4558)
@@ -44,4 +44,5 @@
    this->massChildren = 0;
    this->forceSum = Vector(0, 0, 0);
+   this->bForceApplied = false;
 
    PhysicsEngine::getInstance()->addPhysicsInterface(this);
@@ -97,4 +98,5 @@
   PNode* tmp = (PNode*) objectPointer;
   this->forceSum += field->calcForce(tmp->getAbsCoor());
+  this->bForceApplied = true;
 }
 
@@ -107,7 +109,10 @@
   //  Vector acc = this->forceSum / ( this->massChildren + this->mass );
   PNode* coorTick =  (PNode*)(this->objectPointer);
-  if (coorTick)
-    coorTick->setRelCoor(coorTick->getRelCoor() + this->forceSum/this->mass * dt);
+  if (this->bForceApplied && coorTick)
+  {
+    coorTick->shiftCoor((coorTick->getVelocity()+ this->forceSum/this->mass * dt)*dt);
+
+    this->bForceApplied = false;
+  }
   this->forceSum = Vector(0,0,0);
-  // todo: introduce kinematics
 }
Index: orxonox/trunk/src/lib/physics/physics_interface.h
===================================================================
--- orxonox/trunk/src/lib/physics/physics_interface.h	(revision 4557)
+++ orxonox/trunk/src/lib/physics/physics_interface.h	(revision 4558)
@@ -48,8 +48,12 @@
  private:
   void*          objectPointer;         //!< A Pointer to the object we handel (actually should be this)
+
+
   float          mass;                  //!< Mass of this object
   float          massChildren;          //!< Sum of the masses of the children nodes
+
   Vector         forceSum;              //!< Total central force for this tick
   Quaternion     momentumSum;           //!< Total momentum in this tick
+  bool           bForceApplied;         //!< If a force was applied to this object.
 };
 
Index: orxonox/trunk/src/story_entities/world.cc
===================================================================
--- orxonox/trunk/src/story_entities/world.cc	(revision 4557)
+++ orxonox/trunk/src/story_entities/world.cc	(revision 4558)
@@ -214,4 +214,5 @@
   this->debugWorldNr = worldID;
   this->entities = new tList<WorldEntity>();
+  this->cycle = 0;
 }
 
@@ -498,5 +499,5 @@
   Field* gravity = new Gravity();
   gravity->setMagnitude(10.0);
-  //  gravity->setParent(this->localCamera->getTarget());
+  gravity->setParent(this->localCamera->getTarget());
 
   // Add the Flow from the Emitter into the System
@@ -958,4 +959,5 @@
   while( !this->bQuitOrxonox && !this->bQuitCurrentGame) /* \todo implement pause */
     {
+      ++this->cycle;
       PRINTF(3)("World::mainloop() - number of entities: %i\n", this->entities->getSize());
       // Network
@@ -1058,12 +1060,13 @@
       this->trackManager->tick(this->dt);
       this->localCamera->tick(this->dt);
+      // tick the engines
       AnimationPlayer::getInstance()->tick(this->dtS);
-      PhysicsEngine::getInstance()->tick(this->dtS);
-
-
-      particleEngine->tick(this->dtS);
-      this->garbageCollector->tick(this->dtS);
-
-      /* actualy the Graphics Engine should tick the world not the other way around...
+      if (this->cycle > 5)
+        PhysicsEngine::getInstance()->tick(this->dtS);
+
+      ParticleEngine::getInstance()->tick(this->dtS);
+      GarbageCollector::getInstance()->tick(this->dtS);
+
+      /** actualy the Graphics Engine should tick the world not the other way around...
          but since we like the things not too complicated we got it this way around
          until there is need or time to do it the other way around.
Index: orxonox/trunk/src/story_entities/world.h
===================================================================
--- orxonox/trunk/src/story_entities/world.h	(revision 4557)
+++ orxonox/trunk/src/story_entities/world.h	(revision 4558)
@@ -1,6 +1,6 @@
-/*! 
+/*!
     \file world.h
     \brief Holds and manages all game data
-*/ 
+*/
 
 #ifndef _WORLD_H
@@ -81,5 +81,5 @@
   virtual void displayLoadScreen();
   virtual void releaseLoadScreen();
-  
+
   /* command node functions */
   bool command (Command* cmd);
@@ -90,6 +90,6 @@
   void spawn (WorldEntity* entity);
   void spawn (WorldEntity* entity, Vector* absCoor, Quaternion* absDir);
-  void spawn(WorldEntity* entity, PNode* parentNode, Vector* relCoor, Quaternion* relDir, 
-	     int parentingMode);
+  void spawn(WorldEntity* entity, PNode* parentNode, Vector* relCoor, Quaternion* relDir,
+             int parentingMode);
 
   const char* getPath();
@@ -102,4 +102,5 @@
 
   Uint32 lastFrame;                   //!< last time of frame
+  Uint32 cycle;                       //!< The cycle we are in (starts with 0 and rises with every frame)
   Uint32 dt;                          //!< time needed to calculate this frame
   float dtS;                          //!< The time needed for caluculations in seconds
