Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_VP20.cg
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_VP20.cg	(revision 821)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_VP20.cg	(revision 821)
@@ -0,0 +1,14 @@
+void main_vp(
+      float4 position: POSITION,
+      float2 subTexCoord: TEXCOORD0,
+      float4 color: COLOR,
+      uniform float4x4 worldviewproj,
+      out float4 oposition: POSITION,
+      out float2 otexCoord: TEXCOORD0,
+      out float2 osubTexCoord: TEXCOORD1
+      )
+{
+	oposition = mul(worldviewproj, position);
+	osubTexCoord = subTexCoord;
+	otexCoord = color.xy;
+}
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/general.program
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/general.program	(revision 786)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/general.program	(revision 821)
@@ -27,7 +27,14 @@
 }
 
-fragment_program diffuse_FP20 cg
+vertex_program diffuseTexturing_VP20 cg
 {
-	source diffuse_FP20.cg
+	source diffuseTexturing_VP20.cg
+	entry_point main_vp
+	profiles arbvp1 vs_2_0
+}
+
+fragment_program diffuseTexturing_FP20 cg
+{
+	source diffuseTexturing_FP20.cg
 	entry_point main_fp
 	profiles ps_2_0 arbfp1
@@ -41,28 +48,28 @@
 }
 
-vertex_program indirectTexturing_VP20 cg
+vertex_program indirectTexturingDefault_VP20 cg
 {
-	source indirectTexturing_VP20.cg
+	source indirectTexturingDefault_VP20.cg
 	entry_point main_vp
-	profiles vs_2_0 arbvp1
+	profiles vs_2_0 arbvp1 
 }
 
-fragment_program indirectTexturing_FP20 cg
+fragment_program indirectTexturingDefault_FP20 cg
 {
-	source indirectTexturing_FP20.cg
+	source indirectTexturingDefault_FP20.cg
 	entry_point main_fp
         profiles ps_2_0 arbfp1
 }
 
-vertex_program indirectTexturing_hlsl_VP20 hlsl
+vertex_program indirectTexturingDefault_hlsl_VP20 hlsl
 {
-	source indirectTexturing_hlsl_VP20.shd
+	source indirectTexturingDefault_hlsl_VP20.shd
 	entry_point main_vp
 	target vs_2_0
 }
 
-fragment_program indirectTexturing_hlsl_FP20 hlsl
+fragment_program indirectTexturingDefault_hlsl_FP20 hlsl
 {
-	source indirectTexturing_hlsl_FP20.shd
+	source indirectTexturingDefault_hlsl_FP20.shd
 	entry_point main_fp
 	target ps_2_0 
@@ -75,2 +82,12 @@
 	profiles ps_2_0 arbfp1 
 }
+
+vertex_program indirectTexturingDefault_glsl_VP20 glsl
+{
+	source indirectTexturingDefault_glsl_VP20.shd
+}
+
+fragment_program indirectTexturingDefault_glsl_FP20 glsl
+{
+	source indirectTexturingDefault_glsl_FP20.shd
+}
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_glsl_VP20.shd
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_glsl_VP20.shd	(revision 821)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_glsl_VP20.shd	(revision 821)
@@ -0,0 +1,6 @@
+void main(void)
+{
+   gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+   gl_TexCoord[0].xy = gl_Color.xy;
+   gl_TexCoord[1].xy = gl_MultiTexCoord0.xy;
+}
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_hlsl_VP20.shd
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_hlsl_VP20.shd	(revision 821)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_hlsl_VP20.shd	(revision 821)
@@ -0,0 +1,22 @@
+struct VS_OUTPUT {
+   float4 Pos:       POSITION;
+   float2 texCoord:  TEXCOORD0;
+   float2 subTexCoord: TEXCOORD1;
+};
+
+
+float4x4 worldviewproj;
+
+VS_OUTPUT main_vp(
+      float4 position: POSITION,
+      float2 subTexCoord: TEXCOORD0,
+      float4 color: COLOR
+      )
+{
+	VS_OUTPUT Out;
+
+	Out.Pos = mul(worldviewproj, position);
+	Out.subTexCoord = subTexCoord;
+	Out.texCoord = color.xy;
+	return Out;
+}
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/diffuseTexturing_VP20.cg
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/diffuseTexturing_VP20.cg	(revision 821)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/diffuseTexturing_VP20.cg	(revision 821)
@@ -0,0 +1,15 @@
+void main_vp(
+      float4 position: POSITION,
+      float2 texCoord: TEXCOORD0,
+      float2 subTexCoord: TEXCOORD1,
+      float4 color: COLOR,
+      uniform float4x4 worldviewproj,
+      out float4 oposition: POSITION,
+      out float2 otexCoord: TEXCOORD0,
+      out float2 osubTexCoord: TEXCOORD1
+      )
+{
+	oposition = mul(worldviewproj, position);
+	osubTexCoord = subTexCoord;
+	otexCoord = color.wx;
+}
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_FP20.cg
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_FP20.cg	(revision 821)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_FP20.cg	(revision 821)
@@ -0,0 +1,20 @@
+void main_fp(float2 texCoord: TEXCOORD0, 
+             float2 subTexCoord: TEXCOORD1,
+	     uniform sampler2D indirectTexture,
+	     uniform sampler2D sourceTexture,
+	     uniform float epsilonX,
+	     uniform float epsilonY,
+	     uniform float sourceTextureSize,
+	     out float4 ocolor: COLOR)
+{
+   ocolor = float4(0.0, 0.0, 0.0, 0.0);
+   float2 epsilon = float2(epsilonX, epsilonY);
+
+   float2 coords = float2(0.0, 1.0) - abs(texCoord - ( tex2D(indirectTexture, subTexCoord).xy - epsilon ) );
+
+   if (tex2D(indirectTexture, subTexCoord).z != 0.0) 
+   {	   
+	ocolor = float4(tex2D(sourceTexture, coords * sourceTextureSize).xyzw);
+   }
+}
+
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDebugTexCoordCorrespondence_FP20.cg
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDebugTexCoordCorrespondence_FP20.cg	(revision 786)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDebugTexCoordCorrespondence_FP20.cg	(revision 821)
@@ -1,11 +1,11 @@
 sampler indirectTexture: register(s0);
 
