diff -pruN 2.6.1+dfsg-2/.gitlab-ci.yml 2.7.0+dfsg-1/.gitlab-ci.yml
--- 2.6.1+dfsg-2/.gitlab-ci.yml	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/.gitlab-ci.yml	2025-09-02 12:27:47.000000000 +0000
@@ -1,16 +1,15 @@
 pypi:
+    image:
+        name: pretix/ci-image
     script:
-        - cp /keys/.pypirc ~/.pypirc
-        - virtualenv env
-        - source env/bin/activate
-        - XDG_CACHE_HOME=/cache pip3 install -U pip setuptools wheel
-        - XDG_CACHE_HOME=/cache pip3 install -r requirements_dev.txt
-        - python setup.py sdist develop
-        - python setup.py sdist clean
-        - python setup.py sdist upload
-        - python setup.py bdist_wheel upload
-    tags:
-        - python3
+        - cat $PYPIRC > ~/.pypirc
+        - pip install -U pip uv
+        - uv pip install --system -U wheel setuptools
+        - uv pip install --system -Ur requirements_dev.txt
+        - python setup.py develop
+        - python setup.py sdist bdist_wheel
+        - twine check dist/*
+        - twine upload dist/*
     only:
         - pypi
     artifacts:
diff -pruN 2.6.1+dfsg-2/LICENSE 2.7.0+dfsg-1/LICENSE
--- 2.6.1+dfsg-2/LICENSE	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/LICENSE	2025-09-02 12:27:47.000000000 +0000
@@ -1,4 +1,5 @@
-Copyright (c) 2012-2013 Raphael Michel and contributors
+Copyright (c) 2014 Congressus, The Netherlands
+Copyright (c) 2017-2023 Raphael Michel and contributors
 
 Permission is hereby granted, free of charge, to any person obtaining a copy 
 of this software and associated documentation files (the "Software"), to deal 
diff -pruN 2.6.1+dfsg-2/README.rst 2.7.0+dfsg-1/README.rst
--- 2.6.1+dfsg-2/README.rst	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/README.rst	2025-09-02 12:27:47.000000000 +0000
@@ -18,10 +18,13 @@ Limitations
 Supported standards:
 
 * SEPA PAIN.001.001.03
-* SEPA PAIN.001.003.03
+* SEPA PAIN.001.001.09
+* SEPA PAIN.001.001.10
+* SEPA PAIN.001.001.11
 * SEPA PAIN.008.001.02
-* SEPA PAIN.008.002.02
-* SEPA PAIN.008.003.02
+* SEPA PAIN.008.001.08
+* SEPA PAIN.008.001.09
+* SEPA PAIN.008.001.10
 
 Usage
 -----
@@ -164,6 +167,11 @@ To automatically sort your Imports as re
     isort -rc .
 
 
+Security
+--------
+
+If you discover a security issue, please contact us at security@pretix.eu and see our `Responsible Disclosure Policy`_ further information.
+
 Credits and License
 -------------------
 
@@ -173,6 +181,12 @@ This basically started as a properly pac
 of the `PySepaDD`_ implementation that was released by The Congressus under the MIT license.
 Thanks for your work!
 
-License: MIT
+The source code is released under MIT license.
+
+Not part of the MIT-licensed project are the XML schemas in the ``sepaxml/schemas/``
+folder which are copyrighted by the ISO 20022 organization but `allowed to be reproduced`_
+freely.
 
 .. _PySepaDD: https://github.com/congressus/PySepaDD
+.. _allowed to be reproduced: https://www.iso20022.org/terms-use
+.. _Responsible Disclosure Policy: https://docs.pretix.eu/trust/security/disclosure/
diff -pruN 2.6.1+dfsg-2/debian/changelog 2.7.0+dfsg-1/debian/changelog
--- 2.6.1+dfsg-2/debian/changelog	2023-07-14 09:15:15.000000000 +0000
+++ 2.7.0+dfsg-1/debian/changelog	2025-11-24 14:05:32.000000000 +0000
@@ -1,3 +1,13 @@
+python-sepaxml (2.7.0+dfsg-1) unstable; urgency=medium
+
+  * New upstream version 2.7.0+dfsg
+  * d/control: Drop Rules-Require-Root field
+  * d/control: Update my mail address
+  * d/control: Bump Standards-Version to 4.7.2; no changes needed
+  * d/gbp.conf: Add postimport slug
+
+ -- Matthias Geiger <werdahias@debian.org>  Mon, 24 Nov 2025 15:05:32 +0100
+
 python-sepaxml (2.6.1+dfsg-2) unstable; urgency=medium
 
   * Source-only upload for testing migration.
diff -pruN 2.6.1+dfsg-2/debian/control 2.7.0+dfsg-1/debian/control
--- 2.6.1+dfsg-2/debian/control	2023-07-14 09:12:31.000000000 +0000
+++ 2.7.0+dfsg-1/debian/control	2025-11-24 14:04:19.000000000 +0000
@@ -2,8 +2,7 @@ Source: python-sepaxml
 Section: python
 Priority: optional
 Maintainer: Debian Python Team <team+python@tracker.debian.org>
-Uploaders: Matthias Geiger <matthias.geiger1024@tutanota.de>
-Rules-Requires-Root: no
+Uploaders: Matthias Geiger <werdahias@debian.org>
 Build-Depends:
  debhelper-compat (= 13),
  dh-sequence-python3,
@@ -16,7 +15,7 @@ Build-Depends:
  python3-text-unidecode,
  python3-xmlschema
 Testsuite: autopkgtest-pkg-python
-Standards-Version: 4.6.2
+Standards-Version: 4.7.2
 Homepage: https://github.com/raphaelm/python-sepaxml
 Vcs-Browser: https://salsa.debian.org/python-team/packages/python-sepaxml
 Vcs-Git: https://salsa.debian.org/python-team/packages/python-sepaxml.git
diff -pruN 2.6.1+dfsg-2/debian/gbp.conf 2.7.0+dfsg-1/debian/gbp.conf
--- 2.6.1+dfsg-2/debian/gbp.conf	2023-07-14 09:12:31.000000000 +0000
+++ 2.7.0+dfsg-1/debian/gbp.conf	2025-11-24 14:04:59.000000000 +0000
@@ -5,3 +5,7 @@ upstream-branch = upstream/latest
 
 [buildpackage]
 sign-tags = True
+
+[import-orig]
+postimport = dch -v%(version)s New upstream release; git add debian/changelog; debcommit
+upstream-vcs-tag = %(version%~%.)s
diff -pruN 2.6.1+dfsg-2/sepaxml/__init__.py 2.7.0+dfsg-1/sepaxml/__init__.py
--- 2.6.1+dfsg-2/sepaxml/__init__.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/sepaxml/__init__.py	2025-09-02 12:27:47.000000000 +0000
@@ -1,4 +1,4 @@
 from .debit import SepaDD  # noqa
 from .transfer import SepaTransfer  # noqa
 
-version = '2.6.1'
+version = '2.7.0'
diff -pruN 2.6.1+dfsg-2/sepaxml/debit.py 2.7.0+dfsg-1/sepaxml/debit.py
--- 2.6.1+dfsg-2/sepaxml/debit.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/sepaxml/debit.py	2025-09-02 12:27:47.000000000 +0000
@@ -1,3 +1,24 @@
+"""
+Copyright (c) 2014 Congressus, The Netherlands
+Copyright (c) 2017-2023 Raphael Michel and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+"""
 import datetime
 import xml.etree.ElementTree as ET
 
@@ -11,7 +32,7 @@ class SepaDD(SepaPaymentInitn):
     """
     root_el = "CstmrDrctDbtInitn"
 
-    def __init__(self, config, schema="pain.008.003.02", clean=True):
+    def __init__(self, config, schema="pain.008.001.02", clean=True):
         if "instrument" not in config:
             config["instrument"] = "CORE"
         super().__init__(config, schema, clean)
@@ -25,7 +46,7 @@ class SepaDD(SepaPaymentInitn):
         """
         validation = ""
         required = ["name", "IBAN", "batch", "creditor_id", "currency"]
-        if self.schema == 'pain.008.001.02' or self.schema == 'pain.008.002.02':
+        if self.schema == 'pain.008.001.02':
             required += ["BIC"]
 
         for config_item in required:
@@ -109,7 +130,7 @@ class SepaDD(SepaPaymentInitn):
             bic = False
 
         TX_nodes = self._create_TX_node(bic)
-        TX_nodes['InstdAmtNode'].set("Ccy", self._config['currency'])
+        TX_nodes['InstdAmtNode'].set("Ccy", payment.get('currency', self._config['currency']))
         TX_nodes['InstdAmtNode'].text = int_to_decimal_str(payment['amount'])
 
         TX_nodes['MndtIdNode'].text = payment['mandate_id']
@@ -211,7 +232,10 @@ class SepaDD(SepaPaymentInitn):
         ED['CdtrAgtNode'] = ET.Element("CdtrAgt")
         ED['FinInstnId_CdtrAgt_Node'] = ET.Element("FinInstnId")
         if 'BIC' in self._config:
-            ED['BIC_CdtrAgt_Node'] = ET.Element("BIC")
+            if self.schema != 'pain.008.001.02':
+                ED['BIC_CdtrAgt_Node'] = ET.Element("BICFI")
+            else:
+                ED['BIC_CdtrAgt_Node'] = ET.Element("BIC")
         else:
             ED['Othr_CdtrAgt_Node'] = ET.Element("Othr")
             ED['Id_CdtrAgt_Node'] = ET.Element("Id")
@@ -242,7 +266,10 @@ class SepaDD(SepaPaymentInitn):
         ED['DbtrAgtNode'] = ET.Element("DbtrAgt")
         ED['FinInstnId_DbtrAgt_Node'] = ET.Element("FinInstnId")
         if bic:
-            ED['BIC_DbtrAgt_Node'] = ET.Element("BIC")
+            if self.schema != 'pain.008.001.02':
+                ED['BIC_DbtrAgt_Node'] = ET.Element("BICFI")
+            else:
+                ED['BIC_DbtrAgt_Node'] = ET.Element("BIC")
         else:
             ED['Id_DbtrAgt_Node'] = ET.Element("Id")
             ED['Othr_DbtrAgt_Node'] = ET.Element("Othr")
@@ -321,7 +348,7 @@ class SepaDD(SepaPaymentInitn):
         if 'BIC_DbtrAgt_Node' in TX_nodes and TX_nodes['BIC_DbtrAgt_Node'].text is not None:
             TX_nodes['FinInstnId_DbtrAgt_Node'].append(
                 TX_nodes['BIC_DbtrAgt_Node'])
-        elif self.schema != 'pain.008.001.02' and self.schema != 'pain.008.002.02':
+        else:
             TX_nodes['Othr_DbtrAgt_Node'].append(
                 TX_nodes['Id_DbtrAgt_Node'])
             TX_nodes['FinInstnId_DbtrAgt_Node'].append(
@@ -362,7 +389,7 @@ class SepaDD(SepaPaymentInitn):
         if 'BIC_DbtrAgt_Node' in TX_nodes and TX_nodes['BIC_DbtrAgt_Node'].text is not None:
             TX_nodes['FinInstnId_DbtrAgt_Node'].append(
                 TX_nodes['BIC_DbtrAgt_Node'])
-        elif self.schema != 'pain.008.001.02' and self.schema != 'pain.008.002.02':
+        else:
             TX_nodes['Othr_DbtrAgt_Node'].append(
                 TX_nodes['Id_DbtrAgt_Node'])
             TX_nodes['FinInstnId_DbtrAgt_Node'].append(
diff -pruN 2.6.1+dfsg-2/sepaxml/shared.py 2.7.0+dfsg-1/sepaxml/shared.py
--- 2.6.1+dfsg-2/sepaxml/shared.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/sepaxml/shared.py	2025-09-02 12:27:47.000000000 +0000
@@ -1,3 +1,24 @@
+"""
+Copyright (c) 2014 Congressus, The Netherlands
+Copyright (c) 2017-2023 Raphael Michel and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+"""
 import xml.etree.ElementTree as ET
 from collections import OrderedDict
 
diff -pruN 2.6.1+dfsg-2/sepaxml/transfer.py 2.7.0+dfsg-1/sepaxml/transfer.py
--- 2.6.1+dfsg-2/sepaxml/transfer.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/sepaxml/transfer.py	2025-09-02 12:27:47.000000000 +0000
@@ -1,3 +1,23 @@
+"""
+Copyright (c) 2017-2023 Raphael Michel and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+"""
 import datetime
 import xml.etree.ElementTree as ET
 
@@ -89,7 +109,10 @@ class SepaTransfer(SepaPaymentInitn):
             if not self._config.get('domestic', False):
                 PmtInf_nodes['Cd_SvcLvl_Node'].text = "SEPA"
             if 'execution_date' in payment:
-                PmtInf_nodes['ReqdExctnDtNode'].text = payment['execution_date']
+                if self.schema == "pain.001.001.03":
+                    PmtInf_nodes['ReqdExctnDtNode'].text = payment['execution_date']
+                else:
+                    PmtInf_nodes['ReqdExctnDt_Dt_Node'].text = payment['execution_date']
             else:
                 del PmtInf_nodes['ReqdExctnDtNode']
 
@@ -117,7 +140,7 @@ class SepaTransfer(SepaPaymentInitn):
             bic = False
 
         TX_nodes = self._create_TX_node(bic)
-        TX_nodes['InstdAmtNode'].set("Ccy", self._config['currency'])
+        TX_nodes['InstdAmtNode'].set("Ccy", payment.get('currency', self._config['currency']))
         TX_nodes['InstdAmtNode'].text = int_to_decimal_str(payment['amount'])
         TX_nodes['EndToEnd_PmtId_Node'].text = payment.get('endtoend_id', 'NOTPROVIDED')
         if bic:
@@ -191,6 +214,7 @@ class SepaTransfer(SepaPaymentInitn):
             ED['SvcLvlNode'] = ET.Element("SvcLvl")
             ED['Cd_SvcLvl_Node'] = ET.Element("Cd")
         ED['ReqdExctnDtNode'] = ET.Element("ReqdExctnDt")
+        ED['ReqdExctnDt_Dt_Node'] = ET.Element("Dt")
 
         ED['DbtrNode'] = ET.Element("Dbtr")
         ED['Nm_Dbtr_Node'] = ET.Element("Nm")
@@ -201,7 +225,10 @@ class SepaTransfer(SepaPaymentInitn):
         ED['DbtrAgtNode'] = ET.Element("DbtrAgt")
         ED['FinInstnId_DbtrAgt_Node'] = ET.Element("FinInstnId")
         if 'BIC' in self._config:
-            ED['BIC_DbtrAgt_Node'] = ET.Element("BIC")
+            if self.schema != 'pain.001.001.03':
+                ED['BIC_DbtrAgt_Node'] = ET.Element("BICFI")
+            else:
+                ED['BIC_DbtrAgt_Node'] = ET.Element("BIC")
         ED['ChrgBrNode'] = ET.Element("ChrgBr")
         return ED
 
@@ -222,7 +249,10 @@ class SepaTransfer(SepaPaymentInitn):
         ED['CdtrAgtNode'] = ET.Element("CdtrAgt")
         ED['FinInstnId_CdtrAgt_Node'] = ET.Element("FinInstnId")
         if bic:
-            ED['BIC_CdtrAgt_Node'] = ET.Element("BIC")
+            if self.schema != 'pain.001.001.03':
+                ED['BIC_CdtrAgt_Node'] = ET.Element("BICFI")
+            else:
+                ED['BIC_CdtrAgt_Node'] = ET.Element("BIC")
         ED['CdtrAcctNode'] = ET.Element("CdtrAcct")
         ED['Id_CdtrAcct_Node'] = ET.Element("Id")
         ED['IBAN_CdtrAcct_Node'] = ET.Element("IBAN")
@@ -247,9 +277,11 @@ class SepaTransfer(SepaPaymentInitn):
             PmtInf_nodes['PmtInfNode'].append(PmtInf_nodes['PmtTpInfNode'])
         if 'ReqdExctnDtNode' in PmtInf_nodes:
             PmtInf_nodes['PmtInfNode'].append(PmtInf_nodes['ReqdExctnDtNode'])
+            if self.schema != "pain.001.001.03":
+                PmtInf_nodes['ReqdExctnDtNode'].append(PmtInf_nodes['ReqdExctnDt_Dt_Node'])
 
         PmtInf_nodes['DbtrNode'].append(PmtInf_nodes['Nm_Dbtr_Node'])
-        if PmtInf_nodes['PstlAdr_Dbtr_Node']:
+        if "PstlAdr_Dbtr_Node" in TX_nodes:
             PmtInf_nodes['DbtrNode'].append(TX_nodes['PstlAdr_Dbtr_Node'])
         PmtInf_nodes['PmtInfNode'].append(PmtInf_nodes['DbtrNode'])
 
@@ -276,8 +308,9 @@ class SepaTransfer(SepaPaymentInitn):
             TX_nodes['CdtTrfTxInfNode'].append(TX_nodes['CdtrAgtNode'])
 
         TX_nodes['CdtrNode'].append(TX_nodes['Nm_Cdtr_Node'])
-        if TX_nodes['PstlAdr_Cdtr_Node']:
-            TX_nodes['CdbtrNode'].append(TX_nodes['PstlAdr_Cdtr_Node'])
+        if len(TX_nodes['PstlAdr_Cdtr_Node']) > 0:
+            TX_nodes['CdtrNode'].append(TX_nodes['PstlAdr_Cdtr_Node'])
+
         TX_nodes['CdtTrfTxInfNode'].append(TX_nodes['CdtrNode'])
 
         TX_nodes['Id_CdtrAcct_Node'].append(TX_nodes['IBAN_CdtrAcct_Node'])
@@ -308,7 +341,7 @@ class SepaTransfer(SepaPaymentInitn):
             TX_nodes['CdtTrfTxInfNode'].append(TX_nodes['CdtrAgtNode'])
 
         TX_nodes['CdtrNode'].append(TX_nodes['Nm_Cdtr_Node'])
-        if TX_nodes['PstlAdr_Cdtr_Node']:
+        if len(TX_nodes['PstlAdr_Cdtr_Node']) > 0:
             TX_nodes['CdtrNode'].append(TX_nodes['PstlAdr_Cdtr_Node'])
         TX_nodes['CdtTrfTxInfNode'].append(TX_nodes['CdtrNode'])
 
@@ -356,7 +389,10 @@ class SepaTransfer(SepaPaymentInitn):
                 PmtInf_nodes['Cd_SvcLvl_Node'].text = "SEPA"
 
             if batch_meta:
-                PmtInf_nodes['ReqdExctnDtNode'].text = batch_meta
+                if self.schema == "pain.001.001.03":
+                    PmtInf_nodes['ReqdExctnDtNode'].text = batch_meta
+                else:
+                    PmtInf_nodes['ReqdExctnDt_Dt_Node'].text = batch_meta
             else:
                 del PmtInf_nodes['ReqdExctnDtNode']
             PmtInf_nodes['Nm_Dbtr_Node'].text = self._config['name']
@@ -392,9 +428,11 @@ class SepaTransfer(SepaPaymentInitn):
                 PmtInf_nodes['PmtInfNode'].append(PmtInf_nodes['PmtTpInfNode'])
             if 'ReqdExctnDtNode' in PmtInf_nodes:
                 PmtInf_nodes['PmtInfNode'].append(PmtInf_nodes['ReqdExctnDtNode'])
+                if self.schema != "pain.001.001.03":
+                    PmtInf_nodes['ReqdExctnDtNode'].append(PmtInf_nodes['ReqdExctnDt_Dt_Node'])
 
             PmtInf_nodes['DbtrNode'].append(PmtInf_nodes['Nm_Dbtr_Node'])
-            if PmtInf_nodes['PstlAdr_Dbtr_Node']:
+            if len(PmtInf_nodes['PstlAdr_Dbtr_Node']) > 0:
                 PmtInf_nodes['DbtrNode'].append(PmtInf_nodes['PstlAdr_Dbtr_Node'])
             PmtInf_nodes['PmtInfNode'].append(PmtInf_nodes['DbtrNode'])
 
diff -pruN 2.6.1+dfsg-2/sepaxml/utils.py 2.7.0+dfsg-1/sepaxml/utils.py
--- 2.6.1+dfsg-2/sepaxml/utils.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/sepaxml/utils.py	2025-09-02 12:27:47.000000000 +0000
@@ -1,3 +1,24 @@
+"""
+Copyright (c) 2014 Congressus, The Netherlands
+Copyright (c) 2017-2023 Raphael Michel and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+"""
 import datetime
 import hashlib
 import random
diff -pruN 2.6.1+dfsg-2/sepaxml/validation.py 2.7.0+dfsg-1/sepaxml/validation.py
--- 2.6.1+dfsg-2/sepaxml/validation.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/sepaxml/validation.py	2025-09-02 12:27:47.000000000 +0000
@@ -1,3 +1,23 @@
+"""
+Copyright (c) 2017-2023 Raphael Michel and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+"""
 import os
 
 
diff -pruN 2.6.1+dfsg-2/tests/debit/test_00800102.py 2.7.0+dfsg-1/tests/debit/test_00800102.py
--- 2.6.1+dfsg-2/tests/debit/test_00800102.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_00800102.py	2025-09-02 12:27:47.000000000 +0000
@@ -3,6 +3,7 @@ import datetime
 import pytest
 
 from sepaxml import SepaDD
+from sepaxml.validation import ValidationError
 from tests.utils import clean_ids, validate_xml
 
 
diff -pruN 2.6.1+dfsg-2/tests/debit/test_00800108.py 2.7.0+dfsg-1/tests/debit/test_00800108.py
--- 2.6.1+dfsg-2/tests/debit/test_00800108.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_00800108.py	2025-09-02 12:27:47.000000000 +0000
@@ -0,0 +1,216 @@
+import datetime
+
+import pytest
+
+from sepaxml import SepaDD
+from sepaxml.validation import ValidationError
+from tests.utils import clean_ids, validate_xml
+
+
+@pytest.fixture
+def sdd():
+    return SepaDD({
+        "name": "TestCreditor",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "batch": True,
+        "creditor_id": "DE26ZZZ00000000000",
+        "currency": "EUR"
+    }, schema="pain.008.001.08")
+
+
+SAMPLE_RESULT = b"""
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.08" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <CstmrDrctDbtInitn>
+    <GrpHdr>
+      <MsgId>20012017014921-ba2dab283fdd</MsgId>
+      <CreDtTm>2017-01-20T13:49:21</CreDtTm>
+      <NbOfTxs>2</NbOfTxs>
+      <CtrlSum>60.12</CtrlSum>
+      <InitgPty>
+        <Nm>TestCreditor</Nm>
+        <Id>
+          <OrgId>
+            <Othr>
+              <Id>DE26ZZZ00000000000</Id>
+            </Othr>
+          </OrgId>
+        </Id>
+      </InitgPty>
+    </GrpHdr>
+    <PmtInf>
+      <PmtInfId>TestCreditor-ecd6a2f680ce</PmtInfId>
+      <PmtMtd>DD</PmtMtd>
+      <BtchBookg>true</BtchBookg>
+      <NbOfTxs>1</NbOfTxs>
+      <CtrlSum>10.12</CtrlSum>
+      <PmtTpInf>
+        <SvcLvl>
+          <Cd>SEPA</Cd>
+        </SvcLvl>
+        <LclInstrm>
+          <Cd>CORE</Cd>
+        </LclInstrm>
+        <SeqTp>FRST</SeqTp>
+      </PmtTpInf>
+      <ReqdColltnDt>2017-01-20</ReqdColltnDt>
+      <Cdtr>
+        <Nm>TestCreditor</Nm>
+      </Cdtr>
+      <CdtrAcct>
+        <Id>
+          <IBAN>NL50BANK1234567890</IBAN>
+        </Id>
+      </CdtrAcct>
+      <CdtrAgt>
+        <FinInstnId>
+          <BICFI>BANKNL2A</BICFI>
+        </FinInstnId>
+      </CdtrAgt>
+      <ChrgBr>SLEV</ChrgBr>
+      <CdtrSchmeId>
+        <Id>
+          <PrvtId>
+            <Othr>
+              <Id>DE26ZZZ00000000000</Id>
+              <SchmeNm>
+                <Prtry>SEPA</Prtry>
+              </SchmeNm>
+            </Othr>
+          </PrvtId>
+        </Id>
+      </CdtrSchmeId>
+      <DrctDbtTxInf>
+        <PmtId>
+          <EndToEndId>TestCreditor-4431989789fb</EndToEndId>
+        </PmtId>
+        <InstdAmt Ccy="EUR">10.12</InstdAmt>
+        <DrctDbtTx>
+          <MndtRltdInf>
+            <MndtId>1234</MndtId>
+            <DtOfSgntr>2017-01-20</DtOfSgntr>
+          </MndtRltdInf>
+        </DrctDbtTx>
+        <DbtrAgt>
+          <FinInstnId>
+            <BICFI>BANKNL2A</BICFI>
+          </FinInstnId>
+        </DbtrAgt>
+        <Dbtr>
+          <Nm>Test von Testenstein</Nm>
+        </Dbtr>
+        <DbtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </DbtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction1</Ustrd>
+        </RmtInf>
+      </DrctDbtTxInf>
+    </PmtInf>
+    <PmtInf>
+      <PmtInfId>TestCreditor-d547a1b3882f</PmtInfId>
+      <PmtMtd>DD</PmtMtd>
+      <BtchBookg>true</BtchBookg>
+      <NbOfTxs>1</NbOfTxs>
+      <CtrlSum>50.00</CtrlSum>
+      <PmtTpInf>
+        <SvcLvl>
+          <Cd>SEPA</Cd>
+        </SvcLvl>
+        <LclInstrm>
+          <Cd>CORE</Cd>
+        </LclInstrm>
+        <SeqTp>RCUR</SeqTp>
+      </PmtTpInf>
+      <ReqdColltnDt>2017-01-20</ReqdColltnDt>
+      <Cdtr>
+        <Nm>TestCreditor</Nm>
+      </Cdtr>
+      <CdtrAcct>
+        <Id>
+          <IBAN>NL50BANK1234567890</IBAN>
+        </Id>
+      </CdtrAcct>
+      <CdtrAgt>
+        <FinInstnId>
+          <BICFI>BANKNL2A</BICFI>
+        </FinInstnId>
+      </CdtrAgt>
+      <ChrgBr>SLEV</ChrgBr>
+      <CdtrSchmeId>
+        <Id>
+          <PrvtId>
+            <Othr>
+              <Id>DE26ZZZ00000000000</Id>
+              <SchmeNm>
+                <Prtry>SEPA</Prtry>
+              </SchmeNm>
+            </Othr>
+          </PrvtId>
+        </Id>
+      </CdtrSchmeId>
+      <DrctDbtTxInf>
+        <PmtId>
+          <EndToEndId>TestCreditor-7e989083e265</EndToEndId>
+        </PmtId>
+        <InstdAmt Ccy="EUR">50.00</InstdAmt>
+        <DrctDbtTx>
+          <MndtRltdInf>
+            <MndtId>1234</MndtId>
+            <DtOfSgntr>2017-01-20</DtOfSgntr>
+          </MndtRltdInf>
+        </DrctDbtTx>
+        <DbtrAgt>
+          <FinInstnId>
+            <BICFI>BANKNL2A</BICFI>
+          </FinInstnId>
+        </DbtrAgt>
+        <Dbtr>
+          <Nm>Test du Test</Nm>
+        </Dbtr>
+        <DbtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </DbtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction2</Ustrd>
+        </RmtInf>
+      </DrctDbtTxInf>
+    </PmtInf>
+  </CstmrDrctDbtInitn>
+</Document>
+"""
+
+
+def test_two_debits(sdd):
+    payment1 = {
+        "name": "Test von Testenstein",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 1012,
+        "type": "FRST",
+        "collection_date": datetime.date.today(),
+        "mandate_id": "1234",
+        "mandate_date": datetime.date.today(),
+        "description": "Test transaction1"
+    }
+    payment2 = {
+        "name": "Test du Test",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 5000,
+        "type": "RCUR",
+        "collection_date": datetime.date.today(),
+        "mandate_id": "1234",
+        "mandate_date": datetime.date.today(),
+        "description": "Test transaction2"
+    }
+
+    sdd.add_payment(payment1)
+    sdd.add_payment(payment2)
+    xmlout = sdd.export()
+    xmlpretty = validate_xml(xmlout, "pain.008.001.08")
+    assert clean_ids(xmlpretty.strip()).decode() == clean_ids(SAMPLE_RESULT.strip()).decode()
diff -pruN 2.6.1+dfsg-2/tests/debit/test_00800109.py 2.7.0+dfsg-1/tests/debit/test_00800109.py
--- 2.6.1+dfsg-2/tests/debit/test_00800109.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_00800109.py	2025-09-02 12:27:47.000000000 +0000
@@ -0,0 +1,216 @@
+import datetime
+
+import pytest
+
+from sepaxml import SepaDD
+from sepaxml.validation import ValidationError
+from tests.utils import clean_ids, validate_xml
+
+
+@pytest.fixture
+def sdd():
+    return SepaDD({
+        "name": "TestCreditor",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "batch": True,
+        "creditor_id": "DE26ZZZ00000000000",
+        "currency": "EUR"
+    }, schema="pain.008.001.09")
+
+
+SAMPLE_RESULT = b"""
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.09" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <CstmrDrctDbtInitn>
+    <GrpHdr>
+      <MsgId>20012017014921-ba2dab283fdd</MsgId>
+      <CreDtTm>2017-01-20T13:49:21</CreDtTm>
+      <NbOfTxs>2</NbOfTxs>
+      <CtrlSum>60.12</CtrlSum>
+      <InitgPty>
+        <Nm>TestCreditor</Nm>
+        <Id>
+          <OrgId>
+            <Othr>
+              <Id>DE26ZZZ00000000000</Id>
+            </Othr>
+          </OrgId>
+        </Id>
+      </InitgPty>
+    </GrpHdr>
+    <PmtInf>
+      <PmtInfId>TestCreditor-ecd6a2f680ce</PmtInfId>
+      <PmtMtd>DD</PmtMtd>
+      <BtchBookg>true</BtchBookg>
+      <NbOfTxs>1</NbOfTxs>
+      <CtrlSum>10.12</CtrlSum>
+      <PmtTpInf>
+        <SvcLvl>
+          <Cd>SEPA</Cd>
+        </SvcLvl>
+        <LclInstrm>
+          <Cd>CORE</Cd>
+        </LclInstrm>
+        <SeqTp>FRST</SeqTp>
+      </PmtTpInf>
+      <ReqdColltnDt>2017-01-20</ReqdColltnDt>
+      <Cdtr>
+        <Nm>TestCreditor</Nm>
+      </Cdtr>
+      <CdtrAcct>
+        <Id>
+          <IBAN>NL50BANK1234567890</IBAN>
+        </Id>
+      </CdtrAcct>
+      <CdtrAgt>
+        <FinInstnId>
+          <BICFI>BANKNL2A</BICFI>
+        </FinInstnId>
+      </CdtrAgt>
+      <ChrgBr>SLEV</ChrgBr>
+      <CdtrSchmeId>
+        <Id>
+          <PrvtId>
+            <Othr>
+              <Id>DE26ZZZ00000000000</Id>
+              <SchmeNm>
+                <Prtry>SEPA</Prtry>
+              </SchmeNm>
+            </Othr>
+          </PrvtId>
+        </Id>
+      </CdtrSchmeId>
+      <DrctDbtTxInf>
+        <PmtId>
+          <EndToEndId>TestCreditor-4431989789fb</EndToEndId>
+        </PmtId>
+        <InstdAmt Ccy="EUR">10.12</InstdAmt>
+        <DrctDbtTx>
+          <MndtRltdInf>
+            <MndtId>1234</MndtId>
+            <DtOfSgntr>2017-01-20</DtOfSgntr>
+          </MndtRltdInf>
+        </DrctDbtTx>
+        <DbtrAgt>
+          <FinInstnId>
+            <BICFI>BANKNL2A</BICFI>
+          </FinInstnId>
+        </DbtrAgt>
+        <Dbtr>
+          <Nm>Test von Testenstein</Nm>
+        </Dbtr>
+        <DbtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </DbtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction1</Ustrd>
+        </RmtInf>
+      </DrctDbtTxInf>
+    </PmtInf>
+    <PmtInf>
+      <PmtInfId>TestCreditor-d547a1b3882f</PmtInfId>
+      <PmtMtd>DD</PmtMtd>
+      <BtchBookg>true</BtchBookg>
+      <NbOfTxs>1</NbOfTxs>
+      <CtrlSum>50.00</CtrlSum>
+      <PmtTpInf>
+        <SvcLvl>
+          <Cd>SEPA</Cd>
+        </SvcLvl>
+        <LclInstrm>
+          <Cd>CORE</Cd>
+        </LclInstrm>
+        <SeqTp>RCUR</SeqTp>
+      </PmtTpInf>
+      <ReqdColltnDt>2017-01-20</ReqdColltnDt>
+      <Cdtr>
+        <Nm>TestCreditor</Nm>
+      </Cdtr>
+      <CdtrAcct>
+        <Id>
+          <IBAN>NL50BANK1234567890</IBAN>
+        </Id>
+      </CdtrAcct>
+      <CdtrAgt>
+        <FinInstnId>
+          <BICFI>BANKNL2A</BICFI>
+        </FinInstnId>
+      </CdtrAgt>
+      <ChrgBr>SLEV</ChrgBr>
+      <CdtrSchmeId>
+        <Id>
+          <PrvtId>
+            <Othr>
+              <Id>DE26ZZZ00000000000</Id>
+              <SchmeNm>
+                <Prtry>SEPA</Prtry>
+              </SchmeNm>
+            </Othr>
+          </PrvtId>
+        </Id>
+      </CdtrSchmeId>
+      <DrctDbtTxInf>
+        <PmtId>
+          <EndToEndId>TestCreditor-7e989083e265</EndToEndId>
+        </PmtId>
+        <InstdAmt Ccy="EUR">50.00</InstdAmt>
+        <DrctDbtTx>
+          <MndtRltdInf>
+            <MndtId>1234</MndtId>
+            <DtOfSgntr>2017-01-20</DtOfSgntr>
+          </MndtRltdInf>
+        </DrctDbtTx>
+        <DbtrAgt>
+          <FinInstnId>
+            <BICFI>BANKNL2A</BICFI>
+          </FinInstnId>
+        </DbtrAgt>
+        <Dbtr>
+          <Nm>Test du Test</Nm>
+        </Dbtr>
+        <DbtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </DbtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction2</Ustrd>
+        </RmtInf>
+      </DrctDbtTxInf>
+    </PmtInf>
+  </CstmrDrctDbtInitn>
+</Document>
+"""
+
+
+def test_two_debits(sdd):
+    payment1 = {
+        "name": "Test von Testenstein",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 1012,
+        "type": "FRST",
+        "collection_date": datetime.date.today(),
+        "mandate_id": "1234",
+        "mandate_date": datetime.date.today(),
+        "description": "Test transaction1"
+    }
+    payment2 = {
+        "name": "Test du Test",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 5000,
+        "type": "RCUR",
+        "collection_date": datetime.date.today(),
+        "mandate_id": "1234",
+        "mandate_date": datetime.date.today(),
+        "description": "Test transaction2"
+    }
+
+    sdd.add_payment(payment1)
+    sdd.add_payment(payment2)
+    xmlout = sdd.export()
+    xmlpretty = validate_xml(xmlout, "pain.008.001.09")
+    assert clean_ids(xmlpretty.strip()).decode() == clean_ids(SAMPLE_RESULT.strip()).decode()
diff -pruN 2.6.1+dfsg-2/tests/debit/test_00800110.py 2.7.0+dfsg-1/tests/debit/test_00800110.py
--- 2.6.1+dfsg-2/tests/debit/test_00800110.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_00800110.py	2025-09-02 12:27:47.000000000 +0000
@@ -0,0 +1,216 @@
+import datetime
+
+import pytest
+
+from sepaxml import SepaDD
+from sepaxml.validation import ValidationError
+from tests.utils import clean_ids, validate_xml
+
+
+@pytest.fixture
+def sdd():
+    return SepaDD({
+        "name": "TestCreditor",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "batch": True,
+        "creditor_id": "DE26ZZZ00000000000",
+        "currency": "EUR"
+    }, schema="pain.008.001.10")
+
+
+SAMPLE_RESULT = b"""
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.10" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <CstmrDrctDbtInitn>
+    <GrpHdr>
+      <MsgId>20012017014921-ba2dab283fdd</MsgId>
+      <CreDtTm>2017-01-20T13:49:21</CreDtTm>
+      <NbOfTxs>2</NbOfTxs>
+      <CtrlSum>60.12</CtrlSum>
+      <InitgPty>
+        <Nm>TestCreditor</Nm>
+        <Id>
+          <OrgId>
+            <Othr>
+              <Id>DE26ZZZ00000000000</Id>
+            </Othr>
+          </OrgId>
+        </Id>
+      </InitgPty>
+    </GrpHdr>
+    <PmtInf>
+      <PmtInfId>TestCreditor-ecd6a2f680ce</PmtInfId>
+      <PmtMtd>DD</PmtMtd>
+      <BtchBookg>true</BtchBookg>
+      <NbOfTxs>1</NbOfTxs>
+      <CtrlSum>10.12</CtrlSum>
+      <PmtTpInf>
+        <SvcLvl>
+          <Cd>SEPA</Cd>
+        </SvcLvl>
+        <LclInstrm>
+          <Cd>CORE</Cd>
+        </LclInstrm>
+        <SeqTp>FRST</SeqTp>
+      </PmtTpInf>
+      <ReqdColltnDt>2017-01-20</ReqdColltnDt>
+      <Cdtr>
+        <Nm>TestCreditor</Nm>
+      </Cdtr>
+      <CdtrAcct>
+        <Id>
+          <IBAN>NL50BANK1234567890</IBAN>
+        </Id>
+      </CdtrAcct>
+      <CdtrAgt>
+        <FinInstnId>
+          <BICFI>BANKNL2A</BICFI>
+        </FinInstnId>
+      </CdtrAgt>
+      <ChrgBr>SLEV</ChrgBr>
+      <CdtrSchmeId>
+        <Id>
+          <PrvtId>
+            <Othr>
+              <Id>DE26ZZZ00000000000</Id>
+              <SchmeNm>
+                <Prtry>SEPA</Prtry>
+              </SchmeNm>
+            </Othr>
+          </PrvtId>
+        </Id>
+      </CdtrSchmeId>
+      <DrctDbtTxInf>
+        <PmtId>
+          <EndToEndId>TestCreditor-4431989789fb</EndToEndId>
+        </PmtId>
+        <InstdAmt Ccy="EUR">10.12</InstdAmt>
+        <DrctDbtTx>
+          <MndtRltdInf>
+            <MndtId>1234</MndtId>
+            <DtOfSgntr>2017-01-20</DtOfSgntr>
+          </MndtRltdInf>
+        </DrctDbtTx>
+        <DbtrAgt>
+          <FinInstnId>
+            <BICFI>BANKNL2A</BICFI>
+          </FinInstnId>
+        </DbtrAgt>
+        <Dbtr>
+          <Nm>Test von Testenstein</Nm>
+        </Dbtr>
+        <DbtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </DbtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction1</Ustrd>
+        </RmtInf>
+      </DrctDbtTxInf>
+    </PmtInf>
+    <PmtInf>
+      <PmtInfId>TestCreditor-d547a1b3882f</PmtInfId>
+      <PmtMtd>DD</PmtMtd>
+      <BtchBookg>true</BtchBookg>
+      <NbOfTxs>1</NbOfTxs>
+      <CtrlSum>50.00</CtrlSum>
+      <PmtTpInf>
+        <SvcLvl>
+          <Cd>SEPA</Cd>
+        </SvcLvl>
+        <LclInstrm>
+          <Cd>CORE</Cd>
+        </LclInstrm>
+        <SeqTp>RCUR</SeqTp>
+      </PmtTpInf>
+      <ReqdColltnDt>2017-01-20</ReqdColltnDt>
+      <Cdtr>
+        <Nm>TestCreditor</Nm>
+      </Cdtr>
+      <CdtrAcct>
+        <Id>
+          <IBAN>NL50BANK1234567890</IBAN>
+        </Id>
+      </CdtrAcct>
+      <CdtrAgt>
+        <FinInstnId>
+          <BICFI>BANKNL2A</BICFI>
+        </FinInstnId>
+      </CdtrAgt>
+      <ChrgBr>SLEV</ChrgBr>
+      <CdtrSchmeId>
+        <Id>
+          <PrvtId>
+            <Othr>
+              <Id>DE26ZZZ00000000000</Id>
+              <SchmeNm>
+                <Prtry>SEPA</Prtry>
+              </SchmeNm>
+            </Othr>
+          </PrvtId>
+        </Id>
+      </CdtrSchmeId>
+      <DrctDbtTxInf>
+        <PmtId>
+          <EndToEndId>TestCreditor-7e989083e265</EndToEndId>
+        </PmtId>
+        <InstdAmt Ccy="EUR">50.00</InstdAmt>
+        <DrctDbtTx>
+          <MndtRltdInf>
+            <MndtId>1234</MndtId>
+            <DtOfSgntr>2017-01-20</DtOfSgntr>
+          </MndtRltdInf>
+        </DrctDbtTx>
+        <DbtrAgt>
+          <FinInstnId>
+            <BICFI>BANKNL2A</BICFI>
+          </FinInstnId>
+        </DbtrAgt>
+        <Dbtr>
+          <Nm>Test du Test</Nm>
+        </Dbtr>
+        <DbtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </DbtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction2</Ustrd>
+        </RmtInf>
+      </DrctDbtTxInf>
+    </PmtInf>
+  </CstmrDrctDbtInitn>
+</Document>
+"""
+
+
+def test_two_debits(sdd):
+    payment1 = {
+        "name": "Test von Testenstein",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 1012,
+        "type": "FRST",
+        "collection_date": datetime.date.today(),
+        "mandate_id": "1234",
+        "mandate_date": datetime.date.today(),
+        "description": "Test transaction1"
+    }
+    payment2 = {
+        "name": "Test du Test",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 5000,
+        "type": "RCUR",
+        "collection_date": datetime.date.today(),
+        "mandate_id": "1234",
+        "mandate_date": datetime.date.today(),
+        "description": "Test transaction2"
+    }
+
+    sdd.add_payment(payment1)
+    sdd.add_payment(payment2)
+    xmlout = sdd.export()
+    xmlpretty = validate_xml(xmlout, "pain.008.001.10")
+    assert clean_ids(xmlpretty.strip()).decode() == clean_ids(SAMPLE_RESULT.strip()).decode()
diff -pruN 2.6.1+dfsg-2/tests/debit/test_00800202.py 2.7.0+dfsg-1/tests/debit/test_00800202.py
--- 2.6.1+dfsg-2/tests/debit/test_00800202.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_00800202.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,215 +0,0 @@
-import datetime
-
-import pytest
-
-from sepaxml import SepaDD
-from tests.utils import clean_ids, validate_xml
-
-
-@pytest.fixture
-def sdd():
-    return SepaDD({
-        "name": "TestCreditor",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "batch": True,
-        "creditor_id": "DE26ZZZ00000000000",
-        "currency": "EUR"
-    }, schema="pain.008.002.02")
-
-
-SAMPLE_RESULT = b"""
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.002.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <CstmrDrctDbtInitn>
-    <GrpHdr>
-      <MsgId>20012017014921-ba2dab283fdd</MsgId>
-      <CreDtTm>2017-01-20T13:49:21</CreDtTm>
-      <NbOfTxs>2</NbOfTxs>
-      <CtrlSum>60.12</CtrlSum>
-      <InitgPty>
-        <Nm>TestCreditor</Nm>
-        <Id>
-          <OrgId>
-            <Othr>
-              <Id>DE26ZZZ00000000000</Id>
-            </Othr>
-          </OrgId>
-        </Id>
-      </InitgPty>
-    </GrpHdr>
-    <PmtInf>
-      <PmtInfId>TestCreditor-ecd6a2f680ce</PmtInfId>
-      <PmtMtd>DD</PmtMtd>
-      <BtchBookg>true</BtchBookg>
-      <NbOfTxs>1</NbOfTxs>
-      <CtrlSum>10.12</CtrlSum>
-      <PmtTpInf>
-        <SvcLvl>
-          <Cd>SEPA</Cd>
-        </SvcLvl>
-        <LclInstrm>
-          <Cd>CORE</Cd>
-        </LclInstrm>
-        <SeqTp>FRST</SeqTp>
-      </PmtTpInf>
-      <ReqdColltnDt>2017-01-20</ReqdColltnDt>
-      <Cdtr>
-        <Nm>TestCreditor</Nm>
-      </Cdtr>
-      <CdtrAcct>
-        <Id>
-          <IBAN>NL50BANK1234567890</IBAN>
-        </Id>
-      </CdtrAcct>
-      <CdtrAgt>
-        <FinInstnId>
-          <BIC>BANKNL2A</BIC>
-        </FinInstnId>
-      </CdtrAgt>
-      <ChrgBr>SLEV</ChrgBr>
-      <CdtrSchmeId>
-        <Id>
-          <PrvtId>
-            <Othr>
-              <Id>DE26ZZZ00000000000</Id>
-              <SchmeNm>
-                <Prtry>SEPA</Prtry>
-              </SchmeNm>
-            </Othr>
-          </PrvtId>
-        </Id>
-      </CdtrSchmeId>
-      <DrctDbtTxInf>
-        <PmtId>
-          <EndToEndId>TestCreditor-4431989789fb</EndToEndId>
-        </PmtId>
-        <InstdAmt Ccy="EUR">10.12</InstdAmt>
-        <DrctDbtTx>
-          <MndtRltdInf>
-            <MndtId>1234</MndtId>
-            <DtOfSgntr>2017-01-20</DtOfSgntr>
-          </MndtRltdInf>
-        </DrctDbtTx>
-        <DbtrAgt>
-          <FinInstnId>
-            <BIC>BANKNL2A</BIC>
-          </FinInstnId>
-        </DbtrAgt>
-        <Dbtr>
-          <Nm>Test von Testenstein</Nm>
-        </Dbtr>
-        <DbtrAcct>
-          <Id>
-            <IBAN>NL50BANK1234567890</IBAN>
-          </Id>
-        </DbtrAcct>
-        <RmtInf>
-          <Ustrd>Test transaction1</Ustrd>
-        </RmtInf>
-      </DrctDbtTxInf>
-    </PmtInf>
-    <PmtInf>
-      <PmtInfId>TestCreditor-d547a1b3882f</PmtInfId>
-      <PmtMtd>DD</PmtMtd>
-      <BtchBookg>true</BtchBookg>
-      <NbOfTxs>1</NbOfTxs>
-      <CtrlSum>50.00</CtrlSum>
-      <PmtTpInf>
-        <SvcLvl>
-          <Cd>SEPA</Cd>
-        </SvcLvl>
-        <LclInstrm>
-          <Cd>CORE</Cd>
-        </LclInstrm>
-        <SeqTp>RCUR</SeqTp>
-      </PmtTpInf>
-      <ReqdColltnDt>2017-01-20</ReqdColltnDt>
-      <Cdtr>
-        <Nm>TestCreditor</Nm>
-      </Cdtr>
-      <CdtrAcct>
-        <Id>
-          <IBAN>NL50BANK1234567890</IBAN>
-        </Id>
-      </CdtrAcct>
-      <CdtrAgt>
-        <FinInstnId>
-          <BIC>BANKNL2A</BIC>
-        </FinInstnId>
-      </CdtrAgt>
-      <ChrgBr>SLEV</ChrgBr>
-      <CdtrSchmeId>
-        <Id>
-          <PrvtId>
-            <Othr>
-              <Id>DE26ZZZ00000000000</Id>
-              <SchmeNm>
-                <Prtry>SEPA</Prtry>
-              </SchmeNm>
-            </Othr>
-          </PrvtId>
-        </Id>
-      </CdtrSchmeId>
-      <DrctDbtTxInf>
-        <PmtId>
-          <EndToEndId>TestCreditor-7e989083e265</EndToEndId>
-        </PmtId>
-        <InstdAmt Ccy="EUR">50.00</InstdAmt>
-        <DrctDbtTx>
-          <MndtRltdInf>
-            <MndtId>1234</MndtId>
-            <DtOfSgntr>2017-01-20</DtOfSgntr>
-          </MndtRltdInf>
-        </DrctDbtTx>
-        <DbtrAgt>
-          <FinInstnId>
-            <BIC>BANKNL2A</BIC>
-          </FinInstnId>
-        </DbtrAgt>
-        <Dbtr>
-          <Nm>Test du Test</Nm>
-        </Dbtr>
-        <DbtrAcct>
-          <Id>
-            <IBAN>NL50BANK1234567890</IBAN>
-          </Id>
-        </DbtrAcct>
-        <RmtInf>
-          <Ustrd>Test transaction2</Ustrd>
-        </RmtInf>
-      </DrctDbtTxInf>
-    </PmtInf>
-  </CstmrDrctDbtInitn>
-</Document>
-"""
-
-
-def test_two_debits(sdd):
-    payment1 = {
-        "name": "Test von Testenstein",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "amount": 1012,
-        "type": "FRST",
-        "collection_date": datetime.date.today(),
-        "mandate_id": "1234",
-        "mandate_date": datetime.date.today(),
-        "description": "Test transaction1"
-    }
-    payment2 = {
-        "name": "Test du Test",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "amount": 5000,
-        "type": "RCUR",
-        "collection_date": datetime.date.today(),
-        "mandate_id": "1234",
-        "mandate_date": datetime.date.today(),
-        "description": "Test transaction2"
-    }
-
-    sdd.add_payment(payment1)
-    sdd.add_payment(payment2)
-    xmlout = sdd.export()
-    xmlpretty = validate_xml(xmlout, "pain.008.002.02")
-    assert clean_ids(xmlpretty.strip()) == clean_ids(SAMPLE_RESULT.strip())
diff -pruN 2.6.1+dfsg-2/tests/debit/test_00800302.py 2.7.0+dfsg-1/tests/debit/test_00800302.py
--- 2.6.1+dfsg-2/tests/debit/test_00800302.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_00800302.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,268 +0,0 @@
-import datetime
-
-import pytest
-
-from sepaxml import SepaDD
-from sepaxml.validation import ValidationError
-from tests.utils import clean_ids, validate_xml
-
-
-@pytest.fixture
-def sdd():
-    return SepaDD({
-        "name": "TestCreditor",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "batch": True,
-        "creditor_id": "DE26ZZZ00000000000",
-        "currency": "EUR"
-    }, schema="pain.008.003.02")
-
-
-SAMPLE_RESULT = b"""
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <CstmrDrctDbtInitn>
-    <GrpHdr>
-      <MsgId>20012017014921-ba2dab283fdd</MsgId>
-      <CreDtTm>2017-01-20T13:49:21</CreDtTm>
-      <NbOfTxs>2</NbOfTxs>
-      <CtrlSum>60.12</CtrlSum>
-      <InitgPty>
-        <Nm>TestCreditor</Nm>
-        <Id>
-          <OrgId>
-            <Othr>
-              <Id>DE26ZZZ00000000000</Id>
-            </Othr>
-          </OrgId>
-        </Id>
-      </InitgPty>
-    </GrpHdr>
-    <PmtInf>
-      <PmtInfId>TestCreditor-ecd6a2f680ce</PmtInfId>
-      <PmtMtd>DD</PmtMtd>
-      <BtchBookg>true</BtchBookg>
-      <NbOfTxs>1</NbOfTxs>
-      <CtrlSum>10.12</CtrlSum>
-      <PmtTpInf>
-        <SvcLvl>
-          <Cd>SEPA</Cd>
-        </SvcLvl>
-        <LclInstrm>
-          <Cd>CORE</Cd>
-        </LclInstrm>
-        <SeqTp>FRST</SeqTp>
-      </PmtTpInf>
-      <ReqdColltnDt>2017-01-20</ReqdColltnDt>
-      <Cdtr>
-        <Nm>TestCreditor</Nm>
-      </Cdtr>
-      <CdtrAcct>
-        <Id>
-          <IBAN>NL50BANK1234567890</IBAN>
-        </Id>
-      </CdtrAcct>
-      <CdtrAgt>
-        <FinInstnId>
-          <BIC>BANKNL2A</BIC>
-        </FinInstnId>
-      </CdtrAgt>
-      <ChrgBr>SLEV</ChrgBr>
-      <CdtrSchmeId>
-        <Id>
-          <PrvtId>
-            <Othr>
-              <Id>DE26ZZZ00000000000</Id>
-              <SchmeNm>
-                <Prtry>SEPA</Prtry>
-              </SchmeNm>
-            </Othr>
-          </PrvtId>
-        </Id>
-      </CdtrSchmeId>
-      <DrctDbtTxInf>
-        <PmtId>
-          <EndToEndId>TestCreditor-4431989789fb</EndToEndId>
-        </PmtId>
-        <InstdAmt Ccy="EUR">10.12</InstdAmt>
-        <DrctDbtTx>
-          <MndtRltdInf>
-            <MndtId>1234</MndtId>
-            <DtOfSgntr>2017-01-20</DtOfSgntr>
-          </MndtRltdInf>
-        </DrctDbtTx>
-        <DbtrAgt>
-          <FinInstnId>
-            <BIC>BANKNL2A</BIC>
-          </FinInstnId>
-        </DbtrAgt>
-        <Dbtr>
-          <Nm>Test von Testenstein</Nm>
-        </Dbtr>
-        <DbtrAcct>
-          <Id>
-            <IBAN>NL50BANK1234567890</IBAN>
-          </Id>
-        </DbtrAcct>
-        <RmtInf>
-          <Ustrd>Test transaction1</Ustrd>
-        </RmtInf>
-      </DrctDbtTxInf>
-    </PmtInf>
-    <PmtInf>
-      <PmtInfId>TestCreditor-d547a1b3882f</PmtInfId>
-      <PmtMtd>DD</PmtMtd>
-      <BtchBookg>true</BtchBookg>
-      <NbOfTxs>1</NbOfTxs>
-      <CtrlSum>50.00</CtrlSum>
-      <PmtTpInf>
-        <SvcLvl>
-          <Cd>SEPA</Cd>
-        </SvcLvl>
-        <LclInstrm>
-          <Cd>CORE</Cd>
-        </LclInstrm>
-        <SeqTp>RCUR</SeqTp>
-      </PmtTpInf>
-      <ReqdColltnDt>2017-01-20</ReqdColltnDt>
-      <Cdtr>
-        <Nm>TestCreditor</Nm>
-      </Cdtr>
-      <CdtrAcct>
-        <Id>
-          <IBAN>NL50BANK1234567890</IBAN>
-        </Id>
-      </CdtrAcct>
-      <CdtrAgt>
-        <FinInstnId>
-          <BIC>BANKNL2A</BIC>
-        </FinInstnId>
-      </CdtrAgt>
-      <ChrgBr>SLEV</ChrgBr>
-      <CdtrSchmeId>
-        <Id>
-          <PrvtId>
-            <Othr>
-              <Id>DE26ZZZ00000000000</Id>
-              <SchmeNm>
-                <Prtry>SEPA</Prtry>
-              </SchmeNm>
-            </Othr>
-          </PrvtId>
-        </Id>
-      </CdtrSchmeId>
-      <DrctDbtTxInf>
-        <PmtId>
-          <EndToEndId>TestCreditor-7e989083e265</EndToEndId>
-        </PmtId>
-        <InstdAmt Ccy="EUR">50.00</InstdAmt>
-        <DrctDbtTx>
-          <MndtRltdInf>
-            <MndtId>1234</MndtId>
-            <DtOfSgntr>2017-01-20</DtOfSgntr>
-          </MndtRltdInf>
-        </DrctDbtTx>
-        <DbtrAgt>
-          <FinInstnId>
-            <BIC>BANKNL2A</BIC>
-          </FinInstnId>
-        </DbtrAgt>
-        <Dbtr>
-          <Nm>Test du Test</Nm>
-        </Dbtr>
-        <DbtrAcct>
-          <Id>
-            <IBAN>NL50BANK1234567890</IBAN>
-          </Id>
-        </DbtrAcct>
-        <RmtInf>
-          <Ustrd>Test transaction2</Ustrd>
-        </RmtInf>
-      </DrctDbtTxInf>
-    </PmtInf>
-  </CstmrDrctDbtInitn>
-</Document>
-"""
-
-
-def test_two_debits(sdd):
-    payment1 = {
-        "name": "Test von Testenstein",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "amount": 1012,
-        "type": "FRST",
-        "collection_date": datetime.date.today(),
-        "mandate_id": "1234",
-        "mandate_date": datetime.date.today(),
-        "description": "Test transaction1"
-    }
-    payment2 = {
-        "name": "Test du Test",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "amount": 5000,
-        "type": "RCUR",
-        "collection_date": datetime.date.today(),
-        "mandate_id": "1234",
-        "mandate_date": datetime.date.today(),
-        "description": "Test transaction2"
-    }
-
-    sdd.add_payment(payment1)
-    sdd.add_payment(payment2)
-    xmlout = sdd.export()
-    xmlpretty = validate_xml(xmlout, "pain.008.003.02")
-    assert clean_ids(xmlpretty.strip()) == clean_ids(SAMPLE_RESULT.strip())
-
-
-def test_name_too_long():
-    sdd = SepaDD({
-        "name": "TestCreditor",
-        "BIC": "BANKNL2A",
-        "IBAN": "NL50BANK1234567890",
-        "batch": True,
-        "creditor_id": "000000",
-        "currency": "EUR"
-    }, schema="pain.008.003.02")
-    payment1 = {
-        "name": "Test von Testenstein Test von Testenstein Test von Testenstein Test von Testenstein",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "amount": 1012,
-        "type": "FRST",
-        "collection_date": datetime.date.today(),
-        "mandate_id": "1234",
-        "mandate_date": datetime.date.today(),
-        "description": "Test transaction1"
-    }
-    sdd.add_payment(payment1)
-    with pytest.raises(ValidationError):
-        sdd.export()
-    sdd.export(validate=False)
-
-
-def test_invalid_mandate():
-    sdd = SepaDD({
-        "name": "TestCreditor",
-        "BIC": "BANKNL2A",
-        "IBAN": "NL50BANK1234567890",
-        "batch": True,
-        "creditor_id": "000000",
-        "currency": "EUR"
-    }, schema="pain.008.003.02")
-    payment1 = {
-        "name": "Test von Testenstein",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "amount": 1012,
-        "type": "FRST",
-        "collection_date": datetime.date.today(),
-        "mandate_id": "1234ÄOÜ",
-        "mandate_date": datetime.date.today(),
-        "description": "Test transaction1"
-    }
-    sdd.add_payment(payment1)
-    with pytest.raises(ValidationError):
-        sdd.export()
-    sdd.export(validate=False)
diff -pruN 2.6.1+dfsg-2/tests/debit/test_00800302_b2b.py 2.7.0+dfsg-1/tests/debit/test_00800302_b2b.py
--- 2.6.1+dfsg-2/tests/debit/test_00800302_b2b.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_00800302_b2b.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,216 +0,0 @@
-import datetime
-
-import pytest
-
-from sepaxml import SepaDD
-from tests.utils import clean_ids, validate_xml
-
-
-@pytest.fixture
-def sdd():
-    return SepaDD({
-        "name": "TestCreditor",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "batch": True,
-        "creditor_id": "DE26ZZZ00000000000",
-        "currency": "EUR",
-        "instrument": "B2B"
-    }, schema="pain.008.003.02")
-
-
-SAMPLE_RESULT = b"""
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <CstmrDrctDbtInitn>
-    <GrpHdr>
-      <MsgId>20012017014921-ba2dab283fdd</MsgId>
-      <CreDtTm>2017-01-20T13:49:21</CreDtTm>
-      <NbOfTxs>2</NbOfTxs>
-      <CtrlSum>60.12</CtrlSum>
-      <InitgPty>
-        <Nm>TestCreditor</Nm>
-        <Id>
-          <OrgId>
-            <Othr>
-              <Id>DE26ZZZ00000000000</Id>
-            </Othr>
-          </OrgId>
-        </Id>
-      </InitgPty>
-    </GrpHdr>
-    <PmtInf>
-      <PmtInfId>TestCreditor-ecd6a2f680ce</PmtInfId>
-      <PmtMtd>DD</PmtMtd>
-      <BtchBookg>true</BtchBookg>
-      <NbOfTxs>1</NbOfTxs>
-      <CtrlSum>10.12</CtrlSum>
-      <PmtTpInf>
-        <SvcLvl>
-          <Cd>SEPA</Cd>
-        </SvcLvl>
-        <LclInstrm>
-          <Cd>B2B</Cd>
-        </LclInstrm>
-        <SeqTp>FRST</SeqTp>
-      </PmtTpInf>
-      <ReqdColltnDt>2017-01-20</ReqdColltnDt>
-      <Cdtr>
-        <Nm>TestCreditor</Nm>
-      </Cdtr>
-      <CdtrAcct>
-        <Id>
-          <IBAN>NL50BANK1234567890</IBAN>
-        </Id>
-      </CdtrAcct>
-      <CdtrAgt>
-        <FinInstnId>
-          <BIC>BANKNL2A</BIC>
-        </FinInstnId>
-      </CdtrAgt>
-      <ChrgBr>SLEV</ChrgBr>
-      <CdtrSchmeId>
-        <Id>
-          <PrvtId>
-            <Othr>
-              <Id>DE26ZZZ00000000000</Id>
-              <SchmeNm>
-                <Prtry>SEPA</Prtry>
-              </SchmeNm>
-            </Othr>
-          </PrvtId>
-        </Id>
-      </CdtrSchmeId>
-      <DrctDbtTxInf>
-        <PmtId>
-          <EndToEndId>TestCreditor-4431989789fb</EndToEndId>
-        </PmtId>
-        <InstdAmt Ccy="EUR">10.12</InstdAmt>
-        <DrctDbtTx>
-          <MndtRltdInf>
-            <MndtId>1234</MndtId>
-            <DtOfSgntr>2017-01-20</DtOfSgntr>
-          </MndtRltdInf>
-        </DrctDbtTx>
-        <DbtrAgt>
-          <FinInstnId>
-            <BIC>BANKNL2A</BIC>
-          </FinInstnId>
-        </DbtrAgt>
-        <Dbtr>
-          <Nm>Test von Testenstein</Nm>
-        </Dbtr>
-        <DbtrAcct>
-          <Id>
-            <IBAN>NL50BANK1234567890</IBAN>
-          </Id>
-        </DbtrAcct>
-        <RmtInf>
-          <Ustrd>Test transaction1</Ustrd>
-        </RmtInf>
-      </DrctDbtTxInf>
-    </PmtInf>
-    <PmtInf>
-      <PmtInfId>TestCreditor-d547a1b3882f</PmtInfId>
-      <PmtMtd>DD</PmtMtd>
-      <BtchBookg>true</BtchBookg>
-      <NbOfTxs>1</NbOfTxs>
-      <CtrlSum>50.00</CtrlSum>
-      <PmtTpInf>
-        <SvcLvl>
-          <Cd>SEPA</Cd>
-        </SvcLvl>
-        <LclInstrm>
-          <Cd>B2B</Cd>
-        </LclInstrm>
-        <SeqTp>RCUR</SeqTp>
-      </PmtTpInf>
-      <ReqdColltnDt>2017-01-20</ReqdColltnDt>
-      <Cdtr>
-        <Nm>TestCreditor</Nm>
-      </Cdtr>
-      <CdtrAcct>
-        <Id>
-          <IBAN>NL50BANK1234567890</IBAN>
-        </Id>
-      </CdtrAcct>
-      <CdtrAgt>
-        <FinInstnId>
-          <BIC>BANKNL2A</BIC>
-        </FinInstnId>
-      </CdtrAgt>
-      <ChrgBr>SLEV</ChrgBr>
-      <CdtrSchmeId>
-        <Id>
-          <PrvtId>
-            <Othr>
-              <Id>DE26ZZZ00000000000</Id>
-              <SchmeNm>
-                <Prtry>SEPA</Prtry>
-              </SchmeNm>
-            </Othr>
-          </PrvtId>
-        </Id>
-      </CdtrSchmeId>
-      <DrctDbtTxInf>
-        <PmtId>
-          <EndToEndId>TestCreditor-7e989083e265</EndToEndId>
-        </PmtId>
-        <InstdAmt Ccy="EUR">50.00</InstdAmt>
-        <DrctDbtTx>
-          <MndtRltdInf>
-            <MndtId>1234</MndtId>
-            <DtOfSgntr>2017-01-20</DtOfSgntr>
-          </MndtRltdInf>
-        </DrctDbtTx>
-        <DbtrAgt>
-          <FinInstnId>
-            <BIC>BANKNL2A</BIC>
-          </FinInstnId>
-        </DbtrAgt>
-        <Dbtr>
-          <Nm>Test du Test</Nm>
-        </Dbtr>
-        <DbtrAcct>
-          <Id>
-            <IBAN>NL50BANK1234567890</IBAN>
-          </Id>
-        </DbtrAcct>
-        <RmtInf>
-          <Ustrd>Test transaction2</Ustrd>
-        </RmtInf>
-      </DrctDbtTxInf>
-    </PmtInf>
-  </CstmrDrctDbtInitn>
-</Document>
-"""
-
-
-def test_two_debits(sdd):
-    payment1 = {
-        "name": "Test von Testenstein",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "amount": 1012,
-        "type": "FRST",
-        "collection_date": datetime.date.today(),
-        "mandate_id": "1234",
-        "mandate_date": datetime.date.today(),
-        "description": "Test transaction1"
-    }
-    payment2 = {
-        "name": "Test du Test",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "amount": 5000,
-        "type": "RCUR",
-        "collection_date": datetime.date.today(),
-        "mandate_id": "1234",
-        "mandate_date": datetime.date.today(),
-        "description": "Test transaction2"
-    }
-
-    sdd.add_payment(payment1)
-    sdd.add_payment(payment2)
-    xmlout = sdd.export()
-    xmlpretty = validate_xml(xmlout, "pain.008.003.02")
-    assert clean_ids(xmlpretty.strip()) == clean_ids(SAMPLE_RESULT.strip())
diff -pruN 2.6.1+dfsg-2/tests/debit/test_currency_override.py 2.7.0+dfsg-1/tests/debit/test_currency_override.py
--- 2.6.1+dfsg-2/tests/debit/test_currency_override.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_currency_override.py	2025-09-02 12:27:47.000000000 +0000
@@ -0,0 +1,137 @@
+# encoding: utf-8
+
+import datetime
+
+import pytest
+
+from sepaxml import SepaDD
+from tests.utils import clean_ids, validate_xml
+
+
+
+@pytest.fixture
+def sdd():
+    return SepaDD({
+        "name": "Miller & Son Ltd",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "batch": True,
+        "creditor_id": "DE26ZZZ00000000000",
+        "currency": "EUR"
+    }, schema="pain.008.001.02")
+
+
+SAMPLE_RESULT = b"""
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <CstmrDrctDbtInitn>
+    <GrpHdr>
+      <MsgId>20012017014921-ba2dab283fdd</MsgId>
+      <CreDtTm>2017-01-20T13:49:21</CreDtTm>
+      <NbOfTxs>1</NbOfTxs>
+      <CtrlSum>10.12</CtrlSum>
+      <InitgPty>
+        <Nm>Miller &amp; Son Ltd</Nm>
+        <Id>
+          <OrgId>
+            <Othr>
+              <Id>DE26ZZZ00000000000</Id>
+            </Othr>
+          </OrgId>
+        </Id>
+      </InitgPty>
+    </GrpHdr>
+    <PmtInf>
+      <PmtInfId>MillerSonLtd-ecd6a2f680ce</PmtInfId>
+      <PmtMtd>DD</PmtMtd>
+      <BtchBookg>true</BtchBookg>
+      <NbOfTxs>1</NbOfTxs>
+      <CtrlSum>10.12</CtrlSum>
+      <PmtTpInf>
+        <SvcLvl>
+          <Cd>SEPA</Cd>
+        </SvcLvl>
+        <LclInstrm>
+          <Cd>CORE</Cd>
+        </LclInstrm>
+        <SeqTp>FRST</SeqTp>
+      </PmtTpInf>
+      <ReqdColltnDt>2017-01-20</ReqdColltnDt>
+      <Cdtr>
+        <Nm>Miller &amp; Son Ltd</Nm>
+      </Cdtr>
+      <CdtrAcct>
+        <Id>
+          <IBAN>NL50BANK1234567890</IBAN>
+        </Id>
+      </CdtrAcct>
+      <CdtrAgt>
+        <FinInstnId>
+          <BIC>BANKNL2A</BIC>
+        </FinInstnId>
+      </CdtrAgt>
+      <ChrgBr>SLEV</ChrgBr>
+      <CdtrSchmeId>
+        <Id>
+          <PrvtId>
+            <Othr>
+              <Id>DE26ZZZ00000000000</Id>
+              <SchmeNm>
+                <Prtry>SEPA</Prtry>
+              </SchmeNm>
+            </Othr>
+          </PrvtId>
+        </Id>
+      </CdtrSchmeId>
+      <DrctDbtTxInf>
+        <PmtId>
+          <EndToEndId>MillerSonLtd-1234567890ab</EndToEndId>
+        </PmtId>
+        <InstdAmt Ccy="GBP">10.12</InstdAmt>
+        <DrctDbtTx>
+          <MndtRltdInf>
+            <MndtId>1234</MndtId>
+            <DtOfSgntr>2017-01-20</DtOfSgntr>
+          </MndtRltdInf>
+        </DrctDbtTx>
+        <DbtrAgt>
+          <FinInstnId>
+            <BIC>BANKNL2A</BIC>
+          </FinInstnId>
+        </DbtrAgt>
+        <Dbtr>
+          <Nm>This is a test</Nm>
+        </Dbtr>
+        <DbtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </DbtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction</Ustrd>
+        </RmtInf>
+      </DrctDbtTxInf>
+    </PmtInf>
+  </CstmrDrctDbtInitn>
+</Document>
+"""
+
+
+def test_payment_overrides_currency(sdd):
+    """Test that payment currency overrides config currency"""
+    payment = {
+        "name": "This is a test",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 1012,
+        "type": "FRST",
+        "collection_date": datetime.date.today(),
+        "mandate_id": "1234",
+        "mandate_date": datetime.date.today(),
+        "description": "Test transaction",
+        "currency": "GBP"  # Override the EUR config currency
+    }
+
+    sdd.add_payment(payment)
+    xmlout = sdd.export()
+    xmlpretty = validate_xml(xmlout, "pain.008.001.02")
+    assert clean_ids(xmlpretty.strip()) == clean_ids(SAMPLE_RESULT.strip())
diff -pruN 2.6.1+dfsg-2/tests/debit/test_endtoendid.py 2.7.0+dfsg-1/tests/debit/test_endtoendid.py
--- 2.6.1+dfsg-2/tests/debit/test_endtoendid.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_endtoendid.py	2025-09-02 12:27:47.000000000 +0000
@@ -17,11 +17,11 @@ def sdd():
         "batch": True,
         "creditor_id": "DE26ZZZ00000000000",
         "currency": "EUR"
-    }, schema="pain.008.003.02")
+    }, schema="pain.008.001.02")
 
 
 SAMPLE_RESULT = b"""
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <CstmrDrctDbtInitn>
     <GrpHdr>
       <MsgId>20012017014921-ba2dab283fdd</MsgId>
@@ -215,5 +215,5 @@ def test_two_debits(sdd):
     sdd.add_payment(payment1)
     sdd.add_payment(payment2)
     xmlout = sdd.export()
-    xmlpretty = validate_xml(xmlout, "pain.008.003.02")
+    xmlpretty = validate_xml(xmlout, "pain.008.001.02")
     assert clean_ids(xmlpretty.strip()) == clean_ids(SAMPLE_RESULT.strip())
diff -pruN 2.6.1+dfsg-2/tests/debit/test_escaped.py 2.7.0+dfsg-1/tests/debit/test_escaped.py
--- 2.6.1+dfsg-2/tests/debit/test_escaped.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_escaped.py	2025-09-02 12:27:47.000000000 +0000
@@ -15,11 +15,11 @@ def sdd():
         "batch": True,
         "creditor_id": "DE26ZZZ00000000000",
         "currency": "EUR"
-    }, schema="pain.008.003.02")
+    }, schema="pain.008.001.02")
 
 
 SAMPLE_RESULT = b"""
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <CstmrDrctDbtInitn>
     <GrpHdr>
       <MsgId>20012017014921-ba2dab283fdd</MsgId>
@@ -211,5 +211,5 @@ def test_two_debits(sdd):
     sdd.add_payment(payment1)
     sdd.add_payment(payment2)
     xmlout = sdd.export()
-    xmlpretty = validate_xml(xmlout, "pain.008.003.02")
+    xmlpretty = validate_xml(xmlout, "pain.008.001.02")
     assert clean_ids(xmlpretty.strip()) == clean_ids(SAMPLE_RESULT.strip())
diff -pruN 2.6.1+dfsg-2/tests/debit/test_no_bic.py 2.7.0+dfsg-1/tests/debit/test_no_bic.py
--- 2.6.1+dfsg-2/tests/debit/test_no_bic.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_no_bic.py	2025-09-02 12:27:47.000000000 +0000
@@ -92,7 +92,11 @@ SAMPLE_RESULT = b"""
           </MndtRltdInf>
         </DrctDbtTx>
         <DbtrAgt>
-          <FinInstnId/>
+          <FinInstnId>
+            <Othr>
+              <Id>NOTPROVIDED</Id>
+            </Othr>
+          </FinInstnId>
         </DbtrAgt>
         <Dbtr>
           <Nm>Test von Testenstein</Nm>
@@ -161,7 +165,11 @@ SAMPLE_RESULT = b"""
           </MndtRltdInf>
         </DrctDbtTx>
         <DbtrAgt>
-          <FinInstnId/>
+          <FinInstnId>
+            <Othr>
+              <Id>NOTPROVIDED</Id>
+            </Othr>
+          </FinInstnId>
         </DbtrAgt>
         <Dbtr>
           <Nm>Test du Test</Nm>
diff -pruN 2.6.1+dfsg-2/tests/debit/test_no_bic_00800302.py 2.7.0+dfsg-1/tests/debit/test_no_bic_00800302.py
--- 2.6.1+dfsg-2/tests/debit/test_no_bic_00800302.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_no_bic_00800302.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,223 +0,0 @@
-import datetime
-
-import pytest
-
-from sepadd import SepaDD
-
-from ..utils import clean_ids, validate_xml
-
-
-@pytest.fixture
-def sdd():
-    return SepaDD({
-        "name": "TestCreditor",
-        "IBAN": "NL50BANK1234567890",
-        # "BIC": "BANKNL2A",
-        "batch": True,
-        "creditor_id": "DE26ZZZ00000000000",
-        "currency": "EUR"
-    }, schema="pain.008.003.02")
-
-
-SAMPLE_RESULT = b"""
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <CstmrDrctDbtInitn>
-    <GrpHdr>
-      <MsgId>20191217075410-036b6e1fee52</MsgId>
-      <CreDtTm>2019-12-17T19:54:10</CreDtTm>
-      <NbOfTxs>2</NbOfTxs>
-      <CtrlSum>60.12</CtrlSum>
-      <InitgPty>
-        <Nm>TestCreditor</Nm>
-        <Id>
-          <OrgId>
-            <Othr>
-              <Id>DE26ZZZ00000000000</Id>
-            </Othr>
-          </OrgId>
-        </Id>
-      </InitgPty>
-    </GrpHdr>
-    <PmtInf>
-      <PmtInfId>TestCreditor-a58f80b99a79</PmtInfId>
-      <PmtMtd>DD</PmtMtd>
-      <BtchBookg>true</BtchBookg>
-      <NbOfTxs>1</NbOfTxs>
-      <CtrlSum>10.12</CtrlSum>
-      <PmtTpInf>
-        <SvcLvl>
-          <Cd>SEPA</Cd>
-        </SvcLvl>
-        <LclInstrm>
-          <Cd>CORE</Cd>
-        </LclInstrm>
-        <SeqTp>FRST</SeqTp>
-      </PmtTpInf>
-      <ReqdColltnDt>2019-12-17</ReqdColltnDt>
-      <Cdtr>
-        <Nm>TestCreditor</Nm>
-      </Cdtr>
-      <CdtrAcct>
-        <Id>
-          <IBAN>NL50BANK1234567890</IBAN>
-        </Id>
-      </CdtrAcct>
-      <CdtrAgt>
-        <FinInstnId>
-          <Othr>
-            <Id>NOTPROVIDED</Id>
-          </Othr>
-        </FinInstnId>
-      </CdtrAgt>
-      <ChrgBr>SLEV</ChrgBr>
-      <CdtrSchmeId>
-        <Id>
-          <PrvtId>
-            <Othr>
-              <Id>DE26ZZZ00000000000</Id>
-              <SchmeNm>
-                <Prtry>SEPA</Prtry>
-              </SchmeNm>
-            </Othr>
-          </PrvtId>
-        </Id>
-      </CdtrSchmeId>
-      <DrctDbtTxInf>
-        <PmtId>
-          <EndToEndId>TestCreditor-bec7e631a080</EndToEndId>
-        </PmtId>
-        <InstdAmt Ccy="EUR">10.12</InstdAmt>
-        <DrctDbtTx>
-          <MndtRltdInf>
-            <MndtId>1234</MndtId>
-            <DtOfSgntr>2019-12-17</DtOfSgntr>
-          </MndtRltdInf>
-        </DrctDbtTx>
-        <DbtrAgt>
-          <FinInstnId>
-            <Othr>
-              <Id>NOTPROVIDED</Id>
-            </Othr>
-          </FinInstnId>
-        </DbtrAgt>
-        <Dbtr>
-          <Nm>Test von Testenstein</Nm>
-        </Dbtr>
-        <DbtrAcct>
-          <Id>
-            <IBAN>NL50BANK1234567890</IBAN>
-          </Id>
-        </DbtrAcct>
-        <RmtInf>
-          <Ustrd>Test transaction1</Ustrd>
-        </RmtInf>
-      </DrctDbtTxInf>
-    </PmtInf>
-    <PmtInf>
-      <PmtInfId>TestCreditor-ccc7e3929426</PmtInfId>
-      <PmtMtd>DD</PmtMtd>
-      <BtchBookg>true</BtchBookg>
-      <NbOfTxs>1</NbOfTxs>
-      <CtrlSum>50.00</CtrlSum>
-      <PmtTpInf>
-        <SvcLvl>
-          <Cd>SEPA</Cd>
-        </SvcLvl>
-        <LclInstrm>
-          <Cd>CORE</Cd>
-        </LclInstrm>
-        <SeqTp>RCUR</SeqTp>
-      </PmtTpInf>
-      <ReqdColltnDt>2019-12-17</ReqdColltnDt>
-      <Cdtr>
-        <Nm>TestCreditor</Nm>
-      </Cdtr>
-      <CdtrAcct>
-        <Id>
-          <IBAN>NL50BANK1234567890</IBAN>
-        </Id>
-      </CdtrAcct>
-      <CdtrAgt>
-        <FinInstnId>
-          <Othr>
-            <Id>NOTPROVIDED</Id>
-          </Othr>
-        </FinInstnId>
-      </CdtrAgt>
-      <ChrgBr>SLEV</ChrgBr>
-      <CdtrSchmeId>
-        <Id>
-          <PrvtId>
-            <Othr>
-              <Id>DE26ZZZ00000000000</Id>
-              <SchmeNm>
-                <Prtry>SEPA</Prtry>
-              </SchmeNm>
-            </Othr>
-          </PrvtId>
-        </Id>
-      </CdtrSchmeId>
-      <DrctDbtTxInf>
-        <PmtId>
-          <EndToEndId>TestCreditor-88a20e682fe3</EndToEndId>
-        </PmtId>
-        <InstdAmt Ccy="EUR">50.00</InstdAmt>
-        <DrctDbtTx>
-          <MndtRltdInf>
-            <MndtId>1234</MndtId>
-            <DtOfSgntr>2019-12-17</DtOfSgntr>
-          </MndtRltdInf>
-        </DrctDbtTx>
-        <DbtrAgt>
-          <FinInstnId>
-            <Othr>
-              <Id>NOTPROVIDED</Id>
-            </Othr>
-          </FinInstnId>
-        </DbtrAgt>
-        <Dbtr>
-          <Nm>Test du Test</Nm>
-        </Dbtr>
-        <DbtrAcct>
-          <Id>
-            <IBAN>NL50BANK1234567890</IBAN>
-          </Id>
-        </DbtrAcct>
-        <RmtInf>
-          <Ustrd>Test transaction2</Ustrd>
-        </RmtInf>
-      </DrctDbtTxInf>
-    </PmtInf>
-  </CstmrDrctDbtInitn>
-</Document>
-"""
-
-
-def test_two_debits(sdd):
-    payment1 = {
-        "name": "Test von Testenstein",
-        "IBAN": "NL50BANK1234567890",
-        "amount": 1012,
-        "type": "FRST",
-        "collection_date": datetime.date.today(),
-        "mandate_id": "1234",
-        "mandate_date": datetime.date.today(),
-        "description": "Test transaction1"
-    }
-    payment2 = {
-        "name": "Test du Test",
-        "IBAN": "NL50BANK1234567890",
-        "amount": 5000,
-        "type": "RCUR",
-        "collection_date": datetime.date.today(),
-        "mandate_id": "1234",
-        "mandate_date": datetime.date.today(),
-        "description": "Test transaction2"
-    }
-
-    sdd.add_payment(payment1)
-    sdd.add_payment(payment2)
-    xmlout = sdd.export(validate=False)
-
-    xmlpretty = validate_xml(xmlout, "pain.008.003.02")
-    assert clean_ids(xmlpretty.strip()) == clean_ids(SAMPLE_RESULT.strip())
diff -pruN 2.6.1+dfsg-2/tests/debit/test_non_batch.py 2.7.0+dfsg-1/tests/debit/test_non_batch.py
--- 2.6.1+dfsg-2/tests/debit/test_non_batch.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_non_batch.py	2025-09-02 12:27:47.000000000 +0000
@@ -15,11 +15,11 @@ def sdd():
         "batch": False,
         "creditor_id": "DE26ZZZ00000000000",
         "currency": "EUR"
-    }, schema="pain.008.003.02")
+    }, schema="pain.008.001.02")
 
 
 SAMPLE_RESULT = b"""
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <CstmrDrctDbtInitn>
     <GrpHdr>
       <MsgId>20012017014921-ba2dab283fdd</MsgId>
@@ -211,5 +211,5 @@ def test_two_debits(sdd):
     sdd.add_payment(payment1)
     sdd.add_payment(payment2)
     xmlout = sdd.export()
-    xmlpretty = validate_xml(xmlout, "pain.008.003.02")
+    xmlpretty = validate_xml(xmlout, "pain.008.001.02")
     assert clean_ids(xmlpretty.strip()) == clean_ids(SAMPLE_RESULT.strip())
diff -pruN 2.6.1+dfsg-2/tests/debit/test_timestamps.py 2.7.0+dfsg-1/tests/debit/test_timestamps.py
--- 2.6.1+dfsg-2/tests/debit/test_timestamps.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/debit/test_timestamps.py	2025-09-02 12:27:47.000000000 +0000
@@ -48,11 +48,11 @@ def sdd():
         "batch": True,
         "creditor_id": "DE26ZZZ00000000000",
         "currency": "EUR"
-    }, schema="pain.008.003.02")
+    }, schema="pain.008.001.02")
 
 
 SAMPLE_RESULT = b"""
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <CstmrDrctDbtInitn>
     <GrpHdr>
       <MsgId>20211002081735-9050218037f5</MsgId>
@@ -247,5 +247,5 @@ def test_two_debits(sdd, today):
     sdd.add_payment(payment1)
     sdd.add_payment(payment2)
     xmlout = sdd.export()
-    xmlpretty = validate_xml(xmlout, "pain.008.003.02")
+    xmlpretty = validate_xml(xmlout, "pain.008.001.02")
     assert xmlpretty.strip() == SAMPLE_RESULT.strip()
diff -pruN 2.6.1+dfsg-2/tests/transfer/test_00100109.py 2.7.0+dfsg-1/tests/transfer/test_00100109.py
--- 2.6.1+dfsg-2/tests/transfer/test_00100109.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.7.0+dfsg-1/tests/transfer/test_00100109.py	2025-09-02 12:27:47.000000000 +0000
@@ -0,0 +1,136 @@
+import datetime
+
+import pytest
+
+from sepaxml import SepaTransfer
+from tests.utils import clean_ids, validate_xml
+
+
+@pytest.fixture
+def strf():
+    return SepaTransfer({
+        "name": "TestCreditor",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "batch": True,
+        "currency": "EUR"
+    }, schema="pain.001.001.09")
+
+
+SAMPLE_RESULT = b"""
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <CstmrCdtTrfInitn>
+    <GrpHdr>
+      <MsgId>20180724040432-d24ce3b3e284</MsgId>
+      <CreDtTm>2018-07-24T16:04:32</CreDtTm>
+      <NbOfTxs>2</NbOfTxs>
+      <CtrlSum>60.12</CtrlSum>
+      <InitgPty>
+        <Nm>TestCreditor</Nm>
+      </InitgPty>
+    </GrpHdr>
+    <PmtInf>
+      <PmtInfId>TestCreditor-90102652f82a</PmtInfId>
+      <PmtMtd>TRF</PmtMtd>
+      <BtchBookg>true</BtchBookg>
+      <NbOfTxs>2</NbOfTxs>
+      <CtrlSum>60.12</CtrlSum>
+      <PmtTpInf>
+        <SvcLvl>
+          <Cd>SEPA</Cd>
+        </SvcLvl>
+      </PmtTpInf>
+      <ReqdExctnDt>
+        <Dt>2018-07-24</Dt>
+      </ReqdExctnDt>
+      <Dbtr>
+        <Nm>TestCreditor</Nm>
+      </Dbtr>
+      <DbtrAcct>
+        <Id>
+          <IBAN>NL50BANK1234567890</IBAN>
+        </Id>
+      </DbtrAcct>
+      <DbtrAgt>
+        <FinInstnId>
+          <BICFI>BANKNL2A</BICFI>
+        </FinInstnId>
+      </DbtrAgt>
+      <ChrgBr>SLEV</ChrgBr>
+      <CdtTrfTxInf>
+        <PmtId>
+          <EndToEndId>NOTPROVIDED</EndToEndId>
+        </PmtId>
+        <Amt>
+          <InstdAmt Ccy="EUR">10.12</InstdAmt>
+        </Amt>
+        <CdtrAgt>
+          <FinInstnId>
+            <BICFI>BANKNL2A</BICFI>
+          </FinInstnId>
+        </CdtrAgt>
+        <Cdtr>
+          <Nm>Test von Testenstein</Nm>
+        </Cdtr>
+        <CdtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </CdtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction1</Ustrd>
+        </RmtInf>
+      </CdtTrfTxInf>
+      <CdtTrfTxInf>
+        <PmtId>
+          <EndToEndId>NOTPROVIDED</EndToEndId>
+        </PmtId>
+        <Amt>
+          <InstdAmt Ccy="EUR">50.00</InstdAmt>
+        </Amt>
+        <CdtrAgt>
+          <FinInstnId>
+            <BICFI>BANKNL2A</BICFI>
+          </FinInstnId>
+        </CdtrAgt>
+        <Cdtr>
+          <Nm>Test du Test</Nm>
+        </Cdtr>
+        <CdtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </CdtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction2</Ustrd>
+        </RmtInf>
+      </CdtTrfTxInf>
+    </PmtInf>
+  </CstmrCdtTrfInitn>
+</Document>
+"""
+
+
+def test_two_debits(strf):
+    payment1 = {
+        "name": "Test von Testenstein",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 1012,
+        "execution_date": datetime.date.today(),
+        "description": "Test transaction1"
+    }
+    payment2 = {
+        "name": "Test du Test",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 5000,
+        "execution_date": datetime.date.today(),
+        "description": "Test transaction2"
+    }
+
+    strf.add_payment(payment1)
+    strf.add_payment(payment2)
+    xmlout = strf.export()
+    xmlpretty = validate_xml(xmlout, "pain.001.001.09")
+    assert clean_ids(xmlpretty.strip()).decode() == clean_ids(SAMPLE_RESULT.strip()).decode()
diff -pruN 2.6.1+dfsg-2/tests/transfer/test_00100110.py 2.7.0+dfsg-1/tests/transfer/test_00100110.py
--- 2.6.1+dfsg-2/tests/transfer/test_00100110.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.7.0+dfsg-1/tests/transfer/test_00100110.py	2025-09-02 12:27:47.000000000 +0000
@@ -0,0 +1,136 @@
+import datetime
+
+import pytest
+
+from sepaxml import SepaTransfer
+from tests.utils import clean_ids, validate_xml
+
+
+@pytest.fixture
+def strf():
+    return SepaTransfer({
+        "name": "TestCreditor",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "batch": True,
+        "currency": "EUR"
+    }, schema="pain.001.001.10")
+
+
+SAMPLE_RESULT = b"""
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.10" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <CstmrCdtTrfInitn>
+    <GrpHdr>
+      <MsgId>20180724040432-d24ce3b3e284</MsgId>
+      <CreDtTm>2018-07-24T16:04:32</CreDtTm>
+      <NbOfTxs>2</NbOfTxs>
+      <CtrlSum>60.12</CtrlSum>
+      <InitgPty>
+        <Nm>TestCreditor</Nm>
+      </InitgPty>
+    </GrpHdr>
+    <PmtInf>
+      <PmtInfId>TestCreditor-90102652f82a</PmtInfId>
+      <PmtMtd>TRF</PmtMtd>
+      <BtchBookg>true</BtchBookg>
+      <NbOfTxs>2</NbOfTxs>
+      <CtrlSum>60.12</CtrlSum>
+      <PmtTpInf>
+        <SvcLvl>
+          <Cd>SEPA</Cd>
+        </SvcLvl>
+      </PmtTpInf>
+      <ReqdExctnDt>
+        <Dt>2018-07-24</Dt>
+      </ReqdExctnDt>
+      <Dbtr>
+        <Nm>TestCreditor</Nm>
+      </Dbtr>
+      <DbtrAcct>
+        <Id>
+          <IBAN>NL50BANK1234567890</IBAN>
+        </Id>
+      </DbtrAcct>
+      <DbtrAgt>
+        <FinInstnId>
+          <BICFI>BANKNL2A</BICFI>
+        </FinInstnId>
+      </DbtrAgt>
+      <ChrgBr>SLEV</ChrgBr>
+      <CdtTrfTxInf>
+        <PmtId>
+          <EndToEndId>NOTPROVIDED</EndToEndId>
+        </PmtId>
+        <Amt>
+          <InstdAmt Ccy="EUR">10.12</InstdAmt>
+        </Amt>
+        <CdtrAgt>
+          <FinInstnId>
+            <BICFI>BANKNL2A</BICFI>
+          </FinInstnId>
+        </CdtrAgt>
+        <Cdtr>
+          <Nm>Test von Testenstein</Nm>
+        </Cdtr>
+        <CdtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </CdtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction1</Ustrd>
+        </RmtInf>
+      </CdtTrfTxInf>
+      <CdtTrfTxInf>
+        <PmtId>
+          <EndToEndId>NOTPROVIDED</EndToEndId>
+        </PmtId>
+        <Amt>
+          <InstdAmt Ccy="EUR">50.00</InstdAmt>
+        </Amt>
+        <CdtrAgt>
+          <FinInstnId>
+            <BICFI>BANKNL2A</BICFI>
+          </FinInstnId>
+        </CdtrAgt>
+        <Cdtr>
+          <Nm>Test du Test</Nm>
+        </Cdtr>
+        <CdtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </CdtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction2</Ustrd>
+        </RmtInf>
+      </CdtTrfTxInf>
+    </PmtInf>
+  </CstmrCdtTrfInitn>
+</Document>
+"""
+
+
+def test_two_debits(strf):
+    payment1 = {
+        "name": "Test von Testenstein",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 1012,
+        "execution_date": datetime.date.today(),
+        "description": "Test transaction1"
+    }
+    payment2 = {
+        "name": "Test du Test",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 5000,
+        "execution_date": datetime.date.today(),
+        "description": "Test transaction2"
+    }
+
+    strf.add_payment(payment1)
+    strf.add_payment(payment2)
+    xmlout = strf.export()
+    xmlpretty = validate_xml(xmlout, "pain.001.001.10")
+    assert clean_ids(xmlpretty.strip()).decode() == clean_ids(SAMPLE_RESULT.strip()).decode()
diff -pruN 2.6.1+dfsg-2/tests/transfer/test_00100111.py 2.7.0+dfsg-1/tests/transfer/test_00100111.py
--- 2.6.1+dfsg-2/tests/transfer/test_00100111.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.7.0+dfsg-1/tests/transfer/test_00100111.py	2025-09-02 12:27:47.000000000 +0000
@@ -0,0 +1,136 @@
+import datetime
+
+import pytest
+
+from sepaxml import SepaTransfer
+from tests.utils import clean_ids, validate_xml
+
+
+@pytest.fixture
+def strf():
+    return SepaTransfer({
+        "name": "TestCreditor",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "batch": True,
+        "currency": "EUR"
+    }, schema="pain.001.001.11")
+
+
+SAMPLE_RESULT = b"""
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.11" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <CstmrCdtTrfInitn>
+    <GrpHdr>
+      <MsgId>20180724040432-d24ce3b3e284</MsgId>
+      <CreDtTm>2018-07-24T16:04:32</CreDtTm>
+      <NbOfTxs>2</NbOfTxs>
+      <CtrlSum>60.12</CtrlSum>
+      <InitgPty>
+        <Nm>TestCreditor</Nm>
+      </InitgPty>
+    </GrpHdr>
+    <PmtInf>
+      <PmtInfId>TestCreditor-90102652f82a</PmtInfId>
+      <PmtMtd>TRF</PmtMtd>
+      <BtchBookg>true</BtchBookg>
+      <NbOfTxs>2</NbOfTxs>
+      <CtrlSum>60.12</CtrlSum>
+      <PmtTpInf>
+        <SvcLvl>
+          <Cd>SEPA</Cd>
+        </SvcLvl>
+      </PmtTpInf>
+      <ReqdExctnDt>
+        <Dt>2018-07-24</Dt>
+      </ReqdExctnDt>
+      <Dbtr>
+        <Nm>TestCreditor</Nm>
+      </Dbtr>
+      <DbtrAcct>
+        <Id>
+          <IBAN>NL50BANK1234567890</IBAN>
+        </Id>
+      </DbtrAcct>
+      <DbtrAgt>
+        <FinInstnId>
+          <BICFI>BANKNL2A</BICFI>
+        </FinInstnId>
+      </DbtrAgt>
+      <ChrgBr>SLEV</ChrgBr>
+      <CdtTrfTxInf>
+        <PmtId>
+          <EndToEndId>NOTPROVIDED</EndToEndId>
+        </PmtId>
+        <Amt>
+          <InstdAmt Ccy="EUR">10.12</InstdAmt>
+        </Amt>
+        <CdtrAgt>
+          <FinInstnId>
+            <BICFI>BANKNL2A</BICFI>
+          </FinInstnId>
+        </CdtrAgt>
+        <Cdtr>
+          <Nm>Test von Testenstein</Nm>
+        </Cdtr>
+        <CdtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </CdtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction1</Ustrd>
+        </RmtInf>
+      </CdtTrfTxInf>
+      <CdtTrfTxInf>
+        <PmtId>
+          <EndToEndId>NOTPROVIDED</EndToEndId>
+        </PmtId>
+        <Amt>
+          <InstdAmt Ccy="EUR">50.00</InstdAmt>
+        </Amt>
+        <CdtrAgt>
+          <FinInstnId>
+            <BICFI>BANKNL2A</BICFI>
+          </FinInstnId>
+        </CdtrAgt>
+        <Cdtr>
+          <Nm>Test du Test</Nm>
+        </Cdtr>
+        <CdtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </CdtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction2</Ustrd>
+        </RmtInf>
+      </CdtTrfTxInf>
+    </PmtInf>
+  </CstmrCdtTrfInitn>
+</Document>
+"""
+
+
+def test_two_debits(strf):
+    payment1 = {
+        "name": "Test von Testenstein",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 1012,
+        "execution_date": datetime.date.today(),
+        "description": "Test transaction1"
+    }
+    payment2 = {
+        "name": "Test du Test",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 5000,
+        "execution_date": datetime.date.today(),
+        "description": "Test transaction2"
+    }
+
+    strf.add_payment(payment1)
+    strf.add_payment(payment2)
+    xmlout = strf.export()
+    xmlpretty = validate_xml(xmlout, "pain.001.001.11")
+    assert clean_ids(xmlpretty.strip()).decode() == clean_ids(SAMPLE_RESULT.strip()).decode()
diff -pruN 2.6.1+dfsg-2/tests/transfer/test_00100303.py 2.7.0+dfsg-1/tests/transfer/test_00100303.py
--- 2.6.1+dfsg-2/tests/transfer/test_00100303.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/transfer/test_00100303.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,134 +0,0 @@
-import datetime
-
-import pytest
-
-from sepaxml import SepaTransfer
-from tests.utils import clean_ids, validate_xml
-
-
-@pytest.fixture
-def strf():
-    return SepaTransfer({
-        "name": "TestCreditor",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "batch": True,
-        "currency": "EUR"
-    }, schema="pain.001.003.03")
-
-
-SAMPLE_RESULT = b"""
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <CstmrCdtTrfInitn>
-    <GrpHdr>
-      <MsgId>20180724040432-d24ce3b3e284</MsgId>
-      <CreDtTm>2018-07-24T16:04:32</CreDtTm>
-      <NbOfTxs>2</NbOfTxs>
-      <CtrlSum>60.12</CtrlSum>
-      <InitgPty>
-        <Nm>TestCreditor</Nm>
-      </InitgPty>
-    </GrpHdr>
-    <PmtInf>
-      <PmtInfId>TestCreditor-90102652f82a</PmtInfId>
-      <PmtMtd>TRF</PmtMtd>
-      <BtchBookg>true</BtchBookg>
-      <NbOfTxs>2</NbOfTxs>
-      <CtrlSum>60.12</CtrlSum>
-      <PmtTpInf>
-        <SvcLvl>
-          <Cd>SEPA</Cd>
-        </SvcLvl>
-      </PmtTpInf>
-      <ReqdExctnDt>2018-07-24</ReqdExctnDt>
-      <Dbtr>
-        <Nm>TestCreditor</Nm>
-      </Dbtr>
-      <DbtrAcct>
-        <Id>
-          <IBAN>NL50BANK1234567890</IBAN>
-        </Id>
-      </DbtrAcct>
-      <DbtrAgt>
-        <FinInstnId>
-          <BIC>BANKNL2A</BIC>
-        </FinInstnId>
-      </DbtrAgt>
-      <ChrgBr>SLEV</ChrgBr>
-      <CdtTrfTxInf>
-        <PmtId>
-          <EndToEndId>NOTPROVIDED</EndToEndId>
-        </PmtId>
-        <Amt>
-          <InstdAmt Ccy="EUR">10.12</InstdAmt>
-        </Amt>
-        <CdtrAgt>
-          <FinInstnId>
-            <BIC>BANKNL2A</BIC>
-          </FinInstnId>
-        </CdtrAgt>
-        <Cdtr>
-          <Nm>Test von Testenstein</Nm>
-        </Cdtr>
-        <CdtrAcct>
-          <Id>
-            <IBAN>NL50BANK1234567890</IBAN>
-          </Id>
-        </CdtrAcct>
-        <RmtInf>
-          <Ustrd>Test transaction1</Ustrd>
-        </RmtInf>
-      </CdtTrfTxInf>
-      <CdtTrfTxInf>
-        <PmtId>
-          <EndToEndId>NOTPROVIDED</EndToEndId>
-        </PmtId>
-        <Amt>
-          <InstdAmt Ccy="EUR">50.00</InstdAmt>
-        </Amt>
-        <CdtrAgt>
-          <FinInstnId>
-            <BIC>BANKNL2A</BIC>
-          </FinInstnId>
-        </CdtrAgt>
-        <Cdtr>
-          <Nm>Test du Test</Nm>
-        </Cdtr>
-        <CdtrAcct>
-          <Id>
-            <IBAN>NL50BANK1234567890</IBAN>
-          </Id>
-        </CdtrAcct>
-        <RmtInf>
-          <Ustrd>Test transaction2</Ustrd>
-        </RmtInf>
-      </CdtTrfTxInf>
-    </PmtInf>
-  </CstmrCdtTrfInitn>
-</Document>
-"""
-
-
-def test_two_debits(strf):
-    payment1 = {
-        "name": "Test von Testenstein",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "amount": 1012,
-        "execution_date": datetime.date.today(),
-        "description": "Test transaction1"
-    }
-    payment2 = {
-        "name": "Test du Test",
-        "IBAN": "NL50BANK1234567890",
-        "BIC": "BANKNL2A",
-        "amount": 5000,
-        "execution_date": datetime.date.today(),
-        "description": "Test transaction2"
-    }
-
-    strf.add_payment(payment1)
-    strf.add_payment(payment2)
-    xmlout = strf.export()
-    xmlpretty = validate_xml(xmlout, "pain.001.003.03")
-    assert clean_ids(xmlpretty.strip()) == clean_ids(SAMPLE_RESULT.strip())
diff -pruN 2.6.1+dfsg-2/tests/transfer/test_currency_override.py 2.7.0+dfsg-1/tests/transfer/test_currency_override.py
--- 2.6.1+dfsg-2/tests/transfer/test_currency_override.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.7.0+dfsg-1/tests/transfer/test_currency_override.py	2025-09-02 12:27:47.000000000 +0000
@@ -0,0 +1,106 @@
+# encoding: utf-8
+
+import datetime
+
+import pytest
+
+from sepaxml import SepaTransfer
+from tests.utils import clean_ids, validate_xml
+
+
+@pytest.fixture
+def strf_eur():
+    return SepaTransfer({
+        "name": "Miller & Son Ltd",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "batch": True,
+        "currency": "EUR"
+    }, schema="pain.001.001.03")
+
+
+SAMPLE_RESULT = b"""
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <CstmrCdtTrfInitn>
+    <GrpHdr>
+      <MsgId>20180724041136-3b840ce62087</MsgId>
+      <CreDtTm>2018-07-24T16:11:36</CreDtTm>
+      <NbOfTxs>1</NbOfTxs>
+      <CtrlSum>10.12</CtrlSum>
+      <InitgPty>
+        <Nm>Miller &amp; Son Ltd</Nm>
+      </InitgPty>
+    </GrpHdr>
+    <PmtInf>
+      <PmtInfId>MillerSonLtd-67c22f433a9e</PmtInfId>
+      <PmtMtd>TRF</PmtMtd>
+      <BtchBookg>true</BtchBookg>
+      <NbOfTxs>1</NbOfTxs>
+      <CtrlSum>10.12</CtrlSum>
+      <PmtTpInf>
+        <SvcLvl>
+          <Cd>SEPA</Cd>
+        </SvcLvl>
+      </PmtTpInf>
+      <ReqdExctnDt>2018-07-24</ReqdExctnDt>
+      <Dbtr>
+        <Nm>Miller &amp; Son Ltd</Nm>
+      </Dbtr>
+      <DbtrAcct>
+        <Id>
+          <IBAN>NL50BANK1234567890</IBAN>
+        </Id>
+      </DbtrAcct>
+      <DbtrAgt>
+        <FinInstnId>
+          <BIC>BANKNL2A</BIC>
+        </FinInstnId>
+      </DbtrAgt>
+      <ChrgBr>SLEV</ChrgBr>
+      <CdtTrfTxInf>
+        <PmtId>
+          <EndToEndId>test123</EndToEndId>
+        </PmtId>
+        <Amt>
+          <InstdAmt Ccy="GBP">10.12</InstdAmt>
+        </Amt>
+        <CdtrAgt>
+          <FinInstnId>
+            <BIC>BANKNL2A</BIC>
+          </FinInstnId>
+        </CdtrAgt>
+        <Cdtr>
+          <Nm>This is a test</Nm>
+        </Cdtr>
+        <CdtrAcct>
+          <Id>
+            <IBAN>NL50BANK1234567890</IBAN>
+          </Id>
+        </CdtrAcct>
+        <RmtInf>
+          <Ustrd>Test transaction</Ustrd>
+        </RmtInf>
+      </CdtTrfTxInf>
+    </PmtInf>
+  </CstmrCdtTrfInitn>
+</Document>
+"""
+
+
+def test_payment_overrides_currency(strf_eur):
+    """Test that payment currency overrides config currency"""
+    payment = {
+        "name": "This is a test",
+        "IBAN": "NL50BANK1234567890", 
+        "BIC": "BANKNL2A",
+        "amount": 1012,
+        "execution_date": datetime.date.today(),
+        "description": "Test transaction",
+        "endtoend_id": "test123",
+        "currency": "GBP"  # Override the EUR config currency
+    }
+
+    strf_eur.add_payment(payment)
+    xmlout = strf_eur.export()
+    xmlpretty = validate_xml(xmlout, "pain.001.001.03")
+    assert clean_ids(xmlpretty.strip()) == clean_ids(SAMPLE_RESULT.strip())
diff -pruN 2.6.1+dfsg-2/tests/transfer/test_endtoendid.py 2.7.0+dfsg-1/tests/transfer/test_endtoendid.py
--- 2.6.1+dfsg-2/tests/transfer/test_endtoendid.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/transfer/test_endtoendid.py	2025-09-02 12:27:47.000000000 +0000
@@ -16,11 +16,11 @@ def strf():
         "BIC": "BANKNL2A",
         "batch": True,
         "currency": "EUR"
-    }, schema="pain.001.003.03")
+    }, schema="pain.001.001.03")
 
 
 SAMPLE_RESULT = b"""
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <CstmrCdtTrfInitn>
     <GrpHdr>
       <MsgId>20180724041136-3b840ce62087</MsgId>
@@ -134,5 +134,5 @@ def test_two_debits(strf):
     strf.add_payment(payment1)
     strf.add_payment(payment2)
     xmlout = strf.export()
-    xmlpretty = validate_xml(xmlout, "pain.001.003.03")
+    xmlpretty = validate_xml(xmlout, "pain.001.001.03")
     assert clean_ids(xmlpretty.strip()) == clean_ids(SAMPLE_RESULT.strip())
diff -pruN 2.6.1+dfsg-2/tests/transfer/test_non_batch.py 2.7.0+dfsg-1/tests/transfer/test_non_batch.py
--- 2.6.1+dfsg-2/tests/transfer/test_non_batch.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/transfer/test_non_batch.py	2025-09-02 12:27:47.000000000 +0000
@@ -14,11 +14,11 @@ def strf():
         "BIC": "BANKNL2A",
         "batch": False,
         "currency": "EUR"
-    }, schema="pain.001.003.03")
+    }, schema="pain.001.001.03")
 
 
 SAMPLE_RESULT = b"""
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <CstmrCdtTrfInitn>
     <GrpHdr>
       <MsgId>20180724041334-4db42f0dd97e</MsgId>
@@ -159,6 +159,35 @@ def test_two_debits(strf):
     strf.add_payment(payment1)
     strf.add_payment(payment2)
     xmlout = strf.export()
-    xmlpretty = validate_xml(xmlout, "pain.001.003.03")
+    xmlpretty = validate_xml(xmlout, "pain.001.001.03")
     print(xmlpretty.decode())
     assert clean_ids(xmlpretty.strip()) == clean_ids(SAMPLE_RESULT.strip())
+
+
+def test_sepa_address(strf):
+    config = {
+        "name": "TestCreditor",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "batch": False,
+        "currency": "EUR",
+        "address": {
+            "country": "DE",
+            "lines": ["Line 1", "Line 2"],
+        },
+    }
+    payment1 = {
+        "endtoend_id": "ebd75e7e649375d91b33dc11ae44c0e1",
+        "name": "Test von Testenstein",
+        "IBAN": "NL50BANK1234567890",
+        "BIC": "BANKNL2A",
+        "amount": 1012,
+        "execution_date": datetime.date.today(),
+        "description": "Test transaction1",
+        "address": {
+            "country": "DE",
+            "lines": ["Line 1", "Line 2"],
+        },
+    }
+    strf = SepaTransfer(config)
+    strf.add_payment(payment1)
diff -pruN 2.6.1+dfsg-2/tests/transfer/test_timestamps.py 2.7.0+dfsg-1/tests/transfer/test_timestamps.py
--- 2.6.1+dfsg-2/tests/transfer/test_timestamps.py	2022-11-29 21:18:33.000000000 +0000
+++ 2.7.0+dfsg-1/tests/transfer/test_timestamps.py	2025-09-02 12:27:47.000000000 +0000
@@ -47,11 +47,11 @@ def strf():
         "BIC": "BANKNL2A",
         "batch": True,
         "currency": "EUR"
-    }, schema="pain.001.003.03")
+    }, schema="pain.001.001.03")
 
 
 SAMPLE_RESULT = b"""
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <CstmrCdtTrfInitn>
     <GrpHdr>
       <MsgId>20211002081735-9050218037f5</MsgId>
@@ -193,5 +193,5 @@ def test_two_debits(strf, today):
     strf.add_payment(payment1)
     strf.add_payment(payment2)
     xmlout = strf.export()
-    xmlpretty = validate_xml(xmlout, "pain.001.003.03")
+    xmlpretty = validate_xml(xmlout, "pain.001.001.03")
     assert xmlpretty.strip() == SAMPLE_RESULT.strip()
