Index: branches/bsp_model/src/lib/graphics/importer/md3/md3_data.cc
===================================================================
--- branches/bsp_model/src/lib/graphics/importer/md3/md3_data.cc	(revision 8578)
+++ branches/bsp_model/src/lib/graphics/importer/md3/md3_data.cc	(revision 8579)
@@ -237,4 +237,14 @@
       fread(md, 1, sizeof(MD3TagData), pFile);
       this->boneFrames[i]->tags[j]->data = md;
+
+      this->boneFrames[i]->tags[j]->name = std::string(this->boneFrames[i]->tags[j]->data->name);
+      this->boneFrames[i]->tags[j]->position = Vector( this->boneFrames[i]->tags[j]->data->position[0],
+                                                       this->boneFrames[i]->tags[j]->data->position[1],
+                                                       this->boneFrames[i]->tags[j]->data->position[2]);
+      for( int k = 0; k < 3; k++)
+        for( int l = 0; l < 3; l++)
+          this->boneFrames[i]->tags[j]->matrix[k][l] = this->boneFrames[i]->tags[j]->data->matrix[k][l];
+
+      //PRINTF(0)("Tag name: %s\n", this->boneFrames[i]->tags[j]->name.c_str());
     }
   }
@@ -360,8 +370,9 @@
   for( int i = 0; i < this->meshes[mesh]->header->textureNum; i++) {
     PRINTF(0)(" texture file: %s\n", tex[i].fileName);
+#warning texture stuff hard coded. make this again
     std::string path("/home/boenzlip/tmp/q3/Downloads/MOH/q3mdl-alien3/");
     std::string path1(tex[i].fileName);
     std::string fullPath( path + path1);
-    this->meshes[mesh]->material[i].setDiffuseMap(/*tex[i].fileName*/ /*fullPath.c_str()*/ "maps/blue_torso.tga");
+    this->meshes[mesh]->material[i].setDiffuseMap(/*tex[i].fileName*/ /*fullPath.c_str()*/ "maps/yuri.tga");
     this->meshes[mesh]->material[i].setAmbient(1, 1, 1);
   }
Index: branches/bsp_model/src/lib/graphics/importer/md3/md3_model.cc
===================================================================
--- branches/bsp_model/src/lib/graphics/importer/md3/md3_model.cc	(revision 8578)
+++ branches/bsp_model/src/lib/graphics/importer/md3/md3_model.cc	(revision 8579)
@@ -37,8 +37,9 @@
   MD3Model::MD3Model(std::string filename, float scaling)
   {
-    this->md3Data = new MD3Data(filename, filename, scaling);
-
-//     MD3AnimationCfg cfg("/home/boenzlip/tmp/q3/Downloads/MOH/q3mdl-alien3/models/players/alien3/animation.cfg");
-
+
+    this->autoAssemblePlayerModel(filename, scaling);
+
+
+    // create the temporary data to work with (interpolation data)
     this->tmpBoneFrame = new MD3BoneFrame();
 
@@ -70,4 +71,13 @@
   }
 
