Index: GTP/trunk/Lib/Vis/OnlineCullingCHC/src/StopAndWaitCullingManager.cpp
===================================================================
--- GTP/trunk/Lib/Vis/OnlineCullingCHC/src/StopAndWaitCullingManager.cpp	(revision 2289)
+++ GTP/trunk/Lib/Vis/OnlineCullingCHC/src/StopAndWaitCullingManager.cpp	(revision 2292)
@@ -7,5 +7,5 @@
 void StopAndWaitCullingManager::RenderScene()
 {
-	CullingLogManager::GetSingleton()->LogMessage("swc");
+	if (0) CullingLogManager::GetSingleton()->LogMessage("swc");
 
 	while (!mHierarchyInterface->GetQueue()->empty())
Index: GTP/trunk/Lib/Vis/OnlineCullingCHC/src/FrustumCullingManager.cpp
===================================================================
--- GTP/trunk/Lib/Vis/OnlineCullingCHC/src/FrustumCullingManager.cpp	(revision 2289)
+++ GTP/trunk/Lib/Vis/OnlineCullingCHC/src/FrustumCullingManager.cpp	(revision 2292)
@@ -8,5 +8,5 @@
 void FrustumCullingManager::RenderScene()
 {	
-	CullingLogManager::GetSingleton()->LogMessage("vfc");
+	if (0) CullingLogManager::GetSingleton()->LogMessage("vfc");
 
 	while (!mHierarchyInterface->GetQueue()->empty())
Index: GTP/trunk/Lib/Vis/OnlineCullingCHC/src/CoherentHierarchicalCullingManager.cpp
===================================================================
--- GTP/trunk/Lib/Vis/OnlineCullingCHC/src/CoherentHierarchicalCullingManager.cpp	(revision 2289)
+++ GTP/trunk/Lib/Vis/OnlineCullingCHC/src/CoherentHierarchicalCullingManager.cpp	(revision 2292)
@@ -11,5 +11,5 @@
 	SetAssumedVisibility(0);
 	// initialise random generator in case we use assumed visibility
-	srand(time(NULL));
+	//srand(time(NULL));
 }
 //-----------------------------------------------------------------------
@@ -19,10 +19,10 @@
 	SetAssumedVisibility(assumedVisibility);
 	// initialise random generator in case we use assumed visibility
-	srand(time(NULL));
+	//srand(time(NULL));
 }
 //-----------------------------------------------------------------------
 void CoherentHierarchicalCullingManager::RenderScene()
 {
-	CullingLogManager::GetSingleton()->LogMessage("chc");
+	if (0) CullingLogManager::GetSingleton()->LogMessage("chc");
 	QueryQueue queryQueue;
 	unsigned int visiblePixels = 0;
@@ -158,5 +158,5 @@
 inline void CoherentHierarchicalCullingManager::SkipQuery(HierarchyNode *node) const
 {
-	// -- set node to be visible in this frame, then traverse it
+	//-- set node to be visible in this frame, then traverse it
 	mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId());
 	
Index: GTP/trunk/Lib/Vis/OnlineCullingCHC/src/RandomUpdateCullingManager.cpp
===================================================================
--- GTP/trunk/Lib/Vis/OnlineCullingCHC/src/RandomUpdateCullingManager.cpp	(revision 2289)
+++ GTP/trunk/Lib/Vis/OnlineCullingCHC/src/RandomUpdateCullingManager.cpp	(revision 2292)
@@ -2,4 +2,10 @@
 #include <time.h>
 #include "CullingLogManager.h"
+#include <vector>
+//#include <iostream>
+#include <sstream>
+
+
+using namespace std;
 
 
@@ -12,5 +18,5 @@
 	SetAssumedVisibility(0);
 	// initialise random generator in case we use assumed visibility
-	srand(time(NULL));
+	//srand(time(NULL));
 
 	mRandomCandidates = R_CANDIDATES;
@@ -22,5 +28,5 @@
 	SetAssumedVisibility(assumedVisibility);
 	// initialise random generator in case we use assumed visibility
-	srand(time(NULL));
+	//srand(time(NULL));
 
 	mRandomCandidates = R_CANDIDATES;
@@ -29,5 +35,5 @@
 void RandomUpdateCullingManager::RenderScene()
 {
-	CullingLogManager::GetSingleton()->LogMessage("ruc");
+	if (0) CullingLogManager::GetSingleton()->LogMessage("ruc");
 
 	QueryQueue queryQueue;
@@ -37,10 +43,4 @@
 	//-- PART 1: process finished occlusion queries
 
-	// update the fully visible classifications
-	mHierarchyInterface->DetermineFullVisibility(mHierarchyInterface->GetHierarchyRoot());
-
-	//mHierarchyInterface->TraverseNode2(mHierarchyInterface->GetHierarchyRoot());
-	
-#if 1
 	while (!mHierarchyInterface->GetQueue()->empty() || !queryQueue.empty())
 	{
@@ -121,4 +121,5 @@
 				if (mHierarchyInterface->IsNodeFullyVisible(node))
 				{
+#if 1
 					// node fully visible => test only random leaves
 					for (int i = 0; i < mRandomCandidates; ++ i)
@@ -138,6 +139,24 @@
 							mHierarchyInterface->IssueNodeOcclusionQuery(node)));
 					}
-
-					mHierarchyInterface->TraverseNode2(node);
+#else
+					// test all leaves for visibility changes
+					HierarchyNodeContainer mynodes;
+					mHierarchyInterface->CollectLeaves(node, mynodes);
+
+					HierarchyNodeContainer::const_iterator nit, nit_end = mynodes.end();
+
+					for (nit = mynodes.begin(); nit != nit_end; ++ nit)
+					{
+						HierarchyNode *leaf = *nit;
+						mHierarchyInterface->SetNodeVisible(leaf, false);
+
+						// update node's visited flag
+						mHierarchyInterface->SetLastVisited(leaf, mHierarchyInterface->GetFrameId());
+
+						queryQueue.push(QueryPair(leaf, 
+							mHierarchyInterface->IssueNodeOcclusionQuery(node)));
+					}
+#endif
+					mHierarchyInterface->RenderNodeRecursive(node);
 
 					continue;
@@ -173,8 +192,11 @@
 		}
 	}
-#endif
+
 	//while (!mHierarchyInterface->GetQueue()->empty())
 	//	mHierarchyInterface->GetQueue()->pop();
-	
+
+	// update the fully visible classifications
+	// TODO: this should be done during traversal!
+	mHierarchyInterface->DetermineFullVisibility(mHierarchyInterface->GetHierarchyRoot());
 }
 //-----------------------------------------------------------------------
