diff --git a/Source/Core/GZBuilder/md3/ModelReader.cs b/Source/Core/GZBuilder/md3/ModelReader.cs
index e1889794ed1b3944e0be65cc58bae724dacdfc0f..23c03004acb7cf8dce0085fc356bbfb15c05f315 100644
--- a/Source/Core/GZBuilder/md3/ModelReader.cs
+++ b/Source/Core/GZBuilder/md3/ModelReader.cs
@@ -138,7 +138,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
         }
 
         private static string ReadSurface(ref BoundingBoxSizes bbs, BinaryReader br, List<short> polyIndecesList, List<WorldVertex> vertList, ModeldefEntry mde) {
-            var start = br.BaseStream.Position;
+            int vertexOffset = vertList.Count;
+            long start = br.BaseStream.Position;
             string magic = ReadString(br, 4);
             if (magic != "IDP3")
                 return "error while reading surface: Magic should be 'IDP3', not '" + magic + "'";
@@ -157,7 +158,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
                 br.BaseStream.Position = start + ofsTriangles;
 
             for (int i = 0; i < numTriangles * 3; i++)
-                polyIndecesList.Add( (short)br.ReadInt32() );
+                polyIndecesList.Add( (short)(vertexOffset + br.ReadInt32()) );
 
 
             //Vertices
@@ -166,7 +167,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
 
             for (int i = 0; i < numVerts; i++) {
                 WorldVertex v = new WorldVertex();
-                v.c = 0xffffff;
+                v.c = -1; //white
                 v.u = br.ReadSingle();
                 v.v = br.ReadSingle();
 
@@ -177,7 +178,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
             if (start + ofsNormal != br.BaseStream.Position)
                 br.BaseStream.Position = start + ofsNormal;
 
-            for (int i = 0; i < numVerts; i++) {
+            for (int i = vertexOffset; i < vertexOffset + numVerts; i++) {
                 WorldVertex v = vertList[i];
 
                 v.y = -(float)br.ReadInt16() / 64 * mde.Scale.X;
@@ -291,6 +292,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
                     //uv
                     v.u = uvCoordsList[uvIndecesList[i]].X;
                     v.v = uvCoordsList[uvIndecesList[i]].Y;
+                    //color
+                    v.c = -1; //white
 
                     vertList[polyIndecesList[i]] = v;
                 }
diff --git a/Source/Core/Rendering/Renderer3D.cs b/Source/Core/Rendering/Renderer3D.cs
index 166d3412aaa957cee62cad475c093411f5dcb5e9..41c80a5acf556d0216ad748f4bd2723b1298c53c 100644
--- a/Source/Core/Rendering/Renderer3D.cs
+++ b/Source/Core/Rendering/Renderer3D.cs
@@ -1067,6 +1067,9 @@ namespace CodeImp.DoomBuilder.Rendering
                         graphics.Shaders.World3D.CameraPosition = new Vector4(cameraposition.x, cameraposition.y, cameraposition.z, getFogEnd(sector, sectorHasFogColor));
                     }
 
+                    //dbg
+                    //GZBuilder.GZGeneral.TraceInHeader("Using shader #"+wantedshaderpass);
+
                     for (int i = 0; i < group.Key.Model.NUM_MESHES; i++) {
                         if (!graphics.Shaders.Enabled) graphics.Device.SetTexture(0, group.Key.Model.Textures[i]);
                         graphics.Shaders.World3D.Texture1 = group.Key.Model.Textures[i];