diff --git a/product/ERP5/tests/testPayroll.py b/product/ERP5/tests/testPayroll.py
index 1ca8b9c5ebe1313d4335fbab1c4c7bf2f60fe66b..ce882e72b85540443f573f6628f3637ceca134c0 100644
--- a/product/ERP5/tests/testPayroll.py
+++ b/product/ERP5/tests/testPayroll.py
@@ -38,6 +38,29 @@ class TestPayrollMixin(ERP5ReportTestCase, TestBPMMixin):
   normal_resource_use_category_list = ['payroll/base_salary']
   invoicing_resource_use_category_list = ['payroll/tax']
 
+  BUSINESS_PATH_CREATION_SEQUENCE_STRING = """
+               CreateBusinessProcess
+               CreateBusinessPath
+               CreateUrssafRoubaixOrganisation
+               ModifyBusinessPathTradePhase
+               ModelSpecialiseBusinessProcess
+               Tic
+  """
+  COMMON_BASIC_DOCUMENT_CREATION_SEQUENCE_STRING = """
+               CreateUrssafService
+               CreateLabourService
+               CreateEmployer
+               CreateEmployee
+               CreatePriceCurrency
+               CreateBasicModel
+               ModelCreateUrssafModelLine
+               UrssafModelLineCreateMovements
+               CreateBasicPaysheet
+               PaysheetCreateLabourPaySheetLine
+               Tic
+  """ + BUSINESS_PATH_CREATION_SEQUENCE_STRING
+
+
   def getTitle(self):
     return "Payroll"
 
@@ -152,7 +175,7 @@ class TestPayrollMixin(ERP5ReportTestCase, TestBPMMixin):
   def getBusinessTemplateList(self):
     """ """
     return ('erp5_base', 'erp5_pdm', 'erp5_trade', 'erp5_accounting',
-            'erp5_invoicing', 'erp5_simplified_invoicing', 'erp5_mrp', 
+            'erp5_invoicing', 'erp5_simplified_invoicing', 'erp5_mrp',
             'erp5_bpm', 'erp5_payroll')
 
   def createService(self):
@@ -250,6 +273,11 @@ class TestPayrollMixin(ERP5ReportTestCase, TestBPMMixin):
     slice_value.setQuantityRangeMax(max_value)
     slice_value.setQuantityRangeMin(min_value)
     return slice_value
+ 
+  def stepSetCurrencyOnModel(self, sequence=None, **kw):
+    model = sequence.get('model')
+    currency = sequence.get('price_currency')
+    model.setPriceCurrencyValue(currency)
 
   def stepCreateModelWithSlices(self, sequence=None, **kw):
     model = self.createModel()
@@ -469,7 +497,8 @@ class TestPayrollMixin(ERP5ReportTestCase, TestBPMMixin):
                     price=20,
                     quantity=150,
                     resource_value=sequence.get('labour_service'),
-                    base_contribution_list=[ 'base_amount/base_salary'])
+                    base_contribution_list=['base_amount/base_salary',
+                                            'base_amount/gross_salary'])
     sequence.edit(labour_paysheet_line = paysheet_line)
 
   def stepPaysheetCreateBonusPaySheetLine(self, sequence=None, **kw):
@@ -1883,28 +1912,6 @@ class TestPayrollMixin(ERP5ReportTestCase, TestBPMMixin):
 
 class TestPayroll(TestPayrollMixin):
 
