diff --git a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountingPeriod_createBalanceTransaction.xml b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountingPeriod_createBalanceTransaction.xml
index 3d481cf25ca786cde7755b6023e8ff5f7e3757b6..887d1ae050df7b54c13d394435837e2938401bec 100644
--- a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountingPeriod_createBalanceTransaction.xml
+++ b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountingPeriod_createBalanceTransaction.xml
@@ -167,6 +167,7 @@ for section in section_list:\n
     **inventory_param_dict)\n
   selected_profit_and_loss_account_balance = portal.portal_simulation.getInventoryAssetPrice(\n
     node=profit_and_loss_account,\n
+    resource=section_currency,\n
     **inventory_param_dict)\n
   \n
   section_currency_uid = context.getParentValue().getPriceCurrencyUid()\n
@@ -189,10 +190,8 @@ for section in section_list:\n
     \n
     line_count += 1\n
     if inventory.resource_uid != section_currency_uid:\n
-      if inventory.node_relative_url == profit_and_loss_account:\n
-        raise ValueError(\'Using multiple currencies on profit and loss account \'\n
-                         \'is not supported\')\n
       profit_and_loss_quantity += total_price\n
+      \n
       if balance_transaction is None:\n
         balance_transaction = createBalanceTransaction(section)\n
       balance_transaction.newContent(\n
diff --git a/product/ERP5/tests/testAccounting.py b/product/ERP5/tests/testAccounting.py
index 9a45704a4943acacb9548a94a5e81e5c3f0c9817..dd9ac15679ed62af256f86adfdcd4c36967f29b0 100644
--- a/product/ERP5/tests/testAccounting.py
+++ b/product/ERP5/tests/testAccounting.py
@@ -1852,6 +1852,82 @@ class TestClosingPeriod(AccountingTestCase):
     balance_transaction.reindexObject()
     self.tic()
 
+  def test_ProfitAndLossUsedInPeriodWithMultipleCurrency(self):
+    """When the profit and loss account has a non zero balance at the end of
+    the period, AccountingPeriod_createBalanceTransaction script should add
+    a line for each currency used.
+    """
+    period = self.section.newContent(portal_type='Accounting Period')
+    period.setStartDate(DateTime(2006, 1, 1))
+    period.setStopDate(DateTime(2006, 12, 31))
+    pl_account = self.portal.account_module.newContent(
+                    portal_type='Account',
+                    account_type='equity',
+                    gap='my_country/my_accounting_standards/1',
+                    title='Profit & Loss')
+    pl_account.validate()
+
+    transaction1 = self._makeOne(
+        start_date=DateTime(2006, 1, 1),
+        portal_type='Accounting Transaction',
+        simulation_state='delivered',
+        lines=(dict(source_value=self.account_module.goods_purchase,
+                    source_debit=400),
+               dict(source_value=pl_account,
+                    source_debit=100),
+               dict(source_value=self.account_module.stocks,
+                    source_credit=500)))
+    self.assertEqual([], transaction1.checkConsistency())
+
+    transaction2 = self._makeOne(
+        start_date=DateTime(2006, 1, 2),
+        portal_type='Accounting Transaction',
+        resource_value=self.portal.currency_module.yen,
+        simulation_state='delivered',
+        lines=(dict(source_value=self.account_module.goods_purchase,
+                    source_debit=9000,
+                    source_asset_debit=90),
+               dict(source_value=pl_account,
+                    source_debit=1000,
+                    source_asset_debit=10),
+               dict(source_value=self.account_module.stocks,
+                    source_credit=10000,
+                    source_asset_credit=100)))
+    self.assertEqual([], transaction2.checkConsistency())
+
+    period.AccountingPeriod_createBalanceTransaction(
+                  profit_and_loss_account=pl_account.getRelativeUrl())
+
+    balance_transaction_list = self.accounting_module.contentValues(
+                              portal_type='Balance Transaction')
+    self.assertEqual(1, len(balance_transaction_list))
+    balance_transaction = balance_transaction_list[0]
+    balance_transaction.alternateReindexObject()
+    movement_list = balance_transaction.getMovementList()
+
+    pl_movement_list = [m for m in movement_list
+                      if m.getDestinationValue() == pl_account]
+    self.assertEqual(2, len(pl_movement_list))
+    # This is a 400 + 90 loss, plus the 100 using EUR
+    self.assertEqual(sorted([
+        (
+         100 + 490.,
+         None,
+         self.portal.currency_module.euro, ),
+        (
+         1000.,
+         10.,
+         self.portal.currency_module.yen, ),
+        ]), sorted([(
+            m.getQuantity(),
+            m.getDestinationTotalAssetPrice(),
+            m.getResourceValue(),
+            ) for m in pl_movement_list]))
+
+    self.tic()
+    balance_transaction.reindexObject()
+    self.tic()
+
   def test_BalanceTransactionWhenProfitAndLossBalanceIsZero(self):
     # The case of a balance transaction after all accounts have a 0 balance.
     period1 = self.section.newContent(portal_type='Accounting Period')