diff --git a/product/ERP5OOo/transforms/oood_commandtransform.py b/product/ERP5OOo/transforms/oood_commandtransform.py
index 528ac4ef8c3886a7ef4e48013d2d5ef0e6c6249d..6391a994587c8b81ec9cd45a123f4848dc04432b 100644
--- a/product/ERP5OOo/transforms/oood_commandtransform.py
+++ b/product/ERP5OOo/transforms/oood_commandtransform.py
@@ -6,7 +6,8 @@ from Acquisition import aq_base
 try:
   from Products.ERP5OOo.OOoUtils import OOoBuilder
   import re
-  from libxml2 import parseDoc, parserError
+  from lxml import etree
+  from lxml.etree import ParseError, Element
   import_succeed = 1
 except ImportError:
   import_succeed = 0
@@ -72,16 +73,16 @@ class OOOdCommandTransform(commandtransform):
     """
     builder = OOoBuilder(data)
     content = builder.extract('content.xml')
-    xml_doc = parseDoc(content)
-    image_tag_list = xml_doc.xpathEval('//*[name() = "draw:image"]')
-    svg_ns = xml_doc.getRootElement().searchNs(xml_doc, 'svg')
+    xml_doc = etree.XML(content)
+    image_tag_list = xml_doc.xpath('//*[name() = "draw:image"]')
+    SVG_NAMESPACE = 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0'
+    XLINK_NAMESPACE = 'http://www.w3.org/1999/xlink'
     ratio_px_cm = 2.54 / 100.
     for image_tag in image_tag_list:
-      frame = image_tag.parent
+      frame = image_tag.xpath('parent::node()')[0]
       #Try to get image file from ZODB
-      href_attribute_list = image_tag.xpathEval('.//@*[name() = "xlink:href"]')
-      href_attribute = href_attribute_list[0]
-      url = href_attribute.get_content()
+      href_attribute_list = image_tag.xpath('.//@*[name() = "xlink:href"]')
+      url = href_attribute_list[0]
       matching = re.match(REMOTE_URL_PATTERN, url)
       if matching is not None:
         path = matching.groupdict().get('path')
@@ -109,13 +110,14 @@ class OOOdCommandTransform(commandtransform):
             height = image.height
             width = image.width
           if height:
-            frame.setNsProp(svg_ns, 'height', '%.3fcm' % (height * ratio_px_cm))
+            frame.attrib.update({'{%s}height' % SVG_NAMESPACE: '%.3fcm' % (height * ratio_px_cm)})
           if width:
-            frame.setNsProp(svg_ns, 'width', '%.3fcm' % (width * ratio_px_cm))
+            frame.attrib.update({'{%s}width' % SVG_NAMESPACE: '%.3fcm' % (width * ratio_px_cm)})
           new_path = builder.addImage(data, format=format)
-          href_attribute.setContent(new_path)
-    builder.replace('content.xml', xml_doc.serialize('utf-8', 0))
-    xml_doc.freeDoc()
+          image_tag.attrib.update({'{%s}href' % XLINK_NAMESPACE: new_path})
+    builder.replace('content.xml', etree.tostring(xml_doc, encoding='utf-8',
+                                                  xml_declaration=True,
+                                                  pretty_print=False))
     return builder.render()
 
   def includeExternalCssList(self, data):
@@ -123,17 +125,16 @@ class OOOdCommandTransform(commandtransform):
       Replace external Css link by style Element
     """
     try:
-      xml_doc = parseDoc(data)
-    except parserError:
+      xml_doc = etree.XML(data)
+    except ParseError:
       #If not valid xhtml do nothing
       return data
     xpath = '//*[local-name() = "link"][@type = "text/css"]'
-    css_link_tag_list = xml_doc.xpathEval(xpath)
+    css_link_tag_list = xml_doc.xpath(xpath)
     for css_link_tag in css_link_tag_list:
       #Try to get css from ZODB
-      href_attribute_list = css_link_tag.xpathEval('.//@href')
-      href_attribute = href_attribute_list[0]
-      url = href_attribute.get_content()
+      href_attribute_list = css_link_tag.xpath('.//@href')
+      url = href_attribute_list[0]
       matching = re.match(REMOTE_URL_PATTERN, url)
       if matching is not None:
         path = matching.groupdict().get('path')
@@ -149,14 +150,14 @@ class OOOdCommandTransform(commandtransform):
           else:
             #Other cases like files
             css_as_text = str(css_object)
-          style_node = xml_doc.newChild(None, 'style', css_as_text)
-          style_node.setProp('type', 'text/css')
-          css_link_tag.replaceNode(style_node)
-    #omit xml-declaration
-    data = xml_doc.serialize('utf-8', 0)\
-                     .replace('<?xml version="1.0" encoding="utf-8"?>\n', '')
-    xml_doc.freeDoc()
-    return data
+          parent_node = css_link_tag.xpath('parent::node()')[0]
+          style_node = Element('style')
+          style_node.text = css_as_text
+          parent_node.append(style_node)
+          style_node.attrib.update({'type': 'text/css'})
+          parent_node.remove(css_link_tag)
+    return etree.tostring(xml_doc, encoding='utf-8',
+                          xml_declaration=False, pretty_print=False, )
 
   def convert(self):
     tmp_ooo = newTempOOoDocument(self.context, self.name)