Index: branches/bsp_model/src/lib/graphics/importer/md3/md3_animation_cfg.cc
===================================================================
--- branches/bsp_model/src/lib/graphics/importer/md3/md3_animation_cfg.cc	(revision 8655)
+++ branches/bsp_model/src/lib/graphics/importer/md3/md3_animation_cfg.cc	(revision 8656)
@@ -195,4 +195,8 @@
     anim->first = atoi(tokens.back().c_str()); tokens.pop_back();
 
+    //some adjustements:
+    if( anim->fps == 0)
+      anim->fps = 33;
+
     PRINTF(0)("Animation: first frame: %i, num frames: %i, num loops: %i, fps: %i\n", anim->first, anim->numFrames, anim->numLoopFrames, anim->fps);
   }
Index: branches/bsp_model/src/lib/graphics/importer/md3/md3_model.cc
===================================================================
--- branches/bsp_model/src/lib/graphics/importer/md3/md3_model.cc	(revision 8655)
+++ branches/bsp_model/src/lib/graphics/importer/md3/md3_model.cc	(revision 8656)
@@ -45,6 +45,8 @@
     this->bDrawNormals = false;
 
+    this->time = 0.0f;
+
     // set the animation
-    this->interpolate(this->md3Data, this->config->getAnimation("Dead 3"), MD3_ANIM_NEXT, true);
+    this->interpolate(this->md3Data, this->config->getAnimation("Dead 3"), MD3_ANIM_NEXT, false);
   }
 
@@ -126,5 +128,6 @@
       return;
 
-    this->visit(this->md3Data);
+    this->visit(this->md3Data, time);
+
     this->tick(time, this->md3Data);
   }
@@ -154,4 +157,5 @@
     }
 
+
     //draw all meshes of current frame of this model
     for( int i = 0;  i < data->header->meshNum; i++)
@@ -165,6 +169,11 @@
       {
         //interpolate mesh frame between the 2 current mesh frames
-        frame = this->interpolateMeshFrame( data, data->meshes[data->animationState.currentFrame]->meshFrames,
-                                            data->meshes[data->animationState.nextFrame]->meshFrames,
+//         frame = this->interpolateMeshFrame( data,
+//                                             data->meshes[data->animationState.currentFrame]->meshFrames,
+//                                             data->meshes[data->animationState.nextFrame]->meshFrames,
+//                                             data->animationState.interpolationFraction, mesh, i);
+        frame = this->interpolateMeshFrame( data,
+                                            &mesh->meshFrames[data->animationState.currentFrame],
+                                            &mesh->meshFrames[data->animationState.nextFrame],
                                             data->animationState.interpolationFraction, mesh, i);
       }
@@ -175,4 +184,5 @@
       }
       data->tmpMesh[i] = frame;
+
 
       // draw vertex normals if needed
@@ -184,9 +194,12 @@
         {
           //interpolate vertex normals
-          this->interpolateVertexNormals(data, &mesh->normals[data->animationState.currentFrame],
+          this->interpolateVertexNormals(data,
+                                         &mesh->normals[data->animationState.currentFrame],
                                          &mesh->normals[data->animationState.nextFrame],
                                          data->animationState.interpolationFraction, mesh, i);
         }
       }
+
+
     }
 
@@ -546,5 +559,5 @@
    * visit the model
    */
-  void MD3Model::visit(MD3Data* data)
+  void MD3Model::visit(MD3Data* data, float time)
   {
     if ( (data->filename.find("lower") == std::string::npos &&
@@ -556,5 +569,5 @@
           data->animation->type == ALL // the animation is allways applicable
        )
-      this->doOp(data);
+      this->doOp(data, time);
 
     // visit children
@@ -624,5 +637,5 @@
    * @param data: the data of the model
    */
-  void MD3Model::doOp(MD3Data* data)
+  void MD3Model::doOp(MD3Data* data, float time)
   {
     // animation to be applied could have illegal data with respect to this model,
@@ -655,5 +668,6 @@
         if( data->bInterpolate)
         {
-          data->animationState.interpolationFraction += FRACTION;
+          data->animationState.interpolationFraction += time / data->animation->fps;
+          PRINTF(0)("anim state: +=%f, =%f\n", time / data->animation->fps, data->animationState.interpolationFraction);
           if( data->animationState.interpolationFraction >= 1.0f)
           {
@@ -664,8 +678,14 @@
         }
         else {
+          this->time += time * data->animation->fps;
+          PRINTF(0)("anim state: +=%f, =%f\n", time * data->animation->fps, this->time);
+          if(this->time > 1.0f)
+          {
           data->animationState.currentFrame = data->animationState.nextFrame;
           data->animationState.nextFrame = next(data, data->animationState.nextFrame);
+          this->time = 0.0f;
+          }
         }
-        PRINTF(0)("interpolate fraction: %f, curr frame: %i\n", data->animationState.interpolationFraction, data->animationState.currentFrame);
+        PRINTF(0)("interpolate fraction: %f, curr frame: %i, fps: %i, time: %f\n", data->animationState.interpolationFraction, data->animationState.currentFrame, data->animation->fps, time);
         break;
 
@@ -673,5 +693,5 @@
         if( data->bInterpolate)
         {
-          data->animationState.interpolationFraction -= FRACTION;
+          data->animationState.interpolationFraction -= time / data->animation->fps;
           if( data->animationState.interpolationFraction < 0.0f)
           {
Index: branches/bsp_model/src/lib/graphics/importer/md3/md3_model.h
===================================================================
--- branches/bsp_model/src/lib/graphics/importer/md3/md3_model.h	(revision 8655)
+++ branches/bsp_model/src/lib/graphics/importer/md3/md3_model.h	(revision 8656)
@@ -71,8 +71,8 @@
     void interpolate(MD3Data* data, MD3Animation* anim, int op, bool bInterpolate);
 
-    void visit(MD3Data* data);
+    void visit(MD3Data* data, float time);
     int next(MD3Data* data, int nr);
     int prev(MD3Data* data, int nr);
-    void doOp(MD3Data* data);
+    void doOp(MD3Data* data, float time);
 
 
@@ -85,4 +85,6 @@
     MD3AnimationCfg*    config;            //!< the config file parsed
 
+    float               time;
+
 };
 
