diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index 90c228b1fa9c4e299a8bf436b6544e934a375400..065afb1a936d021b02129b18d2168960cb382430 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -1094,11 +1094,11 @@ void LLShaderMgr::initShaderCache(bool enabled, const LLUUID& old_cache_version,
 
 	mShaderCacheInitialized = true;
 
-	std::string shader_cache_dir = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "shader_cache");
-	LLFile::mkdir(shader_cache_dir);
+	mShaderCacheDir = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "shader_cache");
+	LLFile::mkdir(mShaderCacheDir);
 
 	{
-		std::string meta_out_path = gDirUtilp->add(shader_cache_dir, "shaderdata.llsd");
+		std::string meta_out_path = gDirUtilp->add(mShaderCacheDir, "shaderdata.llsd");
 		if (gDirUtilp->fileExists(meta_out_path))
 		{
 			LL_INFOS() << "Loading shader metadata" << LL_ENDL;
@@ -1167,7 +1167,7 @@ bool LLShaderMgr::loadCachedProgramBinary(LLGLSLShader* shader)
 		std::vector<U8> in_data;
 		in_data.resize(shader_info.mBinaryLength);
 
-		std::string in_path = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "shader_cache", shader->mShaderHash.asString() + ".shaderbin");
+		std::string in_path = gDirUtilp->add(mShaderCacheDir, shader->mShaderHash.asString() + ".shaderbin");
 		LLUniqueFile filep = LLFile::fopen(in_path, "rb");
 		if (filep)
 		{
@@ -1203,7 +1203,7 @@ bool LLShaderMgr::saveCachedProgramBinary(LLGLSLShader* shader)
 
 	glGetProgramBinary(shader->mProgramObject, program_binary.size() * sizeof(U8), nullptr, &binary_info.mBinaryFormat, program_binary.data());
 
-	std::string out_path = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "shader_cache", shader->mShaderHash.asString() + ".shaderbin");
+	std::string out_path = gDirUtilp->add(mShaderCacheDir, shader->mShaderHash.asString() + ".shaderbin");
 	LLUniqueFile outfile = LLFile::fopen(out_path, "wb");
 	if (outfile)
 	{
diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h
index 188057976a6459ced9a020b2df7adbfffa18d963..25b149c604bef63551508fa1b94ffd757428c05f 100644
--- a/indra/llrender/llshadermgr.h
+++ b/indra/llrender/llshadermgr.h
@@ -338,6 +338,7 @@ class LLShaderMgr
     boost::unordered_map<LLUUID, ProgramBinaryData> mShaderBinaryCache;
     bool mShaderCacheInitialized = false;
     bool mShaderCacheEnabled = false;
+    std::string mShaderCacheDir;
 
 protected:
 
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index dec4e4ad2def75f121b5de474c5bbef25f456ec5..6d2f46221a993e0e94af43a0db6f854881682cc5 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -3689,23 +3689,31 @@ function="World.EnvPreset"
                  parameter="RenderAttachedParticles" />
             </menu_item_check>
           <menu_item_separator />
-          
+          <menu_item_check
+             label="Enable Shader Cache"
+             name="Enable Shader Cache">
+            <menu_item_check.on_check
+             function="CheckControl"
+             parameter="RenderShaderCacheEnabled" />
+            <menu_item_check.on_click
+             function="ToggleShaderControl"
+             parameter="RenderShaderCacheEnabled" />
+          </menu_item_check>
           <menu_item_call
             enabled="true"
-            label="Clear Cache Immediately"
-            name="Cache Clear">
+            label="Clear Shader Cache"
+            name="Shader Cache Clear">
             <menu_item_call.on_click
-             function="Develop.ClearCache" />
+             function="Advanced.ClearShaderCache" />
           </menu_item_call>
-          
+          <menu_item_separator />
           <menu_item_call
             enabled="true"
-            label="Clear Shader Cache"
-            name="Shader Cache Clear">
+            label="Clear Cache Immediately"
+            name="Cache Clear">
             <menu_item_call.on_click
-             function="Advanced.ClearShaderCache" />
+             function="Develop.ClearCache" />
           </menu_item_call>
-			
         </menu>
 
         <menu