diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 4597d0626065b40af486b541f45390dd4090f62c..630b9125a2dbdee98bbaa4cdf03fb0fe74966e6a 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -245,6 +245,11 @@ bool LLTexUnit::bind(LLTexture* texture, bool for_rendering, bool forceBind)
 		return texture->bindDefaultImage(mIndex);
 	}
 
+	if(texture->isActiveFetching()) //in debug
+	{
+		return texture->bindDebugImage(mIndex);
+	}
+
 	//in audit, replace the selected texture by the default one.
 	if ((mCurrTexture != gl_tex->getTexName()) || forceBind)
 	{
diff --git a/indra/llrender/lltexture.h b/indra/llrender/lltexture.h
index 569a65c2e0862f4c2b1c1e1a051642f9fe4b9175..90338814245d709baf176b72949cf33f134a2ac2 100644
--- a/indra/llrender/lltexture.h
+++ b/indra/llrender/lltexture.h
@@ -58,10 +58,12 @@ class LLTexture : public LLRefCount
 	virtual S8         getType() const = 0 ;
 	virtual void       setKnownDrawSize(S32 width, S32 height) = 0 ;
 	virtual bool       bindDefaultImage(const S32 stage = 0) = 0 ;
+	virtual bool       bindDebugImage(const S32 stage = 0) = 0;
 	virtual void       forceImmediateUpdate() = 0 ;
 	virtual void       setActive() = 0 ;
 	virtual S32	       getWidth(S32 discard_level = -1) const = 0 ;
 	virtual S32	       getHeight(S32 discard_level = -1) const = 0 ;
+	virtual bool       isActiveFetching() = 0;
 
 private:
 	//note: do not make this function public.
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 7edfa6adfabcb6825ab1a03960cebc7975ce2f2c..12835002d3469e7eacf3b6bc6dee4911415daf3b 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -698,6 +698,28 @@ void LLViewerTexture::setBoostLevel(S32 level)
 
 }
 
+bool LLViewerTexture::isActiveFetching()
+{
+	return false;
+}
+
+bool LLViewerTexture::bindDebugImage(const S32 stage)
+{
+	if (stage < 0) return false;
+
+	bool res = true;
+	if (LLViewerTexture::sCheckerBoardImagep.notNull() && (this != LLViewerTexture::sCheckerBoardImagep.get()))
+	{
+		res = gGL.getTexUnit(stage)->bind(LLViewerTexture::sCheckerBoardImagep);
+	}
+
+	if(!res)
+	{
+		return bindDefaultImage(stage);
+	}
+
+	return res;
+}
 
 bool LLViewerTexture::bindDefaultImage(S32 stage) 
 {
@@ -1990,6 +2012,13 @@ bool LLViewerFetchedTexture::setDebugFetching(S32 debug_level)
 	return true;
 }
 
+bool LLViewerFetchedTexture::isActiveFetching()
+{
+	static LLCachedControl<bool> monitor_enabled(gSavedSettings,"DebugShowTextureInfo");
+
+	return mFetchState > 7 && mFetchState < 10 && monitor_enabled; //in state of WAIT_HTTP_REQ or DECODE_IMAGE.
+}
+
 bool LLViewerFetchedTexture::updateFetch()
 {
 	static LLCachedControl<bool> textures_decode_disabled(gSavedSettings,"TextureDecodeDisabled");
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 0a9778ce76bea1e85cf3e86cacf9d2ad786480a9..d69a0ffb72260b74aeed8491564a0d9bab7dcf35 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -167,8 +167,10 @@ class LLViewerTexture : public LLTexture
 	virtual void dump();	// debug info to llinfos
 	
 	/*virtual*/ bool bindDefaultImage(const S32 stage = 0) ;
+	/*virtual*/ bool bindDebugImage(const S32 stage = 0) ;
 	/*virtual*/ void forceImmediateUpdate() ;
-	
+	/*virtual*/ bool isActiveFetching();
+
 	const LLUUID& getID() const { return mID; }
 	
 	void setBoostLevel(S32 level);
@@ -506,6 +508,9 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	void        loadFromFastCache();
 	void        setInFastCacheList(bool in_list) { mInFastCacheList = in_list; }
 	bool        isInFastCacheList() { return mInFastCacheList; }
+
+	/*virtual*/bool  isActiveFetching(); //is actively in fetching by the fetching pipeline.
+
 protected:
 	/*virtual*/ void switchToCachedImage();
 	S32 getCurrentDiscardLevelForFetching() ;