diff --git a/product/ERP5OOo/tests/testIngestion.py b/product/ERP5OOo/tests/testIngestion.py
index 61c89f64f5974b412a988d37cd471c9b73a14467..9e4a35a9f7b05ec748216ee3c5ed487d26e64908 100644
--- a/product/ERP5OOo/tests/testIngestion.py
+++ b/product/ERP5OOo/tests/testIngestion.py
@@ -3,6 +3,7 @@
 # Copyright (c) 2007 Nexedi SA and Contributors. All Rights Reserved.
 #                    Bartek Gorny <bg@erp5.pl>
 #                    Jean-Paul Smets <jp@nexedi.com>
+#                    Ivan Tyagov <ivan@nexedi.com>
 #
 # WARNING: This program as such is intended to be used by professional
 # programmers who take the whole responsability of assessing all potential
@@ -27,25 +28,17 @@
 #
 ##############################################################################
 
-import os, sys, cStringIO
-import zipfile
+import os, sys, cStringIO, zipfile
 from xml.dom.minidom import parseString
-
-from cgi import FieldStorage
-from zExceptions import BadRequest
 from Testing import ZopeTestCase
 from DateTime import DateTime
 from AccessControl.SecurityManagement import newSecurityManager
-from Products.CMFCore.utils import getToolByName
-
 from Products.ERP5Type.Utils import convertToUpperCase
 from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
 from Products.ERP5Type.tests.Sequence import SequenceList
-from Products.ERP5Type.Cache import clearCache
 from Products.ERP5OOo.Document.OOoDocument import ConversionError
 from Products.ERP5.Document.File import _unpackData
-
-from zLOG import LOG
+from zLOG import LOG, INFO, ERROR
 
 if __name__ == '__main__':
   execfile(os.path.join(sys.path[0], 'framework.py'))
@@ -60,6 +53,9 @@ conversion_server_host = ('127.0.0.1', 8008)
 # test files' home
 TEST_FILES_HOME = os.path.join(os.getenv('INSTANCE_HOME'), 'Products', 'ERP5OOo', 'tests', 'test_document')
 
+FILE_NAME_REGULAR_EXPRESSION = "(?P<reference>[A-Z]{3,6})-(?P<language>[a-z]{2})-(?P<version>[0-9]{3})"
+REFERENCE_REGULAR_EXPRESSION = "(?P<reference>[A-Z]{3,6})(-(?P<language>[a-z]{2}))?(-(?P<version>[0-9]{3}))?"
+
 def printAndLog(msg):
   """
   A utility function to print a message
@@ -156,8 +152,8 @@ class TestIngestion(ERP5TypeTestCase):
     default_pref = self.portal.portal_preferences.default_site_preference
     default_pref.setPreferredOoodocServerAddress(conversion_server_host[0])
     default_pref.setPreferredOoodocServerPortNumber(conversion_server_host[1])
-    default_pref.setPreferredDocumentFileNameRegularExpression(
-           "(?P<reference>[A-Z]{3,6})-(?P<language>[a-z]{2})-(?P<version>[0-9]{3})")
+    default_pref.setPreferredDocumentFileNameRegularExpression(FILE_NAME_REGULAR_EXPRESSION)
+    default_pref.setPreferredDocumentReferenceRegularExpression(REFERENCE_REGULAR_EXPRESSION)
     default_pref.enable()
 
 
@@ -347,8 +343,8 @@ class TestIngestion(ERP5TypeTestCase):
     context.reindexObject()
     get_transaction().commit()
     self.tic()
-    clearCache() # We call clear cache to be sure that
-                 # the target list is updated
+    # We call clear cache to be sure that the target list is updated
+    self.getPortal().portal_caches.clearCache()
     target_list = context.getTargetFormatList()
     for target in asserted_target_list:
       self.assert_(target in target_list)
@@ -905,6 +901,11 @@ class TestIngestion(ERP5TypeTestCase):
         break
     self.failUnless(john_is_owner)
 
+  def playSequence(self, step_list, quiet):
+    sequence_list = SequenceList()
+    sequence_string = ' '.join(step_list)
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self, quiet=quiet)
   
   ##################################
   ##  Tests
@@ -919,9 +920,9 @@ class TestIngestion(ERP5TypeTestCase):
     preference_tool = self.portal.portal_preferences
     self.assertEquals(preference_tool.getPreferredOoodocServerAddress(), conversion_server_host[0])
     self.assertEquals(preference_tool.getPreferredOoodocServerPortNumber(), conversion_server_host[1])
-    self.assertEquals(preference_tool.getPreferredDocumentFileNameRegularExpression(),
-                      "(?P<reference>[A-Z]{3,6})-(?P<language>[a-z]{2})-(?P<version>[0-9]{3})")
-
+    self.assertEquals(preference_tool.getPreferredDocumentFileNameRegularExpression(), FILE_NAME_REGULAR_EXPRESSION)
+    self.assertEquals(preference_tool.getPreferredDocumentReferenceRegularExpression(), REFERENCE_REGULAR_EXPRESSION)
+    
   def test_02_FileExtensionRegistry(self, quiet=QUIET, run=RUN_ALL_TEST):
     """
       check if we successfully imported registry
