diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index bf0e3ed1601b954d59011e35bbd1bcd2cff50cbe..9532770e17fc74527a74e9a3ef3a7e7b8f99b5b4 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -966,7 +966,10 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
 			mFXAABuffer.release();
 		}
 		
-		if (shadow_detail > 0 || ssao || RenderDepthOfField || samples > 0)
+//		if (shadow_detail > 0 || ssao || RenderDepthOfField || samples > 0)
+// [RLVa:KB] - @setsphere
+		if (shadow_detail > 0 || ssao || RenderDepthOfField || samples > 0 || RlvActions::hasPostProcess())
+// [/RLVa:KB]
 		{ //only need mDeferredLight for shadows OR ssao OR dof OR fxaa
 			if (!mDeferredLight.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE)) return false;
 		}
diff --git a/indra/newview/rlvactions.cpp b/indra/newview/rlvactions.cpp
index 6629fc519b37de78d367d62ba32922fa243b39ee..912a8092f5942226c6ba816213441053dbe11802 100644
--- a/indra/newview/rlvactions.cpp
+++ b/indra/newview/rlvactions.cpp
@@ -18,6 +18,7 @@
 #include "llagent.h"
 #include "llimview.h"
 #include "llviewercamera.h"
+#include "llvisualeffect.h"
 #include "llvoavatarself.h"
 #include "llworld.h"
 
@@ -397,6 +398,11 @@ bool RlvActions::canChangeEnvironment(const LLUUID& idRlvObject)
 	return (idRlvObject.isNull()) ? !gRlvHandler.hasBehaviour(RLV_BHVR_SETENV) : !gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETENV, idRlvObject);
 }
 
+bool RlvActions::hasPostProcess()
+{
+	return LLVfxManager::instance().hasEffect(EVisualEffect::RlvSphere);
+}
+
 // ============================================================================
 // World interaction
 //
diff --git a/indra/newview/rlvactions.h b/indra/newview/rlvactions.h
index 217eb21a5881c7bf9fe7a8ea0441398b9b537933..36b59c2a1b53f4b1d1381b3b1f8b45596091d9ab 100644
--- a/indra/newview/rlvactions.h
+++ b/indra/newview/rlvactions.h
@@ -236,6 +236,10 @@ class RlvActions
 	 */
 	static bool canChangeEnvironment(const LLUUID& idRlvObject = LLUUID::null);
 
+	/*
+	 * Returns true if a postprocessing shader is currently active
+	 */
+	static bool hasPostProcess();
 
 	// =================
 	// World interaction
diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp
index 26022657b9e88acf1f9a45128a30d7cdce2e7abb..0bf2c0f3f43d16d86426bc130184ae3fc7befe0d 100644
--- a/indra/newview/rlvhandler.cpp
+++ b/indra/newview/rlvhandler.cpp
@@ -2124,6 +2124,8 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_SETSPHERE>::onCommand(const RlvCommand&
 	{
 		if (gRlvHandler.hasBehaviour(rlvCmd.getObjectID(), rlvCmd.getBehaviourType()))
 		{
+			LLVfxManager::instance().addEffect(new RlvSphereEffect(rlvCmd.getObjectID()));
+
 			Rlv::forceAtmosphericShadersIfAvailable();
 
 			// If we're not using deferred but are using Windlight shaders we need to force use of FBO and depthmap texture
@@ -2137,8 +2139,13 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_SETSPHERE>::onCommand(const RlvCommand&
 				gPipeline.resetVertexBuffers();
 				LLViewerShaderMgr::instance()->setShaders();
 			}
-
-			LLVfxManager::instance().addEffect(new RlvSphereEffect(rlvCmd.getObjectID()));
+			else if (!gPipeline.mDeferredLight.isComplete())
+			{
+				// In case of deferred with no shadows, no ambient occlusion, no depth of field, and no antialiasing
+				gPipeline.releaseGLBuffers();
+				gPipeline.createGLBuffers();
+				RLV_ASSERT(gPipeline.mDeferredLight.isComplete());
+			}
 		}
 		else
 		{