diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index a86a0aac23f0895ab9d67bc8f9d0c9b5700c5381..311009064fda72c2b90c241d033a2a48ee4797cb 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -362,6 +362,7 @@ void LLImageGL::init(BOOL usemipmaps)
 
 	mGLTextureCreated = FALSE ;
 	mIsMask = FALSE;
+	mNeedsAlpahAndPickMask = TRUE ;
 }
 
 void LLImageGL::cleanup()
@@ -1356,6 +1357,11 @@ void LLImageGL::setTarget(const LLGLenum target, const LLTexUnit::eTextureType b
 
 void LLImageGL::analyzeAlpha(const void* data_in, S32 w, S32 h)
 {
+	if(!mNeedsAlpahAndPickMask)
+	{
+		return ;
+	}
+
 	if (mFormatType != GL_UNSIGNED_BYTE)
 	{
 		llwarns << "Cannot analyze alpha for image with format type " << std::hex << mFormatType << std::dec << llendl;
@@ -1416,6 +1422,11 @@ void LLImageGL::analyzeAlpha(const void* data_in, S32 w, S32 h)
 //----------------------------------------------------------------------------
 void LLImageGL::updatePickMask(S32 width, S32 height, const U8* data_in)
 {
+	if(!mNeedsAlpahAndPickMask)
+	{
+		return ;
+	}
+
 	if (mFormatType != GL_UNSIGNED_BYTE ||
 		mFormatPrimary != GL_RGBA)
 	{
diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h
index 09210b1ef180f24744ba934564a3964aa06de907..b58472d39845bdd759b73f2e0b8fd5d3ae096740 100644
--- a/indra/llrender/llimagegl.h
+++ b/indra/llrender/llimagegl.h
@@ -167,6 +167,7 @@ class LLImageGL : public LLRefCount
 	void init(BOOL usemipmaps);
 	virtual void cleanup(); // Clean up the LLImageGL so it can be reinitialized.  Be careful when using this in derived class destructors
 
+	void setNeedsAlpahAndPickMask(BOOL need_mask) {mNeedsAlpahAndPickMask = need_mask;}
 public:
 	// Various GL/Rendering options
 	S32 mTextureMemory;
@@ -180,6 +181,7 @@ class LLImageGL : public LLRefCount
 	S8 mAutoGenMips;
 
 	BOOL mIsMask;
+	BOOL mNeedsAlpahAndPickMask;
 	
 	bool     mGLTextureCreated ;
 	LLGLuint mTexName;