diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index 795a93c3fef82aa1c424e0c81b97bba22abd2a59..9300b161f445d2533651aa940ebe7eb67fb5f56d 100644
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -213,6 +213,7 @@ BOOL	LLPanelFace::postBuild()
         pbr_ctrl->setImmediateFilterPermMask(PERM_NONE);
         pbr_ctrl->setDnDFilterPermMask(PERM_COPY | PERM_TRANSFER);
         pbr_ctrl->setBakeTextureEnabled(false);
+        pbr_ctrl->setInventoryPickType(LLTextureCtrl::PICK_MATERIAL);
     }
 
 	mTextureCtrl = getChild<LLTextureCtrl>("texture control");
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 580fd7936e27d9248d79cf7a70e02ff82177c55f..87c05c162a00e212a6d531f80ea49e2348a90b47 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -177,7 +177,8 @@ LLFloaterTexturePicker::LLFloaterTexturePicker(
 	mOnFloaterCloseCallback(NULL),
 	mSetImageAssetIDCallback(NULL),
 	mOnUpdateImageStatsCallback(NULL),
-	mBakeTextureEnabled(FALSE)
+	mBakeTextureEnabled(FALSE),
+    mInventoryPickType(LLTextureCtrl::PICK_TEXTURE)
 {
 	mCanApplyImmediately = can_apply_immediately;
 	buildFromFile("floater_texture_ctrl.xml");
@@ -466,8 +467,20 @@ BOOL LLFloaterTexturePicker::postBuild()
 	mLocalScrollCtrl = getChild<LLScrollListCtrl>("l_name_list");
 	mLocalScrollCtrl->setCommitCallback(onLocalScrollCommit, this);
     mLocalScrollCtrl->clearRows();
-	LLLocalBitmapMgr::getInstance()->feedScrollList(mLocalScrollCtrl);
-    LLLocalGLTFMaterialMgr::getInstance()->feedScrollList(mLocalScrollCtrl);
+
+    if (mInventoryPickType == LLTextureCtrl::PICK_TEXTURE_MATERIAL)
+    {
+        LLLocalBitmapMgr::getInstance()->feedScrollList(mLocalScrollCtrl);
+        LLLocalGLTFMaterialMgr::getInstance()->feedScrollList(mLocalScrollCtrl);
+    }
+    else if (mInventoryPickType == LLTextureCtrl::PICK_TEXTURE)
+    {
+        LLLocalBitmapMgr::getInstance()->feedScrollList(mLocalScrollCtrl);
+    }
+    else if (mInventoryPickType == LLTextureCtrl::PICK_MATERIAL)
+    {
+        LLLocalGLTFMaterialMgr::getInstance()->feedScrollList(mLocalScrollCtrl);
+    }
 
 	mNoCopyTextureSelected = FALSE;
 
@@ -901,11 +914,18 @@ void LLFloaterTexturePicker::onBtnAdd(void* userdata)
 {
     LLFloaterTexturePicker* self = (LLFloaterTexturePicker*)userdata;
 
-    // todo: there will be changes to texture picker to forbid
-    // selection of materials in some cases, like landmarks, once
-    // it gets implemented, update code to select FLOAD_* filter
-    // based on picker's material/texture mode.
-    LLFilePickerReplyThread::startPicker(boost::bind(&onPickerCallback, _1, self->getHandle()), LLFilePicker::FFLOAD_MATERIAL_TEXTURE, true);
+    if (self->mInventoryPickType == LLTextureCtrl::PICK_TEXTURE_MATERIAL)
+    {
+        LLFilePickerReplyThread::startPicker(boost::bind(&onPickerCallback, _1, self->getHandle()), LLFilePicker::FFLOAD_MATERIAL_TEXTURE, true);
+    }
+    else if (self->mInventoryPickType == LLTextureCtrl::PICK_TEXTURE)
+    {
+        LLFilePickerReplyThread::startPicker(boost::bind(&onPickerCallback, _1, self->getHandle()), LLFilePicker::FFLOAD_IMAGE, true);
+    }
+    else if (self->mInventoryPickType == LLTextureCtrl::PICK_MATERIAL)
+    {
+        LLFilePickerReplyThread::startPicker(boost::bind(&onPickerCallback, _1, self->getHandle()), LLFilePicker::FFLOAD_MATERIAL, true);
+    }
 }
 
 // static
@@ -941,8 +961,20 @@ void LLFloaterTexturePicker::onBtnRemove(void* userdata)
 		self->getChild<LLButton>("l_rem_btn")->setEnabled(false);
 		self->getChild<LLButton>("l_upl_btn")->setEnabled(false);
         self->mLocalScrollCtrl->clearRows();
-		LLLocalBitmapMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
-        LLLocalGLTFMaterialMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
+
+        if (self->mInventoryPickType == LLTextureCtrl::PICK_TEXTURE_MATERIAL)
+        {
+            LLLocalBitmapMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
+            LLLocalGLTFMaterialMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
+        }
+        else if (self->mInventoryPickType == LLTextureCtrl::PICK_TEXTURE)
+        {
+            LLLocalBitmapMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
+        }
+        else if (self->mInventoryPickType == LLTextureCtrl::PICK_MATERIAL)
+        {
+            LLLocalGLTFMaterialMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
+        }
 	}
 }
 
