diff --git a/indra/llcorehttp/_httpoprequest.cpp b/indra/llcorehttp/_httpoprequest.cpp
index 04a8e0baff7e2b773abb1d7366aa13a871d28c92..516daadf9ba3fbd980bc72b0799c568ffebd7b9b 100644
--- a/indra/llcorehttp/_httpoprequest.cpp
+++ b/indra/llcorehttp/_httpoprequest.cpp
@@ -107,6 +107,7 @@ HttpOpRequest::HttpOpRequest()
 	  mReplyBody(NULL),
 	  mReplyOffset(0),
 	  mReplyLength(0),
+	  mReplyFullLength(0),
 	  mReplyHeaders(NULL),
 	  mPolicyRetries(0),
 	  mPolicyRetryAt(HttpTime(0)),
@@ -154,6 +155,7 @@ HttpOpRequest::~HttpOpRequest()
 
 	mReplyOffset = 0;
 	mReplyLength = 0;
+	mReplyFullLength = 0;
 	if (mReplyBody)
 	{
 		mReplyBody->release();
@@ -224,7 +226,7 @@ void HttpOpRequest::visitNotifier(HttpRequest * request)
 		if (mReplyOffset || mReplyLength)
 		{
 			// Got an explicit offset/length in response
-			response->setRange(mReplyOffset, mReplyLength);
+			response->setRange(mReplyOffset, mReplyLength, mReplyFullLength);
 		}
 
 		mUserHandler->onCompleted(static_cast<HttpHandle>(this), response);
@@ -362,6 +364,7 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
 	}
 	mReplyOffset = 0;
 	mReplyLength = 0;
+	mReplyFullLength = 0;
 	if (mReplyHeaders)
 	{
 		mReplyHeaders->release();
@@ -590,6 +593,7 @@ size_t HttpOpRequest::headerCallback(void * data, size_t size, size_t nmemb, voi
 		// taking results from the last header stanza we receive.
 		op->mReplyOffset = 0;
 		op->mReplyLength = 0;
+		op->mReplyFullLength = 0;
 		op->mStatus = HttpStatus();
 	}
 	else if (op->mProcFlags & PF_SCAN_RANGE_HEADER)
@@ -613,6 +617,7 @@ size_t HttpOpRequest::headerCallback(void * data, size_t size, size_t nmemb, voi
 				// Success, record the fragment position
 				op->mReplyOffset = first;
 				op->mReplyLength = last - first + 1;
+				op->mReplyFullLength = length;
 			}
 			else if (-1 == status)
 			{
diff --git a/indra/llcorehttp/_httpoprequest.h b/indra/llcorehttp/_httpoprequest.h
index f2b709a3a2427c2f5e54cba76d4ea7ce982d3d9b..5d2417466ce971a60510e4b8e5e02587a49e6021 100644
--- a/indra/llcorehttp/_httpoprequest.h
+++ b/indra/llcorehttp/_httpoprequest.h
@@ -150,6 +150,7 @@ class HttpOpRequest : public HttpOperation
 	BufferArray *		mReplyBody;
 	off_t				mReplyOffset;
 	size_t				mReplyLength;
+	size_t				mReplyFullLength;
 	HttpHeaders *		mReplyHeaders;
 
 	// Policy data
diff --git a/indra/llcorehttp/httpresponse.cpp b/indra/llcorehttp/httpresponse.cpp
index 3dcdadb33747684ea3d1b7883a026da9d2c4fd65..a552e48a1bac51f5f78377fadf1252ec339a1634 100644
--- a/indra/llcorehttp/httpresponse.cpp
+++ b/indra/llcorehttp/httpresponse.cpp
@@ -37,6 +37,7 @@ HttpResponse::HttpResponse()
 	: LLCoreInt::RefCounted(true),
 	  mReplyOffset(0U),
 	  mReplyLength(0U),
+	  mReplyFullLength(0U),
 	  mBufferArray(NULL),
 	  mHeaders(NULL)
 {}
diff --git a/indra/llcorehttp/httpresponse.h b/indra/llcorehttp/httpresponse.h
index 5bcd7c4eb802b1232443b30f920003683c52b37f..925cf81586ae520c39370f85451fe16d50d66c92 100644
--- a/indra/llcorehttp/httpresponse.h
+++ b/indra/llcorehttp/httpresponse.h
@@ -111,16 +111,18 @@ class HttpResponse : public LLCoreInt::RefCounted
 
 	/// If a 'Range:' header was used, these methods are involved
 	/// in setting and returning data about the actual response.
-	void getRange(unsigned int * offset, unsigned int * length) const
+	void getRange(unsigned int * offset, unsigned int * length, unsigned int * full) const
 		{
 			*offset = mReplyOffset;
 			*length = mReplyLength;
+			*full = mReplyFullLength;
 		}
 
-	void setRange(unsigned int offset, unsigned int length)
+	void setRange(unsigned int offset, unsigned int length, unsigned int full_length)
 		{
 			mReplyOffset = offset;
 			mReplyLength = length;
+			mReplyFullLength = full_length;
 		}
 			
 protected:
@@ -128,6 +130,7 @@ class HttpResponse : public LLCoreInt::RefCounted
 	HttpStatus			mStatus;
 	unsigned int		mReplyOffset;
 	unsigned int		mReplyLength;
+	unsigned int		mReplyFullLength;
 	BufferArray *		mBufferArray;
 	HttpHeaders *		mHeaders;
 };
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 6e14c5fc63e39659db1e84a129a13ce116fd81ba..2eda6a9b80010792fa550085b3f3bb98ece06b17 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -1735,8 +1735,8 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe
 			 << " status: " << status.toHex()
 			 << " '" << status.toString() << "'"
 			 << llendl;
-//	unsigned int offset(0), length(0);
-//	response->getRange(&offset, &length);
+//	unsigned int offset(0), length(0), full_length(0);
+//	response->getRange(&offset, &length, &full_length);
 // 	llwarns << "HTTP COMPLETE: " << mID << " handle: " << handle
 // 			<< " status: " << status.toULong() << " '" << status.toString() << "'"
 // 			<< " req offset: " << mRequestedOffset << " req length: " << mRequestedSize