diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 54484a1dbb523821d12699e07a1fc2d47a5b1ad8..d6e069b3dcc1e574d316d9f085e9f445df907d22 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -1445,6 +1445,43 @@ static void give_inventory_cb(const LLSD& notification, const LLSD& response)
 	}
 }
 
+static void show_item_sharing_confirmation(const std::string name,
+										   LLViewerInventoryItem* inv_item,
+										   const LLSD& dest,
+										   const LLUUID& dest_agent,
+										   const LLUUID& session_id = LLUUID::null)
+{
+	if (!inv_item)
+	{
+		llassert(NULL != inv_item);
+		return;
+	}
+
+	LLSD substitutions;
+	substitutions["RESIDENTS"] = name;
+	substitutions["ITEMS"] = inv_item ? inv_item->getName() : LLStringUtil::null;
+	LLSD payload;
+	payload["agent_id"] = dest_agent;
+	payload["item_id"] = inv_item->getUUID();
+	payload["session_id"] = session_id;
+	payload["d&d_dest"] = dest.asString();
+	LLNotificationsUtil::add("ShareItemsConfirmation", substitutions, payload, &give_inventory_cb);
+}
+
+static void get_name_cb(const LLUUID& id,
+						const std::string& first_name,
+						const std::string& last_name,
+						LLViewerInventoryItem* inv_item,
+						const LLSD& dest,
+						const LLUUID& dest_agent)
+{
+	show_item_sharing_confirmation(first_name + " " + last_name,
+								   inv_item,
+								   dest,
+								   id,
+								   LLUUID::null);
+}
+
 // function used as drag-and-drop handler for simple agent give inventory requests
 //static
 bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_id, BOOL drop,
@@ -1477,20 +1514,28 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_
 			if (drop)
 			{
 				LLIMModel::LLIMSession * session = LLIMModel::instance().findIMSession(session_id);
+
+				// If no IM session found get the destination agent's name by id.
 				if (NULL == session)
 				{
-					llassert(NULL != session);
-					return false;
+					std::string fullname;
+
+					// If destination agent's name is found in cash proceed to showing the confirmation dialog.
+					// Otherwise set up a callback to show the dialog when the name arrives.
+					if (gCacheName->getFullName(dest_agent, fullname))
+					{
+						show_item_sharing_confirmation(fullname, inv_item, dest, dest_agent, LLUUID::null);
+					}
+					else
+					{
+						gCacheName->get(dest_agent, FALSE, boost::bind(&get_name_cb, _1, _2, _3, inv_item, dest, dest_agent));
+					}
+
+					return true;
 				}
-				LLSD substitutions;
-				substitutions["RESIDENTS"] = session->mName;
-				substitutions["ITEMS"] = inv_item->getName();
-				LLSD payload;
-				payload["agent_id"] = dest_agent;
-				payload["item_id"] = inv_item->getUUID();
-				payload["session_id"] = session_id;
-				payload["d&d_dest"] = dest.asString();
-				LLNotificationsUtil::add("ShareItemsConfirmation", substitutions, payload, &give_inventory_cb);
+
+				// If an IM session with destination agent is found item offer will be logged in this session.
+				show_item_sharing_confirmation(session->mName, inv_item, dest, dest_agent, session_id);
 			}
 		}
 		else