@@ -954,7 +955,7 @@ class TestIngestion(ERP5TypeTestCase):
       self.assertEquals(reg.findTypeName(file_name, None, None), portal_type)
 
   def test_03_TextDoc(self, quiet=QUIET, run=RUN_ALL_TEST):
-    """h
+    """
       Test basic behaviour of a document:
       - create empty document
       - upload a file directly
@@ -965,7 +966,6 @@ class TestIngestion(ERP5TypeTestCase):
     """
     if not run: return
     if not quiet: printAndLog('test_03_TextDoc')
-    sequence_list = SequenceList()
     step_list = ['stepCleanUp'
                  ,'stepCreateTextDocument'
                  ,'stepCheckEmptyState'
@@ -976,9 +976,7 @@ class TestIngestion(ERP5TypeTestCase):
                  ,'stepDiscoverFromFilename'
                  ,'stepCheckConvertedContent'
                 ]
-    sequence_string = ' '.join(step_list)
-    sequence_list.addSequenceString(sequence_string)
-    sequence_list.play(self, quiet=quiet)
+    self.playSequence(step_list, quiet)
 
   def test_04_MetadataExtraction(self, quiet=QUIET, run=RUN_ALL_TEST):
     """
@@ -995,15 +993,12 @@ class TestIngestion(ERP5TypeTestCase):
     """
     if not run: return
     if not quiet: printAndLog('test_04_MetadataExtraction')
-    sequence_list = SequenceList()
     step_list = [ 'stepCleanUp'
                  ,'stepCreateTextDocument'
                  ,'stepSetSimulatedDiscoveryScript'
                  ,'stepTestMetadataSetting'
                 ]
-    sequence_string = ' '.join(step_list)
-    sequence_list.addSequenceString(sequence_string)
-    sequence_list.play(self, quiet=quiet)
+    self.playSequence(step_list, quiet)
 
   def test_04_MetadataEditing(self, quiet=QUIET, run=RUN_ALL_TEST):
     """
@@ -1013,16 +1008,13 @@ class TestIngestion(ERP5TypeTestCase):
     """
     if not run: return
     if not quiet: printAndLog('test_04_MetadataEditing')
-    sequence_list = SequenceList()
     step_list = [ 'stepCleanUp'
                  ,'stepCreateTextDocument'
                  ,'stepDialogUpload'
                  ,'stepEditMetadata'
                  ,'stepCheckChangedMetadata'
                 ]
-    sequence_string = ' '.join(step_list)
-    sequence_list.addSequenceString(sequence_string)
-    sequence_list.play(self, quiet=quiet)
+    self.playSequence(step_list, quiet)
 
   def test_05_FormatIngestion(self, quiet=QUIET, run=RUN_ALL_TEST):
     """
@@ -1037,7 +1029,6 @@ class TestIngestion(ERP5TypeTestCase):
     """
     if not run: return
     if not quiet: printAndLog('test_05_FormatIngestion')
-    sequence_list = SequenceList()
     step_list = ['stepCleanUp'
                  ,'stepCreateTextDocument'
                  ,'stepIngestTextFormats'
@@ -1052,9 +1043,7 @@ class TestIngestion(ERP5TypeTestCase):
                  ,'stepCreateImageDocument'
                  ,'stepIngestImageFormats'
                 ]
-    sequence_string = ' '.join(step_list)
-    sequence_list.addSequenceString(sequence_string)
-    sequence_list.play(self, quiet=quiet)
+    self.playSequence(step_list, quiet)
 
   def test_06_FormatGeneration(self, quiet=QUIET, run=RUN_ALL_TEST):
     """
