diff -r -uw irrlicht/include/IMeshBuffer.h irrlicht32/include/IMeshBuffer.h
--- irrlicht/include/IMeshBuffer.h	2006-08-29 08:12:58.000000000 +0200
+++ irrlicht32/include/IMeshBuffer.h	2006-11-29 21:51:46.000000000 +0100
@@ -80,10 +80,10 @@
 		virtual s32 getVertexCount() const = 0;
 
 		//! returns pointer to Indices
-		virtual const u16* getIndices() const = 0;
+		virtual const u32* getIndices() const = 0;
 
 		//! returns pointer to Indices
-		virtual u16* getIndices() = 0;
+		virtual u32* getIndices() = 0;
 
 		//! returns amount of indices
 		virtual s32 getIndexCount() const = 0;
diff -r -uw irrlicht/include/IVideoDriver.h irrlicht32/include/IVideoDriver.h
--- irrlicht/include/IVideoDriver.h	2006-11-25 13:46:54.000000000 +0100
+++ irrlicht32/include/IVideoDriver.h	2006-11-29 23:48:48.000000000 +0100
@@ -360,7 +360,7 @@
 		\param triangleCount: amount of Triangles.
 		\param vType: Vertex type, e.g. EVT_STANDARD for S3DVertex.
 		\param pType: Primitive type, e.g. EPT_TRIANGLE_FAN for a triangle fan. */
