Index: /GTP/trunk/Lib/Geom/shared/GTGeometry/include/GeoLodStripsLibrary.h
===================================================================
--- /GTP/trunk/Lib/Geom/shared/GTGeometry/include/GeoLodStripsLibrary.h	(revision 1526)
+++ /GTP/trunk/Lib/Geom/shared/GTGeometry/include/GeoLodStripsLibrary.h	(revision 1552)
@@ -185,5 +185,5 @@
 
 			uint32 GetValidIndexCount(int submeshid) const { return indices_x_submesh[submeshid]; }
-			uint32 GetValidOffset(int submeshid) const { return offsets_x_submesh[submeshid]; }
+//			uint32 GetValidOffset(int submeshid) const { return offsets_x_submesh[submeshid]; }
 			uint32 GetTotalStripCount(void) const { return mTotalStrips; }
 			uint32 GetSubMeshtripCount(int submeshid) const { return mStripsSubmesh[submeshid]; }
Index: /GTP/trunk/Lib/Geom/shared/GTGeometry/include/GeoLodTreeLibrary.h
===================================================================
--- /GTP/trunk/Lib/Geom/shared/GTGeometry/include/GeoLodTreeLibrary.h	(revision 1526)
+++ /GTP/trunk/Lib/Geom/shared/GTGeometry/include/GeoLodTreeLibrary.h	(revision 1552)
@@ -51,5 +51,5 @@
 		const IndexData* CurrentLOD_Trunk_Indices(void) const;
 		uint32 GetValidTrunkIndexCount(int isubmesh) const { return trunk->GetValidIndexCount(isubmesh); }
-		uint32 GetValidTrunkOffset(int isubmesh) const { return trunk->GetValidOffset(isubmesh); }
+//		uint32 GetValidTrunkOffset(int isubmesh) const { return trunk->GetValidOffset(isubmesh); }
 
 //		uint32 Get_Foliage_VertexCount(void) const;
Index: /GTP/trunk/Lib/Geom/shared/GTGeometry/src/GeoLodStripsLibrary.cpp
===================================================================
--- /GTP/trunk/Lib/Geom/shared/GTGeometry/src/GeoLodStripsLibrary.cpp	(revision 1541)
+++ /GTP/trunk/Lib/Geom/shared/GTGeometry/src/GeoLodStripsLibrary.cpp	(revision 1552)
@@ -281,4 +281,19 @@
 	}
 
+/*	// debug!
+	FILE *f = fopen("lodstrips_lodinfo.txt","wt");
+	fprintf(f,"mCurrentLOD: %d",mCurrentLod);
+	fprintf(f,"mLods: %d",mLods);
+	for (int i=0; i<mTotalStrips; i++)
+	{
+		fprintf(f,"\nstrip: %d - ",i);
+		for (int j=0; j<mStrips[i].size(); j++)
+		{
+			int ind = mStrips[i][j];
+			fprintf(f,"%d ",ind);
+		}
+	}
+	fclose(f);*/
+
 	UpdateDataRetrievalInterface();
 //	return	return_value;
@@ -456,4 +471,5 @@
 		mStripsChanges[i]	=	0;
 	}
+
 //	dataRetrievalInterface->End();
 
@@ -525,11 +541,7 @@
 			indexBegin	=	geoSubMesh->mStrip[strip];
 
-			//	If the strips is not the first.
-			
-/*			if (strip != 0)
-			{
+			//	If the strips is not the first.	(DEG!)
+			if (strip != 0)
 				indexBegin++;
-			}
-*/			
 
 			//	If is the final strip
@@ -544,6 +556,6 @@
 				indexEnd	= geoSubMesh->mStrip[strip + 1];
 
-				//	Remove degenerated
-//				indexEnd--;
+				//	Remove degenerated (DEG!)
+				indexEnd--;
 			}
 			