+
+  /**
+   * auto assemples a player model
+   */
+  void MD3Model::autoAssemblePlayerModel(std::string filename, float scaling)
+  {
+    this->md3Data = new MD3Data(filename, filename, scaling);
+//     MD3AnimationCfg cfg("/home/boenzlip/tmp/q3/Downloads/MOH/q3mdl-alien3/models/players/alien3/animation.cfg");
+  }
 
 
@@ -313,5 +323,6 @@
   {
     glColor3f(1.0f, 1.0f, 1.0f);
-    glBegin( GL_TRIANGLES );
+
+    glBegin( GL_TRIANGLES);
     glScalef( 0.7f , 0.7f, 0.7f );
 
@@ -319,13 +330,13 @@
 
     // upload all triangles in the frame to OpenGL
-    for( int t = 0; t < mesh->header->triangleNum; t++) {
+    for( int t = 0; t < mesh->header->triangleNum; t++)
+    {
       // calc normal vector
       tmpVec1.x = frame[mesh->triangles[t].vertexOffset[1]][0] - frame[mesh->triangles[t].vertexOffset[0]][0];
+      tmpVec1.y = frame[mesh->triangles[t].vertexOffset[1]][1] - frame[mesh->triangles[t].vertexOffset[0]][1];
+      tmpVec1.z = frame[mesh->triangles[t].vertexOffset[1]][2] - frame[mesh->triangles[t].vertexOffset[0]][2];
+
       tmpVec2.x = frame[mesh->triangles[t].vertexOffset[2]][0] - frame[mesh->triangles[t].vertexOffset[0]][0];
-
-      tmpVec1.y = frame[mesh->triangles[t].vertexOffset[1]][1] - frame[mesh->triangles[t].vertexOffset[0]][1];
       tmpVec2.y = frame[mesh->triangles[t].vertexOffset[2]][1] - frame[mesh->triangles[t].vertexOffset[0]][1];
-
-      tmpVec1.z = frame[mesh->triangles[t].vertexOffset[1]][2] - frame[mesh->triangles[t].vertexOffset[0]][2];
       tmpVec2.z = frame[mesh->triangles[t].vertexOffset[2]][2] - frame[mesh->triangles[t].vertexOffset[0]][2];
 
@@ -333,32 +344,19 @@
       normal.normalize();
 
+//       PRINTF(0)("normal: %f, %f, %f\n", normal.x, normal.y, normal.z);
+
       glNormal3f(normal.x, normal.y, normal.z);
-      //no normalization necessary, GL_NORMALIZE is enabled!
-
-//       PRINTF(0)("drawing vertex: %f, %f, %f, normal: %f, %f\n",
-//       frame[mesh->triangles[t].vertexOffset[0]][0],
-//       frame[mesh->triangles[t].vertexOffset[0]][1],
-//       frame[mesh->triangles[t].vertexOffset[0]][2],
-//                normal.x, normal.y, normal.z);
-//       PRINTF(0)("drawing vertex: %f, %f, %f, normal: %f, %f\n",
-//       frame[mesh->triangles[t].vertexOffset[1]][0],
-//       frame[mesh->triangles[t].vertexOffset[1]][1],
-//       frame[mesh->triangles[t].vertexOffset[1]][2],
-//       normal.x, normal.y, normal.z);
-//       PRINTF(0)("drawing vertex: %f, %f, %f, normal: %f, %f\n",
-//       frame[mesh->triangles[t].vertexOffset[2]][0],
-//       frame[mesh->triangles[t].vertexOffset[2]][1],
-//       frame[mesh->triangles[t].vertexOffset[2]][2],
-//       normal.x, normal.y, normal.z);
-
-
       glTexCoord2fv( mesh->texVecs[mesh->triangles[t].vertexOffset[0]].textureCoord);
       glVertex3f( frame[mesh->triangles[t].vertexOffset[0]][0],
                   frame[mesh->triangles[t].vertexOffset[0]][2],
                   frame[mesh->triangles[t].vertexOffset[0]][1]);
+
+      glNormal3f(normal.x, normal.y, normal.z);
       glTexCoord2fv( mesh->texVecs[mesh->triangles[t].vertexOffset[1]].textureCoord);
       glVertex3f( frame[mesh->triangles[t].vertexOffset[1]][0],
                   frame[mesh->triangles[t].vertexOffset[1]][2],
                   frame[mesh->triangles[t].vertexOffset[1]][1]);
+
+      glNormal3f(normal.x, normal.y, normal.z);
       glTexCoord2fv( mesh->texVecs[mesh->triangles[t].vertexOffset[2]].textureCoord);
       glVertex3f( frame[mesh->triangles[t].vertexOffset[2]][0],
@@ -366,6 +364,6 @@
                   frame[mesh->triangles[t].vertexOffset[2]][1]);
     }
-
     glEnd();
+
   }
 
@@ -390,6 +388,6 @@
     float z2 = frame->maxs.z;
 
-//     glPushAttrib(GL_TEXTURE_2D);
-//     glPushAttrib(GL_LIGHTING);
+    glPushAttrib(GL_TEXTURE_2D);
+    glPushAttrib(GL_LIGHTING);
 
     glColor3f(1.0f,0.0f,0.0f);
@@ -430,6 +428,6 @@
     glEnd();
 
-//     glPopAttrib();
-//     glPopAttrib();
+     glPopAttrib();
+     glPopAttrib();
   }
 
Index: branches/bsp_model/src/lib/graphics/importer/md3/md3_model.h
===================================================================
--- branches/bsp_model/src/lib/graphics/importer/md3/md3_model.h	(revision 8578)
+++ branches/bsp_model/src/lib/graphics/importer/md3/md3_model.h	(revision 8579)
@@ -39,4 +39,7 @@
 
   private:
+
+    void autoAssemblePlayerModel(std::string filename, float scaling);
+
     void draw(MD3Data* data) const;
     void tick(float dt, MD3Data* data);