-void main_fp(float2 posS: TEXCOORD0, 
-             float2 posT: TEXCOORD1,
+void main_fp(float2 texCoord: TEXCOORD0, 
+             float2 subTexCoord: TEXCOORD1,
              out float4 ocolor: COLOR,
              uniform sampler2D indirectTexture)
 {
 
-   float2 coords = posS + (float2(1.0, 1.0) - tex2D(indirectTexture, posT).xy); 
+   float2 coords = texCoord + (float2(1.0, 1.0) - tex2D(indirectTexture, subTexCoord).xy); 
    ocolor = float4(coords, 0.0, 1.0);
 }
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_glsl_FP20.shd
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_glsl_FP20.shd	(revision 821)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_glsl_FP20.shd	(revision 821)
@@ -0,0 +1,21 @@
+uniform sampler2D indirectTexture;
+uniform sampler2D sourceTexture;
+uniform float epsilonX;
+uniform float epsilonY;
+uniform float sourceTextureSize;
+
+void main(void)
+{
+   vec4 ocolor = vec4(0.0, 0.0, 0.0, 0.0);	
+   vec2 epsilon = vec2(epsilonX, epsilonY);
+   vec2 texCoord = gl_TexCoord[0].xy;
+   vec2 subTexCoord = gl_TexCoord[1].xy;   
+   vec2 coords = vec2(0.0, 1.0) - abs(texCoord - ( texture2D(indirectTexture, subTexCoord ).xy - epsilon ) );
+
+   if (texture2D(indirectTexture, subTexCoord).z != 0.0) 
+   {	   
+	ocolor = texture2D(sourceTexture, coords * sourceTextureSize).xyzw;
+   }
+
+   gl_FragColor = ocolor; 
+}   
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_hlsl_FP20.shd
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_hlsl_FP20.shd	(revision 821)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturingDefault_hlsl_FP20.shd	(revision 821)
@@ -0,0 +1,23 @@
+sampler indirectTexture: register(s0);
+sampler sourceTexture: register(s1);
+
+uniform float epsilonX;
+uniform float epsilonY;
+uniform float sourceTextureSize;
+
+float4 main_fp(float2 texCoord: TEXCOORD0, 
+               float2 subTexCoord: TEXCOORD1) : COLOR
+{
+   float4 ocolor = float4(0.0, 0.0, 0.0, 0.0);
+   float2 epsilon = float2(epsilonX, epsilonY);
+
+   float2 coords = float2(0.0, 1.0) - abs(texCoord - ( tex2D(indirectTexture, subTexCoord).xy - epsilon ) );
+
+   if (tex2D(indirectTexture, subTexCoord).z != 0.0) 
+   {	   
+	ocolor = float4(tex2D(sourceTexture, coords * sourceTextureSize).xyzw);
+   }
+
+   return  ocolor;
+}
+
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/diffuseTexturing_FP20.cg
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/diffuseTexturing_FP20.cg	(revision 821)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/diffuseTexturing_FP20.cg	(revision 821)
@@ -0,0 +1,33 @@
+void main_fp(float2 texCoord: TEXCOORD0, 
+	     float2 subTexCoord: TEXCOORD1,
+	     float4 position : WPOS,
+	     float4 colour: COLOR0,
+             out float4 ocolor: COLOR,
+             uniform sampler2D texture)
+{
+	// Normalmap
+	//normal = normalize(normal);
+	// Convert from [-1,1] to [0,1]
+	//ocolor.r = (normal.r + 1.0) / 2.0;
+	//ocolor.g = (normal.g + 1.0) / 2.0;
+	//ocolor.b = (normal.b + 1.0) / 2.0;
+	//ocolor.a = tex2D(textura,texCoord).a;
+
+	// Depthmap
+	//ocolor.r = position.z;
+	//ocolor.g = position.z;
+	//ocolor.b = position.z;
+	//ocolor.a = 1.0;
+
+	// Texture
+        ocolor.r = tex2D(texture, subTexCoord).r;
+	ocolor.g = tex2D(texture, subTexCoord).g;
+	ocolor.b = tex2D(texture, subTexCoord).b;
+	ocolor.a = tex2D(texture, subTexCoord).a;
+
+	// Debug
+	//ocolor = ocolor + float4(colour.xyz,1.0);
+
+	// Colour
+        //ocolor = colour;
+}
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturing_hlsl_FP20.shd
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturing_hlsl_FP20.shd	(revision 786)
+++ 	(revision )
@@ -1,33 +1,0 @@
-sampler indirectTexture: register(s0);
-sampler leaf: register(s1);
-
-float4 main_fp(float2 posS: TEXCOORD0, float2 posT: TEXCOORD1) : COLOR
-{
-   float4 leafColor;
-   float4 ocolor;
-   float epsilon = 1.0/255.0;
-   float2 coords;
-
-   coords = abs((posS) - ( tex2D(indirectTexture, posT).xy + float2(-epsilon, epsilon) ) );
-
-   if ((tex2D(indirectTexture, posT).z) != 0.0) 
-   {	   
-	//leafColor = float4(tex2D(leaf, coords / (1.0 / 32.0) - float2(0.5,0.5)).xyzw);
-	leafColor = float4(tex2D(leaf, coords / (1.0 / 16.0) - float2(0.25,0.25)).xyzw);
-
-	//leafColor = float4(tex2D(leaf, coords / (1.0 / 32.0) - float2(0.5,0.5)).xyz, 1.0);
-	//leafColor = float4(tex2D(leaf, coords / (1.0 / 16.0) - float2(0.25,0.25)).xyz, 1.0);
-   }
-   else
-   {
-	leafColor = 0.0;
-   }
-
-   // Decal with quad...
-   //leafColor = float4(coords / (1.0 / 32.0), 0.0, leafColor.w);
-
-   ocolor = leafColor;
- 
-   return  ocolor;
-}
-
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturing_hlsl_VP20.shd
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturing_hlsl_VP20.shd	(revision 786)
+++ 	(revision )
@@ -1,22 +1,0 @@
-struct VS_OUTPUT {
-   float4 Pos:       POSITION;
-   float2 subTexCoord: TEXCOORD0;
-   float2 texCoord:  TEXCOORD1;
-};
-
-
-float4x4 worldviewproj;
-
-VS_OUTPUT main_vp(
-      float4 position: POSITION,
-      float2 subTexCoord: TEXCOORD0,
-      float2 texCoord: TEXCOORD1
-      )
-{
-	VS_OUTPUT Out;
-
-	Out.Pos = mul(worldviewproj, position);
-	Out.texCoord = texCoord;
-	Out.subTexCoord = subTexCoord;
-	return Out;
-}
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/diffuse_FP20.cg
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/diffuse_FP20.cg	(revision 786)
+++ 	(revision )
@@ -1,33 +1,0 @@
-void main_fp(float2 texCoord: TEXCOORD0, 
-	     float2 subTexCoord: TEXCOORD1,
-	     float4 position : WPOS,
-	     float4 colour: COLOR0,
-             out float4 ocolor: COLOR,
-             uniform sampler2D texture)
-{
-	// Normalmap
-	//normal = normalize(normal);
-	// Convert from [-1,1] to [0,1]
-	//ocolor.r = (normal.r + 1.0) / 2.0;
-	//ocolor.g = (normal.g + 1.0) / 2.0;
-	//ocolor.b = (normal.b + 1.0) / 2.0;
-	//ocolor.a = tex2D(textura,texCoord).a;
-
-	// Depthmap
-	//ocolor.r = position.z;
-	//ocolor.g = position.z;
-	//ocolor.b = position.z;
-	//ocolor.a = 1.0;
-
-	// Texture
-        ocolor.r = tex2D(texture, subTexCoord).r;
-	ocolor.g = tex2D(texture, subTexCoord).g;
-	ocolor.b = tex2D(texture, subTexCoord).b;
-	ocolor.a = tex2D(texture, subTexCoord).a;
-
-	// Debug
-	//ocolor = ocolor + float4(colour.xyz,1.0);
-
-	// Colour
-        //ocolor = colour;
-}
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturing_FP20.cg
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturing_FP20.cg	(revision 786)
+++ 	(revision )
@@ -1,31 +1,0 @@
-void main_fp(float2 posS: TEXCOORD0, 
-             float2 posT: TEXCOORD1,
-	     uniform sampler2D indirectTexture,
-	     uniform sampler2D leaf,
-	     out float4 ocolor: COLOR)
-{
-   float4 leafColor;
-   float epsilon = 1.0/255.0;
-   float2 coords;
-
-   coords = abs((posS) - ( tex2D(indirectTexture, posT).xy + float2(-epsilon, epsilon) ) );
-
-   if (tex2D(indirectTexture, posT).z != 0.0) 
-   {	   
-	//leafColor = float4(tex2D(leaf, coords / (1.0 / 32.0) - float2(0.5,0.5)).xyzw);
-	leafColor = float4(tex2D(leaf, coords / (1.0 / 16.0) - float2(0.25,0.25)).xyzw);
-
-	//leafColor = float4(tex2D(leaf, coords / (1.0 / 32.0) - float2(0.5,0.5)).xyz, 1.0);
-	//leafColor = float4(tex2D(leaf, coords / (1.0 / 16.0) - float2(0.25,0.25)).xyz, 1.0);
-   }
-   else
-   {
-	leafColor = 0.0;
-   }
-
-   // Decal with quad...
-   //leafColor = float4(coords / (1.0 / 32.0), 0.0, leafColor.w);
-
-   ocolor = leafColor;
-}
-
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturing_VP20.cg
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/media/general/indirectTexturing_VP20.cg	(revision 786)
+++ 	(revision )
@@ -1,14 +1,0 @@
-void main_vp(
-      float4 position: POSITION,
-      float2 subTexCoord: TEXCOORD0,
-      float2 texCoord: TEXCOORD1,
-      uniform float4x4 worldviewproj,
-      out float4 oposition: POSITION,
-      out float2 osubTexCoord: TEXCOORD0,
-      out float2 otexCoord: TEXCOORD1
-      )
-{
-	oposition = mul(worldviewproj, position);
-	otexCoord = texCoord;
-	osubTexCoord = subTexCoord;
-}
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/include/LBBC/LBBCClusterViewMode.h
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/include/LBBC/LBBCClusterViewMode.h	(revision 786)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/include/LBBC/LBBCClusterViewMode.h	(revision 821)
@@ -22,4 +22,5 @@
 		bool frameStarted(const Ogre::FrameEvent& evt, Ogre::InputReader *inputReader)
 		{
+			showDebugOverlay(true);
 			mWindow->getViewport(0)->setBackgroundColour(Ogre::ColourValue(0.0, 0.0, 0.0, 1.0));
 
@@ -40,4 +41,5 @@
 			Ogre::Entity* eLeafClustersGrouped = mSceneMgr->createEntity("chestnutLeafClustersGrouped.mesh", "chestnutLeafClustersGrouped.mesh");								
 			//Ogre::Entity* eLeafClustersGrouped = mSceneMgr->createEntity("mapleLeafClustersGrouped.mesh", "mapleLeafClustersGrouped.mesh");								
+			//Ogre::Entity* eLeafClustersGrouped = mSceneMgr->createEntity("prunusLeafClustersGrouped.mesh", "prunusLeafClustersGrouped.mesh");								
 			sNode->attachObject(eLeafClustersGrouped);			
 			sNode->rotate(Ogre::Vector3::UNIT_X, Ogre::Radian(Ogre::Degree(-90.0)));
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/include/LBBC/LBBCBillboardViewMode.h
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/include/LBBC/LBBCBillboardViewMode.h	(revision 786)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/include/LBBC/LBBCBillboardViewMode.h	(revision 821)
@@ -14,5 +14,7 @@
 		{
 			showDebugOverlay(false);
-			mReloadedTextures = false;
+			epsilonX = 0.0;
+			epsilonY = 0.0;
+			factor = 1.0 / 255.0;
 		}
 
@@ -23,23 +25,170 @@
 		bool frameStarted(const Ogre::FrameEvent& evt, Ogre::InputReader *inputReader)
 		{
-			mWindow->getViewport(0)->setBackgroundColour(Ogre::ColourValue(0.0, 0.0, 0.0, 1.0));
-
-			//if (!mReloadedTextures)
-			//{
-			//	for (unsigned int iSubEntity = 0; iSubEntity < mBillboardCloudEntity->getNumSubEntities(); iSubEntity++)
-			//	{
-			//		Ogre::MaterialPtr materialPtr = Ogre::MaterialManager::getSingleton().getByName(mBillboardCloudEntity->getSubEntity(iSubEntity)->getMaterialName());
-			//		Ogre::LogManager::getSingleton().logMessage("Reloading texture:" + materialPtr->getTechnique(0)->getPass(0)->getTextureUnitState(0)->getTextureName());
-
-			//		Ogre::TexturePtr texturePtr = Ogre::TextureManager::getSingleton().getByName(materialPtr->getTechnique(0)->getPass(0)->getTextureUnitState(0)->getTextureName());
-			//		texturePtr->reload();
-			//		materialPtr->reload();
-			//	}
-			//	mReloadedTextures = true;
-			//}
+			showDebugOverlay(true);
+			mWindow->getViewport(0)->setBackgroundColour(Ogre::ColourValue(0.0, 0.0, 0.0, 1.0));			
+			mEpsilonText = Ogre::String("Epsilon:") + Ogre::StringConverter::toString(epsilonX) + Ogre::String(",") + Ogre::StringConverter::toString(epsilonY);
+			mWindow->setDebugText(mEpsilonText);
 
 			return OgreFrameListenerMode::frameStarted(evt, inputReader);	
 		}
 
+		virtual bool processUnbufferedKeyInput(const Ogre::FrameEvent& evt)
+		{			
+			if (mInputDevice->isKeyDown(Ogre::KC_1))
+			{
+				epsilonX = epsilonX + factor;				
+			}
+
+			if (mInputDevice->isKeyDown(Ogre::KC_2))
+			{
+				epsilonX = epsilonX - factor;
+			}
+
+			if (mInputDevice->isKeyDown(Ogre::KC_3))
+			{
+				epsilonY = epsilonY + factor;
+			}
+			
+			if (mInputDevice->isKeyDown(Ogre::KC_4))
+			{
+				epsilonY = epsilonY - factor;
+			}
+
+			mFragParams = mBillboardCloudEntity->getSubEntity(0)->getMaterial()->getBestTechnique()->getPass(0)->getFragmentProgramParameters();
+			mFragParams->setNamedConstant("epsilonX", epsilonX);
+			mFragParams->setNamedConstant("epsilonY", epsilonY);
+
+			if (mInputDevice->isKeyDown(Ogre::KC_A))
+			{
+				// Move camera left
+				mTranslateVector.x = -mMoveScale;
+			}
+
+			if (mInputDevice->isKeyDown(Ogre::KC_D))
+			{
+				// Move camera RIGHT
+				mTranslateVector.x = mMoveScale;
+			}
+
+			/* Move camera forward by keypress. */
+			if (mInputDevice->isKeyDown(Ogre::KC_UP) || mInputDevice->isKeyDown(Ogre::KC_W) )
+			{
+				mTranslateVector.z = -mMoveScale;
+			}
+
+			/* Move camera backward by keypress. */
+			if (mInputDevice->isKeyDown(Ogre::KC_DOWN) || mInputDevice->isKeyDown(Ogre::KC_S) )
+			{
+				mTranslateVector.z = mMoveScale;
+			}
+
+			if (mInputDevice->isKeyDown(Ogre::KC_PGUP))
+			{
+				// Move camera up
+				mTranslateVector.y = mMoveScale;
+			}
+
+			if (mInputDevice->isKeyDown(Ogre::KC_PGDOWN))
+			{
+				// Move camera down
+				mTranslateVector.y = -mMoveScale;
+			}
+
+			if (mInputDevice->isKeyDown(Ogre::KC_RIGHT))
+			{
+				mCamera->yaw(-mRotScale);
+			}
+			
+			if (mInputDevice->isKeyDown(Ogre::KC_LEFT))
+			{
+				mCamera->yaw(mRotScale);
+			}
+
+			// see if switching is on, and you want to toggle 
+			if (mInputTypeSwitchingOn && mInputDevice->isKeyDown(Ogre::KC_M) && mTimeUntilNextToggle <= 0)
+			{
+				switchMouseMode();
+				mTimeUntilNextToggle = 1;
+			}
+
+			if (mInputTypeSwitchingOn && mInputDevice->isKeyDown(Ogre::KC_K) && mTimeUntilNextToggle <= 0)
+			{
+				// must be going from immediate keyboard to buffered keyboard
+				switchKeyMode();
+				mTimeUntilNextToggle = 1;
+			}
+			if (mInputDevice->isKeyDown(Ogre::KC_F) && mTimeUntilNextToggle <= 0)
+			{
+				mStatsOn = !mStatsOn;
+				showDebugOverlay(mStatsOn);
+
+				mTimeUntilNextToggle = 1;
+			}
+			if (mInputDevice->isKeyDown(Ogre::KC_T) && mTimeUntilNextToggle <= 0)
+			{
+				switch(mFiltering)
+				{
+				case Ogre::TFO_BILINEAR:
+					mFiltering = Ogre::TFO_TRILINEAR;
+					mAniso = 1;
+					break;
+				case Ogre::TFO_TRILINEAR:
+					mFiltering = Ogre::TFO_ANISOTROPIC;
+					mAniso = 8;
+					break;
+				case Ogre::TFO_ANISOTROPIC:
+					mFiltering = Ogre::TFO_BILINEAR;
+					mAniso = 1;
+					break;
+				default:
+					break;
+				}
+				Ogre::MaterialManager::getSingleton().setDefaultTextureFiltering(mFiltering);
+				Ogre::MaterialManager::getSingleton().setDefaultAnisotropy(mAniso);
+
+
+				showDebugOverlay(mStatsOn);
+
+				mTimeUntilNextToggle = 1;
+			}
+
+			if (mInputDevice->isKeyDown(Ogre::KC_SYSRQ) && mTimeUntilNextToggle <= 0)
+			{
+				char tmp[20];
+				sprintf(tmp, "screenshot_%d.png", ++mNumScreenShots);
+				mWindow->writeContentsToFile(tmp);
+				mTimeUntilNextToggle = 0.5;
+				mWindow->setDebugText(Ogre::String("Wrote ") + tmp);
+			}
+			
+			if (mInputDevice->isKeyDown(Ogre::KC_R) && mTimeUntilNextToggle <=0)
+			{
+				mSceneDetailIndex = (mSceneDetailIndex+1)%3 ;
+				switch(mSceneDetailIndex) {
+					case 0 : mCamera->setPolygonMode(Ogre::PM_SOLID) ; break ;
+					case 1 : mCamera->setPolygonMode(Ogre::PM_WIREFRAME) ; break ;
+					case 2 : mCamera->setPolygonMode(Ogre::PM_POINTS) ; break ;
+				}
+				mTimeUntilNextToggle = 0.5;
+			}
+
+			static bool displayCameraDetails = false;
+			if (mInputDevice->isKeyDown(Ogre::KC_P) && mTimeUntilNextToggle <= 0)
+			{
+				displayCameraDetails = !displayCameraDetails;
+				mTimeUntilNextToggle = 0.5;
+				if (!displayCameraDetails)
+					mWindow->setDebugText("");
+			}
+			if (displayCameraDetails)
+			{
+				// Print camera details
+				mWindow->setDebugText("P: " + Ogre::StringConverter::toString(mCamera->getDerivedPosition()) + " " + 
+					"O: " + Ogre::StringConverter::toString(mCamera->getDerivedOrientation()));
+			}
+
+			// Return true to continue rendering
+			return true;
+		}
 		void setBillboardCloudMeshName(Ogre::String billboardCloudMeshName)
 		{
@@ -55,4 +204,5 @@
 			mBillboardCloudEntity = mSceneMgr->createEntity("chestnutLeavesBillboardCloudGrouped.mesh", "chestnutLeavesBillboardCloudGrouped.mesh");
 			//mBillboardCloudEntity = mSceneMgr->createEntity("mapleLeavesBillboardCloudGrouped.mesh", "mapleLeavesBillboardCloudGrouped.mesh");		
+			//mBillboardCloudEntity = mSceneMgr->createEntity("prunusLeavesBillboardCloudGrouped.mesh", "prunusLeavesBillboardCloudGrouped.mesh");		
 			sNode->attachObject(mBillboardCloudEntity);
 			sNode->rotate(Ogre::Vector3::UNIT_X, Ogre::Radian(Ogre::Degree(-90.0)));
@@ -64,5 +214,13 @@
 		Ogre::Entity *mBillboardCloudEntity;
 
-		bool mReloadedTextures;
+		Ogre::Real epsilonX;
+
+		Ogre::Real epsilonY;
+		
+		Ogre::Real factor;
+
+		Ogre::String mEpsilonText;
+
+		Ogre::GpuProgramParametersSharedPtr mFragParams;
 };
 
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/OBAOgreFrameListener.cpp
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/OBAOgreFrameListener.cpp	(revision 778)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/OBAOgreFrameListener.cpp	(revision 821)
@@ -90,5 +90,5 @@
     }
 
-	mWindow->setDebugText("P: " + mDefaultOgreFrameListenerMode->getSceneManager()->getName() + " -- " + Ogre::StringConverter::toString(mTimeUntilNextToggle));
+	//mWindow->setDebugText("P: " + mDefaultOgreFrameListenerMode->getSceneManager()->getName() + " -- " + Ogre::StringConverter::toString(mTimeUntilNextToggle));
 
 	return mDefaultOgreFrameListenerMode->frameStarted(evt,mInputDevice);
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/LBBCBillboardCloudIndirectTextureViewMode.cpp
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/LBBCBillboardCloudIndirectTextureViewMode.cpp	(revision 778)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/LBBCBillboardCloudIndirectTextureViewMode.cpp	(revision 821)
@@ -257,4 +257,5 @@
 bool BillboardCloudIndirectTextureViewMode::frameStarted(const Ogre::FrameEvent& evt, Ogre::InputReader *inputReader)
 {
+	showDebugOverlay(false);
 	initializeEntityClustersGrouped();
     initializeBillboardCloudSplitted();
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/IMGNodeBsp.cpp
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/IMGNodeBsp.cpp	(revision 731)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/IMGNodeBsp.cpp	(revision 821)
@@ -109,5 +109,6 @@
 	float width, height;
 	
-	bound.print();
+	//bound.print();
+
 	min = bound.getMinimum();
 	max = bound.getMaximum();
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/BBCBillboardCloudUVMapper.cpp
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/BBCBillboardCloudUVMapper.cpp	(revision 778)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/BBCBillboardCloudUVMapper.cpp	(revision 821)
@@ -196,11 +196,11 @@
 		subEntity->setTexCoord(iUniqueVertex+2, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0));
 
-		Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]);
-		Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]);
-		Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]);
-
-		subEntity->setVertexColour(iUniqueVertex, subEntityColour01.getAsRGBA());
-		subEntity->setVertexColour(iUniqueVertex+1, subEntityColour02.getAsRGBA());
-		subEntity->setVertexColour(iUniqueVertex+2, subEntityColour03.getAsRGBA());
+		//Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]);
+		//Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]);
+		//Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]);
+
+		//subEntity->setVertexColour(iUniqueVertex, subEntityColour01.getAsRGBA());
+		//subEntity->setVertexColour(iUniqueVertex+1, subEntityColour02.getAsRGBA());
+		//subEntity->setVertexColour(iUniqueVertex+2, subEntityColour03.getAsRGBA());
 
 		// Face B
