diff --git a/product/ERP5/tests/testPayroll.py b/product/ERP5/tests/testPayroll.py
index 37255ac8d6008ee1d5aa93f142fa9328d1a92196..0446442cdd3813b4efb53130d77fa21ae72f49d6 100644
--- a/product/ERP5/tests/testPayroll.py
+++ b/product/ERP5/tests/testPayroll.py
@@ -719,6 +719,51 @@ class TestPayrollMixin(ERP5ReportTestCase, TestBPMMixin):
       else:
         self.fail("Unknown service for line %s" % paysheet_line.getTitle())
 
+  def stepCheckPaysheetLineAmountsAfterAddingAModelLine(self, sequence=None, **kw):
+    paysheet = sequence.get('paysheet')
+    paysheet_line_list = paysheet.contentValues(portal_type='Pay Sheet Line')
+    for paysheet_line in paysheet_line_list:
+      service = paysheet_line.getResourceTitle()
+      if service == 'Urssaf':
+        if len(paysheet_line.contentValues(portal_type='Pay Sheet Cell')) == 6:
+          # there is two lines with the same resource, one with slice and one
+          # without
+          cell1 = paysheet_line.getCell('tax_category/employee_share',
+              'salary_range/france/slice_0_to_200')
+          self.assertEquals(cell1.getQuantity(), 200)
+          self.assertEquals(cell1.getPrice(), 0.1)
+          cell2 = paysheet_line.getCell('tax_category/employer_share',
+              'salary_range/france/slice_0_to_200')
+          self.assertEquals(cell2.getQuantity(), 200)
+          self.assertEquals(cell2.getPrice(), 0.2)
+          cell3 = paysheet_line.getCell('tax_category/employee_share',
+              'salary_range/france/slice_200_to_400')
+          self.assertEquals(cell3.getQuantity(), 200)
+          self.assertEquals(cell3.getPrice(), 0.3)
+          cell4 = paysheet_line.getCell('tax_category/employer_share',
+              'salary_range/france/slice_200_to_400')
+          self.assertEquals(cell4.getQuantity(), 200)
+          self.assertEquals(cell4.getPrice(), 0.4)
+          cell5 = paysheet_line.getCell('tax_category/employee_share',
+              'salary_range/france/slice_400_to_5000')
+          self.assertEquals(cell5.getQuantity(), 2600)
+          self.assertEquals(cell5.getPrice(), 0.5)
+          cell6 = paysheet_line.getCell('tax_category/employer_share',
+              'salary_range/france/slice_400_to_5000')
+          self.assertEquals(cell6.getQuantity(), 2600)
+          self.assertEquals(cell6.getPrice(), 0.6)
+        else:
+          cell1 = paysheet_line.getCell('tax_category/employee_share')
+          self.assertEquals(cell1.getQuantity(), -100)
+          self.assertEquals(cell1.getPrice(), 1)
+          cell2 = paysheet_line.getCell('tax_category/employer_share')
+          self.assertEquals(cell2.getQuantity(), -200)
+          self.assertEquals(cell2.getPrice(), 1)
+      elif service == 'Labour':
+        self.assertEqual(paysheet_line.getTotalPrice(), 3000.0)
+      else:
+        self.fail("Unknown service for line %s" % paysheet_line.getTitle())
+
   def stepCheckPaysheetLineAmountsWithSicknessInsuranceAndUrssaf(self, sequence=None, **kw):
     paysheet = sequence.get('paysheet')
     paysheet_line_list = paysheet.contentValues(portal_type='Pay Sheet Line')
