diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 827234be6e7a6e2cce1901697598117018c253d6..21a3ddfd78118b08b35c088e6fcc3acf41203cb6 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -455,7 +455,13 @@ bool LLIMModel::logToFile(const LLUUID& session_id, const std::string& from, con
 {
 	if (gSavedPerAccountSettings.getBOOL("LogInstantMessages"))
 	{
-		LLLogChat::saveHistory(LLIMModel::getInstance()->getName(session_id), from, from_id, utf8_text);
+		std::string name = LLIMModel::getInstance()->getName(session_id);
+		if (name == LLStringUtil::null)
+		{
+			name = from;
+		}
+
+		LLLogChat::saveHistory(name, from, from_id, utf8_text);
 		return true;
 	}
 	else
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 79b0acad69a21c50a0046ac05f0ecc7a08dd0ca0..5cc0b033a2f0ea3af5d2fe79ff6fb4c3f1d7df94 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -200,17 +200,17 @@ class LLIMModel :  public LLSingleton<LLIMModel>
 
 	void testMessages();
 
+	/**
+	 * Save an IM message into a file
+	 */
+	bool logToFile(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, const std::string& utf8_text);
+
 private:
 	
 	/**
 	 * Add message to a list of message associated with session specified by session_id
 	 */
 	bool addToHistory(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, const std::string& utf8_text); 
-
-	/**
-	 * Save an IM message into a file
-	 */
-	bool logToFile(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, const std::string& utf8_text);
 };
 
 class LLIMSessionObserver
diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index 112d82956312e6c435c322ec33e8fe180614485c..a30f896fa26f9a205c6ce07a0baf047e89cd5acf 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -71,29 +71,23 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification)
 		LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(session_id);
 		if (session == NULL)
 		{
-			session_id = LLIMMgr::instance().addSession(name,
-					IM_NOTHING_SPECIAL, from_id);
-			session = LLIMModel::instance().findIMSession(session_id);
+			LLIMModel::instance().logToFile(session_id, name, from_id,
+					notification->getMessage());
 		}
-
-		if (session == NULL)
+		else
 		{
-			llerrs << "session " << session_id << "does not exist " << llendl;
-			return;
-		}
+			// store active session id
+			const LLUUID & active_session_id =
+					LLIMModel::instance().getActiveSessionID();
 
+			// set searched session as active to avoid IM toast popup
+			LLIMModel::instance().setActiveSessionID(session->mSessionID);
 
-		// store active session id
-		const LLUUID & active_session_id =
-				LLIMModel::instance().getActiveSessionID();
+			LLIMModel::instance().addMessage(session->mSessionID, name, from_id,
+					notification->getMessage());
 
-		// set created session as active to avoid IM toast popup
-		LLIMModel::instance().setActiveSessionID(session->mSessionID);
-
-		LLIMModel::instance().addMessage(session->mSessionID, name, from_id,
-				notification->getMessage());
-
-		// restore active session id
-		LLIMModel::instance().setActiveSessionID(active_session_id);
+			// restore active session id
+			LLIMModel::instance().setActiveSessionID(active_session_id);
+		}
 	}
 }