diff --git a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
index 7edb43eda2..2e6faa08a1 100644
--- a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
@@ -57,6 +57,15 @@ namespace OpenSim.Region.Framework.Interfaces
         /// Link number for the part
         void ResetInventoryIDs();
 
+        /// 
+        /// Reset parent object UUID for all the items in the prim's inventory.
+        /// 
+        /// 
+        /// If this method is called and there are inventory items, then we regard the inventory as having changed.
+        /// 
+        /// Link number for the part
+        void ResetObjectID();
+
         /// 
         /// Change every item in this inventory to a new owner.
         /// 
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 024bdc97bf..95cd26f17e 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -500,7 +500,7 @@ namespace OpenSim.Region.Framework.Scenes
                 
                 // This is necessary so that TaskInventoryItem parent ids correctly reference the new uuid of this part
                 if (Inventory != null)
-                    Inventory.ResetInventoryIDs();
+                    Inventory.ResetObjectID();
             }
         }
 
@@ -2763,6 +2763,7 @@ namespace OpenSim.Region.Framework.Scenes
             UUID = UUID.Random();
             LinkNum = linkNum;
             LocalId = 0;
+			Inventory.ResetInventoryIDs();
         }
 
         /// 
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 53ddb5de27..fbaa7d4872 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -140,6 +140,34 @@ namespace OpenSim.Region.Framework.Scenes
             }
         }
 
+        public void ResetObjectID()
+        {
+            m_items.LockItemsForWrite(true);
+
+            if (Items.Count == 0)
+            {
+                m_items.LockItemsForWrite(false);
+                return;
+            }
+
+            HasInventoryChanged = true;
+            if (m_part.ParentGroup != null)
+            {
+                m_part.ParentGroup.HasGroupChanged = true;
+            }
+            
+            IList items = new List(Items.Values);
+            Items.Clear();
+
+            foreach (TaskInventoryItem item in items)
+            {
+                item.ParentPartID = m_part.UUID;
+                item.ParentID = m_part.UUID;
+                Items.Add(item.ItemID, item);
+            }
+            m_items.LockItemsForWrite(false);
+        }
+
         /// 
         /// Change every item in this inventory to a new owner.
         /// 
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 94d021d9df..e78f25b81f 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -1264,3 +1264,6 @@
     ;; default standalone, overridable in StandaloneCommon.ini
     StorageProvider = "OpenSim.Data.Null.dll:NullRegionData"
 
+[Modules]
+    Include-modules = "addon-modules/*/config/*.ini"
+