@@ -1627,7 +1672,7 @@ class TestPayrollMixin(ERP5ReportTestCase, TestBPMMixin):
 
   def stepComplexModelInheritanceScheme(self, sequence=None, **kw):
     '''
-    check inheritance and effective model with a more complexe inheritance tree
+    check inheritance and effective model with a more complex inheritance tree
 
     # the inheritance tree look like this :
 
@@ -1793,6 +1838,38 @@ class TestPayrollMixin(ERP5ReportTestCase, TestBPMMixin):
         context=paysheet, start_date=paysheet.getStartDate(),
         stop_date=paysheet.getStopDate()), [model_2, model_5, model_7])
 
+  def stepCheckPropertiesAreCopiedFromModelLineToPaySheetLine(self,
+      sequence=None, **kw):
+    model = sequence.get('model')
+    paysheet = sequence.get('paysheet')
+    property_list = ('title', 'description', 'int_index')
+    for model_line in model.contentValues(portal_type='Pay Sheet Model Line'):
+      model_line_resource = model_line.getResource()
+      line_found = False
+      for paysheet_line in paysheet.contentValues(portal_type='Pay Sheet Line'):
+        if paysheet_line.getResource() == model_line_resource:
+          line_found = True
+          for prop in property_list:
+            prop_from_model_line = getattr(model_line, prop, None)
+            # check a value is set on the model line
+            self.assertNotEquals(prop_from_model_line, None)
+            prop_from_paysheet_line = getattr(paysheet_line, prop, None)
+            # check the property is the same on model_line and paysheet_line
+            self.assertEquals(prop_from_model_line, prop_from_paysheet_line)
+          break
+
+      # check that for each model line, we foud a corresponding paysheet_line
+      self.assertEquals(line_found, True)
+
+  def stepSetProperiesOnModelLines(self, sequence=None, **kw):
+    model = sequence.get('model')
+    index = 0
+    for model_line in model.contentValues(portal_type='Pay Sheet Model Line'):
+      model_line.setTitle('Model line title %s' % index)
+      model_line.setDescription('Model line description %s' % index)
+      model_line.setIntIndex(index)
+      index += 1
+
 class TestPayroll(TestPayrollMixin):
 
   BUSINESS_PATH_CREATION_SEQUENCE_STRING = """
@@ -3215,7 +3292,7 @@ class TestPayroll(TestPayrollMixin):
         model_2.getCell('salary_range/france/slice_a').getQuantityRangeMax())
 
   def test_complexModelInheritanceScheme(self):
-    '''check inheritance and effective model with a more complexe 
+    '''check inheritance and effective model with a more complex
     inheritance tree'''
     sequence_list = SequenceList()
     sequence_string = """
@@ -3227,6 +3304,60 @@ class TestPayroll(TestPayrollMixin):
     sequence_list.addSequenceString(sequence_string)
     sequence_list.play(self)
 
+  def test_updatePaysheetAfterModelModification(self):
+    '''generate a paysheet using a model, modify the model, and update the
+    paysheet. Check the paysheet values have been updated
+    '''
+    sequence_list = SequenceList()
+    sequence_string = '''
+               CreateUrssafService
+               CreateLabourService
+               CreateEmployer
+               CreateEmployee
+               CreatePriceCurrency
+               CreateModelWithSlices
+               ModelCreateUrssafModelLine
+               UrssafModelLineCreateMovements
+               CreateBasicPaysheet
+               PaysheetCreateLabourPaySheetLine
+               Tic
+  ''' + self.BUSINESS_PATH_CREATION_SEQUENCE_STRING +'''
+               CheckUpdateAggregatedAmountListReturn
+               PaysheetApplyTransformation
+               Tic
+               CheckPaysheetLineAreCreated
+               CheckPaysheetLineAmounts
+               CheckUpdateAggregatedAmountListReturnNothing
+               CheckPaysheetLineAmounts
+               ModelCreateUrssafModelLineWithComplexSlices
+               Tic
+               UrssafModelLineWithComplexSlicesCreateMovements
+               PaysheetApplyTransformation
+               Tic
+               CheckPaysheetLineAreCreatedUsingWith3Lines
+               CheckPaysheetLineAmountsAfterAddingAModelLine
+               CheckUpdateAggregatedAmountListReturnNothing
+               CheckPaysheetLineAmountsAfterAddingAModelLine
+    '''
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
+
+  def test_propertiesAreSetOnPaysheetLines(self):
+    '''check porperties from model line (like description, int_index,
+    title, ...) are copied on the paysheet lines'''
+    sequence_list = SequenceList()
+    sequence_string = self.COMMON_BASIC_DOCUMENT_CREATION_SEQUENCE_STRING + """
+               SetProperiesOnModelLines
+               PaysheetApplyTransformation
+               Tic
+               CheckPaysheetLineAreCreated
+               CheckPaysheetLineAmounts
+               CheckPropertiesAreCopiedFromModelLineToPaySheetLine
+    """
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
+
+
 import unittest
 def test_suite():
   suite = unittest.TestSuite()