diff --git a/sflphone-common/src/sip/im/InstantMessaging.cpp b/sflphone-common/src/sip/im/InstantMessaging.cpp
index 1c3cecdeea5afa8165f9e485dca22a04c971452c..77acec0fa092709a2ed5396efe870320a92ed4b6 100644
--- a/sflphone-common/src/sip/im/InstantMessaging.cpp
+++ b/sflphone-common/src/sip/im/InstantMessaging.cpp
@@ -20,6 +20,8 @@ static void XMLCALL startElementCallback (void *userData, const char *name, cons
 
     const char **att;
 
+    // _debug ("InstantMessaging: StartElement Callback: %s", name);
+
     if (strcmp (name, "entry") == 0) {
 
         sfl::InstantMessaging::UriList *list = static_cast<sfl::InstantMessaging::UriList *> (userData);
@@ -28,10 +30,13 @@ static void XMLCALL startElementCallback (void *userData, const char *name, cons
         for (att = atts; *att; att += 2) {
 
             const char **val = att+1;
+
             duplicateString (attribute, *att, strlen (*att));
             duplicateString (value, *val, strlen (*val));
 
-            entry->insert (std::pair<std::string, std::string> (attribute, value));
+            // _debug ("InstantMessaging: attribute: %s, value: %s", attribute, value);
+
+            entry->insert (std::pair<std::string, std::string> (std::string (attribute), std::string (value)));
         }
 
         list->push_back (entry);
diff --git a/sflphone-common/src/sip/im/InstantMessaging.h b/sflphone-common/src/sip/im/InstantMessaging.h
index d7e8c494ff552e0050fdec27017ba4f0261e1ba1..13e9bde7b5d11d6fd7c0bb4834a14a3fb85a71b8 100644
--- a/sflphone-common/src/sip/im/InstantMessaging.h
+++ b/sflphone-common/src/sip/im/InstantMessaging.h
@@ -28,7 +28,7 @@
 namespace sfl
 {
 
-const std::string IM_XML_URI ("IM_XML_URI");
+const std::string IM_XML_URI ("uri");
 const std::string BOUNDARY ("--boundary");
 
 class InstantMessaging
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index f226ccae190a22f53807d50590d33c48db2d2dda..90537b9608e2da7327e02c55625c6e6617cdf871 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -3481,23 +3481,26 @@ void call_on_tsx_changed (pjsip_inv_session *inv UNUSED, pjsip_transaction *tsx,
             // retreive the recipient-list of this message
             std::string urilist = imModule->findTextUriList (formatedMessage);
 
-            _debug ("---------------- XML -----------\n%s", urilist.c_str());
-
             // parse the recipient list xml
-            InstantMessaging::UriList list = imModule->parseXmlUriList (formatedMessage);
+            InstantMessaging::UriList list = imModule->parseXmlUriList (urilist);
 
             // If no item present in the list, peer is considered as the sender
-            if (list.empty())
+            if (list.empty()) {
+                _debug ("------------ List is empty!!!!!!!");
                 from = call->getPeerNumber ();
-            else {
+            } else {
+                _debug ("------------ List not empty!!!!!!!");
                 // InstaintMessaging::UriEntry *entry = static_cast<InstantMessaging::UriEntry *>(*iterItem);
                 // InstantMessaging::UriEntry::iterator iterAttr = entry->find(IM_XML_URI);
                 InstantMessaging::UriEntry *entry = list.front();
                 InstantMessaging::UriEntry::iterator iterAttr = entry->find (IM_XML_URI);
 
+                _debug ("------------ iterAttr->second %s", iterAttr->second.c_str());
                 from = iterAttr->second;
+                // from = call->getPeerNumber ();
             }
 
+            _debug ("------------------ from: %s", from.c_str());
 
             // Pass through the instant messaging module if needed
             // Right now, it does do anything.
diff --git a/sflphone-common/test/instantmessagingtest.cpp b/sflphone-common/test/instantmessagingtest.cpp
index d14bc773a9f5dc79df7a3dc2b31f27060bde3da8..1e8acf56efef5e9f55dc39f0c77650501c3aed42 100644
--- a/sflphone-common/test/instantmessagingtest.cpp
+++ b/sflphone-common/test/instantmessagingtest.cpp
@@ -253,14 +253,12 @@ void InstantMessagingTest::testXmlUriListParsing ()
     while (iterEntry != list.end()) {
         sfl::InstantMessaging::UriEntry *entry = static_cast<sfl::InstantMessaging::UriEntry *> (*iterEntry);
         iterAttr = entry->find (sfl::IM_XML_URI);
-	
-/*	
+		
         if((iterAttr->second == std::string("sip:alex@example.com")) ||
            (iterAttr->second == std::string("sip:manu@example.com")))
 	    CPPUNIT_ASSERT(1==1);
 	else
 	    CPPUNIT_ASSERT(0==1);
-	*/
         iterEntry++;
     }
 }
@@ -311,6 +309,23 @@ void InstantMessagingTest::testGetUriListArea ()
     CPPUNIT_ASSERT(urilist.compare("<?xml version=\"1.0\" encoding=\"UTF-8\"?><resource-lists xmlns=\"urn:ietf:params:xml:ns:resource-lists\" xmlns:cp=\"urn:ietf:params:xml:ns:copycontrol\"><list><entry uri=\"sip:alex@example.com\" cp:copyControl=\"to\" /><entry uri=\"sip:manu@example.com\" cp:copyControl=\"to\" /></list></resource-lists>") == 0);
 
     std::cout << "urilist: " << urilist << std::endl;
+
+    sfl::InstantMessaging::UriList list = _im->parseXmlUriList(urilist);
+    CPPUNIT_ASSERT(list.size() == 2);
+
+    // order may be important, for example to identify message sender
+    sfl::InstantMessaging::UriEntry *entry = list.front();
+    CPPUNIT_ASSERT(entry->size() == 2);
+
+    sfl::InstantMessaging::UriEntry::iterator iterAttr = entry->find (sfl::IM_XML_URI);
+
+    if(iterAttr == entry->end()) {
+	std::cout << "Error, did not found attribute" << std::endl;
+	CPPUNIT_ASSERT(0==1);
+    }
+
+    std::string from = iterAttr->second;
+    CPPUNIT_ASSERT(from == "sip:alex@example.com");
 }