diff --git a/product/ERP5Workflow/Document/Workflow.py b/product/ERP5Workflow/Document/Workflow.py
index d1373dc45ef29b03cb55b98f6407cedc854cca16..06e8ab811314894a08b6847965131a2b6e00c67c 100644
--- a/product/ERP5Workflow/Document/Workflow.py
+++ b/product/ERP5Workflow/Document/Workflow.py
@@ -62,13 +62,8 @@ from Products.ERP5Workflow.Document.Transition import TRIGGER_AUTOMATIC,\
 from tempfile import mktemp
 from types import StringTypes
 from xml.sax.saxutils import escape, unescape
-from xml_marshaller.xml_marshaller import Marshaller
 from zLOG import LOG, INFO, WARNING
 
-MARSHALLER_NAMESPACE_URI = 'http://www.erp5.org/namespaces/marshaller'
-marshaller = Marshaller(namespace_uri=MARSHALLER_NAMESPACE_URI,
-                                                            as_tree=True).dumps
-
 class Workflow(IdAsReferenceMixin("workflow_", "prefix"), XMLObject):
   """
   A ERP5 Workflow.
@@ -756,56 +751,22 @@ class Workflow(IdAsReferenceMixin("workflow_", "prefix"), XMLObject):
         if prop_id == 'permissions':
           value = tuple(self.getProperty('workflow_managed_permission_list'))
           prop_type = self.getPropertyType('workflow_managed_permission_list')
-          sub_object = SubElement(workflow, prop_id, attrib=dict(type=prop_type))
         elif prop_id == 'initial_state':
           if self.getSourceValue() is not None:
             value = self.getSourceValue().getReference()
           else:
             value = ''
-          sub_object = SubElement(workflow, prop_id, attrib=dict(type='string'))
+          prop_type = 'string'
         elif prop_id =='state_var':
           value = self.getProperty('state_variable')
-          sub_object = SubElement(workflow, prop_id, attrib=dict(type='string'))
+          prop_type = self.getPropertyType('state_variable')
         else:
           value = self.getProperty(prop_id)
-          if value is None:
-            # not registered if not defined.
-            continue
-          else:
-            prop_type = self.getPropertyType(prop_id)
-          sub_object = SubElement(workflow, prop_id, attrib=dict(type=prop_type))
-        if prop_type in ('object',):
-          # We may have very long lines, so we should split
-          value = aq_base(value)
-          value = dumps(value)
-          sub_object.text = standard_b64encode(value)
-        elif prop_type in ('data',):
-          # Create blocks to represent data
-          # <data><block>ZERD</block><block>OEJJM</block></data>
-          size_block = 60
-          if isinstance(value, str):
-            for index in xrange(0, len(value), size_block):
-              content = value[index:index + size_block]
-              data_encoded = standard_b64encode(content)
-              block = SubElement(sub_object, 'block_data')
-              block.text = data_encoded
-          else:
-            raise ValueError("XMLExportImport failed, the data is undefined")
-        elif prop_type in ('lines', 'tokens',):
-          if prop_id == 'initial_state':
-            if self.getSourceValue():
-              sub_object.text = self.getSourceValue().getReference()
-          else:
-            value = [word.decode('utf-8').encode('ascii','xmlcharrefreplace')\
-                for word in value]
-            sub_object.append(marshaller(value))
-        elif prop_type in ('text', 'string',):
-          if type(value) in (tuple, list, dict):
-            sub_object.text = str(value)
-          else:
-            sub_object.text = unicode(escape(value), 'utf-8')
-        elif prop_type != 'None':
-          sub_object.text = str(value)
+          prop_type = self.getPropertyType(prop_id)
+        if value is None or value ==() or value == ():
+          value = ''
+        sub_object = SubElement(workflow, prop_id, attrib=dict(type=prop_type))
+        sub_object.text = str(value)
 
     # 1. State as XML
     state_reference_list = []
@@ -823,55 +784,21 @@ class Workflow(IdAsReferenceMixin("workflow_", "prefix"), XMLObject):
         if property_id == 'permission_roles':
           property_value = sdef.getProperty('state_permission_roles')
           property_type = sdef.getPropertyType('state_permission_roles')
-          sub_object = SubElement(state, property_id, attrib=dict(type='string'))
         elif property_id == 'transitions':
-          property_value = sdef.getDestinationValueList()
-          property_type = sdef.getPropertyType('categories_list')
-          sub_object = SubElement(state, property_id, attrib=dict(type='multiple selection'))
+          property_value = sdef.getDestinationIdList()
+          destination_list = []
+          for tr_id in property_value:
+            destination_list.append(self._getOb(tr_id).getReference())
+          property_value = destination_list
+          property_type = 'multiple selection'
         else:
           property_value = sdef.getProperty(property_id)
-          if property_value is None:
-            # do not register if not defined.
-            continue
-          else:
-            property_type = sdef.getPropertyType(property_id)
-          sub_object = SubElement(state, property_id, attrib=dict(type=property_type))
-
-        if property_type in ('object',):
-          # We may have very long lines, so we should split
-          property_value = aq_base(property_value)
-          property_value = dumps(property_value)
-          sub_object.text = standard_b64encode(property_value)
-        elif property_type in ('data',):
-          # Create blocks to represent data
-          # <data><block>ZERD</block><block>OEJJM</block></data>
-          size_block = 60
-          if isinstance(property_value, str):
-            for index in xrange(0, len(property_value), size_block):
-              content = property_value[index:index + size_block]
-              data_encoded = standard_b64encode(content)
-              block = SubElement(sub_object, 'block_data')
-              block.text = data_encoded
-          else:
-            raise ValueError("XMLExportImport failed, the data is undefined")
-        elif property_type in ('lines', 'tokens',):
-          if property_id == 'transitions':
-            value_list = property_value
-            value_reference_list = []
-            for value in value_list:
-              value_reference_list.append(value.getReference())
-            sub_object.text = str(tuple(value_reference_list))
-          else:
-            property_value = [word.decode('utf-8').encode('ascii','xmlcharrefreplace')\
-                for word in property_value]
-            sub_object.append(marshaller(property_value))
-        elif property_type in ('text', 'string',):
-          if type(property_value) in (tuple, list, dict):
-            sub_object.text = str(property_value)
-          else:
-            sub_object.text = unicode(escape(property_value), 'utf-8')
-        elif property_type != 'None':
-          sub_object.text = str(property_value)
+          property_type = sdef.getPropertyType(property_id)
+
+        if property_value is None or property_value ==() or property_value == []:
+          property_value = ''
+        sub_object = SubElement(state, property_id, attrib=dict(type=property_type))
+        sub_object.text = str(property_value)
 
     # 2. Transition as XML
     transition_reference_list = []
@@ -891,28 +818,7 @@ class Workflow(IdAsReferenceMixin("workflow_", "prefix"), XMLObject):
             portal_type=tdef.getPortalType()))
       guard = SubElement(transition, 'guard', attrib=dict(type='object'))
       for property_id in sorted(transition_prop_id_to_show):
-        if property_id == 'new_state_id':
-          if tdef.getDestinationValue() is not None:
-            property_value = tdef.getDestinationValue().getReference()
-          else:
-            property_value = ''
-          sub_object = SubElement(transition, property_id, attrib=dict(type='string'))
-        elif property_id == 'script_name':
-          property_value = tdef.getBeforeScriptIdList()
-          if property_value == [] or property_value is None:
-            property_value = ''
-          else:
-            property_value = self._getOb(tdef.getBeforeScriptIdList()[0]).getReference()
-          sub_object = SubElement(transition, property_id, attrib=dict(type='string'))
-        elif property_id == 'after_script_name':
-          property_value = tdef.getAfterScriptIdList()
-          if property_value == [] or property_value is None:
-            property_value = ''
-          else:
-            property_value = self._getOb(tdef.getAfterScriptIdList()[0]).getReference()
-          sub_object = SubElement(transition, property_id, attrib=dict(type='string'))
-        # show guard configuration:
-        elif property_id in ('roles', 'groups', 'permissions', 'expr',):
+        if property_id in ('roles', 'groups', 'permissions', 'expr',):
           if property_id == 'roles':
             property_value = tdef.getRoleList()
           if property_id == 'groups':
@@ -925,12 +831,32 @@ class Workflow(IdAsReferenceMixin("workflow_", "prefix"), XMLObject):
             property_value = ''
           sub_object = SubElement(guard, property_id, attrib=dict(type='guard configuration'))
         else:
-          property_value = tdef.getProperty(property_id)
-          if property_value is None:
-            property_value = ''
+          if property_id == 'new_state_id':
+            if tdef.getDestinationValue() is not None:
+              property_value = tdef.getDestinationValue().getReference()
+            else:
+              property_value = ''
+            sub_object = SubElement(transition, property_id, attrib=dict(type='string'))
+          elif property_id == 'script_name':
+            property_value = tdef.getBeforeScriptIdList()
+            if property_value == [] or property_value is None:
+              property_value = ''
+            else:
+              property_value = self._getOb(tdef.getBeforeScriptIdList()[0]).getReference()
+            sub_object = SubElement(transition, property_id, attrib=dict(type='string'))
+          elif property_id == 'after_script_name':
+            property_value = tdef.getAfterScriptIdList()
+            if property_value == [] or property_value is None:
+              property_value = ''
+            else:
+              property_value = self._getOb(tdef.getAfterScriptIdList()[0]).getReference()
+            sub_object = SubElement(transition, property_id, attrib=dict(type='string'))
           else:
+            property_value = tdef.getProperty(property_id)
             property_type = tdef.getPropertyType(property_id)
-          sub_object = SubElement(transition, property_id, attrib=dict(type=property_type))
+            sub_object = SubElement(transition, property_id, attrib=dict(type=property_type))
+        if property_value is None or property_value ==() or property_value == []:
+          property_value = ''
         sub_object.text = str(property_value)
 
     # 3. Variable as XML
@@ -953,15 +879,13 @@ class Workflow(IdAsReferenceMixin("workflow_", "prefix"), XMLObject):
           property_value = vdef.getInitialValue()
           if vdef.getInitialValue() is not None:
             property_value = vdef.getInitialValue()
-          else:
-            property_value = ''
           sub_object = SubElement(variable, property_id, attrib=dict(type='string'))
         else:
           property_value = vdef.getProperty(property_id)
-          if property_value is None:
-            property_value = ''
           property_type = vdef.getPropertyType(property_id)
           sub_object = SubElement(variable, property_id, attrib=dict(type=property_type))
+        if property_value is None or property_value ==() or property_value == []:
+          property_value = ''
         sub_object.text = str(property_value)
 
     # 4. Worklist as XML
@@ -990,8 +914,6 @@ class Workflow(IdAsReferenceMixin("workflow_", "prefix"), XMLObject):
             property_value = qdef.getPermissionList()
           if property_id == 'expr':
             property_value = qdef.getExpression()
-          if property_value is None or property_value == []:
-            property_value = ''
           sub_object = SubElement(guard, property_id, attrib=dict(type='guard configuration'))
         else:
           property_value = qdef.getProperty(property_id)
@@ -1004,16 +926,16 @@ class Workflow(IdAsReferenceMixin("workflow_", "prefix"), XMLObject):
             property_value = tuple(state_ref_list)
           if property_id == 'matched_portal_type_list':
             property_value = tuple(property_value)
-          if property_value is None:
-            property_value = ''
           property_type = qdef.getPropertyType(property_id)
           sub_object = SubElement(worklist, property_id, attrib=dict(type=property_type))
+        if property_value is None or property_value ==() or property_value == []:
+          property_value = ''
         sub_object.text = str(property_value)
 
     # 5. Script as XML
     script_reference_list = []
     script_list = self.objectValues(portal_type='Workflow Script')
-    script_prop_id_to_show = sorted(['title', 'body', 'parameter_signature'])
+    script_prop_id_to_show = sorted(['body', 'parameter_signature'])
     for sdef in script_list:
       script_reference_list.append(sdef.getReference())
     scripts = SubElement(workflow, 'scripts', attrib=dict(script_list=str(script_reference_list),