diff --git a/product/ERP5Type/XMLExportImport.py b/product/ERP5Type/XMLExportImport.py
index f57410ed6f08e4806a31b006740a5ef7b4cfc027..de38fb29a066e7841dc7ac565b8bc4bc094b468e 100644
--- a/product/ERP5Type/XMLExportImport.py
+++ b/product/ERP5Type/XMLExportImport.py
@@ -131,7 +131,13 @@ def Base_asXML(object, root=None):
   for user_role in self.get_local_roles():
     local_role_node = SubElement(object, 'local_role',
                                  attrib=dict(id=user_role[0], type='tokens'))
-    local_role_node.text = etree.CDATA(marshaler(user_role[1]))
+    #convert local_roles in string because marshaler can't do it
+    role_list = []
+    for role in user_role[1]:
+      if isinstance(role, unicode):
+        role = role.encode('utf-8')
+      role_list.append(role)
+    local_role_node.text = etree.CDATA(marshaler(tuple(role_list)))
   if getattr(self, 'get_local_permissions', None) is not None:
     for user_permission in self.get_local_permissions():
       local_permission_node = SubElement(object, 'local_permission',