@@ -656,21 +668,20 @@
 void LodStripsLibrary::UpdateDataRetrievalInterface(void)
 {
-	unsigned	int	ii	=	0;
-	
-	int	counter	= 0;
 	int	target_submesh	= 0;
 	size_t	strip_count	= 0;
-	unsigned int ii_submesh = 0;
-
-	dataRetrievalInterface->Begin(target_submesh, indices_x_submesh[target_submesh]);
-
-//	dataRetrievalInterface->SetCurrentSubmesh(target_submesh);
-
-	for (unsigned	int	i	=	0;	i < mTotalStrips;	i++,	strip_count++)
+	unsigned int ii_submesh = 0;	
+	current_triangle_count = 0;
+
+	// indices_x_submesh is calculated without degenerates, 
+	// we must add the degenerate indices added here
+	uint32 numdeg = mGeoMesh->mSubMesh[target_submesh].mStripCount*2 - 2;
+
+	dataRetrievalInterface->Begin(target_submesh, indices_x_submesh[target_submesh] + numdeg);
+	current_triangle_count += indices_x_submesh[target_submesh] + numdeg;
+
+	for (unsigned int i = 0; i < mTotalStrips; i++, strip_count++)
 	{
 		if (strip_count >= mGeoMesh->mSubMesh[target_submesh].mStripCount)
 		{
-//			indices_x_submesh[target_submesh] = counter;
-
 			if (target_submesh==0)
 				offsets_x_submesh[target_submesh] = 0;
@@ -678,5 +689,4 @@
 				offsets_x_submesh[target_submesh] = indices_x_submesh[target_submesh-1] + offsets_x_submesh[target_submesh-1];
 
-			counter	=	0;
 			mStripsSubmesh[target_submesh]	=	(int)strip_count;
 			strip_count	=	0;
@@ -684,36 +694,37 @@
 			target_submesh++;
 			ii_submesh = 0;
-//			dataRetrievalInterface->SetCurrentSubmesh(target_submesh);
 			dataRetrievalInterface->End();
-			dataRetrievalInterface->Begin(target_submesh, indices_x_submesh[target_submesh]);
+			
+			numdeg = mGeoMesh->mSubMesh[target_submesh].mStripCount*2 - 2;
+			dataRetrievalInterface->Begin(target_submesh, indices_x_submesh[target_submesh] + numdeg);
+			current_triangle_count += indices_x_submesh[target_submesh] + numdeg;
 		}
 		
 		int lastindex = -1;
-		for (SmallIntVector::iterator it=mStrips[i].begin(); it!=mStrips[i].end(); it++, ii++, ii_submesh++)
+		for (SmallIntVector::iterator it=mStrips[i].begin(); it!=mStrips[i].end(); it++, ii_submesh++)
 		{
-/*			// repeat the first index of the strip: degenerate
-			if (lastindex==-1)
+			// repeat the first index of the strip: degenerate (DEG!)
+			// except for the first strip in a mesh
+			if (lastindex==-1 && strip_count>0)
 			{
 				lastindex=*it;
-				dataRetrievalInterface->SetIndex(ii,*it);				
-				counter++;
-				ii++;
-			}*/
+				dataRetrievalInterface->SetIndex(ii_submesh,*it);				
+				ii_submesh++;
+			}
 			lastindex=*it;
 			dataRetrievalInterface->SetIndex(ii_submesh,*it);
-			counter++;
 		}
 
-/*		// last repeat last vertex of the strip: degenerate
-		dataRetrievalInterface->SetIndex(ii,lastindex);
-		counter++;
-		ii++;*/
-
-//		dataRetrievalInterface->SetNumValidIndices(ii);
+		// repeat last vertex of the strip: degenerate (DEG!)
+		// except for the last strip in a mesh
+		if (strip_count<mGeoMesh->mSubMesh[target_submesh].mStripCount-1)
+		{
+			dataRetrievalInterface->SetIndex(ii_submesh,lastindex);
+			ii_submesh++;
+		}
 	}
 
 	if (strip_count >= mGeoMesh->mSubMesh[target_submesh].mStripCount)
 	{
-//		indices_x_submesh[target_submesh] = counter;
 		if (target_submesh==0)
 			offsets_x_submesh[target_submesh] = 0;
@@ -721,9 +732,7 @@
 			offsets_x_submesh[target_submesh] = indices_x_submesh[target_submesh-1] + offsets_x_submesh[target_submesh-1];
 
-		counter = 0;
 		mStripsSubmesh[target_submesh] = (int)strip_count;
 		strip_count = 0;
 		target_submesh++;
-//		dataRetrievalInterface->SetCurrentSubmesh(target_submesh);
 	}
 
Index: /GTP/trunk/Lib/Geom/shared/GTGeometry/src/GeoLodStripsConstructor.cpp
===================================================================
--- /GTP/trunk/Lib/Geom/shared/GTGeometry/src/GeoLodStripsConstructor.cpp	(revision 1541)
+++ /GTP/trunk/Lib/Geom/shared/GTGeometry/src/GeoLodStripsConstructor.cpp	(revision 1552)
@@ -60,4 +60,5 @@
 	}
 
+
 	update		=	-1;
 	increment	=	(float)30.0	/	increment;
@@ -148,11 +149,11 @@
 					
 
-					/*
-					cDatos.push_back(p0);
-					cDatos.push_back(r);
-
-					r	=	0;
-					k	=	long(cStripsT.size()-r-3);
-					*/
+					
+					//cDatos.push_back(p0);
+					//cDatos.push_back(r);
+
+					//r	=	0;
+					//k	=	long(cStripsT.size()-r-3);
+					
 					long auxp0, auxr;
 					//regLOD.strip= t;
@@ -669,5 +670,4 @@
 	upb(percent);
 
-	//	6 min.	
 	this->OrdenarModeloVQSLIM(upb);
 
@@ -677,6 +677,5 @@
 	for(i = 0; i < this->TOTALTIRAS; i++)
 	{
-		t = long(this->cStrips[i].size());
-		
+		t = long(this->cStrips[i].size());		
 		if (t > max)
 			max	= t;
@@ -879,5 +878,6 @@
 
 		num_vert	=	0;
-		
+
+		// load the strips list		
 		for	(i = 0; i < this->mGeoMesh->mSubMeshCount; i++)
 		{
@@ -891,14 +891,12 @@
 					Index	*aux	=	this->mGeoMesh->mSubMesh[i].mStrip[j];
 
-					/*
+					// remove strip degenerates (first indices) except for the first (DEG!)
 					if (j != 0)
 					{
 						// La primera tira no empieza por índices repetidos.
-						aux	=	aux+1;
-
+						aux	= aux+1;
 						indice_acum++;
 					}
-					*/
-
+					
 					if (j+1 < this->mGeoMesh->mSubMesh[i].mStripCount)
 					{
@@ -915,5 +913,6 @@
 						}
 
-						//tira.pop_back();
+						// DEG!: remove strip degenerates (last indices) except for the last strip
+						tira.pop_back();
 
 						this->cStrips.push_back(tira);
