diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 9c038d54d557ddef1fac09c5344906e428a53c70..7cc4195a3df913634ade5cad25d65125c8431140 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1207,12 +1207,7 @@ BOOL LLViewerRegion::idleUpdate(F32 max_update_time)
 
 	max_update_time -= update_timer.getElapsedTimeF32();	
 
-	if(gViewerWindow->getProgressView()->getVisible())
-	{
-		//in case rendering pipeline is not started yet.
-		mImpl->mVOCachePartition->cull(*(LLViewerCamera::getInstance()), false);
-	}
-	else if(max_update_time < 0.f)
+	if(max_update_time < 0.f && !gViewerWindow->getProgressView()->getVisible())
 	{
 		return did_update;
 	}
@@ -1279,7 +1274,8 @@ F32 LLViewerRegion::killInvisibleObjects(F32 max_time)
 		return max_time;
 	}
 
-	size_t max_update = sNewObjectCreationThrottle < 0 ? mImpl->mActiveSet.size() : 64; 
+	bool unstable = sNewObjectCreationThrottle < 0;
+	size_t max_update = unstable ? mImpl->mActiveSet.size() : 64; 
 	if(!mInvisibilityCheckHistory && isViewerCameraStatic())
 	{
 		//history is clean, reduce number of checking
@@ -1299,7 +1295,7 @@ F32 LLViewerRegion::killInvisibleObjects(F32 max_time)
 			iter = mImpl->mActiveSet.begin();
 		}
 
-		if(!(*iter)->isRecentlyVisible() && (*iter)->mLastCameraUpdated < sLastCameraUpdated)
+		if(!(*iter)->isRecentlyVisible() && (unstable || (*iter)->mLastCameraUpdated < sLastCameraUpdated))
 		{
 			killObject((*iter), delete_list);
 		}
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index 1cfda038a88b81bbdc4a77c599a4544219b59492..35af99cd4283447d74670b9860e2c964cd87f471 100755
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -636,6 +636,11 @@ S32 LLVOCachePartition::cull(LLCamera &camera, bool do_occlusion)
 		return 0;
 	}
 
+	if(LLViewerCamera::sCurCameraID >= LLViewerCamera::CAMERA_WATER0)
+	{
+		return 0; //no need for those cameras.
+	}
+
 	if(mCulledTime[LLViewerCamera::sCurCameraID] == LLViewerOctreeEntryData::getCurrentFrame())
 	{
 		return 0; //already culled