diff --git a/sflphone-common/src/sip/im/InstantMessaging.cpp b/sflphone-common/src/sip/im/InstantMessaging.cpp
index 2bab2afbad14c82f04057e2349bf3309a7b9c37c..4d78b7aed7ba15aa83255161007b327a2627b078 100644
--- a/sflphone-common/src/sip/im/InstantMessaging.cpp
+++ b/sflphone-common/src/sip/im/InstantMessaging.cpp
@@ -224,11 +224,27 @@ std::vector<std::string> InstantMessaging::split_message (const std::string& tex
 
 std::string InstantMessaging::generateXmlUriList (UriList& list)
 {
+
     std::string xmlbuffer = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
     xmlbuffer.append ("<resource-lists xmlns=\"urn:ietf:params:xml:ns:resource-lists\" xmlns:cp=\"urn:ietf:params:xml:ns:copycontrol\">");
     xmlbuffer.append ("<list>");
-    xmlbuffer.append ("<entry uri=\"sip:al@example.com\" cp:copyControl=\"to\" />");
-    xmlbuffer.append ("<entry uri=\"sip:manu@example.com\" cp:copyControl=\"to\" />");
+
+    // An iterator over xml attribute
+    UriEntry::iterator iterAttr;
+
+    // An iterator over list entries
+    UriList::iterator iterEntry = list.begin();
+
+    while (iterEntry != list.end()) {
+        xmlbuffer.append ("<entry uri=");
+        UriEntry entry = static_cast<UriEntry> (*iterEntry);
+        iterAttr = entry.find (sfl::IM_XML_URI);
+        xmlbuffer.append (iterAttr->second);
+        xmlbuffer.append (" cp:copyControl=\"to\" />");
+
+        iterEntry++;
+    }
+
     xmlbuffer.append ("</list>");
     xmlbuffer.append ("</resource-lists>");
 
diff --git a/sflphone-common/src/sip/im/InstantMessaging.h b/sflphone-common/src/sip/im/InstantMessaging.h
index e9699e1af3f882c88aeaa52b5b77bea7ab11497a..5bbe7bbfcc339926351919e4e009927206f6bb27 100644
--- a/sflphone-common/src/sip/im/InstantMessaging.h
+++ b/sflphone-common/src/sip/im/InstantMessaging.h
@@ -13,6 +13,7 @@
 #include "sip/sipcall.h"
 
 #include <map>
+#include <list>
 
 #define EMPTY_MESSAGE   pj_str((char*)"")
 #define STR_TEXT        pj_str((char*)"text")
@@ -27,13 +28,15 @@
 namespace sfl
 {
 
+const std::string IM_XML_URI ("IM_XML_URI");
+
 class InstantMessaging
 {
 
     public:
 
-	typedef std::map <std::string, std::string> UriEntry;
-        typedef std::map <std::string, UriEntry> UriList;
+        typedef std::map <std::string, std::string> UriEntry;
+        typedef std::list <UriEntry> UriList;
 
         /*
          * Class constructor
@@ -125,21 +128,21 @@ class InstantMessaging
         /**
          * Generate Xml participant list for multi recipient based on RFC Draft 5365
          *
-	 * @param A UriList of UriEntry
-	 *
-	 * @return A string containing the full XML formated information to be included in the
-	 *         sip instant message. 
-	 */
-        std::string generateXmlUriList(UriList& list);
-
-	/**
-	 * Parse the Urilist from a SIP Instant Message provided by a UriList service.
-	 *
-	 * @param A XML formated string as obtained from a SIP instant message.
-	 *
-	 * @return An UriList of UriEntry containing parsed XML information as a map.
-	 */
-	UriList parseXmlUriList(std::string& urilist);
+        * @param A UriList of UriEntry
+        *
+        * @return A string containing the full XML formated information to be included in the
+        *         sip instant message.
+        */
+        std::string generateXmlUriList (UriList& list);
+
+        /**
+         * Parse the Urilist from a SIP Instant Message provided by a UriList service.
+         *
+         * @param A XML formated string as obtained from a SIP instant message.
+         *
+         * @return An UriList of UriEntry containing parsed XML information as a map.
+         */
+        UriList parseXmlUriList (std::string& urilist);
 
     private:
 
diff --git a/sflphone-common/test/instantmessagingtest.cpp b/sflphone-common/test/instantmessagingtest.cpp
index a215f83492ee01608251e57349cea5bea8bd71a7..fc2b0e0871ee8f542cfe8d4d674469f9b2b95907 100644
--- a/sflphone-common/test/instantmessagingtest.cpp
+++ b/sflphone-common/test/instantmessagingtest.cpp
@@ -143,7 +143,7 @@ void InstantMessagingTest::testSplitMessage ()
     CPPUNIT_ASSERT (messages[size- 1] == very_long_message.substr (maxSize * (size-1)));
 }
 
-static inline char* dupstr(char dst[], const char src[], size_t len)
+static inline char* duplicateString(char dst[], const char src[], size_t len)
 {
     memcpy(dst, src, len);
     dst[len] = 0;
@@ -166,11 +166,19 @@ static void XMLCALL startElementCallback(void *userData, const char *name, const
 
 	const char **val = att+1;
 
-	dupstr(attribute, *att, strlen(*att));
+	duplicateString(attribute, *att, strlen(*att));
 	std::cout << "att: " << attribute << std::endl;
 	
-	dupstr(value, *val, strlen(*val));
+	duplicateString(value, *val, strlen(*val));
 	std::cout << "val: " << value << std::endl;
+
+	if (strcmp(attribute, "uri") == 0) {
+	    if((strcmp(value, "sip:alex@example.com") == 0) ||
+	       (strcmp(value, "sip:manu@example.com") == 0))
+		CPPUNIT_ASSERT(1==1);
+	    else
+		CPPUNIT_ASSERT(0==1);
+	}
     }
 
     *nbEntry += 1;
@@ -189,9 +197,20 @@ void InstantMessagingTest::testGenerateXmlUriList ()
 
     sfl::InstantMessaging::UriList list;
 
+    sfl::InstantMessaging::UriEntry entry1;
+    entry1[sfl::IM_XML_URI] = "\"sip:alex@example.com\"";
+
+    sfl::InstantMessaging::UriEntry entry2;
+    entry2[sfl::IM_XML_URI] = "\"sip:manu@example.com\"";
+
+    list.push_front(entry1);
+    list.push_front(entry2);
+
     std::string buffer = _im->generateXmlUriList(list);
     CPPUNIT_ASSERT(buffer.size() != 0);
 
+    std::cout << buffer << std::endl;
+
     XML_Parser parser = XML_ParserCreate(NULL);
     int nbEntry = 0;
     XML_SetUserData(parser, &nbEntry);