diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp
index 29c1d82d6611822441bdfe2330a60de987dcabb3..3eeca6fd2ecb94808fc9ced61c6eae04a0803086 100644
--- a/indra/llcommon/llqueuedthread.cpp
+++ b/indra/llcommon/llqueuedthread.cpp
@@ -467,8 +467,9 @@ S32 LLQueuedThread::processNextRequest()
 				yield();
 			}
 		}
-		
+#ifndef LL_RELEASE_FOR_DOWNLOAD
 		LLTrace::get_thread_recorder()->pushToParent();
+#endif
 	}
 
 	S32 pending = getPending();
@@ -497,7 +498,9 @@ void LLQueuedThread::run()
 		
 		if (isQuitting())
 		{
+#ifndef LL_RELEASE_FOR_DOWNLOAD
 			LLTrace::get_thread_recorder()->pushToParent();
+#endif
 			endThread();
 			break;
 		}
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp
index e6d32996ff180a548868f6a420c965acfb456ab2..ee1da9a987eb2a42513fa9c5147b544377fa7988 100644
--- a/indra/llcommon/llthread.cpp
+++ b/indra/llcommon/llthread.cpp
@@ -138,8 +138,10 @@ void LLThread::threadRun()
     // this is the first point at which we're actually running in the new thread
     mID = currentID();
 
+#ifndef LL_RELEASE_FOR_DOWNLOAD
     // for now, hard code all LLThreads to report to single master thread recorder, which is known to be running on main thread
     mRecorder = new LLTrace::ThreadRecorder(*LLTrace::get_master_thread_recorder());
+#endif
 
     // Run the user supplied function
     do 
@@ -164,9 +166,10 @@ void LLThread::threadRun()
 
     //LL_INFOS() << "LLThread::staticRun() Exiting: " << threadp->mName << LL_ENDL;
 
-
+#ifndef LL_RELEASE_FOR_DOWNLOAD
     delete mRecorder;
     mRecorder = NULL;
+#endif
 
     // We're done with the run function, this thread is done executing now.
     //NB: we are using this flag to sync across threads...we really need memory barriers here
@@ -179,8 +182,10 @@ LLThread::LLThread(const std::string& name, apr_pool_t *poolp) :
     mPaused(FALSE),
     mName(name),
     mThreadp(NULL),
-    mStatus(STOPPED),
-    mRecorder(NULL)
+    mStatus(STOPPED)
+#ifndef LL_RELEASE_FOR_DOWNLOAD
+    , mRecorder(NULL)
+#endif
 {
     mRunCondition = new LLCondition();
     mDataLock = new LLMutex();
@@ -250,9 +255,10 @@ void LLThread::shutdown()
 #else
             pthread_cancel(mNativeHandle);
 #endif
-
+#ifndef LL_RELEASE_FOR_DOWNLOAD
             delete mRecorder;
             mRecorder = NULL;
+#endif
             mStatus = STOPPED;
             return;
         }
@@ -265,7 +271,7 @@ void LLThread::shutdown()
 
     delete mDataLock;
     mDataLock = NULL;
-
+#ifndef LL_RELEASE_FOR_DOWNLOAD
     if (mRecorder)
     {
         // missed chance to properly shut down recorder (needs to be done in thread context)
@@ -273,6 +279,7 @@ void LLThread::shutdown()
         // so just leak it and remove it from parent
         LLTrace::get_master_thread_recorder()->removeChildRecorder(mRecorder);
     }
+#endif
 }
 
 
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index 5db13db41abff6e10ddb706d3e5bfb1d81a5528b..6cbf0e6373d79261af7fe6fe99b7dd3334567075 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -106,7 +106,9 @@ class LL_COMMON_API LLThread
     std::thread        *mThreadp;
     EThreadStatus       mStatus;
     id_t                mID;
+#ifndef LL_RELEASE_FOR_DOWNLOAD
     LLTrace::ThreadRecorder* mRecorder;
