diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index 537744b44c0c7e987f7f61588e18cb80290ab77e..eb3528b9b7f7be29e81ea738a5464869c62c890c 100644
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -370,6 +370,17 @@
         <key>Value</key>
         <string></string>
       </map>
+      <key>PBRUploadFolder</key>
+      <map>
+        <key>Comment</key>
+        <string>All pbr uploads will be stored in this directory (UUID)</string>
+        <key>Persist</key>
+        <integer>1</integer>
+        <key>Type</key>
+        <string>String</string>
+        <key>Value</key>
+        <string></string>
+      </map>
       <key>TextureUploadFolder</key>
       <map>
         <key>Comment</key>
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index dd9a212c1ca70f6e578ca6ef665f850cf4027e64..68928e9c8f85166a10152bf86ea349dc4eb6432d 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -399,6 +399,7 @@ BOOL LLFloaterPreference::postBuild()
 	gSavedSettings.getControl("PreferredMaturity")->getSignal()->connect(boost::bind(&LLFloaterPreference::onChangeMaturity, this));
 
 	gSavedPerAccountSettings.getControl("ModelUploadFolder")->getSignal()->connect(boost::bind(&LLFloaterPreference::onChangeModelFolder, this));
+    gSavedPerAccountSettings.getControl("PBRUploadFolder")->getSignal()->connect(boost::bind(&LLFloaterPreference::onChangePBRFolder, this));
 	gSavedPerAccountSettings.getControl("TextureUploadFolder")->getSignal()->connect(boost::bind(&LLFloaterPreference::onChangeTextureFolder, this));
 	gSavedPerAccountSettings.getControl("SoundUploadFolder")->getSignal()->connect(boost::bind(&LLFloaterPreference::onChangeSoundFolder, this));
 	gSavedPerAccountSettings.getControl("AnimationUploadFolder")->getSignal()->connect(boost::bind(&LLFloaterPreference::onChangeAnimationFolder, this));
@@ -688,6 +689,7 @@ void LLFloaterPreference::onOpen(const LLSD& key)
 	onChangeMaturity();
 
 	onChangeModelFolder();
+    onChangePBRFolder();
 	onChangeTextureFolder();
 	onChangeSoundFolder();
 	onChangeAnimationFolder();
@@ -1773,6 +1775,14 @@ void LLFloaterPreference::onChangeModelFolder()
     }
 }
 
+void LLFloaterPreference::onChangePBRFolder()
+{
+    if (gInventory.isInventoryUsable())
+    {
+        getChild<LLTextBox>("upload_pbr")->setText(get_category_path(LLFolderType::FT_MATERIAL));
+    }
+}
+
 void LLFloaterPreference::onChangeTextureFolder()
 {
     if (gInventory.isInventoryUsable())
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 542df18ddba39f94107de156078dea33136dd72c..af17c46be0b6fb287dd72074b82fec4233ed8930 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -173,6 +173,7 @@ class LLFloaterPreference : public LLFloater, public LLAvatarPropertiesObserver,
 	void applyResolution();
 	void onChangeMaturity();
 	void onChangeModelFolder();
+    void onChangePBRFolder();
 	void onChangeTextureFolder();
 	void onChangeSoundFolder();
 	void onChangeAnimationFolder();
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index c101033a5dfa8add13b94520090b3226799c19f8..cc1bd846e5059e83be7804c0ba619a1128a7407d 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -628,6 +628,11 @@ const LLUUID LLInventoryModel::findUserDefinedCategoryUUIDForType(LLFolderType::
         cat_id = LLUUID(gSavedPerAccountSettings.getString("AnimationUploadFolder"));
         break;
     }
+    case LLFolderType::FT_MATERIAL:
+    {
+        cat_id = LLUUID(gSavedPerAccountSettings.getString("PBRUploadFolder"));
+        break;
+    }
     default:
         break;
     }
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index cd24b3ea43cf62444ec865066cfaf31936628b34..03ca7e7431cf4cde396835cf73546cb9873cabb6 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -1612,6 +1612,10 @@ void LLInventoryPanel::fileUploadLocation(const LLSD& userdata)
     {
         gSavedPerAccountSettings.setString("AnimationUploadFolder", LLFolderBridge::sSelf.get()->getUUID().asString());
     }
+    else if (param == "pbr_material")
+    {
+        gSavedPerAccountSettings.setString("PBRUploadFolder", LLFolderBridge::sSelf.get()->getUUID().asString());
+    }
 }
 
 void LLInventoryPanel::purgeSelectedItems()
diff --git a/indra/newview/llmaterialeditor.cpp b/indra/newview/llmaterialeditor.cpp
index 6461aa71a6013b735a04818d589c7d9cbaf1164f..477f834a2259beb5835210d38ee4f2a60e0bafdd 100644
--- a/indra/newview/llmaterialeditor.cpp
+++ b/indra/newview/llmaterialeditor.cpp
@@ -762,7 +762,7 @@ bool LLMaterialEditor::saveIfNeeded()
         LLAssetID new_asset_id = tid.makeAssetID(gAgent.getSecureSessionID());
         std::string res_desc = buildMaterialDescription();
         U32 next_owner_perm = LLPermissions::DEFAULT.getMaskNextOwner();
-        LLUUID parent = gInventory.findCategoryUUIDForType(LLFolderType::FT_MATERIAL);
+        LLUUID parent = gInventory.findUserDefinedCategoryUUIDForType(LLFolderType::FT_MATERIAL);
         const U8 subtype = NO_INV_SUBTYPE;  // TODO maybe use AT_SETTINGS and LLSettingsType::ST_MATERIAL ?
 
         create_inventory_item(gAgent.getID(), gAgent.getSessionID(), parent, tid, mMaterialName, res_desc,
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index c7c1e1d75a0aba35ad5ab42a4a50b3a3e38e0392..46dd0ada5d2f28e2a4f77f589d9bd0cca0fca153 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -692,6 +692,14 @@
          function="Inventory.FileUploadLocation"
          parameter="model" />
       </menu_item_call>
+      <menu_item_call
+       label="PBR material uploads"
+       layout="topleft"
+       name="PBR uploads">
+        <menu_item_call.on_click
+         function="Inventory.FileUploadLocation"
+         parameter="pbr_material" />
+      </menu_item_call>
     </menu>
     <menu_item_separator
      layout="topleft" />
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/en/panel_preferences_uploads.xml
index 67eff2b762466cf491076dc64d1be6a0d4be07e1..08ff3d4d533d719730a24b131ce6d81c20202cc0 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_uploads.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_uploads.xml
@@ -122,6 +122,31 @@
    width="370"
    word_wrap="true"/>
 
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="12"
+   layout="topleft"
+   left="37"
+   name="title_pbr"
+   top_pad="7"
+   width="100">
+    PBR Materials
+  </text>
+  <text
+   type="string"
+   use_ellipses="true"
+   follows="left|top"
+   height="27"
+   layout="topleft"
+   font.style="BOLD"
+   left="37"
+   name="upload_pbr"
+   top_pad="5"
+   width="370"
+   word_wrap="true"/>
+
   <text
    type="string"
    length="1"