@@ -1183,18 +1215,23 @@ void LLFloaterTexturePicker::onSelectTextureMaterials(LLUICtrl* ctrl, void *user
 
     U32 filter_types = 0x0;
 
-    if (index == textures_and_materials)
+    if (self->mInventoryPickType != LLTextureCtrl::PICK_TEXTURE_MATERIAL)
+    {
+        index = self->mInventoryPickType;
+    }
+
+    if (index == LLTextureCtrl::PICK_TEXTURE_MATERIAL)
     {
         filter_types |= 0x1 << LLInventoryType::IT_TEXTURE;
         filter_types |= 0x1 << LLInventoryType::IT_SNAPSHOT;
         filter_types |= 0x1 << LLInventoryType::IT_MATERIAL;
     }
-    else if (index == textures_only)
+    else if (index == LLTextureCtrl::PICK_TEXTURE)
     {
         filter_types |= 0x1 << LLInventoryType::IT_TEXTURE;
         filter_types |= 0x1 << LLInventoryType::IT_SNAPSHOT;
     }
-    else if (index == materials_only)
+    else if (index == LLTextureCtrl::PICK_MATERIAL)
     {
         filter_types |= 0x1 << LLInventoryType::IT_MATERIAL;
     }
@@ -1229,6 +1266,28 @@ void LLFloaterTexturePicker::setBakeTextureEnabled(BOOL enabled)
 	onModeSelect(0, this);
 }
 
+void LLFloaterTexturePicker::setInventoryPickType(LLTextureCtrl::EPickInventoryType type)
+{
+    mInventoryPickType = type;
+
+    mLocalScrollCtrl->clearRows();
+    if (mInventoryPickType == LLTextureCtrl::PICK_TEXTURE_MATERIAL)
+    {
+        LLLocalBitmapMgr::getInstance()->feedScrollList(mLocalScrollCtrl);
+        LLLocalGLTFMaterialMgr::getInstance()->feedScrollList(mLocalScrollCtrl);
+    }
+    else if (mInventoryPickType == LLTextureCtrl::PICK_TEXTURE)
+    {
+        LLLocalBitmapMgr::getInstance()->feedScrollList(mLocalScrollCtrl);
+    }
+    else if (mInventoryPickType == LLTextureCtrl::PICK_MATERIAL)
+    {
+        LLLocalGLTFMaterialMgr::getInstance()->feedScrollList(mLocalScrollCtrl);
+    }
+
+    onSelectTextureMaterials(0, this);
+}
+
 void LLFloaterTexturePicker::onPickerCallback(const std::vector<std::string>& filenames, LLHandle<LLFloater> handle)
 {
     std::vector<std::string>::const_iterator iter = filenames.begin();
@@ -1254,8 +1313,20 @@ void LLFloaterTexturePicker::onPickerCallback(const std::vector<std::string>& fi
     {
         LLFloaterTexturePicker* self = (LLFloaterTexturePicker*)handle.get();
         self->mLocalScrollCtrl->clearRows();
-        LLLocalBitmapMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
-        LLLocalGLTFMaterialMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
+
+        if (self->mInventoryPickType == LLTextureCtrl::PICK_TEXTURE_MATERIAL)
+        {
+            LLLocalBitmapMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
+            LLLocalGLTFMaterialMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
+        }
+        else if (self->mInventoryPickType == LLTextureCtrl::PICK_TEXTURE)
+        {
+            LLLocalBitmapMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
+        }
+        else if (self->mInventoryPickType == LLTextureCtrl::PICK_MATERIAL)
+        {
+            LLLocalGLTFMaterialMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
+        }
     }
 }
 
@@ -1306,6 +1377,8 @@ LLTextureCtrl::LLTextureCtrl(const LLTextureCtrl::Params& p)
 	mValid( TRUE ),
 	mShowLoadingPlaceholder( TRUE ),
 	mOpenTexPreview(false),
+    mBakeTextureEnabled(true),
+    mInventoryPickType(PICK_TEXTURE),
 	mImageAssetID(p.image_id),
 	mDefaultImageAssetID(p.default_image_id),
 	mDefaultImageName(p.default_image_name),
@@ -1495,14 +1568,10 @@ void LLTextureCtrl::showPicker(BOOL take_focus)
 		if (texture_floaterp)
 		{
 			texture_floaterp->setOnFloaterCommitCallback(boost::bind(&LLTextureCtrl::onFloaterCommit, this, _1, _2));
-		}
-		if (texture_floaterp)
-		{
 			texture_floaterp->setSetImageAssetIDCallback(boost::bind(&LLTextureCtrl::setImageAssetID, this, _1));
-		}
-		if (texture_floaterp)
-		{
-			texture_floaterp->setBakeTextureEnabled(TRUE);
+
+			texture_floaterp->setBakeTextureEnabled(mBakeTextureEnabled);
+            texture_floaterp->setInventoryPickType(mInventoryPickType);
 		}
 
 		LLFloater* root_floater = gFloaterView->getParentFloater(this);
@@ -1749,8 +1818,9 @@ void LLTextureCtrl::setImageAssetID( const LLUUID& asset_id )
 	}
 }
 