@@ -212,11 +212,11 @@
 		subEntity->setTexCoord(iUniqueVertex+5, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0));
 
-		Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]);
-		Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]);
-		Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]);
-
-		subEntity->setVertexColour(iUniqueVertex+3, subEntityColour04.getAsRGBA());
-		subEntity->setVertexColour(iUniqueVertex+4, subEntityColour05.getAsRGBA());
-		subEntity->setVertexColour(iUniqueVertex+5, subEntityColour06.getAsRGBA());
+		//Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]);
+		//Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]);
+		//Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]);
+
+		//subEntity->setVertexColour(iUniqueVertex+3, subEntityColour04.getAsRGBA());
+		//subEntity->setVertexColour(iUniqueVertex+4, subEntityColour05.getAsRGBA());
+		//subEntity->setVertexColour(iUniqueVertex+5, subEntityColour06.getAsRGBA());
 	}
 	else
@@ -238,11 +238,11 @@
 			subEntity->setTexCoord(iUniqueVertex+2, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0));
 
-			Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]);
-			Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]);
-			Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]);
-
-			subEntity->setVertexColour(iUniqueVertex, subEntityColour01.getAsRGBA());
-			subEntity->setVertexColour(iUniqueVertex+1, subEntityColour02.getAsRGBA());
-			subEntity->setVertexColour(iUniqueVertex+2, subEntityColour03.getAsRGBA());
+			//Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]);
+			//Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]);
+			//Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]);
+
+			//subEntity->setVertexColour(iUniqueVertex, subEntityColour01.getAsRGBA());
+			//subEntity->setVertexColour(iUniqueVertex+1, subEntityColour02.getAsRGBA());
+			//subEntity->setVertexColour(iUniqueVertex+2, subEntityColour03.getAsRGBA());
 
 			// Face B
