diff --git a/product/ERP5OOo/tests/testIngestion.py b/product/ERP5OOo/tests/testIngestion.py
index 9140468995b3e26c557721f35097fc4668c383ae..0aed3cdd1b67bd09ad0f9415dc2258efce6ebcf0 100644
--- a/product/ERP5OOo/tests/testIngestion.py
+++ b/product/ERP5OOo/tests/testIngestion.py
@@ -319,6 +319,8 @@ class TestIngestion(ERP5TypeTestCase):
         # PDF has not implemented _convertToBaseFormat() so can not be converted
         self.assertEquals(context.getExternalProcessingState(), 'uploaded')
       else:
+        if context.getExternalProcessingState()=='uploaded':
+          import pdb;pdb.set_trace()
         self.assertEquals(context.getExternalProcessingState(), 'converted') # this is how we know if it was ok or not
         self.assert_('magic' in context.SearchableText())
         self.assert_('magic' in str(context.asText()))
@@ -539,10 +541,18 @@ class TestIngestion(ERP5TypeTestCase):
     context = self.getDocument('one')
     return self.assertEquals(context.getExternalProcessingState(), 'uploaded')
 
+  def stepCheckConvertingState(self, sequence=None, sequence_list=None, **kw):
+    """
+      Check if the document is in "converting" processing state
+      (ie. a file upload has been done and the document is converting)
+    """
+    context = self.getDocument('one')
+    return self.assertEquals(context.getExternalProcessingState(), 'converting')
+
   def stepCheckConvertedState(self, sequence=None, sequence_list=None, **kw):
     """
       Check if the document is in "converted" processing state
-      (ie. a file upload has been done and the document has
+      (ie. a file conversion has been done and the document has
       been converted)
     """
     context = self.getDocument('one')
@@ -568,27 +578,74 @@ class TestIngestion(ERP5TypeTestCase):
     self.assertEquals(document.getRevision(), '1')
     document.reindexObject()
     get_transaction().commit()
-    self.tic()
 
-  def stepDialogUpload(self, sequence=None, sequence_list=None, **kw):
+  def stepUploadFromViewForm(self, sequence=None, sequence_list=None, **kw):
     """
-      Upload a file using the dialog script Document_uploadFile
-      and make sure this increases the revision
+      Upload a file from view form and make sure this increases the revision
     """
     context = self.getDocument('one')
     f = makeFileUpload('TEST-en-002.doc')
     revision = context.getRevision()
-    context.Document_uploadFile(file=f)
+    context.edit(file=f)
+    self.assertEquals(context.getRevision(), str(int(revision) + 1))
+    context.reindexObject()
+    get_transaction().commit()
+
+  def stepUploadTextFromContributionTool(self, sequence=None, sequence_list=None, **kw):
+    """
+      Upload a file from contribution.
+    """
+    f = makeFileUpload('TEST-en-002.doc')
+    self.portal.portal_contributions.newContent(id='one', file=f)
+    get_transaction().commit()
+
+  def stepReuploadTextFromContributionTool(self, sequence=None, sequence_list=None, **kw):
+    """
+      Upload a file from contribution form and make sure this update existing
+      document and don't make a new document.
+    """
+    context = self.getDocument('one')
+    revision = context.getRevision()
+    number_of_document = len(self.portal.document_module.objectIds())
+    self.assert_('This document is modified.' not in context.asText())
+
+    f = makeFileUpload('TEST-en-002-modified.doc')
+    f.filename = 'TEST-en-002.doc'
+
+    self.portal.portal_contributions.newContent(file=f)
+    get_transaction().commit()
+    self.tic()
+    get_transaction().commit()
     self.assertEquals(context.getRevision(), str(int(revision) + 1))
+    self.assert_('This document is modified.' in context.asText())
+    self.assertEquals(len(self.portal.document_module.objectIds()),
+                      number_of_document)
+
     context.reindexObject()
     get_transaction().commit()
