diff --git a/indra/llfilesystem/lldiskcache.h b/indra/llfilesystem/lldiskcache.h
index b25eac853870cfc00c109490309e0c4f204385b2..997884da319c8d4ecb53ca427c8ad6ea5fa9a827 100644
--- a/indra/llfilesystem/lldiskcache.h
+++ b/indra/llfilesystem/lldiskcache.h
@@ -83,8 +83,8 @@ class LLDiskCache :
                      */
                     const std::string cache_dir,
                     /**
-                     * The maximum size of the cache in bytes - Defined by
-                     * the setting at 'DiskCacheMaxSizeMB' (* 1024 * 1024)
+                     * The maximum size of the cache in bytes - Based on the
+                     * setting at 'CacheSize' and 'DiskCachePercentOfTotal'
                      */
                     const int max_size_bytes,
                     /**
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index fc1437148a05b72b60c99f2783373b6012bfec02..142a3098ec353ff7c27872724ea1936bcac40b5e 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1362,16 +1362,16 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>DiskCacheMaxSizeMB</key>
+    <key>DiskCachePercentOfTotal</key>
     <map>
       <key>Comment</key>
-      <string>The maximum number of MB to use for the new disk cache</string>
+      <string>The percent of total cache size (defined by CacheSize) to use for the disk cache</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
-      <string>U32</string>
+      <string>F32</string>
       <key>Value</key>
-      <integer>50</integer>
+      <integer>20.0</integer>
     </map>
     <key>DiskCacheDirName</key>
     <map>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 9e508600642df7e6a215923f93df3b1df6805965..20ca4322792f84ac3b33711c5ca010a27a603a0a 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -4063,10 +4063,16 @@ bool LLAppViewer::initCache()
 
 	// initialize the new disk cache using saved settings
 	const std::string cache_dir_name = gSavedSettings.getString("DiskCacheDirName");
-	const unsigned int cache_max_bytes = gSavedSettings.getU32("DiskCacheMaxSizeMB") * 1024 * 1024;
+
+    // note that the maximum size of this cache is defined as a percentage of the 
+    // total cache size - the 'CacheSize' pref - for all caches. 
+    const unsigned int cache_total_size_mb = gSavedSettings.getU32("CacheSize");
+    const double disk_cache_percent = gSavedSettings.getF32("DiskCachePercentOfTotal");
+    const unsigned int disk_cache_mb = cache_total_size_mb * disk_cache_percent / 100;
+    const unsigned int disk_cache_bytes = disk_cache_mb * 1024 * 1024;
 	const bool enable_cache_debug_info = gSavedSettings.getBOOL("EnableDiskCacheDebugInfo");
 	const std::string cache_dir = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, cache_dir_name);
-	LLDiskCache::initParamSingleton(cache_dir, cache_max_bytes, enable_cache_debug_info);
+	LLDiskCache::initParamSingleton(cache_dir, disk_cache_bytes, enable_cache_debug_info);
 
 	bool texture_cache_mismatch = false;
 	if (gSavedSettings.getS32("LocalCacheVersion") != LLAppViewer::getTextureCacheVersion())