diff --git a/indra/llinventory/llpermissions.h b/indra/llinventory/llpermissions.h
index 32fae844fbf0a336afbe62a49186ddd98033d283..27252f7b97da395caadc7f55687880369995728d 100644
--- a/indra/llinventory/llpermissions.h
+++ b/indra/llinventory/llpermissions.h
@@ -251,9 +251,7 @@ class LLPermissions
 	BOOL setNextOwnerBits(const LLUUID& agent, const LLUUID& group, BOOL set, PermissionMask bits);
 	
 	// This is currently only used in the Viewer to handle calling cards
-	// where the creator is actually used to store the target.
-	// It is also used for saving a GLTF material on a prim.
-	// Use with care.
+	// where the creator is actually used to store the target. Use with care.
 	void setCreator(const LLUUID& creator) { mCreator = creator; }
 	
 	//
diff --git a/indra/newview/llmaterialeditor.cpp b/indra/newview/llmaterialeditor.cpp
index 41df58914bf09ad3c68381f6adc80e5ea5d4b61c..92042ad49f155ea41ba1414ba40d9c0f19440e9f 100644
--- a/indra/newview/llmaterialeditor.cpp
+++ b/indra/newview/llmaterialeditor.cpp
@@ -1836,6 +1836,10 @@ bool can_use_objects_material(LLSelectedTEGetMatData& func, const std::vector<Pe
         llassert(LLSelectMgr::getInstance()->getSelection()->getFirstObject());
         return false;
     }
+    if (selected_object->isInventoryPending())
+    {
+        return false;
+    }
     for (PermissionBit op : ops)
     {
         if (op == PERM_MODIFY && selected_object->isPermanentEnforced())
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index 21651899dbd0d39f87e10c5eb9d803da9b09ac7f..8f09136ccfd73967f210152e99a30f5a11b729bf 100644
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -1897,11 +1897,10 @@ void LLPanelFace::updateUIGLTF(LLViewerObject* objectp, bool& has_pbr_material,
         pbr_ctrl->setImageAssetID(pbr_id);
     }
 
-    const bool inventory_pending = objectp->isInventoryPending();
     getChildView("pbr_from_inventory")->setEnabled(settable);
-    getChildView("edit_selected_pbr")->setEnabled(editable && !inventory_pending && !has_faces_without_pbr);
-    getChildView("save_selected_pbr")->setEnabled(saveable && !inventory_pending && identical_pbr);
-    if (inventory_pending)
+    getChildView("edit_selected_pbr")->setEnabled(editable && !has_faces_without_pbr);
+    getChildView("save_selected_pbr")->setEnabled(saveable && identical_pbr);
+    if (objectp->isInventoryPending())
     {
         // Reuse the same listener when possible
         if (!mInventoryListener || !mInventoryListener->isListeningFor(objectp))
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 23a6634154a56d97b8ef3c49879e8b234a44b142..afcdb26f1a4d50f30c1c6dae7627b4b784a3e76a 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -1012,8 +1012,12 @@ BOOL LLToolDragAndDrop::handleDropMaterialProtections(LLViewerObject* hit_obj,
 		{
 			hit_obj->updateInventory(new_item, TASK_INVENTORY_ITEM_KEY, true);
 		}
- 		// TODO: Check to see if adding the item was successful; if not, then
-		// we should return false here.
+		// Force the object to update and refetch its inventory so it has this asset.
+		hit_obj->dirtyInventory();
+		hit_obj->requestInventory();
+		// TODO: Check to see if adding the item was successful; if not, then
+		// we should return false here. This will requre a separate listener
+		// since without listener, we have no way to receive update
 	}
 	else if (!item->getPermissions().allowOperationBy(PERM_TRANSFER,
 													 gAgent.getID()))