+
+  def stepUploadAnotherTextFromContributionTool(self, sequence=None, sequence_list=None, **kw):
+    """
+      Upload another file from contribution.
+    """
+    f = makeFileUpload('ANOTHE-en-001.doc')
+    self.portal.portal_contributions.newContent(id='two', file=f)
+
+    get_transaction().commit()
     self.tic()
+    get_transaction().commit()
+
+    context = self.getDocument('two')
+    self.assert_('This is a another very interesting document.' in context.asText())
+    self.assertEquals(context.getReference(), 'ANOTHE')
+    self.assertEquals(context.getVersion(), '001')
+    self.assertEquals(context.getLanguage(), 'en')
 
   def stepDiscoverFromFilename(self, sequence=None, sequence_list=None, **kw):
     """
-      Upload a file using the dialog script Document_uploadFile.
-      This should trigger metadata discovery and we should have
-      basic coordinates immediately, from first stage.
+      Upload a file using contribution tool. This should trigger metadata
+      discovery and we should have basic coordinates immediately,
+      from first stage.
     """
     context = self.getDocument('one')
     file_name = 'TEST-en-002.doc'
@@ -605,7 +662,7 @@ class TestIngestion(ERP5TypeTestCase):
     self.assertEquals(property_dict['subject_list'], ['keywords'])
     # Then make sure metadata discovery works
     f = makeFileUpload(file_name)
-    context.Document_uploadFile(file=f)
+    context.edit(file=f)
     self.assertEquals(context.getReference(), 'TEST')
     self.assertEquals(context.getLanguage(), 'en')
     self.assertEquals(context.getVersion(), '002')
