diff --git a/product/ERP5OOo/Document/OOoDocument.py b/product/ERP5OOo/Document/OOoDocument.py
index 276b51442a0495474a72fb5a6faa4c4d593925f4..f3ee39a6d1c22a23109916626e5d6b6bc763d3dc 100644
--- a/product/ERP5OOo/Document/OOoDocument.py
+++ b/product/ERP5OOo/Document/OOoDocument.py
@@ -106,6 +106,8 @@ class OOoDocument(DMSFile, CachingMixin):
                     , PropertySheet.OOoDocument
                     )
 
+  # regexp for finding attrs in content
+  rx_atr=re.compile('([\w]+)###([\w/]+)')
   # regexps for stripping xml from docs
   rx_strip=re.compile('<[^>]*?>',re.DOTALL|re.MULTILINE)
   rx_compr=re.compile('\s+')
@@ -243,6 +245,26 @@ class OOoDocument(DMSFile, CachingMixin):
     z.close()
     return s
 
+  security.declareProtected(Permissions.ModifyPortalContent,'setPropertyListFromContent')
+  def setPropertyListFromContent(self,data):
+    cs=cStringIO.StringIO()
+    cs.write(self._unpackData(data))
+    try:
+      z=zipfile.ZipFile(cs)
+    except zipfile.BadZipfile:
+      cs.close()
+      return
+    s=z.read('content.xml')
+    cs.close()
+    z.close()
+    atrs=dict(self.rx_atr.findall(s))
+    doctype=atrs.get('doctype','None')
+    if doctype!=self.getPortalType():
+      raise Exception('portal type mismatch - content gave %s, I have %s' % (doctype,self.getPortalType()))
+    for a in atrs:
+      if a not in ('author','doctype'):
+        self.setProperty(a,atrs[a])
+
   security.declarePrivate('_setMetaData')
   def _setMetaData(self,meta):
     """