+#endif
 
     //a local apr_pool for APRFile operations in this thread. If it exists, LLAPRFile::sAPRFilePoolp should not be used.
     //Note: this pool is used by APRFile ONLY, do NOT use it for any other purposes.
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 94891da2f592d4f80d9d0482392614dc23434f01..d9a9727e1a4d9328dc56525a2535a273fe669eb1 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -2071,14 +2071,17 @@ bool LLTextureFetchWorker::doWork(S32 param)
 // virtual
 void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response)
 {
+#ifndef LL_RELEASE_FOR_DOWNLOAD
 	static LLCachedControl<bool> log_to_viewer_log(gSavedSettings, "LogTextureDownloadsToViewerLog", false);
 	static LLCachedControl<bool> log_to_sim(gSavedSettings, "LogTextureDownloadsToSimulator", false);
+#endif
 	static LLCachedControl<bool> log_texture_traffic(gSavedSettings, "LogTextureNetworkTraffic", false) ;
 
 	LLMutexLock lock(&mWorkMutex);										// +Mw
 
 	mHttpActive = false;
 	
+#ifndef LL_RELEASE_FOR_DOWNLOAD
 	if (log_to_viewer_log || log_to_sim)
 	{
 		mFetcher->mTextureInfo.setRequestStartTime(mID, mMetricsStartTime.value());
@@ -2087,6 +2090,7 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe
 		mFetcher->mTextureInfo.setRequestOffset(mID, mRequestedOffset);
 		mFetcher->mTextureInfo.setRequestCompleteTimeAndLog(mID, LLTimer::getTotalTime());
 	}
+#endif
 
 	static LLCachedControl<F32> fake_failure_rate(gSavedSettings, "TextureFetchFakeFailureRate", 0.0f);
 	F32 rand_val = ll_frand();
@@ -2633,11 +2637,15 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
 	  mFetchDebugger(NULL),
 	  mFetchSource(LLTextureFetch::FROM_ALL),
 	  mOriginFetchSource(LLTextureFetch::FROM_ALL),
-	  mFetcherLocked(FALSE),
-	  mTextureInfoMainThread(false)
+	  mFetcherLocked(FALSE)
+#ifndef LL_RELEASE_FOR_DOWNLOAD
+	  , mTextureInfoMainThread(false)
+#endif
 {
 	mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
+#ifndef LL_RELEASE_FOR_DOWNLOAD
 	mTextureInfo.setLogging(true);
+#endif
 
 	LLAppCoreHttp & app_core_http(LLAppViewer::instance()->getAppCoreHttp());
 	mHttpRequest = new LLCore::HttpRequest;
@@ -3182,7 +3190,9 @@ void LLTextureFetch::shutDownImageDecodeThread()
 // Threads:  Ttf
 void LLTextureFetch::startThread()
 {
+#ifndef LL_RELEASE_FOR_DOWNLOAD
 	mTextureInfo.startRecording();
+#endif
 }
 
 // Threads:  Ttf
@@ -3193,8 +3203,9 @@ void LLTextureFetch::endThread()
 					  << ", ResWaits:  " << mTotalResourceWaitCount
 					  << ", TotalHTTPReq:  " << getTotalNumHTTPRequests()
 					  << LL_ENDL;
-
+#ifndef LL_RELEASE_FOR_DOWNLOAD
 	mTextureInfo.stopRecording();
+#endif
 }
 
 // Threads:  Ttf
@@ -3340,6 +3351,7 @@ void LLTextureFetch::sendRequestListToSimulators()
 // 				LL_INFOS(LOG_TXT) << "IMAGE REQUEST: " << req->mID << " Discard: " << req->mDesiredDiscard
 // 						<< " Packet: " << packet << " Priority: " << req->mImagePriority << LL_ENDL;
 
+#ifndef LL_RELEASE_FOR_DOWNLOAD
 				static LLCachedControl<bool> log_to_viewer_log(gSavedSettings,"LogTextureDownloadsToViewerLog", false);
 				static LLCachedControl<bool> log_to_sim(gSavedSettings,"LogTextureDownloadsToSimulator", false);
 				if (log_to_viewer_log || log_to_sim)
@@ -3349,6 +3361,7 @@ void LLTextureFetch::sendRequestListToSimulators()
 					mTextureInfo.setRequestSize(req->mID, 0);
 					mTextureInfo.setRequestType(req->mID, LLTextureInfoDetails::REQUEST_TYPE_UDP);
 				}
+#endif
 
 				req->lockWorkMutex();									// +Mw
 				req->mSentRequest = LLTextureFetchWorker::SENT_SIM;
@@ -3587,6 +3600,7 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1
 		removeFromNetworkQueue(worker, true); // failsafe
 	}
 
+#ifndef LL_RELEASE_FOR_DOWNLOAD
 	if (packet_num >= (worker->mTotalPackets - 1))
 	{
 		static LLCachedControl<bool> log_to_viewer_log(gSavedSettings,"LogTextureDownloadsToViewerLog", false);
@@ -3599,6 +3613,7 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1
 			mTextureInfoMainThread.setRequestCompleteTimeAndLog(id, timeNow);
 		}
 	}
+#endif
 	worker->unlockWorkMutex();											// -Mw
 
 	return res;
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index ac03a4a9e6086a500bb5a52214918360aaeed5e6..2863a73bb66cac85355524220a60524c00bc8628 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -334,8 +334,10 @@ class LLTextureFetch : public LLWorkerThread
 	cancel_queue_t mCancelQueue;										// Mfnq
 	F32 mTextureBandwidth;												// <none>
 	std::atomic<F32> mMaxBandwidth;
+#ifndef LL_RELEASE_FOR_DOWNLOAD
 	LLTextureInfo mTextureInfo;
 	LLTextureInfo mTextureInfoMainThread;
+#endif
 
 	// XXX possible delete
 	std::atomic<U32Bits> mHTTPTextureBits;