diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index c6cfe3b616a0d50c30482d15ea3fe12c990f3d77..7fc7a7ad3b9593c0ef96569c9e678097cf832487 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -9474,7 +9474,7 @@
       <key>Comment</key>
       <string>Enabled scene loading monitor if set</string>
       <key>Persist</key>
-      <integer>0</integer>
+      <integer>1</integer>
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
diff --git a/indra/newview/app_settings/shaders/class1/interface/twotexturecompareF.glsl b/indra/newview/app_settings/shaders/class1/interface/twotexturecompareF.glsl
index 92aa7602a4aea0c466a4f5fa498ad1b53c77340f..336ca21b9609ad18bfe0595622e5153325875caf 100644
--- a/indra/newview/app_settings/shaders/class1/interface/twotexturecompareF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/twotexturecompareF.glsl
@@ -51,5 +51,5 @@ void main()
 	{
 		frag_color[2] = -frag_color[2];
 	}
-	frag_color[3] = 1.f;
+	frag_color[3] = 0.95f;
 }
diff --git a/indra/newview/llscenemonitor.cpp b/indra/newview/llscenemonitor.cpp
index 8597767c61af02e18bcb993cba1f0a3c3dd1e8a2..0730281d856addd99271479188943160f74c92ab 100644
--- a/indra/newview/llscenemonitor.cpp
+++ b/indra/newview/llscenemonitor.cpp
@@ -39,7 +39,12 @@
 
 LLSceneMonitorView* gSceneMonitorView = NULL;
 
-LLSceneMonitor::LLSceneMonitor() : mEnabled(false), mDiff(NULL), mNeedsUpdateDiff(FALSE)
+LLSceneMonitor::LLSceneMonitor() : 
+	mEnabled(FALSE), 
+	mDiff(NULL), 
+	mCurTarget(NULL), 
+	mNeedsUpdateDiff(FALSE), 
+	mDebugViewerVisible(FALSE)
 {
 	mFrames[0] = NULL;
 	mFrames[1] = NULL;
@@ -66,18 +71,14 @@ void LLSceneMonitor::reset()
 	mDiff = NULL;
 }
 
-void LLSceneMonitor::setEnabled(bool enabled)
+void LLSceneMonitor::setDebugViewerVisible(BOOL visible) 
 {
-	if(enabled == (bool)gSavedSettings.getBOOL("SceneLoadingMonitorEnabled"))
-	{
-		return;
-	}
-	gSavedSettings.setBOOL("SceneLoadingMonitorEnabled", enabled);
+	mDebugViewerVisible = visible;
 }
 
 bool LLSceneMonitor::preCapture()
 {
-	static LLCachedControl<bool> enabled(gSavedSettings,"SceneLoadingMonitorEnabled");
+	static LLCachedControl<bool> monitor_enabled(gSavedSettings,"SceneLoadingMonitorEnabled");
 	static LLFrameTimer timer;	
 
 	mCurTarget = NULL;
@@ -85,7 +86,9 @@ bool LLSceneMonitor::preCapture()
 	{
 		return false;
 	}
-	if(mEnabled != (BOOL)enabled)
+
+	BOOL enabled = (BOOL)monitor_enabled || mDebugViewerVisible;
+	if(mEnabled != enabled)
 	{
 		if(mEnabled)
 		{
@@ -97,7 +100,7 @@ bool LLSceneMonitor::preCapture()
 			freezeScene();
 		}
 
-		mEnabled = (BOOL)enabled;
+		mEnabled = enabled;
 	}
 
 	if(!mEnabled)
@@ -260,8 +263,8 @@ void LLSceneMonitor::compare()
 		return;
 	}
 
