diff --git a/.flake8 b/.flake8
index 2534a45ee555bb5ebefd37210d19399634c7a4ee..a7cb63ddfe726693c1dcf2d415a46de535eaff83 100644
--- a/.flake8
+++ b/.flake8
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 [flake8]
 max-line-length = 80
 ignore = E501,W503,E302,E402,E203
diff --git a/.gitignore b/.gitignore
index 13747f233fc0bcd0741542af26bf479942f1cf6a..8016e893c9d530ce2a45eab5690249bf239d17fb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 *~
 *.swp
 *.pyc
@@ -14,3 +18,7 @@ html/
 build/
 doc/api/
 dist/
+.mypy_cache/
+.pytest_cache/
+cache/
+venv/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b0d76bafd2f3628282bcb1d17754441558656dfb..cf88fa06933e6719d28786a762fba0d50db20f3c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 include:
   - project: bob/dev-profile
     ref: master
diff --git a/.reuse/dep5 b/.reuse/dep5
new file mode 100644
index 0000000000000000000000000000000000000000..0f2bca5ed72e06f48a0cc91e8e6e5f7297f701b6
--- /dev/null
+++ b/.reuse/dep5
@@ -0,0 +1,8 @@
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: exposed
+Upstream-Contact: Andre Anjos <andre.anjos@idiap.ch>
+Source: https://gitlab.idiap.ch/bob/exposed
+
+Files: tests/data/*
+Copyright: Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+License: BSD-3-Clause
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 1b520f6ea36ee93a17471448e50c313c7f50ec60..0000000000000000000000000000000000000000
--- a/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2022 Idiap Research Institute, http://www.idiap.ch/
-Written by Andre Anjos <andre.anjos@idiap.ch>
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its contributors
-may be used to endorse or promote products derived from this software without
-specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/LICENSES/BSD-3-Clause.txt b/LICENSES/BSD-3-Clause.txt
new file mode 100644
index 0000000000000000000000000000000000000000..086d3992cb3a8f7000127bda96d6cbe673c8e788
--- /dev/null
+++ b/LICENSES/BSD-3-Clause.txt
@@ -0,0 +1,11 @@
+Copyright (c) <year> <owner>.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/MANIFEST.in b/MANIFEST.in
index ce169d9ad46c9a71fcbd7bea389faeb484184897..1064d23753fc1cc32044386828031132d0db34a6 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 include LICENSE README.md
 recursive-include doc *.rst *.txt *.py *.ico *.png
 recursive-include tests/data *.py *.cfg
diff --git a/README.md b/README.md
index 0450211a3fedb7b31d2fd89056bcc599b944ea6f..66e9cf4cdd8fd1ed49d307823bd516654eed8c9c 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,9 @@
+<!--
+Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+
+SPDX-License-Identifier: BSD-3-Clause
+-->
+
 [![latest-docs](https://img.shields.io/badge/docs-latest-orange.svg)](https://www.idiap.ch/software/bob/docs/bob/exposed/master/sphinx/index.html)
 [![build](https://gitlab.idiap.ch/bob/exposed/badges/master/pipeline.svg)](https://gitlab.idiap.ch/bob/exposed/commits/master)
 [![coverage](https://gitlab.idiap.ch/bob/exposed/badges/master/coverage.svg)](https://www.idiap.ch/software/bob/docs/bob/exposed/master/coverage/index.html)
diff --git a/conda/meta.yaml b/conda/meta.yaml
index 77e74a2c4a6207e20b4476afaac36dc0ea391d3d..9a4e50f8e755da4dbde30580227943af53dc64cd 100644
--- a/conda/meta.yaml
+++ b/conda/meta.yaml
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 {% set data = load_file_data(RECIPE_DIR + '/../pyproject.toml') %}
 
 package:
diff --git a/doc/api.rst b/doc/api.rst
index 4da44f92b0487ad0364c0ccd5152c06a685bb3bf..fd08f7bcdeff3d98ebc5ac6367b1f8971db1f384 100644
--- a/doc/api.rst
+++ b/doc/api.rst
@@ -1,3 +1,7 @@
+.. Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+..
+.. SPDX-License-Identifier: BSD-3-Clause
+
 .. _exposed.api:
 
 ============
diff --git a/doc/click.rst b/doc/click.rst
index 60a886e8a898c16d0b8a07587656b08c596f3f83..b4a254e50402d2ae99374eb99ed7789cc5afeebb 100644
--- a/doc/click.rst
+++ b/doc/click.rst
@@ -1,3 +1,7 @@
+.. Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+..
+.. SPDX-License-Identifier: BSD-3-Clause
+
 .. _exposed.click:
 
 ======================
diff --git a/doc/conf.py b/doc/conf.py
index 920cb8b556aa9916e90906814ea1169b932c71ac..c3255eb7006d1a99709578d0f61c3ce605aa225c 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 import os
 import time
 
diff --git a/doc/config.rst b/doc/config.rst
index ec5ec365ad56e2b3a9e407730a51eebb332ea00e..4f5f06e6591c430c901e097d4b8b3704cbb48a46 100644
--- a/doc/config.rst
+++ b/doc/config.rst
@@ -1,3 +1,7 @@
+.. Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+..
+.. SPDX-License-Identifier: BSD-3-Clause
+
 .. _exposed.config:
 
 ====================================
diff --git a/doc/data/basic_config.py b/doc/data/basic_config.py
index 7dc4a1b831c46cc12e69403bd05b1e55d4db3d08..a34ef7ca48cf99e81a8cf478ddd08356c7066c82 100644
--- a/doc/data/basic_config.py
+++ b/doc/data/basic_config.py
@@ -1,2 +1,6 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 a = 1
 b = a + 2
diff --git a/doc/data/second_config.py b/doc/data/second_config.py
index c908703b9f352b20f38d60353257f8ca4513f1a3..3b0fae743d60df203d77cf1d0dd671110eb986e0 100644
--- a/doc/data/second_config.py
+++ b/doc/data/second_config.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 # the b variable from the last config file is available here
 c = b + 1  # noqa: F821
 b = b + 3  # noqa: F821
diff --git a/doc/example_alias.py b/doc/example_alias.py
index 9c67734510b87e694e27cf97a263dc5222e23b3e..a7603a342cfa7852dec98f63b0baa6016dfbcf10 100644
--- a/doc/example_alias.py
+++ b/doc/example_alias.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 """An example script to demonstrate config-file option readout."""
 
 # To improve loading performance, we recommend you only import the very
diff --git a/doc/example_cli.py b/doc/example_cli.py
index bd53e1c7d2ac92b47a4fefa052e83b59dff6e486..bad28930114147a887ce0d12a62398f2f86b5a95 100644
--- a/doc/example_cli.py
+++ b/doc/example_cli.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 """An example script to demonstrate config-file option readout."""
 
 # To improve loading performance, we recommend you only import the very
diff --git a/doc/example_config.py b/doc/example_config.py
index 416883bf910fcd47b0de984ffd632d673a72c846..d80a401184c90dbbdeace886be0088539e5355b6 100644
--- a/doc/example_config.py
+++ b/doc/example_config.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 from exposed.click import config_group
 from exposed.logging import setup
 
diff --git a/doc/example_defaults.py b/doc/example_defaults.py
index 904f06b022950afccd6bb312ec57f83ed5085d17..1ea21deeb7b0b18458861eb77b0791c5fc067289 100644
--- a/doc/example_defaults.py
+++ b/doc/example_defaults.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 from exposed.click import user_defaults_group
 from exposed.logging import setup
 from exposed.rc import UserDefaults
diff --git a/doc/example_logging.py b/doc/example_logging.py
index 7ec571a6b04cd8b442e468ce63befb7c4d8588f9..56492ff0a5ac936ac58fefe5874b5ccbaca86a6a 100644
--- a/doc/example_logging.py
+++ b/doc/example_logging.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 import logging
 
 from exposed.logging import setup
diff --git a/doc/example_options.py b/doc/example_options.py
index 1b68dffe488dd067daa1e8c5c98d12eb4084dc18..b86df80c0d47afdc2cee73f0d6b4f6565b5c5776 100644
--- a/doc/example_options.py
+++ b/doc/example_options.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 integer = 1000
 flag = True
 choice = "blue"
diff --git a/doc/index.rst b/doc/index.rst
index 96084f79310ac5c6e65616bfc3686b9ea2d95879..c1d358aa8d0a97d70b253dc70dda224c5258bb9a 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -1,3 +1,7 @@
+.. Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+..
+.. SPDX-License-Identifier: BSD-3-Clause
+
 .. _exposed:
 
 ====================================================
diff --git a/doc/install.rst b/doc/install.rst
index de3c61ad2cd922dbec70d494b5f5eca934c3a836..6c5d3d9a7b6f0200febfe40381b713cf2e099d9a 100644
--- a/doc/install.rst
+++ b/doc/install.rst
@@ -1,3 +1,7 @@
+.. Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+..
+.. SPDX-License-Identifier: BSD-3-Clause
+
 .. _exposed.install:
 
 ==============
diff --git a/doc/links.rst b/doc/links.rst
index d1c7da455370d9418722e739f8fefd569cf18a96..2404c769ab13e35bfc8664543d12d87093ff7500 100644
--- a/doc/links.rst
+++ b/doc/links.rst
@@ -1,3 +1,7 @@
+.. Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+..
+.. SPDX-License-Identifier: BSD-3-Clause
+
 .. _python: http://www.python.org
 .. _pip: https://pip.pypa.io/en/stable/
 .. _mamba: https://mamba.readthedocs.io/en/latest/index.html
diff --git a/doc/logging.rst b/doc/logging.rst
index 4f150cbe0a53cf36fe2d70fe42d7665e8545aec9..27853f07c71c62050847eb46ada09d62f7c6ad32 100644
--- a/doc/logging.rst
+++ b/doc/logging.rst
@@ -1,3 +1,7 @@
+.. Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+..
+.. SPDX-License-Identifier: BSD-3-Clause
+
 .. _exposed.logging:
 
 ============================
diff --git a/doc/nitpick-exceptions.txt b/doc/nitpick-exceptions.txt
index af6fe3ecd86a954508f135d5d59519876379c834..c63c7f725e154330e05e0fa2c656612a4cd960a7 100644
--- a/doc/nitpick-exceptions.txt
+++ b/doc/nitpick-exceptions.txt
@@ -1 +1,5 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 py:class module
diff --git a/doc/rc.rst b/doc/rc.rst
index eea7105891034be6fa370948ebd9d699cd1875de..b79d0d835173ad7b0c829570f00daa509b687e2a 100644
--- a/doc/rc.rst
+++ b/doc/rc.rst
@@ -1,3 +1,7 @@
+.. Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+..
+.. SPDX-License-Identifier: BSD-3-Clause
+
 .. _exposed.rc:
 
 ==============================
diff --git a/pyproject.toml b/pyproject.toml
index 8b114044ce6053da71894c6c20798ce3d672863f..60462bbf75f1a3d092e8ae6d5c5d4ffda33e738b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 [build-system]
     requires = ["setuptools>=61.0.0", "wheel"]
     build-backend = "setuptools.build_meta"
diff --git a/setup.py b/setup.py
index 606849326a4002007fd42060b51e69a19c18675c..6aeeebe77757841aecdd9592203fc18f9951a933 100644
--- a/setup.py
+++ b/setup.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 from setuptools import setup
 
 setup()
diff --git a/src/exposed/click.py b/src/exposed/click.py
index 7e7fb022176d6cac5fbaae6747ad08399733e2b2..a25a6ed6a72bb56557a68515ec29ec324e4b08a7 100644
--- a/src/exposed/click.py
+++ b/src/exposed/click.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 """Helpers to build command-line interfaces (CLI) via :py:mod:`click`."""
 
 from __future__ import annotations
diff --git a/src/exposed/config.py b/src/exposed/config.py
index 533827c5659b5eb3720c7ac6a6b7f6f89f9ba1b8..aae933e88b9f1c8564b6dd1f14ec0bb1203f6813 100644
--- a/src/exposed/config.py
+++ b/src/exposed/config.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 """Functionality to implement python-based config file parsing and loading."""
 
 from __future__ import annotations
diff --git a/src/exposed/logging.py b/src/exposed/logging.py
index cdabd768cfdea39d4ebebcce6c80a8a42b3e6bf5..efffbca5a1d3a8bab3dc9762c0a0190a4e0f5728 100644
--- a/src/exposed/logging.py
+++ b/src/exposed/logging.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 """:py:class:`logging.Logger` setup and stream separation"""
 
 import logging
diff --git a/src/exposed/rc.py b/src/exposed/rc.py
index deab6ec70b0283742f6becd07e906acb694b5ab1..f0b1e29b2ffd918fe58213466311b890eec633e6 100644
--- a/src/exposed/rc.py
+++ b/src/exposed/rc.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 """Implements a global configuration system setup and readout."""
 
 from __future__ import annotations
diff --git a/tests/conftest.py b/tests/conftest.py
index 5144e0921ff7e437bf0d685341bfa3930bd2b293..0018c01bdd00d6936b599dd4291699794cdb2ade 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 import contextlib
 import io
 import pathlib
diff --git a/tests/test_click.py b/tests/test_click.py
index e47b4bbbb32877ff0b093b884a3c95b5fd2f0567..b25c957bdfeeb414e17a6d3f7ba572c6c0323f7d 100644
--- a/tests/test_click.py
+++ b/tests/test_click.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 import difflib
 import logging
 
diff --git a/tests/test_config.py b/tests/test_config.py
index 9495832e297f3c4bd2f42fcae21bb2c077421982..7f191bedf9d714c0900c928d99d2cbbf8c143f25 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 import filecmp
 import io
 
diff --git a/tests/test_logging.py b/tests/test_logging.py
index 1f4df73ab1c8b12a9edcb3b15d0bccb50e653c5c..007fafadfee1fe3a1d9677afb2406d3decb66aab 100644
--- a/tests/test_logging.py
+++ b/tests/test_logging.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 import io
 import logging
 
diff --git a/tests/test_rc.py b/tests/test_rc.py
index d25ea27cf691d094482afa5a98c173f9fdd3bfb1..02f7aabab1f26c5f232f67dc98401336e5ff2618 100644
--- a/tests/test_rc.py
+++ b/tests/test_rc.py
@@ -1,3 +1,7 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
 import filecmp
 import logging
 import os