-  BUSINESS_PATH_CREATION_SEQUENCE_STRING = """
-               CreateBusinessProcess
-               CreateBusinessPath
-               CreateUrssafRoubaixOrganisation
-               ModifyBusinessPathTradePhase
-               ModelSpecialiseBusinessProcess
-               Tic
-  """
-  COMMON_BASIC_DOCUMENT_CREATION_SEQUENCE_STRING = """
-               CreateUrssafService
-               CreateLabourService
-               CreateEmployer
-               CreateEmployee
-               CreatePriceCurrency
-               CreateBasicModel
-               ModelCreateUrssafModelLine
-               UrssafModelLineCreateMovements
-               CreateBasicPaysheet
-               PaysheetCreateLabourPaySheetLine
-               Tic
-  """ + BUSINESS_PATH_CREATION_SEQUENCE_STRING
-
   def test_modelGetCell(self):
     '''
       Model objects have a overload method called getCell. This method first
diff --git a/product/ERP5/tests/testPayroll_l10n_fr.py b/product/ERP5/tests/testPayroll_l10n_fr.py
index 3f2b88fcdb505559d415d7e0be6c0eee3a38c9a6..28c38859dbeb4f4f3152f93a30fed76b7a9bd821 100644
--- a/product/ERP5/tests/testPayroll_l10n_fr.py
+++ b/product/ERP5/tests/testPayroll_l10n_fr.py
@@ -29,133 +29,79 @@
   test cases related to french localisation (tranche A for example)
 """
 
-from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
-from AccessControl.SecurityManagement import newSecurityManager
-from Acquisition import aq_parent
+from Products.ERP5Type.tests.Sequence import SequenceList
 from Products.ERP5.tests.testPayroll import TestPayrollMixin
-from DateTime import DateTime
-import transaction
 
 class TestPayroll_l10n_fr(TestPayrollMixin):
 
+  PAYSHEET_WITH_SLICE_SEQUENCE_STRING = '''
+               CreateBasicPaysheet
+               PaysheetSetModelAndApplyIt
+               PaysheetCreateLabourPaySheetLine
+  ''' + TestPayrollMixin.BUSINESS_PATH_CREATION_SEQUENCE_STRING + '''
+               CheckUpdateAggregatedAmountListReturnUsingSlices
+               PaysheetApplyTransformation
+               Tic
+               CheckPaysheetLineAreCreatedUsingSlices
+               CheckPaysheetLineAmountsUsingSlices
+               CheckUpdateAggregatedAmountListReturnNothing
+               CheckPaysheetLineAmountsUsingSlices
+  '''
+
   def getTitle(self):
     return "Payroll_l10n_fr"
 
   def getBusinessTemplateList(self):
     """ """
-    return ('erp5_base', 'erp5_pdm', 'erp5_trade', 'erp5_accounting',
-        'erp5_payroll', 'erp5_payroll_l10n_fr')
+    return TestPayrollMixin.getBusinessTemplateList(self) +\
+          ('erp5_payroll_l10n_fr',)
+
+  def stepCheckYearToDateSliceAmount(self, sequence=None, **kw):
+    paysheet_module = self.portal.getDefaultModule(portal_type=\
+        'Pay Sheet Transaction')
+    paysheet_list = paysheet_module.contentValues(portal_type=\
+        'Pay Sheet Transaction')
+    self.assertEquals(len(paysheet_list), 2) # 2 paysheet have been created
+                                             # for this test
+    for paysheet in paysheet_list:
+      # the script used for calculation only take into account stopped or
+      # delivered paysheet
+      paysheet.stop()
+    self.stepTic()
+
+    # here, check how much is contributed to the slices
+    self.assertEquals(400, # 200 from the 1st paysheet + 200 from the 2e
+        paysheet_list[1].PaySheetTransaction_getYearToDateSlice(\
+            'salary_range/france/slice_0_to_200'))
+    self.assertEquals(400, # 200 from the 1st paysheet + 200 from the 2e
+        paysheet_list[1].PaySheetTransaction_getYearToDateSlice(\
+            'salary_range/france/slice_200_to_400'))
+    self.assertEquals(5200, # (3000 - 400)*2
+        paysheet_list[1].PaySheetTransaction_getYearToDateSlice(\
+            'salary_range/france/slice_400_to_5000'))
 
   def test_01_getYearToDateSlice(self):
     '''
       that slices works and we can caculate the total amount spend on a slice
 
     '''
-    eur = self.portal.currency_module.EUR
-    model = self.paysheet_model_module.newContent( \
-            portal_type='Pay Sheet Model',
-            variation_settings_category_list=self.variation_settings_category_list)
-    model.setPriceCurrencyValue(eur)
-
-    self.addSlice(model, 'salary_range/%s' % \
-        self.france_settings_slice_a, 0, 1000)
-    self.addSlice(model, 'salary_range/%s' % \
-        self.france_settings_slice_b, 1000, 2000)
-    self.addSlice(model, 'salary_range/%s' % \
-        self.france_settings_slice_c, 2000, 10000000)
-    self.addSlice(model, 'salary_range/%s' % \
-        self.france_settings_forfait, 0, 10000000)
-
-    urssaf_slice_list = [ 'salary_range/'+self.france_settings_slice_a,]
-    urssaf_share_list = [ 'tax_category/'+self.tax_category_employee_share,]
-    salary_slice_list = ['salary_range/'+self.france_settings_forfait,]
-    salary_share_list = ['tax_category/'+self.tax_category_employee_share,]
-    variation_category_list_urssaf = urssaf_share_list + urssaf_slice_list
-    variation_category_list_salary = salary_share_list + salary_slice_list
-
-    model_line_1 = self.createModelLine(model=model,
-        id='model_line_1',
-        variation_category_list=variation_category_list_salary,
-        resource=self.labour,
-        share_list=salary_share_list,
-        slice_list=salary_slice_list,
-        values=[[[10000, None],],],
-        base_application_list=[],
-        base_contribution_list=['base_amount/base_salary',
-          'base_amount/gross_salary'])
-    model_line_1.setIntIndex(1)
-
-    model_line_2 = self.createModelLine(model=model,
-        id='model_line_2',
-        variation_category_list=variation_category_list_urssaf,
-        resource=self.urssaf,
-        share_list=urssaf_share_list,
-        slice_list=urssaf_slice_list,
-        values=[[[None, 0.8]],],
-        source_value=self.service_organisation,
-        base_application_list=[ 'base_amount/base_salary',],
-        base_contribution_list=['base_amount/net_salary',])
-    model_line_2.setIntIndex(2)
-    
-    model_line_3 = self.createModelLine(model=model,
-        id='model_line_3',
-        variation_category_list=variation_category_list_urssaf,
-        resource=self.urssaf,
-        share_list=urssaf_share_list,
-        slice_list=urssaf_slice_list,
-        values=[[[None, -0.1]],],
-        source_value=self.service_organisation,
-        base_application_list=[ 'base_amount/net_salary',],
-        base_contribution_list=['base_amount/deductible_tax',])
-    model_line_3.setIntIndex(3)
-
-    # create a paysheet with two lines
-    paysheet = self.portal.accounting_module.newContent(
-                              portal_type='Pay Sheet Transaction',
-                              specialise_value=model,
-                              start_date=DateTime(2009, 07, 1),
-                              stop_date=DateTime(2009, 07, 31))
-    paysheet.PaySheetTransaction_applyModel()
-    self.assertEquals(len(paysheet.contentValues(portal_type='Pay Sheet Line')), 0)
-    # calculate the pay sheet
-    pay_sheet_line_list = self.calculatePaySheet(paysheet=paysheet)
-    self.assertEquals(len(paysheet.contentValues(portal_type='Pay Sheet Line')), 3)
-    # check values on the paysheet
-    line_list = paysheet.contentValues()
-    self.assertEquals(line_list[0].contentValues()[0].getTotalPrice(), 10000)
-    self.assertEquals(line_list[1].contentValues()[0].getTotalPrice(), 8000)
-    self.assertEquals(line_list[2].contentValues()[0].getTotalPrice(), -800)
-    paysheet.stop()
-
-    # create anoter paysheet with two lines
-    paysheet_2 = self.portal.accounting_module.newContent(
-                              portal_type='Pay Sheet Transaction',
-                              specialise_value=model,
-                              start_date=DateTime(2009, 8, 1),
-                              stop_date=DateTime(2009, 8, 31))
-    paysheet_2.PaySheetTransaction_applyModel()
-    self.assertEquals(len(paysheet_2.contentValues(portal_type='Pay Sheet Line')), 0)
-    # calculate the pay sheet
-    pay_sheet_line_list = self.calculatePaySheet(paysheet=paysheet_2)
-    self.assertEquals(len(paysheet.contentValues(portal_type='Pay Sheet Line')), 3)
-    # check values on the paysheet
-    line_list = paysheet_2.contentValues()
-    self.assertEquals(line_list[0].contentValues()[0].getTotalPrice(), 10000)
-    self.assertEquals(line_list[1].contentValues()[0].getTotalPrice(), 8000)
-    self.assertEquals(line_list[2].contentValues()[0].getTotalPrice(), -800)
-    transaction.commit()
-    self.tic()
-
-    # here, check how much is contributed to the slices
-    self.assertEquals(2000, # 1000 from the 1st paysheet + 1000 from the 2e
-        paysheet_2.PaySheetTransaction_getYearToDateSlice(\
-            'salary_range/france/tranche_a'))
-    self.assertEquals(2000, # 1000 from the 1st paysheet + 1000 from the 2e
-        paysheet_2.PaySheetTransaction_getYearToDateSlice(\
-            'salary_range/france/tranche_b'))
-    self.assertEquals(16000, # (10000 - 1000 - 1000)*2
-        paysheet_2.PaySheetTransaction_getYearToDateSlice(\
-            'salary_range/france/tranche_c'))
+    sequence_list = SequenceList()
+    sequence_string = """
+               CreateUrssafService
+               CreateLabourService
+               CreateEmployer
+               CreateEmployee
+               CreatePriceCurrency
+               CreateModelWithSlices
+               SetCurrencyOnModel
+               ModelCreateUrssafModelLineWithSlices
+               UrssafModelLineWithSlicesCreateMovements
+    """ + self.PAYSHEET_WITH_SLICE_SEQUENCE_STRING +\
+          self.PAYSHEET_WITH_SLICE_SEQUENCE_STRING + """
+               CheckYearToDateSliceAmount
+    """
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
 
 import unittest
 def test_suite():