@@ -1065,7 +1054,6 @@ class TestIngestion(ERP5TypeTestCase):
     """
     if not run: return
     if not quiet: printAndLog('test_06_FormatGeneration')
-    sequence_list = SequenceList()
     step_list = [ 'stepCleanUp'
                  ,'stepCreateTextDocument'
                  ,'stepCheckTextDocumentExportList'
@@ -1080,9 +1068,7 @@ class TestIngestion(ERP5TypeTestCase):
                  ,'stepCreateImageDocument'
                  ,'stepExportImage'
                 ]
-    sequence_string = ' '.join(step_list)
-    sequence_list.addSequenceString(sequence_string)
-    sequence_list.play(self, quiet=quiet)
+    self.playSequence(step_list, quiet)
 
   def test_07_SnapshotGeneration(self, quiet=QUIET, run=RUN_ALL_TEST):
     """
@@ -1092,7 +1078,6 @@ class TestIngestion(ERP5TypeTestCase):
     """
     if not run: return
     if not quiet: printAndLog('test_07_SnapshotGeneration')
-    sequence_list = SequenceList()
     step_list = [ 'stepCleanUp'
                  ,'stepCreateTextDocument'
                  ,'stepDialogUpload'
@@ -1104,9 +1089,7 @@ class TestIngestion(ERP5TypeTestCase):
                  ,'stepCheckHasNoSnapshot'
                  ,'stepCreateSnapshot'
                 ]
-    sequence_string = ' '.join(step_list)
-    sequence_list.addSequenceString(sequence_string)
-    sequence_list.play(self, quiet=quiet)
+    self.playSequence(step_list, quiet)
 
   def test_08_Cache(self, quiet=QUIET, run=RUN_ALL_TEST):
     """
@@ -1125,15 +1108,12 @@ class TestIngestion(ERP5TypeTestCase):
     """
     if not run: return
     if not quiet: printAndLog('test_09_Contribute')
-    sequence_list = SequenceList()
     step_list = [ 'stepCleanUp'
                  ,'stepContributeFileListWithNoType'
                  ,'stepCleanUp'
                  ,'stepContributeFileListWithType'
                 ]
-    sequence_string = ' '.join(step_list)
-    sequence_list.addSequenceString(sequence_string)
-    sequence_list.play(self, quiet=quiet)
+    self.playSequence(step_list, quiet)
 
   def test_10_MetadataSettingPreferenceOrder(self, quiet=QUIET, run=RUN_ALL_TEST):
     """
@@ -1146,7 +1126,6 @@ class TestIngestion(ERP5TypeTestCase):
     """
     if not run: return
     if not quiet: printAndLog('test_10_MetadataSettingPreferenceOrder')
-    sequence_list = SequenceList()
     step_list = [ 'stepCleanUp' 
                  ,'stepCreateTextDocument'
                  ,'stepStraightUpload'
@@ -1169,9 +1148,7 @@ class TestIngestion(ERP5TypeTestCase):
                  ,'stepSetSimulatedDiscoveryScriptForOrdering'
                  ,'stepCheckMetadataSettingOrderUFCI'
                 ]
-    sequence_string = ' '.join(step_list)
-    sequence_list.addSequenceString(sequence_string)
-    sequence_list.play(self, quiet=quiet)
+    self.playSequence(step_list, quiet)
 
   def test_11_EmailIngestion(self, quiet=QUIET, run=RUN_ALL_TEST):
     """
@@ -1181,17 +1158,13 @@ class TestIngestion(ERP5TypeTestCase):
     """
     if not run: return
     if not quiet: printAndLog('test_11_EmailIngestion')
-    sequence_list = SequenceList()
     step_list = [ 'stepCleanUp'
                  ,'stepReceiveEmailFromUnknown'
                  ,'stepCreatePerson'
                  ,'stepReceiveEmailFromJohn'
                  ,'stepVerifyEmailedDocuments'
                 ]
-    sequence_string = ' '.join(step_list)
-    sequence_list.addSequenceString(sequence_string)
-    sequence_list.play(self, quiet=quiet)
-
+    self.playSequence(step_list, quiet)
 
 if __name__ == '__main__':
   framework()