diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp
index 5d2c48a1b4646fe8ea8db6f3788b6ee9fdd52847..da2f69126a63b89160cd04c3460d2f4b91373444 100755
--- a/indra/newview/llaisapi.cpp
+++ b/indra/newview/llaisapi.cpp
@@ -400,7 +400,7 @@ void AISAPI::InvokeAISCommandCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t ht
 
     gInventory.onAISUpdateReceived("AISCommand", result);
 
-    if (callback)
+    if (callback && !callback.empty())
     {   
         LLUUID id(LLUUID::null);
 
diff --git a/indra/newview/llaisapi.h b/indra/newview/llaisapi.h
index cc6bda3c7f7f19946e55710c7728fade3744acda..2de8003c2fa8223feece636259ea564bedd33e32 100755
--- a/indra/newview/llaisapi.h
+++ b/indra/newview/llaisapi.h
@@ -46,14 +46,14 @@ class AISAPI
     static bool isAvailable();
     static void getCapNames(LLSD& capNames);
 
-    static void CreateInventory(const LLUUID& parentId, const LLSD& newInventory, completion_t callback);
-    static void SlamFolder(const LLUUID& folderId, const LLSD& newInventory, completion_t callback);
-    static void RemoveCategory(const LLUUID &categoryId, completion_t callback);
-    static void RemoveItem(const LLUUID &itemId, completion_t callback);
-    static void PurgeDescendents(const LLUUID &categoryId, completion_t callback);
-    static void UpdateCategory(const LLUUID &categoryId, const LLSD &updates, completion_t callback);
-    static void UpdateItem(const LLUUID &itemId, const LLSD &updates, completion_t callback);
-    static void CopyLibraryCategory(const LLUUID& sourceId, const LLUUID& destId, bool copySubfolders, completion_t callback);
+    static void CreateInventory(const LLUUID& parentId, const LLSD& newInventory, completion_t callback = completion_t());
+    static void SlamFolder(const LLUUID& folderId, const LLSD& newInventory, completion_t callback = completion_t());
+    static void RemoveCategory(const LLUUID &categoryId, completion_t callback = completion_t());
+    static void RemoveItem(const LLUUID &itemId, completion_t callback = completion_t());
+    static void PurgeDescendents(const LLUUID &categoryId, completion_t callback = completion_t());
+    static void UpdateCategory(const LLUUID &categoryId, const LLSD &updates, completion_t callback = completion_t());
+    static void UpdateItem(const LLUUID &itemId, const LLSD &updates, completion_t callback = completion_t());
+    static void CopyLibraryCategory(const LLUUID& sourceId, const LLUUID& destId, bool copySubfolders, completion_t callback = completion_t());
 
 private:
     typedef enum {
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index ac19d84a5e565288c0b7790d57d3ece2adb67739..573791aca397858854125f7273b17298f63fd8f2 100755
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -1294,7 +1294,7 @@ void link_inventory_array(const LLUUID& category,
 	{
 		LLSD new_inventory = LLSD::emptyMap();
 		new_inventory["links"] = links;
-        AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+        AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
         AISAPI::CreateInventory(category, new_inventory, cr);
 	}
     else
@@ -1368,7 +1368,7 @@ void update_inventory_item(
 			updates.erase("shadow_id");
 			updates["hash_id"] = update_item->getTransactionID();
 		}
-        AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+        AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
         AISAPI::UpdateItem(item_id, updates, cr);
 	}
     else
@@ -1409,7 +1409,7 @@ void update_inventory_item(
 {
     if (AISAPI::isAvailable())
 	{
-        AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+        AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
         AISAPI::UpdateItem(item_id, updates, cr);
 	}
     else
@@ -1465,7 +1465,7 @@ void update_inventory_category(
         if (AISAPI::isAvailable())
 		{
 			LLSD new_llsd = new_cat->asLLSD();
-            AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+            AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
             AISAPI::UpdateCategory(cat_id, new_llsd, cr);
 		}
 		else // no cap
@@ -1530,7 +1530,7 @@ void remove_inventory_item(
 		LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << obj->getName() << LL_ENDL;
         if (AISAPI::isAvailable())
 		{
-            AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+            AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
             AISAPI::RemoveItem(item_id, cr);
 
 			if (immediate_delete)
@@ -1606,7 +1606,7 @@ void remove_inventory_category(
 		}
         if (AISAPI::isAvailable())
 		{
-            AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+            AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
             AISAPI::RemoveCategory(cat_id, cr);
 		}
 		else // no cap
@@ -1709,7 +1709,7 @@ void purge_descendents_of(const LLUUID& id, LLPointer<LLInventoryCallback> cb)
 		{
             if (AISAPI::isAvailable())
 			{
-                AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+                AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
                 AISAPI::PurgeDescendents(id, cr);
 			}
 			else // no cap
@@ -1862,7 +1862,7 @@ void slam_inventory_folder(const LLUUID& folder_id,
 		LL_DEBUGS(LOG_INV) << "using AISv3 to slam folder, id " << folder_id
 						   << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL;
 
-        AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+        AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
         AISAPI::SlamFolder(folder_id, contents, cr);
 	}
 	else // no cap