--- /dev/null
+--- a/OgreMain/include/OgreProgressiveMeshGenerator.h
++++ b/OgreMain/include/OgreProgressiveMeshGenerator.h
+@@ -215,7 +215,40 @@
+ void tuneContainerSize();
+ void addVertexData(VertexData* vertexData, bool useSharedVertexLookup);
+ template<typename IndexType>
+- void addIndexDataImpl(IndexType* iPos, const IndexType* iEnd, VertexLookupList& lookup, unsigned short submeshID);
++ void addIndexDataImpl(IndexType* iPos, const IndexType* iEnd, VertexLookupList& lookup, unsigned short submeshID)
++ {
++
++ // Loop through all triangles and connect them to the vertices.
++ for (; iPos < iEnd; iPos += 3) {
++ // It should never reallocate or every pointer will be invalid.
++ OgreAssert(mTriangleList.capacity() > mTriangleList.size(), "");
++ mTriangleList.push_back(PMTriangle());
++ PMTriangle* tri = &mTriangleList.back();
++ tri->isRemoved = false;
++ tri->submeshID = submeshID;
++ for (int i = 0; i < 3; i++) {
++ // Invalid index: Index is bigger then vertex buffer size.
++ OgreAssert(iPos[i] < lookup.size(), "");
++ tri->vertexID[i] = iPos[i];
++ tri->vertex[i] = lookup[iPos[i]];
++ }
++ if (tri->isMalformed()) {
++#if OGRE_DEBUG_MODE
++ stringstream str;
++ str << "In " << mMeshName << " malformed triangle found with ID: " << getTriangleID(tri) << ". " <<
++ std::endl;
++ printTriangle(tri, str);
++ str << "It will be excluded from LOD level calculations.";
++ LogManager::getSingleton().stream() << str.str();
++#endif
++ tri->isRemoved = true;
++ mIndexBufferInfoList[tri->submeshID].indexCount -= 3;
++ continue;
++ }
++ tri->computeNormal();
++ addTriangleToEdges(tri);
++ }
++ }
+ void addIndexData(IndexData* indexData, bool useSharedVertexLookup, unsigned short submeshID);
+
+ void computeCosts();
+--- a/OgreMain/src/OgreProgressiveMeshGenerator.cpp
++++ b/OgreMain/src/OgreProgressiveMeshGenerator.cpp
+@@ -219,6 +219,8 @@
+ }
+ vbuf->unlock();
+ }
++/// Called from OgreQueuedProgressiveMeshGenerator.cpp, so it can not be defined in here.
++#if 0
+ template<typename IndexType>
+ void ProgressiveMeshGenerator::addIndexDataImpl(IndexType* iPos, const IndexType* iEnd,
+ VertexLookupList& lookup,
+@@ -256,6 +258,7 @@
+ addTriangleToEdges(tri);
+ }
+ }
++#endif // 0
+
+ void ProgressiveMeshGenerator::addIndexData(IndexData* indexData, bool useSharedVertexLookup, unsigned short submeshID)
+ {