-void LLTextureCtrl::setBakeTextureEnabled(BOOL enabled)
+void LLTextureCtrl::setBakeTextureEnabled(bool enabled)
 {
+    mBakeTextureEnabled = enabled;
 	LLFloaterTexturePicker* floaterp = (LLFloaterTexturePicker*)mFloaterHandle.get();
 	if (floaterp)
 	{
@@ -1758,6 +1828,16 @@ void LLTextureCtrl::setBakeTextureEnabled(BOOL enabled)
 	}
 }
 
+void LLTextureCtrl::setInventoryPickType(EPickInventoryType type)
+{
+    mInventoryPickType = type;
+    LLFloaterTexturePicker* floaterp = (LLFloaterTexturePicker*)mFloaterHandle.get();
+    if (floaterp)
+    {
+        floaterp->setInventoryPickType(type);
+    }
+}
+
 BOOL LLTextureCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask,
 					  BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
 					  EAcceptance *accept,
diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h
index 0325e09aa7d3bbe84ca4c0d80410327a075b3ddc..fb409af42b0a62b8455cb5526c3776d6d1cf5f35 100644
--- a/indra/newview/lltexturectrl.h
+++ b/indra/newview/lltexturectrl.h
@@ -78,6 +78,13 @@ class LLTextureCtrl
 		TEXTURE_CANCEL
 	} ETexturePickOp;
 
+    typedef enum e_pick_inventory_type
+    {
+        PICK_TEXTURE_MATERIAL = 0,
+        PICK_TEXTURE = 1,
+        PICK_MATERIAL = 2,
+    } EPickInventoryType;
+
 public:
 	struct Params : public LLInitParam::Block<Params, LLUICtrl::Params>
 	{
@@ -212,7 +219,11 @@ class LLTextureCtrl
 
 	LLViewerFetchedTexture* getTexture() { return mTexturep; }
 
-	void setBakeTextureEnabled(BOOL enabled);
+    void setBakeTextureEnabled(bool enabled);
+    bool getBakeTextureEnabled() const { return mBakeTextureEnabled; }
+
+    void setInventoryPickType(EPickInventoryType type);
+    EPickInventoryType getInventoryPickType() { return mInventoryPickType; };
 
 private:
 	BOOL allowDrop(LLInventoryItem* item);
@@ -251,7 +262,8 @@ class LLTextureCtrl
 	std::string				 	mLoadingPlaceholderString;
 	S32						 	mLabelWidth;
 	bool						mOpenTexPreview;
-	BOOL						mBakeTextureEnabled;
+	bool						mBakeTextureEnabled;
+    LLTextureCtrl::EPickInventoryType mInventoryPickType;
 };
 
 //////////////////////////////////////////////////////////////////////////////////////////
