diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index b78d0b51d53c4b9f623772d9cdae49be78612399..84a2f1b597a4997a989b858a53e70ab5b8c8f90d 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -2559,7 +2559,7 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
 	  mTextureInfoMainThread(false)
 {
 	mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
-	mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), U32Bytes(gSavedSettings.getU32("TextureLoggingThreshold")));
+	mTextureInfo.setLogging(true);
 
 	LLAppCoreHttp & app_core_http(LLAppViewer::instance()->getAppCoreHttp());
 	mHttpRequest = new LLCore::HttpRequest;
diff --git a/indra/newview/lltextureinfo.cpp b/indra/newview/lltextureinfo.cpp
index 5f1e14e406c9d63101731d274d2f2bdef5f7d5a6..e79bb62a52fe0ba029cb5b0ba05f0483eaef2297 100644
--- a/indra/newview/lltextureinfo.cpp
+++ b/indra/newview/lltextureinfo.cpp
@@ -46,10 +46,8 @@ static LLTrace::CountStatHandle<S32Bytes > sTextureDataDownloaded("texture_data_
 static LLTrace::CountStatHandle<U32Milliseconds > sTexureDownloadTime("texture_download_time", "amount of time spent fetching textures");
 
 LLTextureInfo::LLTextureInfo(bool postponeStartRecoreder) :
-	mLogTextureDownloadsToViewerLog(false),
-	mLogTextureDownloadsToSimulator(false),
-	mTextureDownloadProtocol("NONE"),
-	mTextureLogThreshold(LLUnits::Kilobytes::fromValue(100))
+	mLoggingEnabled(false),
+	mTextureDownloadProtocol("NONE")
 {
 	if (!postponeStartRecoreder)
 	{
@@ -57,11 +55,9 @@ LLTextureInfo::LLTextureInfo(bool postponeStartRecoreder) :
 	}
 }
 
-void LLTextureInfo::setUpLogging(bool writeToViewerLog, bool sendToSim, U32Bytes textureLogThreshold)
+void LLTextureInfo::setLogging(bool log_info)
 {
-	mLogTextureDownloadsToViewerLog = writeToViewerLog;
-	mLogTextureDownloadsToSimulator = sendToSim;
-	mTextureLogThreshold = U32Bytes(textureLogThreshold);
+	mLoggingEnabled = log_info;
 }
 
 LLTextureInfo::~LLTextureInfo()
@@ -156,73 +152,80 @@ void LLTextureInfo::setRequestCompleteTimeAndLog(const LLUUID& id, U64Microsecon
 		break;
 	}
 
-	if (mLogTextureDownloadsToViewerLog)
+	if (mLoggingEnabled)
 	{
-		LL_INFOS() << "texture="   << id 
-			    << " start="    << details.mStartTime 
-			    << " end="      << details.mCompleteTime
-			    << " size="     << details.mSize
-			    << " offset="   << details.mOffset
-			    << " length="   << U32Milliseconds(details.mCompleteTime - details.mStartTime)
-			    << " protocol=" << protocol
-			    << LL_ENDL;
-	}
+		static LLCachedControl<bool> log_to_viewer_log(gSavedSettings, "LogTextureDownloadsToViewerLog", false);
+		static LLCachedControl<bool> log_to_simulator(gSavedSettings, "LogTextureDownloadsToSimulator", false);
+		static LLCachedControl<U32> texture_log_threshold(gSavedSettings, "TextureLoggingThreshold", 1);
 
-	if(mLogTextureDownloadsToSimulator)
-	{
-		add(sTextureDataDownloaded, details.mSize);
-		add(sTexureDownloadTime, details.mCompleteTime - details.mStartTime);
-		add(sTextureDownloadsCompleted, 1);
-		mTextureDownloadProtocol = protocol;
-		if (mRecording.getSum(sTextureDataDownloaded) >= mTextureLogThreshold)
+		if (log_to_viewer_log)
 		{
-			LLSD texture_data;
-			std::stringstream startTime;
-			startTime << mCurrentStatsBundleStartTime;
-			texture_data["start_time"] = startTime.str();
-			std::stringstream endTime;
-			endTime << completeTime;
-			texture_data["end_time"] = endTime.str();
-			texture_data["averages"] = getAverages();
-
-			// Texture cache
-			LLSD texture_cache;
-			U32 cache_read = 0, cache_write = 0, res_wait = 0;
-			F64 cache_hit_rate = 0;
-			LLAppViewer::getTextureFetch()->getStateStats(&cache_read, &cache_write, &res_wait);
-			if (cache_read > 0 || cache_write > 0)
-			{
-				cache_hit_rate = cache_read / (cache_read + cache_write);
-			}
-			texture_cache["cache_read"] = LLSD::Integer(cache_read);
-			texture_cache["cache_write"] = LLSD::Integer(cache_write);
-			texture_cache["hit_rate"] = LLSD::Real(cache_hit_rate);
-			texture_cache["entries"] = LLSD::Integer(LLAppViewer::getTextureCache()->getEntries());
-			texture_cache["space_max"] = ll_sd_from_U64((U64)LLAppViewer::getTextureCache()->getMaxUsage().value()); // bytes
-			texture_cache["space_used"] = ll_sd_from_U64((U64)LLAppViewer::getTextureCache()->getUsage().value()); // bytes
-			texture_data["texture_cache"] = texture_cache;
-
-			// VO and mesh cache
-			LLSD object_cache;
-			object_cache["vo_entries_max"] = LLSD::Integer(LLVOCache::getInstance()->getCacheEntriesMax());
-			object_cache["vo_entries_curent"] = LLSD::Integer(LLVOCache::getInstance()->getCacheEntries());
-			object_cache["vo_active_entries"] = LLSD::Integer(LLWorld::getInstance()->getNumOfActiveCachedObjects());
-			U64 region_hit_count = gAgent.getRegion() != NULL ? gAgent.getRegion()->getRegionCacheHitCount() : 0;
-			U64 region_miss_count = gAgent.getRegion() != NULL ? gAgent.getRegion()->getRegionCacheMissCount() : 0;
-			F64 region_vocache_hit_rate = 0;
-			if (region_hit_count > 0 || region_miss_count > 0)
+			LL_INFOS() << "texture="   << id 
+				    << " start="    << details.mStartTime 
+				    << " end="      << details.mCompleteTime
+				    << " size="     << details.mSize
+				    << " offset="   << details.mOffset
+				    << " length="   << U32Milliseconds(details.mCompleteTime - details.mStartTime)
+				    << " protocol=" << protocol
+				    << LL_ENDL;
+		}
+
+		if(log_to_simulator)
+		{
+			add(sTextureDataDownloaded, details.mSize);
+			add(sTexureDownloadTime, details.mCompleteTime - details.mStartTime);
+			add(sTextureDownloadsCompleted, 1);
+			mTextureDownloadProtocol = protocol;
+			if (mRecording.getSum(sTextureDataDownloaded) >= U32Bytes(texture_log_threshold))
 			{
-				region_vocache_hit_rate = region_hit_count / (region_hit_count + region_miss_count);
+				LLSD texture_data;
+				std::stringstream startTime;
+				startTime << mCurrentStatsBundleStartTime;
+				texture_data["start_time"] = startTime.str();
+				std::stringstream endTime;
+				endTime << completeTime;
+				texture_data["end_time"] = endTime.str();
+				texture_data["averages"] = getAverages();
+
+				// Texture cache
+				LLSD texture_cache;
+				U32 cache_read = 0, cache_write = 0, res_wait = 0;
+				F64 cache_hit_rate = 0;
+				LLAppViewer::getTextureFetch()->getStateStats(&cache_read, &cache_write, &res_wait);
+				if (cache_read > 0 || cache_write > 0)
+				{
+					cache_hit_rate = cache_read / (cache_read + cache_write);
+				}
+				texture_cache["cache_read"] = LLSD::Integer(cache_read);
+				texture_cache["cache_write"] = LLSD::Integer(cache_write);
+				texture_cache["hit_rate"] = LLSD::Real(cache_hit_rate);
+				texture_cache["entries"] = LLSD::Integer(LLAppViewer::getTextureCache()->getEntries());
+				texture_cache["space_max"] = ll_sd_from_U64((U64)LLAppViewer::getTextureCache()->getMaxUsage().value()); // bytes
+				texture_cache["space_used"] = ll_sd_from_U64((U64)LLAppViewer::getTextureCache()->getUsage().value()); // bytes
+				texture_data["texture_cache"] = texture_cache;
+
+				// VO and mesh cache
+				LLSD object_cache;
+				object_cache["vo_entries_max"] = LLSD::Integer(LLVOCache::getInstance()->getCacheEntriesMax());
+				object_cache["vo_entries_curent"] = LLSD::Integer(LLVOCache::getInstance()->getCacheEntries());
+				object_cache["vo_active_entries"] = LLSD::Integer(LLWorld::getInstance()->getNumOfActiveCachedObjects());
+				U64 region_hit_count = gAgent.getRegion() != NULL ? gAgent.getRegion()->getRegionCacheHitCount() : 0;
+				U64 region_miss_count = gAgent.getRegion() != NULL ? gAgent.getRegion()->getRegionCacheMissCount() : 0;
+				F64 region_vocache_hit_rate = 0;
+				if (region_hit_count > 0 || region_miss_count > 0)
+				{
+					region_vocache_hit_rate = region_hit_count / (region_hit_count + region_miss_count);
+				}
+				object_cache["vo_region_hitcount"] = ll_sd_from_U64(region_hit_count);
+				object_cache["vo_region_misscount"] = ll_sd_from_U64(region_miss_count);
+				object_cache["vo_region_hitrate"] = LLSD::Real(region_vocache_hit_rate);
+				object_cache["mesh_reads"] = LLSD::Integer(LLMeshRepository::sCacheReads);
+				object_cache["mesh_writes"] = LLSD::Integer(LLMeshRepository::sCacheWrites);
+				texture_data["object_cache"] = object_cache;
+
+				send_texture_stats_to_sim(texture_data);
+				resetTextureStatistics();
 			}
-			object_cache["vo_region_hitcount"] = ll_sd_from_U64(region_hit_count);
-			object_cache["vo_region_misscount"] = ll_sd_from_U64(region_miss_count);
-			object_cache["vo_region_hitrate"] = LLSD::Real(region_vocache_hit_rate);
-			object_cache["mesh_reads"] = LLSD::Integer(LLMeshRepository::sCacheReads);
-			object_cache["mesh_writes"] = LLSD::Integer(LLMeshRepository::sCacheWrites);
-			texture_data["object_cache"] = object_cache;
-
-			send_texture_stats_to_sim(texture_data);
-			resetTextureStatistics();
 		}
 	}
 
diff --git a/indra/newview/lltextureinfo.h b/indra/newview/lltextureinfo.h
index 03721bdd73cd124079e908bdc1d0240e3087c8e5..46378eb7f82ced369d8ac029c0d1f001e946c948 100644
--- a/indra/newview/lltextureinfo.h
+++ b/indra/newview/lltextureinfo.h
@@ -38,7 +38,7 @@ class LLTextureInfo
 	LLTextureInfo(bool postponeStartRecoreder = true);
 	~LLTextureInfo();
 
-	void setUpLogging(bool writeToViewerLog, bool sendToSim, U32Bytes textureLogThreshold);
+	void setLogging(bool log_info);
 	bool has(const LLUUID& id);
 	void setRequestStartTime(const LLUUID& id, U64 startTime);
 	void setRequestSize(const LLUUID& id, U32 size);
@@ -61,12 +61,11 @@ class LLTextureInfo
 
 	std::map<LLUUID, LLTextureInfoDetails *>	mTextures;
 	LLSD										mAverages;
-	bool										mLogTextureDownloadsToViewerLog,
-												mLogTextureDownloadsToSimulator;
+	bool										mLoggingEnabled;
 	std::string									mTextureDownloadProtocol;
-	U32Bytes					mTextureLogThreshold; 
 	U64Microseconds			mCurrentStatsBundleStartTime;
 	LLTrace::Recording							mRecording;
+
 };
 
 #endif // LL_LLTEXTUREINFO_H