Index: branches/presentation/src/lib/collision_reaction/cr_physics_ground_walk.cc
===================================================================
--- branches/presentation/src/lib/collision_reaction/cr_physics_ground_walk.cc	(revision 9100)
+++ branches/presentation/src/lib/collision_reaction/cr_physics_ground_walk.cc	(revision 9101)
@@ -94,5 +94,5 @@
     switch( ce->getType())
     {
-      /* collision in the X-AXIS */
+        /* collision in the X-AXIS */
       case COLLISION_TYPE_AXIS_X:
         front = collPos.len() - box->halfLength[0];
@@ -101,14 +101,15 @@
         if( front <= 0.0f )
         {
-          Vector dirX = entity->getAbsDirX(); dirX.y = 0.0f; dirX.normalize();
+          Vector dirX = entity->getAbsDirX();
+          dirX.y = 0.0f;
+          dirX.normalize();
           Vector backoff = dirX * front;
 
-          //entity->setAbsCoor(entity->getLastAbsCoor());
-          entity->shiftCoor(backoff);
-        }
-        // object is already in the wall
-        else if( ce->isInWall())
-        {
-              entity->setAbsCoor(entity->getLastAbsCoor());
+          entity->shiftCoor(backoff);
+        }
+        else if( ce->isInWall())
+        {
+          // object is already in the wall
+          entity->setAbsCoor(entity->getLastAbsCoor());
         }
         break;
@@ -122,14 +123,15 @@
         if( back <= 0.0f)
         {
-          Vector dirX = entity->getAbsDirX(); dirX.y = 0.0f; dirX.normalize();
+          Vector dirX = entity->getAbsDirX();
+          dirX.y = 0.0f;
+          dirX.normalize();
           Vector backoff = dirX * back * -1.0f;
 
-           //entity->setAbsCoor(entity->getLastAbsCoor());
-           entity->shiftCoor(backoff);
-        }
-        // object is already in the wall
-        else if( ce->isInWall())
-        {
-           entity->setAbsCoor(entity->getLastAbsCoor());
+          entity->shiftCoor(backoff);
+        }
+        else if( ce->isInWall())
+        {
+          // object is already in the wall
+          entity->setAbsCoor(entity->getLastAbsCoor());
         }
         break;
@@ -143,5 +145,5 @@
 
         // object is beneath the plane (ground)
-//         if(height >= 0.0f && height <= 0.0001f) break ;// Do nothing
+        //         if(height >= 0.0f && height <= 0.0001f) break ;// Do nothing
         if( height < 0.0f && -height < CR_MAX_WALK_HEIGHT)
         {
@@ -163,26 +165,27 @@
 
 
+        /* collision in the Z-AXIS */
+      case COLLISION_TYPE_AXIS_Z:
+
+        right = collPos.len()  - box->halfLength[2];
+
+        // object is beneath the plane (ground)
+        if( right <= 0.0f )
+        {
+          Vector dirZ = entity->getAbsDirZ();
+          dirZ.y = 0.0f;
+          dirZ.normalize();
+          Vector backoff = dirZ * right;
+          entity->shiftCoor(backoff);
+        }
+        else if( ce->isInWall())
+        {
+          // object is already in the wall
+          entity->setAbsCoor(entity->getLastAbsCoor());
+        }
+        break;
+
+
         // collision in the z-axis
-      case COLLISION_TYPE_AXIS_Z:
-
-        right = collPos.len()  - box->halfLength[2];
-
-        // object is beneath the plane (ground)
-        if( right <= 0.0f )
-        {
-          entity->setAbsCoor(entity->getAbsCoor());
-          Vector dirZ = entity->getAbsDirZ(); dirZ.y = 0.0f; dirZ.normalize();
-          Vector backoff = dirZ * right;
-          entity->shiftCoor(backoff);
-        }
-        // object is already in the wall
-        else if( ce->isInWall())
-        {
-          entity->setAbsCoor(entity->getLastAbsCoor());
-        }
-        break;
-
-
-         // collision in the z-axis
       case COLLISION_TYPE_AXIS_Z_NEG:
 
@@ -192,5 +195,7 @@
         if( left <= 0.0f )
         {
-          Vector dirZ = entity->getAbsDirZ(); dirZ.y = 0.0f; dirZ.normalize();
+          Vector dirZ = entity->getAbsDirZ();
+          dirZ.y = 0.0f;
+          dirZ.normalize();
           Vector backoff = dirZ * left*-1.0f;
           entity->shiftCoor(backoff);
Index: branches/presentation/src/world_entities/creatures/fps_player.cc
===================================================================
--- branches/presentation/src/world_entities/creatures/fps_player.cc	(revision 9100)
+++ branches/presentation/src/world_entities/creatures/fps_player.cc	(revision 9101)
@@ -27,4 +27,6 @@
 #include "weapons/cannon.h"
 #include "weapons/fps_sniper_rifle.h"
+
+#include "aabb.h"
 
 #include "key_mapper.h"
@@ -124,9 +126,21 @@
 
   this->getWeaponManager().setSlotCount(2);
-  this->getWeaponManager().setSlotPosition(0, Vector(1.5, -0.7, 1.1));
 //   this->getWeaponManager().setSlotDirection(0, Quaternion(M_PI_2, Vector(0,1,0)));
   this->getWeaponManager().setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
-  this->getWeaponManager().setSlotPosition(1, Vector(5.0, 0.0, 0.0));
   this->getWeaponManager().setSlotDirection(1, Quaternion(M_PI_4*.5, Vector(1,0,0)));
+
+
+  AABB* box = this->getModelAABB();
+  if( box != NULL)
+  {
+    this->getWeaponManager().setSlotPosition(0, Vector(1.5, box->halfLength[1] * 2.0f - 0.7, 1.1));
+    this->getWeaponManager().setSlotPosition(1, Vector(5.0, box->halfLength[1] * 2.0f, 0.0));
+  }
+  else
+  {
+    this->getWeaponManager().setSlotPosition(0, Vector(1.5, -0.7, 1.1));
+    this->getWeaponManager().setSlotPosition(1, Vector(5.0, 0.0, 0.0));
+  }
+
 
   this->getWeaponManager().setParentNode(&this->cameraNode);
@@ -191,6 +205,10 @@
 
 
-  State::getCameraNode()->setRelCoor(0,0,0);
-  State::getCameraTargetNode()->setRelCoor(10,0,0);
+  AABB* box = this->getModelAABB();
+  if( box != NULL)
+  {
+    State::getCameraNode()->setRelCoor(0, box->halfLength[1] * 2.0f, 0);
+    State::getCameraTargetNode()->setRelCoor(10, box->halfLength[1] * 2.0f, 0);
+  }
 }
 
@@ -209,5 +227,5 @@
 void FPSPlayer::tick (float time)
 {
-  
+
   if( this->bPosBut)
   {
@@ -215,5 +233,5 @@
     printf("mechanic:walkTo( %f, mheight, %f)\n",this->getAbsCoorX(),this->getAbsCoorZ());
   }
-  
+
   Playable::tick( time );
 