@@ -639,7 +696,7 @@ class TestIngestion(ERP5TypeTestCase):
     """
     context = self.getDocument('one')
     f = makeFileUpload('TEST-en-002.doc')
-    context.Document_uploadFile(file=f)
+    context.edit(file=f)
     get_transaction().commit()
     self.tic()
     # Then make sure content discover works
@@ -990,11 +1047,13 @@ class TestIngestion(ERP5TypeTestCase):
                  ,'stepCreateTextDocument'
                  ,'stepCheckEmptyState'
                  ,'stepStraightUpload'
+                 ,'stepCheckConvertingState'
+                 ,'stepTic'
                  ,'stepCheckConvertedState'
-                 ,'stepDialogUpload'
+                 ,'stepUploadFromViewForm'
+                 ,'stepCheckConvertingState'
+                 ,'stepTic'
                  ,'stepCheckConvertedState'
-                 ,'stepDiscoverFromFilename'
-                 ,'stepCheckConvertedContent'
                 ]
     self.playSequence(step_list, quiet)
 
@@ -1014,8 +1073,9 @@ class TestIngestion(ERP5TypeTestCase):
     if not run: return
     if not quiet: printAndLog('test_04_MetadataExtraction')
     step_list = [ 'stepCleanUp'
-                 ,'stepCreateTextDocument'
+                 ,'stepUploadTextFromContributionTool'
                  ,'stepSetSimulatedDiscoveryScript'
+                 ,'stepTic'
                  ,'stepTestMetadataSetting'
                 ]
     self.playSequence(step_list, quiet)
@@ -1030,7 +1090,10 @@ class TestIngestion(ERP5TypeTestCase):
     if not quiet: printAndLog('test_04_MetadataEditing')
     step_list = [ 'stepCleanUp'
                  ,'stepCreateTextDocument'
-                 ,'stepDialogUpload'
+                 ,'stepUploadFromViewForm'
+                 ,'stepCheckConvertingState'
+                 ,'stepTic'
+                 ,'stepCheckConvertedState'
                  ,'stepEditMetadata'
                  ,'stepCheckChangedMetadata'
                 ]
@@ -1100,7 +1163,10 @@ class TestIngestion(ERP5TypeTestCase):
     if not quiet: printAndLog('test_07_SnapshotGeneration')
     step_list = [ 'stepCleanUp'
                  ,'stepCreateTextDocument'
-                 ,'stepDialogUpload'
+                 ,'stepUploadFromViewForm'
+                 ,'stepCheckConvertingState'
+                 ,'stepTic'
+                 ,'stepCheckConvertedState'
                  ,'stepCheckHasNoSnapshot'
                  ,'stepCreateSnapshot'
                  ,'stepTryRecreateSnapshot'
@@ -1149,22 +1215,37 @@ class TestIngestion(ERP5TypeTestCase):
     step_list = [ 'stepCleanUp' 
                  ,'stepCreateTextDocument'
                  ,'stepStraightUpload'
+                 ,'stepCheckConvertingState'
+                 ,'stepTic'
+                 ,'stepCheckConvertedState'
                  ,'stepSetSimulatedDiscoveryScriptForOrdering'
                  ,'stepCheckMetadataSettingOrderFICU'
                  ,'stepCreateTextDocument'
                  ,'stepStraightUpload'
+                 ,'stepCheckConvertingState'
+                 ,'stepTic'
+                 ,'stepCheckConvertedState'
                  ,'stepSetSimulatedDiscoveryScriptForOrdering'
                  ,'stepCheckMetadataSettingOrderCUFI'
                  ,'stepCreateTextDocument'
                  ,'stepStraightUpload'
+                 ,'stepCheckConvertingState'
+                 ,'stepTic'
+                 ,'stepCheckConvertedState'
                  ,'stepSetSimulatedDiscoveryScriptForOrdering'
                  ,'stepCheckMetadataSettingOrderUIFC'
                  ,'stepCreateTextDocument'
                  ,'stepStraightUpload'
+                 ,'stepCheckConvertingState'
+                 ,'stepTic'
+                 ,'stepCheckConvertedState'
                  ,'stepSetSimulatedDiscoveryScriptForOrdering'
                  ,'stepCheckMetadataSettingOrderICUF'
                  ,'stepCreateTextDocument'
                  ,'stepStraightUpload'
+                 ,'stepCheckConvertingState'
+                 ,'stepTic'
+                 ,'stepCheckConvertedState'
                  ,'stepSetSimulatedDiscoveryScriptForOrdering'
                  ,'stepCheckMetadataSettingOrderUFCI'
                 ]
@@ -1186,6 +1267,25 @@ class TestIngestion(ERP5TypeTestCase):
                 ]
     self.playSequence(step_list, quiet)
 
+  def test_12_UploadTextFromContributionTool(self, quiet=QUIET, run=RUN_ALL_TEST):
+    """
+      Make sure that when upload file from contribution tool, it creates a new
+      document in document module. when reupload same filename file, then it
+      does not create a new document and update existing document.
+    """
+    if not run: return
+    if not quiet: printAndLog('test_12_ReUploadSameFilenameFile')
+    step_list = [ 'stepCleanUp'
+                 ,'stepUploadTextFromContributionTool'
+                 ,'stepCheckConvertingState'
+                 ,'stepTic'
+                 ,'stepCheckConvertedState'
+                 ,'stepDiscoverFromFilename'
+                 ,'stepTic'
+                 ,'stepReuploadTextFromContributionTool'
+                 ,'stepUploadAnotherTextFromContributionTool'
+                ]
+    self.playSequence(step_list, quiet)
 
 # Missing tests
 """
diff --git a/product/ERP5OOo/tests/test_document/ANOTHE-en-001.doc b/product/ERP5OOo/tests/test_document/ANOTHE-en-001.doc
new file mode 100644
index 0000000000000000000000000000000000000000..0115ed73a78b857c44a5af900ef890562d51ea41
Binary files /dev/null and b/product/ERP5OOo/tests/test_document/ANOTHE-en-001.doc differ
diff --git a/product/ERP5OOo/tests/test_document/TEST-en-002-modified.doc b/product/ERP5OOo/tests/test_document/TEST-en-002-modified.doc
new file mode 100644
index 0000000000000000000000000000000000000000..c2c4ae26d0a2160cbd660c9f4b737f25fa99482c
Binary files /dev/null and b/product/ERP5OOo/tests/test_document/TEST-en-002-modified.doc differ