Index: indra/newview/lltexturefetch.cpp
===================================================================
--- indra/newview/lltexturefetch.cpp	(revision 363)
+++ indra/newview/lltexturefetch.cpp	(working copy)
@@ -54,6 +54,9 @@
 {
 friend class LLTextureFetch;
 
+public:
+	BOOL mDetectedLossless;
+
 private:
 #if 0
 	class URLResponder : public LLHTTPClient::Responder
@@ -420,7 +423,8 @@
 	  mFirstPacket(0),
 	  mLastPacket(-1),
 	  mTotalPackets(0),
-	  mImageCodec(IMG_CODEC_INVALID)
+	  mImageCodec(IMG_CODEC_INVALID),
+	  mDetectedLossless(FALSE)
 {
 	calcWorkPriority();
 	mType = host.isOk() ? LLImageBase::TYPE_AVATAR_BAKE : LLImageBase::TYPE_NORMAL;
@@ -642,8 +646,14 @@
 		mDesiredSize = llmax(mDesiredSize, FIRST_PACKET_SIZE);
 		mCachedSize = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0;
 		// Successfully loaded
-		if ((mCachedSize >= mDesiredSize) || mHaveAllData)
+
+		if((mCachedSize >= mDesiredSize) && mRequestedDiscard <=0)
 		{
+			mDetectedLossless=TRUE;
+		}
+
+		if (((mCachedSize >= mDesiredSize) && mDesiredDiscard>0) || mHaveAllData)
+		{
 			// we have enough data, decode it
 			llassert_always(mFormattedImage->getDataSize() > 0);
 			mState = DECODE_IMAGE;
@@ -1059,8 +1069,14 @@
 		}
 		bool have_all_data = mLastPacket >= mTotalPackets-1;
 		llassert_always(mRequestedSize > 0);
-		if (buffer_size >= mRequestedSize || have_all_data)
+
+		if((buffer_size >= mRequestedSize) && mRequestedDiscard <=0)
 		{
+			mDetectedLossless=TRUE;
+		}
+
+		if (((buffer_size >= mRequestedSize) && mRequestedDiscard >0) || have_all_data)
+		{
 			/// We have enough (or all) data
 			if (have_all_data)
 			{
@@ -1555,9 +1571,10 @@
 void LLTextureFetch::sendRequestListToSimulators()
 {
 	const S32 IMAGES_PER_REQUEST = 50;
-	const F32 LAZY_FLUSH_TIMEOUT = 15.f; // 10.0f // temp
+	const F32 LAZY_FLUSH_TIMEOUT = 15.0f; // 10.0f // temp
 	const F32 MIN_REQUEST_TIME = 1.0f;
 	const F32 MIN_DELTA_PRIORITY = 1000.f;
+	const F32 MIN_LOSSLESS_KICK = 0.1f;
 
 	LLMutexLock lock(&mQueueMutex);
 	
@@ -1588,7 +1605,9 @@
 		F32 delta_priority = llabs(req->mRequestedPriority - req->mImagePriority);
 		if ((req->mSimRequestedDiscard != req->mDesiredDiscard) ||
 			(delta_priority > MIN_DELTA_PRIORITY && elapsed >= MIN_REQUEST_TIME) ||
-			(elapsed >= LAZY_FLUSH_TIMEOUT))
+			(elapsed >= LAZY_FLUSH_TIMEOUT) ||
+			(req->mDetectedLossless && (elapsed >=MIN_LOSSLESS_KICK))
+			)
 		{
 			requests[req->mHost].insert(req);
 		}