@@ -254,11 +254,11 @@
 			subEntity->setTexCoord(iUniqueVertex+5, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0));
 
-			Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]);
-			Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]);
-			Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]);
-
-			subEntity->setVertexColour(iUniqueVertex+3, subEntityColour04.getAsRGBA());
-			subEntity->setVertexColour(iUniqueVertex+4, subEntityColour05.getAsRGBA());
-			subEntity->setVertexColour(iUniqueVertex+5, subEntityColour06.getAsRGBA());
+			//Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]);
+			//Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]);
+			//Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]);
+
+			//subEntity->setVertexColour(iUniqueVertex+3, subEntityColour04.getAsRGBA());
+			//subEntity->setVertexColour(iUniqueVertex+4, subEntityColour05.getAsRGBA());
+			//subEntity->setVertexColour(iUniqueVertex+5, subEntityColour06.getAsRGBA());
 
 		}
@@ -341,5 +341,5 @@
 	for (unsigned int iBillboard = 0; iBillboard < mBillboardCloud->getNumBillboards(); iBillboard++)
 	{
-		Ogre::LogManager::getSingleton().logMessage("id:" + Ogre::StringConverter::toString(mBillboardCloud->getBillboard(iBillboard)->getBillboardHandle()));
+		//Ogre::LogManager::getSingleton().logMessage("id:" + Ogre::StringConverter::toString(mBillboardCloud->getBillboard(iBillboard)->getBillboardHandle()));
 
 		BillboardClusterData *billboardClusterData = mBillboardCloud->getBillboard(iBillboard)->getBillboardClusterData().get();		
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/BBCBillboardCloud.cpp
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/BBCBillboardCloud.cpp	(revision 786)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/BBCBillboardCloud.cpp	(revision 821)
@@ -62,4 +62,6 @@
 
 	unsigned int numGeneratedBillboardClouds = 0;
+	bool mergeBillboardCloudTexCoordGenerated = false;
+
 	for (unsigned int iBillboard = 0; iBillboard < getNumBillboards(); iBillboard++)
 	{
@@ -73,4 +75,12 @@
 			{
 				subEntity = mEntity->getSubEntity(0);
+
+				if (!mergeBillboardCloudTexCoordGenerated)
+				{
+					subEntity->enableVertexColours(true);
+
+					mergeBillboardCloudTexCoordGenerated = true;
+				}
+
 				unsigned int offset = subEntity->getNumFaces() * 3;
 				Ogre::Vector3 indicesA = Ogre::Vector3(offset, offset + 1, offset + 2);
@@ -90,7 +100,8 @@
 				Ogre::Vector3 indices = Ogre::Vector3(0,1,2);
 				subEntity = mEntity->getSubEntity(numGeneratedBillboardClouds);
-				subEntity->addTextureCoordSet(2);
-
-				Ogre::LogManager::getSingleton().logMessage("BBC-SubEntity(" + Ogre::StringConverter::toString(numGeneratedBillboardClouds) + ") - Num.Tex.Coord.Sets:" + Ogre::StringConverter::toString(subEntity->getNumTexCoordSets()));
+	
+				subEntity->enableVertexColours(true);
+
+				//Ogre::LogManager::getSingleton().logMessage("BBC-SubEntity(" + Ogre::StringConverter::toString(numGeneratedBillboardClouds) + ") - Num.Tex.Coord.Sets:" + Ogre::StringConverter::toString(subEntity->getNumTexCoordSets()));
 
 				subEntity->addFaceVerticesIDs(indices);
@@ -101,24 +112,28 @@
 			// Face A of the billboard quad
 			vFaceA1.position = billboard->getBillboardClusterData()->getQuadTopLeftCorner();
+			vFaceA2.position = billboard->getBillboardClusterData()->getQuadTopRightCorner();
+			vFaceA3.position = billboard->getBillboardClusterData()->getQuadBottomRightCorner();
+
 			vFaceA1.normal = billboard->getBillboardClusterData()->getNormal();
-			vFaceA1.uv[0] = Ogre::Vector3(1.0 , 0.0, 0.0);
-			vFaceA2.position = billboard->getBillboardClusterData()->getQuadTopRightCorner();
 			vFaceA2.normal = billboard->getBillboardClusterData()->getNormal();
-			vFaceA2.uv[0] = Ogre::Vector3(0.0, 0.0, 0.0);
-			vFaceA3.position = billboard->getBillboardClusterData()->getQuadBottomRightCorner();
 			vFaceA3.normal = billboard->getBillboardClusterData()->getNormal();
-			vFaceA3.uv[0] = Ogre::Vector3(0.0 ,1.0 ,0.0);
+
+			vFaceA1.colour = Ogre::ColourValue(1.0 , 0.0, 0.0, 0.0).getAsARGB();
+			vFaceA2.colour = Ogre::ColourValue(0.0, 0.0, 0.0, 0.0).getAsARGB();
+			vFaceA3.colour = Ogre::ColourValue(0.0, 1.0 ,0.0, 0.0).getAsARGB();
 
 			// Face B of the billboard quad
 			UniqueVertex vFaceB1,vFaceB2,vFaceB3;
 			vFaceB1.position = billboard->getBillboardClusterData()->getQuadBottomRightCorner();
+			vFaceB2.position = billboard->getBillboardClusterData()->getQuadBottomLeftCorner();
+			vFaceB3.position = billboard->getBillboardClusterData()->getQuadTopLeftCorner();
+
 			vFaceB1.normal = billboard->getBillboardClusterData()->getNormal();
-			vFaceB1.uv[0] = Ogre::Vector3(0.0, 1.0 ,0.0);
-			vFaceB2.position = billboard->getBillboardClusterData()->getQuadBottomLeftCorner();
 			vFaceB2.normal = billboard->getBillboardClusterData()->getNormal();
-			vFaceB2.uv[0] = Ogre::Vector3(1.0, 1.0, 0.0);
-			vFaceB3.position = billboard->getBillboardClusterData()->getQuadTopLeftCorner();
 			vFaceB3.normal = billboard->getBillboardClusterData()->getNormal();
-			vFaceB3.uv[0] = Ogre::Vector3(1.0, 0.0, 0.0);
+
+			vFaceB1.colour = Ogre::ColourValue(0.0, 1.0 ,0.0, 0.0).getAsARGB();
+			vFaceB2.colour = Ogre::ColourValue(1.0, 1.0, 0.0, 0.0).getAsARGB();
+			vFaceB3.colour = Ogre::ColourValue(1.0, 0.0, 0.0, 0.0).getAsARGB();
 
 			subEntity->addUniqueVertex(vFaceA1);
@@ -231,5 +246,5 @@
 		BillboardGroupPtr billboardGroup = this->getBillboardGroup(iBillboardGroup);
 
-		Ogre::LogManager::getSingleton().logMessage("BBCG-Num.Billboards:" + Ogre::StringConverter::toString(billboardGroup->getNumBillboards()));
+		//Ogre::LogManager::getSingleton().logMessage("BBCG-Num.Billboards:" + Ogre::StringConverter::toString(billboardGroup->getNumBillboards()));
 
 		for (unsigned int iBillboard = 0; iBillboard < billboardGroup->getNumBillboards(); iBillboard++)
@@ -252,4 +267,6 @@
 						subEntityGroup->addTextureCoordSet(subEntity->getTexCoordDimensions(subEntityGroup->getNumTexCoordSets()));
 					}
+
+					subEntityGroup->enableVertexColours(subEntity->hasVertexColours());
 
 					unsigned int offset = subEntityGroup->getNumFaces() * 3;
@@ -261,26 +278,40 @@
 
 					UniqueVertex vFaceA1,vFaceA2,vFaceA3;
+
 					// Face A of the billboard quad
 					vFaceA1.position = billboard->getBillboardClusterData()->getQuadTopLeftCorner();
+					vFaceA2.position = billboard->getBillboardClusterData()->getQuadTopRightCorner();
+					vFaceA3.position = billboard->getBillboardClusterData()->getQuadBottomRightCorner();
+
 					vFaceA1.normal = billboard->getBillboardClusterData()->getNormal();
-
-					vFaceA2.position = billboard->getBillboardClusterData()->getQuadTopRightCorner();
 					vFaceA2.normal = billboard->getBillboardClusterData()->getNormal();
+					vFaceA3.normal = billboard->getBillboardClusterData()->getNormal();
+
+					if (subEntity->hasVertexColours())
+					{
+						vFaceA1.colour = subEntity->getVertexColour(0);
+						vFaceA2.colour = subEntity->getVertexColour(1);
+						vFaceA3.colour = subEntity->getVertexColour(2);
+					}
 					
-					vFaceA3.position = billboard->getBillboardClusterData()->getQuadBottomRightCorner();
-					vFaceA3.normal = billboard->getBillboardClusterData()->getNormal();
-					
+					UniqueVertex vFaceB1,vFaceB2,vFaceB3;
+
 					// Face B of the billboard quad
-					UniqueVertex vFaceB1,vFaceB2,vFaceB3;
 					vFaceB1.position = billboard->getBillboardClusterData()->getQuadBottomRightCorner();
+					vFaceB2.position = billboard->getBillboardClusterData()->getQuadBottomLeftCorner();
+					vFaceB3.position = billboard->getBillboardClusterData()->getQuadTopLeftCorner();
+
 					vFaceB1.normal = billboard->getBillboardClusterData()->getNormal();
-					
-					vFaceB2.position = billboard->getBillboardClusterData()->getQuadBottomLeftCorner();
 					vFaceB2.normal = billboard->getBillboardClusterData()->getNormal();
-					
-					vFaceB3.position = billboard->getBillboardClusterData()->getQuadTopLeftCorner();
 					vFaceB3.normal = billboard->getBillboardClusterData()->getNormal();
 					
-					Ogre::LogManager::getSingleton().logMessage("BBCG-SubEntity(" + Ogre::StringConverter::toString(numGeneratedBillboardClouds) + ") - Num.Tex.Coord.Sets:"+ Ogre::StringConverter::toString(subEntity->getNumTexCoordSets()));
+					if (subEntity->hasVertexColours())
+					{
+						vFaceB1.colour = subEntity->getVertexColour(3);
+						vFaceB2.colour = subEntity->getVertexColour(4);
+						vFaceB3.colour = subEntity->getVertexColour(5);
+					}
+
+					//Ogre::LogManager::getSingleton().logMessage("BBCG-SubEntity(" + Ogre::StringConverter::toString(numGeneratedBillboardClouds) + ") - Num.Tex.Coord.Sets:"+ Ogre::StringConverter::toString(subEntity->getNumTexCoordSets()));
 
 					for (unsigned int iTexCoordSet = 0; iTexCoordSet < subEntityGroup->getNumTexCoordSets(); iTexCoordSet++)
@@ -308,5 +339,4 @@
 
 	mEntity = entity;
-	entity->setSubEntitiesDistinctVertexColours();
 }
 
Index: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/LBBCBillboardCloudDiffuseColorTextureViewMode.cpp
===================================================================
--- GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/LBBCBillboardCloudDiffuseColorTextureViewMode.cpp	(revision 778)
+++ GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/LBBCBillboardCloudDiffuseColorTextureViewMode.cpp	(revision 821)
@@ -255,4 +255,5 @@
 bool BillboardCloudDiffuseColorTextureViewMode::frameStarted(const Ogre::FrameEvent& evt, Ogre::InputReader *inputReader)
 {
+	showDebugOverlay(false);
 	initializeEntityClustersGrouped();
     initializeBillboardCloudSplitted();
