Index: orxonox/trunk/src/story_entities/world.cc
===================================================================
--- orxonox/trunk/src/story_entities/world.cc	(revision 3981)
+++ orxonox/trunk/src/story_entities/world.cc	(revision 3982)
@@ -479,6 +479,6 @@
 	    animation->addKeyFrame(Vector(0, 0, 0), Quaternion(0, Vector(0,1,0)), 1.0, ANIM_LINEAR, ANIM_SINE); 
 	    animation->addKeyFrame(Vector(0, 2, 0), Quaternion(M_PI, Vector(0,1,0)), 1.0, ANIM_LINEAR, ANIM_SINE); 
-	    animation->addKeyFrame(Vector(0, 0, 0), Quaternion(0, Vector(0,1,0)), 1.0, ANIM_LINEAR, ANIM_SINE); 
-
+	    animation->addKeyFrame(Vector(0, 0, 0), Quaternion(0, Vector(0,1,0)), 1.0, ANIM_LINEAR, ANIM_SINE);
+	    animation->playNextKeyframes(1);
 	    //animation->addKeyFrame(Vector(0, 0, 0), Quaternion(), 1.0, ANIM_LINEAR); 
 
Index: orxonox/trunk/src/util/animation/animation.cc
===================================================================
--- orxonox/trunk/src/util/animation/animation.cc	(revision 3981)
+++ orxonox/trunk/src/util/animation/animation.cc	(revision 3982)
@@ -34,4 +34,5 @@
 
   // setting default values
+  this->keyFramesToPlay = -1;
   this->localTime = 0.0;
   this->bRunning = true;
@@ -83,5 +84,6 @@
       break;
     case ANIM_INF_REPLAY:
-      this->replay();
+      this->rewind();
+      this->bRunning = true;
       break;
     case ANIM_INF_REWIND:
@@ -99,4 +101,15 @@
 void Animation::play()
 {
+  this->keyFramesToPlay = -1;
+  this->bRunning = true;
+}
+
+/**
+   \brief plays the Next n keyframes
+   \param n the Count of keyFrames to play.
+*/
+void Animation::playNextKeyframes(int n)
+{
+  this->keyFramesToPlay = n-1;
   this->bRunning = true;
 }
@@ -107,4 +120,5 @@
 void Animation::stop()
 {
+  this->keyFramesToPlay = -1;
   this->rewind();
   this->bRunning = true;
@@ -127,4 +141,4 @@
 {
   this->rewind();
-  this->bRunning = true;
+  this->play();
 }
Index: orxonox/trunk/src/util/animation/animation.h
===================================================================
--- orxonox/trunk/src/util/animation/animation.h	(revision 3981)
+++ orxonox/trunk/src/util/animation/animation.h	(revision 3982)
@@ -73,4 +73,5 @@
 
   void play(); // equals resume();
+  void playNextKeyframes(int n = 1);
   void stop();
   void pause();
@@ -99,4 +100,5 @@
   BaseObject* baseObject;         //!< The same as object in the derived classes, but with reference to BaseObject
   unsigned int keyFrameCount;     //!< The Count of KeyFrames.
+  int keyFramesToPlay;            //!< How many more Keyframes to play. if negative it will be ignored if 0 stop.
   bool bHandled;                  //!< If this Animation is handled by the AnimationPlayer.
   bool bRunning;                  //!< If the animation is running
Index: orxonox/trunk/src/util/animation/animation3d.cc
===================================================================
--- orxonox/trunk/src/util/animation/animation3d.cc	(revision 3981)
+++ orxonox/trunk/src/util/animation/animation3d.cc	(revision 3982)
@@ -138,14 +138,21 @@
       if (localTime >= this->currentKeyFrame->duration)
 	{
-	  // switching to the next Key-Frame
-	  this->localTime -= this->currentKeyFrame->duration;
-	  this->currentKeyFrame = this->nextKeyFrame;
-	  // checking, if we should still Play the animation
-	  if (this->currentKeyFrame == this->keyFrameList->lastElement())
-	    this->handleInfinity();
-	  this->nextKeyFrame = this->keyFrameList->nextElement(this->currentKeyFrame);
-	  this->setAnimFuncMov(this->currentKeyFrame->animFuncMov);
-	  this->setAnimFuncRot(this->currentKeyFrame->animFuncRot);
-	}
+	  if (likely(this->keyFramesToPlay != 0))
+	    {
+	      if (unlikely(this->keyFramesToPlay > 0))
+		--this->keyFramesToPlay;
+	      // switching to the next Key-Frame
+	      this->localTime -= this->currentKeyFrame->duration;
+	      this->currentKeyFrame = this->nextKeyFrame;
+	      // checking, if we should still Play the animation
+	      if (this->currentKeyFrame == this->keyFrameList->lastElement())
+		this->handleInfinity();
+	      this->nextKeyFrame = this->keyFrameList->nextElement(this->currentKeyFrame);
+	      this->setAnimFuncMov(this->currentKeyFrame->animFuncMov);
+	      this->setAnimFuncRot(this->currentKeyFrame->animFuncRot);
+	    }
+	  else
+	    this->pause();
+	}      
       /* now animate it */
       (this->*animFuncMov)(this->localTime);
Index: orxonox/trunk/src/util/animation/t_animation.h
===================================================================
--- orxonox/trunk/src/util/animation/t_animation.h	(revision 3981)
+++ orxonox/trunk/src/util/animation/t_animation.h	(revision 3982)
@@ -192,15 +192,22 @@
       if (localTime >= this->currentKeyFrame->duration)
 	{
-	  // switching to the next Key-Frame
-	  this->localTime -= this->currentKeyFrame->duration;
-
-	  this->currentKeyFrame = this->nextKeyFrame;
-	  // checking, if we should still Play the animation
-	  if (this->currentKeyFrame == this->keyFrameList->lastElement())
-	    this->handleInfinity();
-	  this->nextKeyFrame = this->keyFrameList->nextElement(this->currentKeyFrame);
-
-	  printf("%p from:%f to:%f\n", this->currentKeyFrame,this->currentKeyFrame->value, this->nextKeyFrame->value);
-	  this->setAnimFunc(this->currentKeyFrame->animFunc);	  
+	  if (likely(this->keyFramesToPlay != 0))
+	    {
+	      if (unlikely(this->keyFramesToPlay > 0))
+		--this->keyFramesToPlay;
+	      // switching to the next Key-Frame
+	      this->localTime -= this->currentKeyFrame->duration;
+	      
+	      this->currentKeyFrame = this->nextKeyFrame;
+	      // checking, if we should still Play the animation
+	      if (this->currentKeyFrame == this->keyFrameList->lastElement())
+		this->handleInfinity();
+	      this->nextKeyFrame = this->keyFrameList->nextElement(this->currentKeyFrame);
+	      
+	      printf("%p from:%f to:%f\n", this->currentKeyFrame,this->currentKeyFrame->value, this->nextKeyFrame->value);
+	      this->setAnimFunc(this->currentKeyFrame->animFunc);	  
+	    }
+	  else
+	    this->pause();
 	}
       