-	S32 width = mFrames[0]->getWidth();
-	S32 height = mFrames[0]->getHeight();
+	S32 width = gViewerWindow->getWindowWidthRaw();
+	S32 height = gViewerWindow->getWindowHeightRaw();
 	if(!mDiff)
 	{
 		mDiff = new LLRenderTarget();
@@ -288,7 +291,6 @@ void LLSceneMonitor::compare()
 			
 	gl_rect_2d_simple_tex(width, height);
 	
-	gGL.flush();
 	mDiff->flush();
 
 	gTwoTextureCompareProgram.unbind();
@@ -321,10 +323,7 @@ void LLSceneMonitorView::onClickCloseBtn()
 
 void LLSceneMonitorView::setVisible(BOOL visible)
 {
-	if(visible != (BOOL)LLSceneMonitor::getInstance()->isEnabled())
-	{
-		LLSceneMonitor::getInstance()->setEnabled(visible);
-	}
+	LLSceneMonitor::getInstance()->setDebugViewerVisible(visible);
 
 	LLView::setVisible(visible);
 }
@@ -341,17 +340,17 @@ void LLSceneMonitorView::draw()
 		return;
 	}
 
-	S32 height = (S32) (gViewerWindow->getWindowRectScaled().getHeight()*0.75f);
-	S32 width = (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f);
+	S32 height = (S32) (gViewerWindow->getWindowRectScaled().getHeight()*0.5f);
+	S32 width = (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.5f);
 	
 	LLRect new_rect;
 	new_rect.setLeftTopAndSize(getRect().mLeft, getRect().mTop, width, height);
 	setRect(new_rect);
 
-	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-	gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, LLColor4(0.f, 0.f, 0.f, 0.25f));
+	//gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+	//gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, LLColor4(0.f, 0.f, 0.f, 0.25f));
 	
-	gl_draw_scaled_target(0, 0, getRect().getWidth(), getRect().getHeight(), target);//, LLColor4(0.f, 0.f, 0.f, 0.25f));
+	gl_draw_scaled_target(0, 0, getRect().getWidth(), getRect().getHeight(), target);
 
 	LLView::draw();
 }
diff --git a/indra/newview/llscenemonitor.h b/indra/newview/llscenemonitor.h
index 941039cefd1c163e25ee9c5f8d346faf9c9d665d..648429f97b98a3252c40b277c9f6cd6141a2971e 100644
--- a/indra/newview/llscenemonitor.h
+++ b/indra/newview/llscenemonitor.h
@@ -44,7 +44,7 @@ public:
 	void destroyClass();
 	
 	void freezeAvatar(LLCharacter* avatarp);
-	void setEnabled(bool enabled);
+	void setDebugViewerVisible(BOOL visible);
 
 	void capture(); //capture the main frame buffer
 	void compare(); //compare the stored two buffers.	
@@ -62,6 +62,8 @@ private:
 private:
 	BOOL mEnabled;
 	BOOL mNeedsUpdateDiff;
+	BOOL mDebugViewerVisible;
+
 	LLRenderTarget* mFrames[2];
 	LLRenderTarget* mDiff;
 	LLRenderTarget* mCurTarget;
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index c12144df6fbbcd4b945a862b2fcd940cced24051..270ab26149d53f582dda99bc41cfd5b29406d463 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -1228,6 +1228,13 @@ void render_ui(F32 zoom_factor, int subfield)
 		glh_set_current_modelview(glh_copy_matrix(gGLLastModelView));
 	}
 	
+	{
+		gGL.pushMatrix();
+		gViewerWindow->setup2DRender();
+		LLSceneMonitor::getInstance()->compare();
+		gGL.popMatrix();
+	}
+
 	{
 		BOOL to_texture = gPipeline.canUseVertexShaders() &&
 							LLPipeline::sRenderGlow;
@@ -1409,8 +1416,6 @@ void render_ui_2d()
 	//  Menu overlays, HUD, etc
 	gViewerWindow->setup2DRender();
 
-	LLSceneMonitor::getInstance()->compare();
-
 	F32 zoom_factor = LLViewerCamera::getInstance()->getZoomFactor();
 	S16 sub_region = LLViewerCamera::getInstance()->getZoomSubRegion();