-		virtual void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType) = 0;
+		virtual void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType) = 0;
 
 		//! Draws an indexed triangle list.
 		/** Note that there may be at maximum 65536 vertices, because the
@@ -372,7 +372,7 @@
 		\param indexList: Pointer to array of indizes.
 		\param triangleCount: amount of Triangles. Usually amount of indizes / 3. */
 		virtual void drawIndexedTriangleList(const S3DVertex* vertices,
-			s32 vertexCount, const u16* indexList, s32 triangleCount) = 0;
+			s32 vertexCount, const u32* indexList, s32 triangleCount) = 0;
 
 		//! Draws an indexed triangle list.
 		/** Note that there may be at maximum 65536 vertices, because the
@@ -384,7 +384,7 @@
 		\param indexList: Pointer to array of indizes.
 		\param triangleCount: amount of Triangles. Usually amount of indizes / 3.*/
 		virtual void drawIndexedTriangleList(const S3DVertex2TCoords* vertices,
-			s32 vertexCount, const u16* indexList, s32 triangleCount) = 0;
+			s32 vertexCount, const u32* indexList, s32 triangleCount) = 0;
 
 		//! Draws an indexed triangle list.
 		/** Note that there may be at maximum 65536 vertices, because the
@@ -396,7 +396,7 @@
 		\param indexList: Pointer to array of indizes.
 		\param triangleCount: amount of Triangles. Usually amount of indizes / 3. */
 		virtual void drawIndexedTriangleList(const S3DVertexTangents* vertices,
-			s32 vertexCount, const u16* indexList, s32 triangleCount) = 0;
+			s32 vertexCount, const u32* indexList, s32 triangleCount) = 0;
 
 		//! Draws an indexed triangle fan.
 		/** Note that there may be at maximum 65536 vertices, because the
@@ -410,7 +410,7 @@
 		\param indexList: Pointer to array of indizes.
 		\param triangleCount: amount of Triangles. Usually amount of indizes - 2. */
 		virtual void drawIndexedTriangleFan(const S3DVertex* vertices,
-			s32 vertexCount, const u16* indexList, s32 triangleCount) = 0;
+			s32 vertexCount, const u32* indexList, s32 triangleCount) = 0;
 
 		//! Draws an indexed triangle fan.
 		/** Note that there may be at maximum 65536 vertices, because the
@@ -424,7 +424,7 @@
 		\param indexList: Pointer to array of indizes.
 		\param triangleCount: amount of Triangles. Usually amount of indizes - 2. */
 		virtual void drawIndexedTriangleFan(const S3DVertex2TCoords* vertices,
-			s32 vertexCount, const u16* indexList, s32 triangleCount) = 0;
+			s32 vertexCount, const u32* indexList, s32 triangleCount) = 0;
 
 		//! Draws a 3d line.
 		/** For some implementations, this method simply calls drawIndexedTriangles with some
diff -r -uw irrlicht/include/SMeshBuffer.h irrlicht32/include/SMeshBuffer.h
--- irrlicht/include/SMeshBuffer.h	2006-08-29 08:12:58.000000000 +0200
+++ irrlicht32/include/SMeshBuffer.h	2006-11-29 21:55:30.000000000 +0100
@@ -57,13 +57,13 @@
 		}
 
 		//! returns pointer to Indices
-		virtual const u16* getIndices() const
+		virtual const u32* getIndices() const
 		{
 			return Indices.const_pointer();
 		}
 
 		//! returns pointer to Indices
-		virtual u16* getIndices()
+		virtual u32* getIndices()
 		{
 			return Indices.pointer();
 		}
@@ -107,7 +107,7 @@
 
 		video::SMaterial Material; //! material for this meshBuffer.
 		core::array<video::S3DVertex> Vertices; //! Array of vertices
-		core::array<u16> Indices; //! Array of the Indices.
+		core::array<u32> Indices; //! Array of the Indices.
 		core::aabbox3d<f32> BoundingBox;
 	};
 
diff -r -uw irrlicht/include/SMeshBufferLightMap.h irrlicht32/include/SMeshBufferLightMap.h
--- irrlicht/include/SMeshBufferLightMap.h	2006-08-29 08:12:58.000000000 +0200
+++ irrlicht32/include/SMeshBufferLightMap.h	2006-11-29 21:56:34.000000000 +0100
@@ -58,13 +58,13 @@
 		}
 
 		//! returns pointer to Indices
-		virtual const u16* getIndices() const
+		virtual const u32* getIndices() const
 		{
 			return Indices.const_pointer();
 		}
 
 		//! returns pointer to Indices
-		virtual u16* getIndices()
+		virtual u32* getIndices()
 		{
 			return Indices.pointer();
 		}
@@ -108,7 +108,7 @@
 
 		video::SMaterial Material; //! material for this meshBuffer.
 		core::array<video::S3DVertex2TCoords> Vertices; //! Array of vertices
-		core::array<u16> Indices; //! Array of the Indices.
+		core::array<u32> Indices; //! Array of the Indices.
 		core::aabbox3d<f32> BoundingBox;
 	};
 
diff -r -uw irrlicht/include/SMeshBufferTangents.h irrlicht32/include/SMeshBufferTangents.h
--- irrlicht/include/SMeshBufferTangents.h	2006-08-29 08:12:58.000000000 +0200
+++ irrlicht32/include/SMeshBufferTangents.h	2006-11-29 21:57:30.000000000 +0100
@@ -57,13 +57,13 @@
 		}
 
 		//! returns pointer to Indices
-		virtual const u16* getIndices() const
+		virtual const u32* getIndices() const
 		{
 			return Indices.const_pointer();
 		}
 
 		//! returns pointer to Indices
-		virtual u16* getIndices()
+		virtual u32* getIndices()
 		{
 			return Indices.pointer();
 		}
@@ -107,7 +107,7 @@
 
 		video::SMaterial Material; //! material for this meshBuffer.
 		core::array<video::S3DVertexTangents> Vertices; //! Array of vertices
-		core::array<u16> Indices; //! Array of the Indices.
+		core::array<u32> Indices; //! Array of the Indices.
 		core::aabbox3d<f32> BoundingBox;
 	};
 
diff -r -uw irrlicht/source/Irrlicht/C3DSMeshFileLoader.cpp irrlicht32/source/Irrlicht/C3DSMeshFileLoader.cpp
--- irrlicht/source/Irrlicht/C3DSMeshFileLoader.cpp	2006-11-12 10:40:20.000000000 +0100
+++ irrlicht32/source/Irrlicht/C3DSMeshFileLoader.cpp	2006-11-29 23:49:34.000000000 +0100
@@ -1161,7 +1161,7 @@
 	group.faces = new s16[group.faceCount];
 	file->read(group.faces, sizeof(s16) * group.faceCount);
 #ifdef __BIG_ENDIAN__
-	for (int i=0;i<group.faceCount;i++) group.faces[i] = os::Byteswap::byteswap(group.faces[i]);
+	for (int i=0;i<group.faceCount;++i) group.faces[i] = os::Byteswap::byteswap(group.faces[i]);
 #endif
 	data.read += sizeof(s16) * group.faceCount;
 
@@ -1181,8 +1181,15 @@
 
 	// Indices are u16s.
 	// After every 3 Indices in the array, there follows an edge flag.
-	Indices = new u16[CountFaces * 4];
-	file->read(Indices, indexBufferByteSize);
+	u16 *l_indicies = new u16[CountFaces * 4];
+	file->read(l_indicies, indexBufferByteSize);
+
+	Indices = new u32[CountFaces * 4];
+
+	for (s32 idx = 0; idx < CountFaces*4; ++idx) 
+		Indices[idx] = l_indicies[idx];
+	delete []l_indicies;
+
 #ifdef __BIG_ENDIAN__
 	for (int i=0;i<CountFaces*4;++i) Indices[i] = os::Byteswap::byteswap(Indices[i]);
 #endif
diff -r -uw irrlicht/source/Irrlicht/C3DSMeshFileLoader.h irrlicht32/source/Irrlicht/C3DSMeshFileLoader.h
--- irrlicht/source/Irrlicht/C3DSMeshFileLoader.h	2006-07-15 08:41:48.000000000 +0200
+++ irrlicht32/source/Irrlicht/C3DSMeshFileLoader.h	2006-11-29 22:27:46.000000000 +0100
@@ -155,7 +155,7 @@
 	video::IVideoDriver* Driver;
 
 	f32* Vertices;
-	u16* Indices;
+	u32* Indices;
 	core::array<u16> TempIndices;
 	f32* TCoords;
 	u16 CountVertices;
diff -r -uw irrlicht/source/Irrlicht/CAnimatedMeshB3d.h irrlicht32/source/Irrlicht/CAnimatedMeshB3d.h
--- irrlicht/source/Irrlicht/CAnimatedMeshB3d.h	2006-09-24 11:30:56.000000000 +0200
+++ irrlicht32/source/Irrlicht/CAnimatedMeshB3d.h	2006-11-29 22:33:56.000000000 +0100
@@ -139,12 +139,12 @@
 				return Vertices.size();
 			}
 
-			virtual const u16* getIndices() const
+			virtual const u32* getIndices() const
 			{
 				return Indices.const_pointer();
 			}
 
-			virtual u16* getIndices()
+			virtual u32* getIndices()
 			{
 				return Indices.pointer();
 			}
@@ -183,7 +183,7 @@
 
 			video::SMaterial Material;
 			core::array<video::S3DVertex2TCoords> Vertices;
-			core::array<u16> Indices;
+			core::array<u32> Indices;
 			core::aabbox3d<f32> BoundingBox;
 		};
 
diff -r -uw irrlicht/source/Irrlicht/CAnimatedMeshMD2.cpp irrlicht32/source/Irrlicht/CAnimatedMeshMD2.cpp
--- irrlicht/source/Irrlicht/CAnimatedMeshMD2.cpp	2006-09-24 11:30:54.000000000 +0200
+++ irrlicht32/source/Irrlicht/CAnimatedMeshMD2.cpp	2006-11-29 22:41:16.000000000 +0100
@@ -399,7 +399,7 @@
 
 
 //! returns pointer to Indices
-const u16* CAnimatedMeshMD2::getIndices() const
+const u32* CAnimatedMeshMD2::getIndices() const
 {
 	return Indices.const_pointer();
 }
@@ -407,7 +407,7 @@
 
 
 //! returns pointer to Indices
-u16* CAnimatedMeshMD2::getIndices()
+u32* CAnimatedMeshMD2::getIndices()
 {
 	return Indices.pointer();
 }
diff -r -uw irrlicht/source/Irrlicht/CAnimatedMeshMD2.h irrlicht32/source/Irrlicht/CAnimatedMeshMD2.h
--- irrlicht/source/Irrlicht/CAnimatedMeshMD2.h	2006-08-29 08:13:00.000000000 +0200
+++ irrlicht32/source/Irrlicht/CAnimatedMeshMD2.h	2006-11-29 22:40:34.000000000 +0100
@@ -60,10 +60,10 @@
 		virtual s32 getVertexCount() const;
 
 		//! returns pointer to Indices
-		virtual const u16* getIndices() const;
+		virtual const u32* getIndices() const;
 
 		//! returns pointer to Indices
-		virtual u16* getIndices();
+		virtual u32* getIndices();
 
 		//! returns amount of indices
 		virtual s32 getIndexCount() const;
@@ -112,7 +112,7 @@
 		//! calculates normals
 		void calculateNormals();
 
-		core::array<u16> Indices;
+		core::array<u32> Indices;
 		core::array<video::S3DVertex> *FrameList;
 		core::array<core::aabbox3d<f32> > BoxList;
 		u32 FrameCount;
diff -r -uw irrlicht/source/Irrlicht/CAnimatedMeshMS3D.cpp irrlicht32/source/Irrlicht/CAnimatedMeshMS3D.cpp
--- irrlicht/source/Irrlicht/CAnimatedMeshMS3D.cpp	2006-11-18 08:23:12.000000000 +0100
+++ irrlicht32/source/Irrlicht/CAnimatedMeshMS3D.cpp	2006-11-29 22:56:04.000000000 +0100
@@ -471,7 +471,7 @@
 		if (grp.MaterialIdx >= Buffers.size()) 
 			grp.MaterialIdx = 0; 
 
-		core::array<u16>& indices = Buffers[grp.MaterialIdx].Indices;
+		core::array<u32>& indices = Buffers[grp.MaterialIdx].Indices;
 
 		for (u32 k=0; k<grp.VertexIds.size(); ++k)
 			for (u32 l=0; l<3; ++l)
@@ -736,13 +736,13 @@
 } 
 
 //! returns pointer to Indices 
-const u16* CAnimatedMeshMS3D::SMS3DMeshBuffer::getIndices() const 
+const u32* CAnimatedMeshMS3D::SMS3DMeshBuffer::getIndices() const 
 { 
 	return Indices.const_pointer(); 
 } 
 
 //! returns pointer to Indices 
-u16* CAnimatedMeshMS3D::SMS3DMeshBuffer::getIndices() 
+u32* CAnimatedMeshMS3D::SMS3DMeshBuffer::getIndices() 
 { 
 	return Indices.pointer(); 
 } 
diff -r -uw irrlicht/source/Irrlicht/CAnimatedMeshMS3D.h irrlicht32/source/Irrlicht/CAnimatedMeshMS3D.h
--- irrlicht/source/Irrlicht/CAnimatedMeshMS3D.h	2006-08-29 08:13:00.000000000 +0200
+++ irrlicht32/source/Irrlicht/CAnimatedMeshMS3D.h	2006-11-29 22:49:34.000000000 +0100
@@ -131,10 +131,10 @@
 			virtual s32 getVertexCount() const;
 
 			//! returns pointer to Indices 
-			virtual const u16* getIndices() const;
+			virtual const u32* getIndices() const;
 
 			//! returns pointer to Indices 
-			virtual u16* getIndices();
+			virtual u32* getIndices();
 
 			//! returns amount of indices 
 			virtual s32 getIndexCount() const;
@@ -150,7 +150,7 @@
 
 			video::SMaterial Material;                  //! material for this meshBuffer. 
 			core::array<video::S3DVertex> *Vertices;      //! Array of vertices 
-			core::array<u16> Indices;   //! Array of the Indices. 
+			core::array<u32> Indices;   //! Array of the Indices. 
 			core::aabbox3d<f32> *BoundingBox; 
 		}; 
 
@@ -161,7 +161,7 @@
 
 		core::array<video::S3DVertex> Vertices;
 		core::array<video::S3DVertex> AnimatedVertices;
-		core::array<u16> Indices;
+		core::array<u32> Indices;
 		
 		core::array<SJoint> Joints;
 		core::array<SGroup> Groups;
diff -r -uw irrlicht/source/Irrlicht/CBillboardSceneNode.h irrlicht32/source/Irrlicht/CBillboardSceneNode.h
--- irrlicht/source/Irrlicht/CBillboardSceneNode.h	2006-06-17 08:11:42.000000000 +0200
+++ irrlicht32/source/Irrlicht/CBillboardSceneNode.h	2006-11-29 23:20:36.000000000 +0100
@@ -61,7 +61,7 @@
 	video::SMaterial Material;
 
 	video::S3DVertex vertices[4];
-	u16 indices[6];
+	u32 indices[6];
 };
 
 
diff -r -uw irrlicht/source/Irrlicht/CCubeSceneNode.cpp irrlicht32/source/Irrlicht/CCubeSceneNode.cpp
--- irrlicht/source/Irrlicht/CCubeSceneNode.cpp	2006-08-29 08:13:00.000000000 +0200
+++ irrlicht32/source/Irrlicht/CCubeSceneNode.cpp	2006-11-29 23:22:12.000000000 +0100
@@ -22,7 +22,7 @@
 	setDebugName("CCubeSceneNode");
 	#endif
 
-	u16 u[36] = {   0,2,1,   0,3,2,   1,5,4,   1,2,5,   4,6,7,   4,5,6, 
+	u32 u[36] = {   0,2,1,   0,3,2,   1,5,4,   1,2,5,   4,6,7,   4,5,6, 
             7,3,0,   7,6,3,   9,5,2,   9,8,5,   0,11,10,   0,10,7};
 
 	Buffer.Indices.set_used(36);
diff -r -uw irrlicht/source/Irrlicht/CD3D8Driver.cpp irrlicht32/source/Irrlicht/CD3D8Driver.cpp
--- irrlicht/source/Irrlicht/CD3D8Driver.cpp	2006-11-01 08:01:48.000000000 +0100
+++ irrlicht32/source/Irrlicht/CD3D8Driver.cpp	2006-11-29 23:46:52.000000000 +0100
@@ -754,7 +754,7 @@
 
 
 //! draws a vertex primitive list
-void CD3D8Driver::drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u16* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType)
+void CD3D8Driver::drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u32* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType)
 {
 	if (!checkPrimitiveCount(primitiveCount))
 		return;
@@ -785,16 +785,16 @@
 		{
 		   case scene::EPT_POINTS:
 			  pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_POINTLIST, 0, vertexCount,
-				 primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+				 primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 			  break;
 		   case scene::EPT_LINE_STRIP:
 			  pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_LINESTRIP, 0, vertexCount,
-				 primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+				 primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 			  break;
 		   case scene::EPT_LINE_LOOP:
 		   {
 			  pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_LINESTRIP, 0, vertexCount,
-				 primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+				 primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 			  u16 tmpIndices[] = {0, primitiveCount};
 			  pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_LINELIST, 0, vertexCount,
 				 1, tmpIndices, D3DFMT_INDEX16, vertices, stride);
@@ -802,19 +802,19 @@
 			  break;
 		   case scene::EPT_LINES:
 			  pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_LINELIST, 0, vertexCount,
-				 primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+				 primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 			  break;
 		   case scene::EPT_TRIANGLE_STRIP:
 			  pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLESTRIP, 0, vertexCount,
-				 primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+				 primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 			  break;
 		   case scene::EPT_TRIANGLE_FAN:
 			  pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLEFAN, 0, vertexCount,
-				 primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+				 primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 			  break;
 		   case scene::EPT_TRIANGLES:
 			  pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, vertexCount,
-				 primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+				 primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 			  break;
 		}
 	}
diff -r -uw irrlicht/source/Irrlicht/CD3D8Driver.h irrlicht32/source/Irrlicht/CD3D8Driver.h
--- irrlicht/source/Irrlicht/CD3D8Driver.h	2006-10-15 08:48:48.000000000 +0200
+++ irrlicht32/source/Irrlicht/CD3D8Driver.h	2006-11-29 23:46:54.000000000 +0100
@@ -66,7 +66,7 @@
 		virtual const core::rect<s32>& getViewPort() const;
 
 		//! draws a vertex primitive list
-		void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u16* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType);
+		void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u32* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType);
 
 		//! draws an 2d image, using a color (if color is other then Color(255,255,255,255)) and the alpha channel of the texture if wanted.
 		virtual void draw2DImage(video::ITexture* texture, const core::position2d<s32>& destPos,
diff -r -uw irrlicht/source/Irrlicht/CD3D9Driver.cpp irrlicht32/source/Irrlicht/CD3D9Driver.cpp
--- irrlicht/source/Irrlicht/CD3D9Driver.cpp	2006-10-15 08:48:50.000000000 +0200
+++ irrlicht32/source/Irrlicht/CD3D9Driver.cpp	2006-11-29 23:51:54.000000000 +0100
@@ -736,7 +736,7 @@
 
 
 //! draws a vertex primitive list
-void CD3D9Driver::drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u16* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType)
+void CD3D9Driver::drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u32* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType)
 {
 	if (!checkPrimitiveCount(primitiveCount))
 		return;
@@ -767,16 +767,16 @@
 		{
 			case scene::EPT_POINTS:
 				pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_POINTLIST, 0, vertexCount,
-					primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+					primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 				break;
 			case scene::EPT_LINE_STRIP:
 				pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_LINESTRIP, 0, vertexCount,
-					primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+					primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 				break;
 			case scene::EPT_LINE_LOOP:
 			{
 				pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_LINESTRIP, 0, vertexCount,
-					primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+					primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 				u16 tmpIndices[] = {0, primitiveCount};
 				pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_LINELIST, 0, vertexCount,
 					1, tmpIndices, D3DFMT_INDEX16, vertices, stride);
@@ -784,19 +784,19 @@
 				break;
 			case scene::EPT_LINES:
 				pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_LINELIST, 0, vertexCount,
-					primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+					primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 				break;
 			case scene::EPT_TRIANGLE_STRIP:
 				pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLESTRIP, 0, vertexCount,
-					primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+					primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 				break;
 			case scene::EPT_TRIANGLE_FAN:
 				pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLEFAN, 0, vertexCount,
-					primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+					primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 				break;
 			case scene::EPT_TRIANGLES:
 				pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, vertexCount,
-					primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
+					primitiveCount, indexList, D3DFMT_INDEX32, vertices, stride);
 				break;
 		}
 	}
diff -r -uw irrlicht/source/Irrlicht/CD3D9Driver.h irrlicht32/source/Irrlicht/CD3D9Driver.h
--- irrlicht/source/Irrlicht/CD3D9Driver.h	2006-10-15 08:48:50.000000000 +0200
+++ irrlicht32/source/Irrlicht/CD3D9Driver.h	2006-11-29 23:50:50.000000000 +0100
@@ -58,7 +58,7 @@
 		virtual const core::rect<s32>& getViewPort() const;
 
 		//! draws a vertex primitive list
-		virtual void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u16* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType);
+		virtual void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u32* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType);
 
 		//! draws an 2d image, using a color (if color is other then Color(255,255,255,255)) and the alpha channel of the texture if wanted.
 		virtual void draw2DImage(video::ITexture* texture, const core::position2d<s32>& destPos,
diff -r -uw irrlicht/source/Irrlicht/CMeshManipulator.cpp irrlicht32/source/Irrlicht/CMeshManipulator.cpp
--- irrlicht/source/Irrlicht/CMeshManipulator.cpp	2006-08-29 08:13:04.000000000 +0200
+++ irrlicht32/source/Irrlicht/CMeshManipulator.cpp	2006-11-29 22:02:38.000000000 +0100
@@ -21,7 +21,7 @@
 //! visual studio 6.0 didn't like it.
 template<class VTXTYPE>
 inline void recalculateNormalsT_Flat(VTXTYPE* v, int vtxcnt,
-					u16* idx, int idxcnt)
+					u32* idx, int idxcnt)
 {
 	for (int i=0; i<idxcnt; i+=3)
 	{
@@ -34,7 +34,7 @@
 
 template<class VTXTYPE>
 inline void recalculateNormalsT_Smooth(VTXTYPE* v, int vtxcnt,
-					u16* idx, int idxcnt)
+					u32* idx, int idxcnt)
 {
 	s32 i;
 
@@ -65,7 +65,7 @@
 template<class VERTEXTYPE>
 inline void makePlanarMappingT(VERTEXTYPE *v,
 				   int vtxcnt,
-				   u16* idx, int idxcnt, f32 resolution)
+				   u32* idx, int idxcnt, f32 resolution)
 {
 	for (int i=0; i<idxcnt; i+=3)
 	{
@@ -127,7 +127,7 @@
 	{
 		IMeshBuffer* buffer = mesh->getMeshBuffer(b);
 		s32 idxcnt = buffer->getIndexCount();
-		u16* idx = buffer->getIndices();
+		u32* idx = buffer->getIndices();
 		s32 tmp;
 
 		for (s32 i=0; i<idxcnt; i+=3)
@@ -230,7 +230,7 @@
 
 	s32 vtxcnt = buffer->getVertexCount();
 	s32 idxcnt = buffer->getIndexCount();
-	u16* idx = buffer->getIndices();
+	u32* idx = buffer->getIndices();
 
 	switch(buffer->getVertexType())
 	{
@@ -411,7 +411,7 @@
 	{
 		s32 vtxCnt = mesh->getMeshBuffer(b)->getVertexCount();
 		s32 idxCnt = mesh->getMeshBuffer(b)->getIndexCount();
-		const u16* idx = mesh->getMeshBuffer(b)->getIndices();
+		const u32* idx = mesh->getMeshBuffer(b)->getIndices();
 
 		switch(mesh->getMeshBuffer(b)->getVertexType())
 		{
@@ -501,7 +501,7 @@
 		IMeshBuffer* buffer = mesh->getMeshBuffer(b);
 		s32 vtxcnt = buffer->getVertexCount();
 		s32 idxcnt = buffer->getIndexCount();
-		u16* idx = buffer->getIndices();
+		u32* idx = buffer->getIndices();
 
 		switch(buffer->getVertexType())
 		{
@@ -542,7 +542,7 @@
 	for (s32 b=0; b<meshBufferCount; ++b)
 	{
 		s32 idxCnt = mesh->getMeshBuffer(b)->getIndexCount();
-		const u16* idx = mesh->getMeshBuffer(b)->getIndices();
+		const u32* idx = mesh->getMeshBuffer(b)->getIndices();
 
 		switch(mesh->getMeshBuffer(b)->getVertexType())
 		{
@@ -639,7 +639,7 @@
 	for (b=0; b<meshBufferCount; ++b)
 	{
 		s32 idxCnt = mesh->getMeshBuffer(b)->getIndexCount();
-		const u16* idx = mesh->getMeshBuffer(b)->getIndices();
+		const u32* idx = mesh->getMeshBuffer(b)->getIndices();
 
 		SMeshBufferTangents* buffer = new SMeshBufferTangents();
 		buffer->Material = mesh->getMeshBuffer(b)->getMaterial();
@@ -698,7 +698,7 @@
 	{
 		s32 idxCnt = clone->getMeshBuffer(b)->getIndexCount();
 
-		u16* idx = clone->getMeshBuffer(b)->getIndices();
+		u32* idx = clone->getMeshBuffer(b)->getIndices();
 		video::S3DVertexTangents* v =
 			(video::S3DVertexTangents*)clone->getMeshBuffer(b)->getVertices();
 
diff -r -uw irrlicht/source/Irrlicht/CNullDriver.cpp irrlicht32/source/Irrlicht/CNullDriver.cpp
--- irrlicht/source/Irrlicht/CNullDriver.cpp	2006-11-01 08:01:48.000000000 +0100
+++ irrlicht32/source/Irrlicht/CNullDriver.cpp	2006-11-29 23:44:52.000000000 +0100
@@ -467,7 +467,7 @@
 
 
 //! draws a vertex primitive list
-void CNullDriver::drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u16* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType)
+void CNullDriver::drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u32* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType)
 {
 	PrimitivesDrawn += primitiveCount;
 }
@@ -475,7 +475,7 @@
 
 
 //! draws an indexed triangle list
-inline void CNullDriver::drawIndexedTriangleList(const S3DVertex* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount)
+inline void CNullDriver::drawIndexedTriangleList(const S3DVertex* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount)
 {
 	drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_STANDARD, scene::EPT_TRIANGLES);
 }
@@ -483,7 +483,7 @@
 
 
 //! draws an indexed triangle list
-inline void CNullDriver::drawIndexedTriangleList(const S3DVertex2TCoords* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount)
+inline void CNullDriver::drawIndexedTriangleList(const S3DVertex2TCoords* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount)
 {
 	drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_2TCOORDS, scene::EPT_TRIANGLES);
 }
@@ -491,7 +491,7 @@
 
 //! Draws an indexed triangle list.
 inline void CNullDriver::drawIndexedTriangleList(const S3DVertexTangents* vertices,
-	s32 vertexCount, const u16* indexList, s32 triangleCount)
+	s32 vertexCount, const u32* indexList, s32 triangleCount)
 {
 	drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_TANGENTS, scene::EPT_TRIANGLES);
 }
@@ -500,7 +500,7 @@
 
 //! Draws an indexed triangle fan.
 inline void CNullDriver::drawIndexedTriangleFan(const S3DVertex* vertices,
-	s32 vertexCount, const u16* indexList, s32 triangleCount)
+	s32 vertexCount, const u32* indexList, s32 triangleCount)
 {
 	drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_STANDARD, scene::EPT_TRIANGLE_FAN);
 }
@@ -509,7 +509,7 @@
 
 //! Draws an indexed triangle fan.
 inline void CNullDriver::drawIndexedTriangleFan(const S3DVertex2TCoords* vertices,
-	s32 vertexCount, const u16* indexList, s32 triangleCount)
+	s32 vertexCount, const u32* indexList, s32 triangleCount)
 {
 	drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_2TCOORDS, scene::EPT_TRIANGLE_FAN);
 }
diff -r -uw irrlicht/source/Irrlicht/CNullDriver.h irrlicht32/source/Irrlicht/CNullDriver.h
--- irrlicht/source/Irrlicht/CNullDriver.h	2006-11-01 08:01:48.000000000 +0100
+++ irrlicht32/source/Irrlicht/CNullDriver.h	2006-11-29 23:45:28.000000000 +0100
@@ -70,25 +70,25 @@
 		virtual const core::rect<s32>& getViewPort() const;
 
 		//! draws a vertex primitive list
-		virtual void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u16* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType);
+		virtual void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u32* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType);
 
 		//! draws an indexed triangle list
-		virtual void drawIndexedTriangleList(const S3DVertex* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount);
+		virtual void drawIndexedTriangleList(const S3DVertex* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount);
 
 		//! draws an indexed triangle list
-		virtual void drawIndexedTriangleList(const S3DVertex2TCoords* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount);
+		virtual void drawIndexedTriangleList(const S3DVertex2TCoords* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount);
 
 		//! Draws an indexed triangle list.
 		virtual void drawIndexedTriangleList(const S3DVertexTangents* vertices,
-			s32 vertexCount, const u16* indexList, s32 triangleCount);
+			s32 vertexCount, const u32* indexList, s32 triangleCount);
 
 		//! Draws an indexed triangle fan.
 		virtual void drawIndexedTriangleFan(const S3DVertex* vertices,
-			s32 vertexCount, const u16* indexList, s32 triangleCount);
+			s32 vertexCount, const u32* indexList, s32 triangleCount);
 
 		//! Draws an indexed triangle list.
 		virtual void drawIndexedTriangleFan(const S3DVertex2TCoords* vertices,
-			s32 vertexCount, const u16* indexList, s32 triangleCount);
+			s32 vertexCount, const u32* indexList, s32 triangleCount);
 
 		//! Draws a 3d line.
 		virtual void draw3DLine(const core::vector3df& start,
diff -r -uw irrlicht/source/Irrlicht/COpenGLDriver.cpp irrlicht32/source/Irrlicht/COpenGLDriver.cpp
--- irrlicht/source/Irrlicht/COpenGLDriver.cpp	2006-11-27 16:44:10.000000000 +0100
+++ irrlicht32/source/Irrlicht/COpenGLDriver.cpp	2006-11-29 23:52:58.000000000 +0100
@@ -814,7 +814,7 @@
 
 
 //! draws a vertex primitive list
-void COpenGLDriver::drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u16* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType)
+void COpenGLDriver::drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u32* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType)
 {
 	if (!primitiveCount || !vertexCount)
 		return;
@@ -922,31 +922,31 @@
 			glDrawArrays(GL_POINTS, 0, primitiveCount);
 			break;
 		case scene::EPT_LINE_STRIP:
-			glDrawElements(GL_LINE_STRIP, primitiveCount+1, GL_UNSIGNED_SHORT, indexList);
+			glDrawElements(GL_LINE_STRIP, primitiveCount+1, GL_UNSIGNED_INT, indexList);
 			break;
 		case scene::EPT_LINE_LOOP:
-			glDrawElements(GL_LINE_LOOP, primitiveCount, GL_UNSIGNED_SHORT, indexList);
+			glDrawElements(GL_LINE_LOOP, primitiveCount, GL_UNSIGNED_INT, indexList);
 			break;
 		case scene::EPT_LINES:
-			glDrawElements(GL_LINES, primitiveCount*2, GL_UNSIGNED_SHORT, indexList);
+			glDrawElements(GL_LINES, primitiveCount*2, GL_UNSIGNED_INT, indexList);
 			break;
 		case scene::EPT_TRIANGLE_STRIP:
-			glDrawElements(GL_TRIANGLE_STRIP, primitiveCount+2, GL_UNSIGNED_SHORT, indexList);
+			glDrawElements(GL_TRIANGLE_STRIP, primitiveCount+2, GL_UNSIGNED_INT, indexList);
 			break;
 		case scene::EPT_TRIANGLE_FAN:
-			glDrawElements(GL_TRIANGLE_FAN, primitiveCount+2, GL_UNSIGNED_SHORT, indexList);
+			glDrawElements(GL_TRIANGLE_FAN, primitiveCount+2, GL_UNSIGNED_INT, indexList);
 			break;
 		case scene::EPT_TRIANGLES:
-			glDrawElements(GL_TRIANGLES, primitiveCount*3, GL_UNSIGNED_SHORT, indexList);
+			glDrawElements(GL_TRIANGLES, primitiveCount*3, GL_UNSIGNED_INT, indexList);
 			break;
 		case scene::EPT_QUAD_STRIP:
-			glDrawElements(GL_QUAD_STRIP, primitiveCount*2+2, GL_UNSIGNED_SHORT, indexList);
+			glDrawElements(GL_QUAD_STRIP, primitiveCount*2+2, GL_UNSIGNED_INT, indexList);
 			break;
 		case scene::EPT_QUADS:
-			glDrawElements(GL_QUADS, primitiveCount*4, GL_UNSIGNED_SHORT, indexList);
+			glDrawElements(GL_QUADS, primitiveCount*4, GL_UNSIGNED_INT, indexList);
 			break;
 		case scene::EPT_POLYGON:
-			glDrawElements(GL_POLYGON, primitiveCount, GL_UNSIGNED_SHORT, indexList);
+			glDrawElements(GL_POLYGON, primitiveCount, GL_UNSIGNED_INT, indexList);
 			break;
 	}
 
diff -r -uw irrlicht/source/Irrlicht/COpenGLDriver.h irrlicht32/source/Irrlicht/COpenGLDriver.h
--- irrlicht/source/Irrlicht/COpenGLDriver.h	2006-11-25 13:46:52.000000000 +0100
+++ irrlicht32/source/Irrlicht/COpenGLDriver.h	2006-11-29 23:53:20.000000000 +0100
@@ -86,7 +86,7 @@
 		virtual void setTransform(E_TRANSFORMATION_STATE state, const core::matrix4& mat);
 
 		//! draws a vertex primitive list
-		void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u16* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType);
+		void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u32* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType);
 
 		//! queries the features of the driver, returns true if feature is available
 		bool queryFeature(E_VIDEO_DRIVER_FEATURE feature);
diff -r -uw irrlicht/source/Irrlicht/CShadowVolumeSceneNode.cpp irrlicht32/source/Irrlicht/CShadowVolumeSceneNode.cpp
--- irrlicht/source/Irrlicht/CShadowVolumeSceneNode.cpp	2006-08-29 08:13:00.000000000 +0200
+++ irrlicht32/source/Irrlicht/CShadowVolumeSceneNode.cpp	2006-11-29 23:36:36.000000000 +0100
@@ -305,7 +305,7 @@
 	if (totalIndices > IndexCountAllocated)
 	{
 		delete [] Indices;
-		Indices = new u16[totalIndices];
+		Indices = new u32[totalIndices];
 		IndexCountAllocated = totalIndices;
 
 		if (UseZFailMethod)
@@ -324,8 +324,8 @@
 		s32 idxcnt = b->getIndexCount();
 		s32 vtxnow = VertexCount;
 
-		const u16* idxp = b->getIndices();
-		const u16* idxpend = idxp + idxcnt;
+		const u32* idxp = b->getIndices();
+		const u32* idxpend = idxp + idxcnt;
 
 		for (; idxp!=idxpend; ++idxp)
 			Indices[IndexCount++] = *idxp + vtxnow;
@@ -443,7 +443,7 @@
 void CShadowVolumeSceneNode::calculateAdjacency(f32 epsilon)
 {
 	delete [] Adjacency;
-	Adjacency = new u16[IndexCount];
+	Adjacency = new u32[IndexCount];
 
 	epsilon *= epsilon;
 
diff -r -uw irrlicht/source/Irrlicht/CShadowVolumeSceneNode.h irrlicht32/source/Irrlicht/CShadowVolumeSceneNode.h
--- irrlicht/source/Irrlicht/CShadowVolumeSceneNode.h	2006-08-29 08:13:00.000000000 +0200
+++ irrlicht32/source/Irrlicht/CShadowVolumeSceneNode.h	2006-11-29 23:36:34.000000000 +0100
@@ -66,9 +66,9 @@
 		bool UseZFailMethod;
 		core::aabbox3d<f32> Box;
 
-		u16* Indices;
+		u32* Indices;
 		core::vector3df* Vertices;
-		u16* Adjacency;
+		u32* Adjacency;
 		bool* FaceData; // used for zfail method, if face is front facing
 
 		s32 IndexCountAllocated;
diff -r -uw irrlicht/source/Irrlicht/CSkyBoxSceneNode.h irrlicht32/source/Irrlicht/CSkyBoxSceneNode.h
--- irrlicht/source/Irrlicht/CSkyBoxSceneNode.h	2006-08-13 14:44:42.000000000 +0200
+++ irrlicht32/source/Irrlicht/CSkyBoxSceneNode.h	2006-11-29 23:36:52.000000000 +0100
@@ -50,7 +50,7 @@
 	private:
 
 		core::aabbox3d<f32> Box;
-		u16 Indices[4];
+		u32 Indices[4];
 		video::S3DVertex Vertices[4*6];
 		video::SMaterial Material[6];
 	};
diff -r -uw irrlicht/source/Irrlicht/CSoftwareDriver.cpp irrlicht32/source/Irrlicht/CSoftwareDriver.cpp
--- irrlicht/source/Irrlicht/CSoftwareDriver.cpp	2006-11-01 12:04:00.000000000 +0100
+++ irrlicht32/source/Irrlicht/CSoftwareDriver.cpp	2006-11-29 23:55:36.000000000 +0100
@@ -316,10 +316,10 @@
 
 
 //! draws a vertex primitive list
-void CSoftwareDriver::drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u16* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType)
+void CSoftwareDriver::drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u32* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType)
 {
-	const u16* indexPointer=0;
-	core::array<u16> newBuffer;
+	const u32* indexPointer=0;
+	core::array<u32> newBuffer;
 	switch (pType)
 	{
 		case scene::EPT_TRIANGLE_FAN:
@@ -357,7 +357,7 @@
 
 template<class VERTEXTYPE>
 void CSoftwareDriver::drawClippedIndexedTriangleListT(const VERTEXTYPE* vertices,
-	s32 vertexCount, const u16* indexList, s32 triangleCount)
+	s32 vertexCount, const u32* indexList, s32 triangleCount)
 {
 	if (!RenderTargetSurface || !ZBuffer || !triangleCount)
 		return;
@@ -367,7 +367,7 @@
 
 	// arrays for storing clipped vertices
 	core::array<VERTEXTYPE> clippedVertices;
-	core::array<u16> clippedIndices;
+	core::array<u32> clippedIndices;
 
 	// calculate inverse world transformation
 	core::matrix4 worldinv(TransformationMatrix[ETS_WORLD]);
@@ -612,7 +612,7 @@
 	vtx[2].Pos = start + vect;
 	vtx[3].Pos = end + vect;
 
-	u16 idx[12] = {0,1,2, 0,2,1, 0,1,3, 0,3,1};
+	u32 idx[12] = {0,1,2, 0,2,1, 0,1,3, 0,3,1};
 
 	drawIndexedTriangleList(vtx, 4, idx, 4);
 }
diff -r -uw irrlicht/source/Irrlicht/CSoftwareDriver.h irrlicht32/source/Irrlicht/CSoftwareDriver.h
--- irrlicht/source/Irrlicht/CSoftwareDriver.h	2006-10-15 08:48:46.000000000 +0200
+++ irrlicht32/source/Irrlicht/CSoftwareDriver.h	2006-11-29 23:54:30.000000000 +0100
@@ -46,7 +46,7 @@
 		virtual bool beginScene(bool backBuffer, bool zBuffer, SColor color);
 
 		//! draws a vertex primitive list
-		void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u16* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType);
+		void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u32* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType);
 
 		//! Draws a 3d line.
 		virtual void draw3DLine(const core::vector3df& start,
@@ -121,7 +121,7 @@
 
 		template<class VERTEXTYPE>
 		void drawClippedIndexedTriangleListT(const VERTEXTYPE* vertices,
-			s32 vertexCount, const u16* indexList, s32 triangleCount);
+			s32 vertexCount, const u32* indexList, s32 triangleCount);
 
 		core::array<S2DVertex> TransformedPoints;
 
diff -r -uw irrlicht/source/Irrlicht/CSoftwareDriver2.cpp irrlicht32/source/Irrlicht/CSoftwareDriver2.cpp
--- irrlicht/source/Irrlicht/CSoftwareDriver2.cpp	2006-10-15 08:48:46.000000000 +0200
+++ irrlicht32/source/Irrlicht/CSoftwareDriver2.cpp	2006-11-29 23:50:32.000000000 +0100
@@ -819,7 +819,7 @@
 }
 
 //! draws a vertex primitive list
-void CSoftwareDriver2::drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u16* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType)
+void CSoftwareDriver2::drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u32* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType)
 {
 	if (!checkPrimitiveCount(primitiveCount))
 		return;
diff -r -uw irrlicht/source/Irrlicht/CSoftwareDriver2.h irrlicht32/source/Irrlicht/CSoftwareDriver2.h
--- irrlicht/source/Irrlicht/CSoftwareDriver2.h	2006-11-18 08:23:10.000000000 +0100
+++ irrlicht32/source/Irrlicht/CSoftwareDriver2.h	2006-11-29 23:50:32.000000000 +0100
@@ -62,7 +62,7 @@
 		virtual void setAmbientLight(const SColorf& color);
 
 		//! draws a vertex primitive list
-		void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u16* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType);
+		void drawVertexPrimitiveList(const void* vertices, s32 vertexCount, const u32* indexList, s32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType);
 
 		//! draws an 2d image, using a color (if color is other then Color(255,255,255,255)) and the alpha channel of the texture if wanted.
 		virtual void draw2DImage(video::ITexture* texture, const core::position2d<s32>& destPos,
diff -r -uw irrlicht/source/Irrlicht/CTRFlat.cpp irrlicht32/source/Irrlicht/CTRFlat.cpp
--- irrlicht/source/Irrlicht/CTRFlat.cpp	2006-11-01 09:51:50.000000000 +0100
+++ irrlicht32/source/Irrlicht/CTRFlat.cpp	2006-11-29 23:58:06.000000000 +0100
@@ -22,7 +22,7 @@
 	}
 
 	//! draws an indexed triangle list
-	virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount)
+	virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount)
 	{
 		const S2DVertex *v1, *v2, *v3;
 
diff -r -uw irrlicht/source/Irrlicht/CTRFlatWire.cpp irrlicht32/source/Irrlicht/CTRFlatWire.cpp
--- irrlicht/source/Irrlicht/CTRFlatWire.cpp	2006-11-01 09:51:42.000000000 +0100
+++ irrlicht32/source/Irrlicht/CTRFlatWire.cpp	2006-11-29 23:58:20.000000000 +0100
@@ -22,7 +22,7 @@
 	}
 
 	//! draws an indexed triangle list
-	virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount)
+	virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount)
 	{
 		const S2DVertex *v1, *v2, *v3;
 
diff -r -uw irrlicht/source/Irrlicht/CTRGouraud.cpp irrlicht32/source/Irrlicht/CTRGouraud.cpp
--- irrlicht/source/Irrlicht/CTRGouraud.cpp	2006-11-01 11:47:58.000000000 +0100
+++ irrlicht32/source/Irrlicht/CTRGouraud.cpp	2006-11-29 23:59:00.000000000 +0100
@@ -23,7 +23,7 @@
 	}
 
 	//! draws an indexed triangle list
-	virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount)
+	virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount)
 	{
 		const S2DVertex *v1, *v2, *v3;
 
diff -r -uw irrlicht/source/Irrlicht/CTRGouraudWire.cpp irrlicht32/source/Irrlicht/CTRGouraudWire.cpp
--- irrlicht/source/Irrlicht/CTRGouraudWire.cpp	2006-11-01 09:51:26.000000000 +0100
+++ irrlicht32/source/Irrlicht/CTRGouraudWire.cpp	2006-11-29 23:59:00.000000000 +0100
@@ -22,7 +22,7 @@
 	}
 
 	//! draws an indexed triangle list
-	virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount)
+	virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount)
 	{
 		const S2DVertex *v1, *v2, *v3;
 
diff -r -uw irrlicht/source/Irrlicht/CTRTextureFlat.cpp irrlicht32/source/Irrlicht/CTRTextureFlat.cpp
--- irrlicht/source/Irrlicht/CTRTextureFlat.cpp	2006-11-01 09:52:02.000000000 +0100
+++ irrlicht32/source/Irrlicht/CTRTextureFlat.cpp	2006-11-29 23:59:00.000000000 +0100
@@ -22,7 +22,7 @@
 	}
 
 	//! draws an indexed triangle list
-	virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount)
+	virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount)
 	{
 		const S2DVertex *v1, *v2, *v3;
 
diff -r -uw irrlicht/source/Irrlicht/CTRTextureFlatWire.cpp irrlicht32/source/Irrlicht/CTRTextureFlatWire.cpp
--- irrlicht/source/Irrlicht/CTRTextureFlatWire.cpp	2006-11-01 09:51:20.000000000 +0100
+++ irrlicht32/source/Irrlicht/CTRTextureFlatWire.cpp	2006-11-29 23:59:00.000000000 +0100
@@ -22,7 +22,7 @@
 	}
 
 	//! draws an indexed triangle list
-	virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount)
+	virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount)
 	{
 		const S2DVertex *v1, *v2, *v3;
 
diff -r -uw irrlicht/source/Irrlicht/CTRTextureGouraud.cpp irrlicht32/source/Irrlicht/CTRTextureGouraud.cpp
--- irrlicht/source/Irrlicht/CTRTextureGouraud.cpp	2006-11-01 11:55:30.000000000 +0100
+++ irrlicht32/source/Irrlicht/CTRTextureGouraud.cpp	2006-11-29 23:59:00.000000000 +0100
@@ -89,7 +89,7 @@
 
 
 //! draws an indexed triangle list
-void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount)
+void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount)
 {
 	const S2DVertex *v1, *v2, *v3;
 
diff -r -uw irrlicht/source/Irrlicht/CTRTextureGouraud.h irrlicht32/source/Irrlicht/CTRTextureGouraud.h
--- irrlicht/source/Irrlicht/CTRTextureGouraud.h	2006-11-01 09:50:00.000000000 +0100
+++ irrlicht32/source/Irrlicht/CTRTextureGouraud.h	2006-11-29 23:59:24.000000000 +0100
@@ -27,7 +27,7 @@
 		virtual void setRenderTarget(video::IImage* surface, const core::rect<s32>& viewPort);
 
 		//! draws an indexed triangle list
-		virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount);
+		virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount);
 
 		//! en or disables the backface culling
 		virtual void setBackfaceCulling(bool enabled = true);
diff -r -uw irrlicht/source/Irrlicht/CTriangleSelector.cpp irrlicht32/source/Irrlicht/CTriangleSelector.cpp
--- irrlicht/source/Irrlicht/CTriangleSelector.cpp	2006-07-15 08:41:46.000000000 +0200
+++ irrlicht32/source/Irrlicht/CTriangleSelector.cpp	2006-11-29 23:43:46.000000000 +0100
@@ -34,7 +34,7 @@
 		IMeshBuffer* buf = mesh->getMeshBuffer(i);
 
 		s32 idxCnt = buf->getIndexCount();
-		const u16* indices = buf->getIndices();
+		const u32* indices = buf->getIndices();
 		core::triangle3df tri;
 
 		switch (buf->getVertexType())
diff -r -uw irrlicht/source/Irrlicht/ITriangleRenderer.h irrlicht32/source/Irrlicht/ITriangleRenderer.h
--- irrlicht/source/Irrlicht/ITriangleRenderer.h	2006-06-17 08:11:56.000000000 +0200
+++ irrlicht32/source/Irrlicht/ITriangleRenderer.h	2006-11-29 23:57:48.000000000 +0100
@@ -49,7 +49,7 @@
 		virtual void setTexture(video::IImage* texture) = 0;
 
 		//! draws an indexed triangle list
-		virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u16* indexList, s32 triangleCount) = 0;
+		virtual void drawIndexedTriangleList(S2DVertex* vertices, s32 vertexCount, const u32* indexList, s32 triangleCount) = 0;
 	};
 
 
Only in irrlicht32/source/Irrlicht: Irrlicht7.1.ncb
Only in irrlicht32/source/Irrlicht: Irrlicht7.1.suo
diff -r -uw irrlicht/source/Irrlicht/Irrlicht7.1.vcproj irrlicht32/source/Irrlicht/Irrlicht7.1.vcproj
--- irrlicht/source/Irrlicht/Irrlicht7.1.vcproj	2006-11-01 11:17:48.000000000 +0100
+++ irrlicht32/source/Irrlicht/Irrlicht7.1.vcproj	2006-11-29 23:43:18.000000000 +0100
@@ -500,9 +500,6 @@
 					RelativePath=".\..\..\include\ISceneNodeFactory.h">
 				</File>
 				<File
-					RelativePath=".\..\..\include\ISceneNodeMeshLoader.h">
-				</File>
-				<File
 					RelativePath=".\..\..\include\IShadowVolumeSceneNode.h">
 				</File>
 				<File
diff -r -uw irrlicht/source/Irrlicht/OctTree.h irrlicht32/source/Irrlicht/OctTree.h
--- irrlicht/source/Irrlicht/OctTree.h	2006-11-18 08:23:10.000000000 +0100
+++ irrlicht32/source/Irrlicht/OctTree.h	2006-11-30 10:56:46.000000000 +0100
@@ -26,19 +26,19 @@
 	struct SMeshChunk
 	{
 		core::array<T> Vertices;
-		core::array<u16> Indices;
+		core::array<u32> Indices;
 		s32 MaterialId;
 	};
 
 	struct SIndexChunk
 	{
-		core::array<u16> Indices;
+		core::array<u32> Indices;
 		s32 MaterialId;
 	};
 
 	struct SIndexData
 	{
-		u16* Indices;
+		u32* Indices;
 		s32 CurrentSize;
 		s32 MaxSize;
 	};
@@ -62,7 +62,7 @@
 		{
 			IndexData[i].CurrentSize = 0;
 			IndexData[i].MaxSize = meshes[i].Indices.size();
-			IndexData[i].Indices = new u16[IndexData[i].MaxSize];
+			IndexData[i].Indices = new u32[IndexData[i].MaxSize];
 
 			ic.MaterialId = meshes[i].MaterialId;
 			(*indexChunks).push_back(ic);
@@ -267,8 +267,7 @@
 
 					if (idxcnt)
 					{
-						memcpy(&idxdata[i].Indices[idxdata[i].CurrentSize], 
-							&(*IndexData)[i].Indices[0], idxcnt * sizeof(s16));
+						memcpy(&idxdata[i].Indices[idxdata[i].CurrentSize], &(*IndexData)[i].Indices[0], idxcnt * sizeof(s32));
 						idxdata[i].CurrentSize += idxcnt;
 					}
 				}
@@ -320,8 +319,7 @@
 
 					if (idxcnt)
 					{
-						memcpy(&idxdata[i].Indices[idxdata[i].CurrentSize], 
-							&(*IndexData)[i].Indices[0], idxcnt * sizeof(s16));
+						memcpy(&idxdata[i].Indices[idxdata[i].CurrentSize],	&(*IndexData)[i].Indices[0], idxcnt * sizeof(s32));
 						idxdata[i].CurrentSize += idxcnt;
 					}
 				}
Only in irrlicht32/source/Irrlicht: obj