@@ -347,6 +359,8 @@ class LLFloaterTexturePicker : public LLFloater
 	void 			setLocalTextureEnabled(BOOL enabled);
 	void 			setBakeTextureEnabled(BOOL enabled);
 
+    void setInventoryPickType(LLTextureCtrl::EPickInventoryType type);
+
     static void		onPickerCallback(const std::vector<std::string>& filenames, LLHandle<LLFloater> handle);
 
 protected:
@@ -389,6 +403,7 @@ class LLFloaterTexturePicker : public LLFloater
 	bool mCanApply;
 	bool mCanPreview;
 	bool mPreviewSettingChanged;
+    LLTextureCtrl::EPickInventoryType mInventoryPickType;
 
 
 	texture_selected_callback mTextureSelectedCallback;
diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
index 2a84fece0310a8e4df0beb1af0bcf41366f91b25..b6a2aaf31bb5698ecb714b5f775b79aeacd37d1e 100644
--- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
@@ -137,51 +137,79 @@
      value="Preview Disabled"
      word_wrap="true"
      visible="false"
-     width="87" />  
-    <combo_box
-      follows="left|top|right"
-      height="23"
-      label="Choose Textures, Materials or LIFE!"
-      layout="topleft"
-      left="175"
-      name="textures_material_combo"
-      top="20"
-      width="231">
-      <combo_box.item
-       label="Materials &amp; Textures"
-       name="Materials_Textures"
-       value="0" />
-      <combo_box.item
-       label="Textures"
-       name="Textures"
-       value="1" />
-      <combo_box.item
-       label="Materials"
-       name="Materials"
-       value="2" />
-    </combo_box>
-    <filter_editor
-     follows="left|top|right"
-     height="23"
-     label="Filter Textures"
-     layout="topleft"
-     left="175"
-     name="inventory search editor"
-     top="48"
-     width="231" />
-  <asset_filtered_inv_panel
-   allow_multi_select="false"
-     bg_visible="true"
-     bg_alpha_color="DkGray2"
-     border="false"
-     follows="all"
-     height="200"
-     layout="topleft"
-     left_delta="0"
-     name="inventory panel"
-     top_pad="4"
-     width="231"
-     filter_asset_types="texture|material"/>
+     width="87" />
+
+  <layout_stack name="inventory_stack"
+                width="231"
+                height="276"
+                top="20"
+                left="175"
+                follows="all"
+                animate="false"
+                orientation="vertical">
+    <layout_panel name="combo_layout"
+                  border="false"
+                  bevel_style="in"
+                  auto_resize="false"
+                  user_resize="false"
+                  visible="false"
+                  width="231"
+                  height="24">
+        <combo_box
+          follows="left|top|right"
+          height="23"
+          label="Choose Textures, Materials or LIFE!"
+          layout="topleft"
+          left="0"
+          name="textures_material_combo"
+          top="0"
+          width="231">
+          <combo_box.item
+           label="Materials &amp; Textures"
+           name="Materials_Textures"
+           value="0" />
+          <combo_box.item
+           label="Textures"
+           name="Textures"
+           value="1" />
+          <combo_box.item
+           label="Materials"
+           name="Materials"
+           value="2" />
+        </combo_box>
+    </layout_panel>
+    <layout_panel name="inventory_layout"
+                  border="false"
+                  bevel_style="in"
+                  auto_resize="true"
+                  user_resize="false"
+                  visible="true"
+                  width="231"
+                  height="252">
+      <filter_editor
+       follows="left|top|right"
+       height="23"
+       label="Filter Textures"
+       layout="topleft"
+       left="0"
+       name="inventory search editor"
+       top="4"
+       width="231" />
+      <asset_filtered_inv_panel
+       allow_multi_select="false"
+       bg_visible="true"
+       bg_alpha_color="DkGray2"
+       border="false"
+       follows="all"
+       height="221"
+       layout="topleft"
+       left_delta="0"
+       name="inventory panel"
+       top_pad="4"
+       width="231"
+       filter_asset_types="texture|material"/>
+    </layout_panel>
+  </layout_stack>
 
 <!--  middle: local mode -->
     <button