Repository: computationalgeography/lue (language: python)

Issue:
Add pre-commit hooks for checking markdown formatting and spelling / prose errors
Codacy is detecting issues which we should detect ourselves, upon committing changes.


Discussion / hints:

Fix patch:
diff --git a/.editorconfig b/.editorconfig
index 805036a37..40a75e425 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -10,7 +10,7 @@ insert_final_newline = true
 max_line_length = 80
 trim_trailing_whitespace = true
 
-[*.{c,cpp,h,hpp,md,rst,txt}]
+[*.{c,cpp,h,hpp,md,rb,rst,txt,yaml,yml}]
 max_line_length = 110
 
 [*.py]
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 3a508b104..8cf9f88ce 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,3 +1,5 @@
 # Contributing
 
-There are various ways to contribute to the development of LUE. Please visit the [Contributing page](https://lue.computationalgeography.org/doc/contribute) in the LUE documentation, which contains information about all of these.
+There are various ways to contribute to the development of LUE. Please visit the [Contributing
+page](https://lue.computationalgeography.org/doc/contribute) in the LUE documentation, which contains
+information about all of these.
diff --git a/.github/ISSUE_TEMPLATE/1_bug_report.yaml b/.github/ISSUE_TEMPLATE/1_bug_report.yaml
index 2190a61f6..85dacab32 100644
--- a/.github/ISSUE_TEMPLATE/1_bug_report.yaml
+++ b/.github/ISSUE_TEMPLATE/1_bug_report.yaml
@@ -17,7 +17,7 @@ body:
       required: true
 
   - type: textarea
-    id: bug_expexted
+    id: bug_expected
     attributes:
       label: Expected behaviour
       placeholder: A concise description of what you expected to happen.
diff --git a/.mdl_style.rb b/.mdl_style.rb
new file mode 100644
index 000000000..5dce73c50
--- /dev/null
+++ b/.mdl_style.rb
@@ -0,0 +1,15 @@
+# https://github.com/markdownlint/markdownlint/blob/main/docs/configuration.md
+# https://github.com/markdownlint/markdownlint/blob/main/docs/RULES.md
+all
+exclude_rule 'MD004'
+exclude_rule 'MD005'
+exclude_rule 'MD012'
+exclude_rule 'MD024'
+exclude_rule 'MD030'
+exclude_rule 'MD034'
+exclude_rule 'MD041'
+exclude_rule 'MD046'
+
+# The parameters which can be changed are mentioned in the rules page (Parameters: ...)
+rule 'MD013', :line_length => 110
+rule 'MD007', :indent => 4
diff --git a/.mdlrc b/.mdlrc
new file mode 100644
index 000000000..1f82ca2ce
--- /dev/null
+++ b/.mdlrc
@@ -0,0 +1,1 @@
+style '.mdl_style.rb'
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 69a50d5f5..587ab52fc 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -18,11 +18,11 @@ repos:
   # - id: check-yaml
   - id: check-added-large-files
 - repo: https://github.com/psf/black
-  rev: 24.4.2
+  rev: 24.8.0
   hooks:
   - id: black
 - repo: https://github.com/pre-commit/mirrors-mypy
-  rev: v1.11.0
+  rev: v1.11.1
   hooks:
   - id: mypy
     # args: [--verbose]
@@ -45,6 +45,22 @@ repos:
         .*\.py|
         .*\.py.in|
       )$
+- repo: https://github.com/markdownlint/markdownlint
+  rev: v0.13.0
+  hooks:
+  - id: markdownlint
+- repo: https://github.com/codespell-project/codespell
+  rev: v2.3.0
+  hooks:
+  - id: codespell
+    additional_dependencies:
+    - tomli
+- repo: https://github.com/crate-ci/typos
+  rev: v1.23.6
+  hooks:
+  - id: typos
+    args: []  # Relevant: don't update files, just report
+# This one last. It is the slowest. --------------------------------------------
 - repo: https://github.com/pocc/pre-commit-hooks
   rev: v1.3.5
   hooks:
@@ -55,6 +71,7 @@ repos:
     exclude: |
       (?x)^(
         source/data_model/cxx/.*|
+        source/data_model/gdal/include/lue/gdal/library.hpp|
         source/data_model/hl/.*|
         source/data_model/python/.*|
         source/data_model/test/.*|
diff --git a/LICENSE.txt b/LICENSE.txt
index 51d43e4d5..b1f37b38a 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -18,4 +18,4 @@ 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.
\ No newline at end of file
+SOFTWARE.
diff --git a/README.md b/README.md
index 62960b929..7145efca6 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
 # LUE
+
 LUE scientific database and environmental modelling framework
 
 LUE is software for storing and manipulating large amounts of information
@@ -27,13 +28,16 @@ the related technology.
     - [Documentation](https://lue.computationalgeography.org/doc)
     - [Publications](https://lue.computationalgeography.org/publication)
 - [R&D team](https://www.computationalgeography.org)
-- [![Chat with us on Matrix](https://img.shields.io/badge/chat-on%20Matrix-%230098D4)](https://matrix.to/#/#lue:matrix.org) (users)
-- [![Chat with us on Matrix](https://img.shields.io/badge/chat-on%20Matrix-%230098D4)](https://matrix.to/#/#lue-dev:matrix.org) (developers)
+- [![Chat with us on Matrix](https://img.shields.io/badge/chat-on%20Matrix-%230098D4)](https://matrix.to/#/#lue:matrix.org)
+  (users)
+- [![Chat with us on Matrix](https://img.shields.io/badge/chat-on%20Matrix-%230098D4)](https://matrix.to/#/#lue-dev:matrix.org)
+  (developers)
 
 [![Latest release](https://zenodo.org/badge/DOI/10.5281/zenodo.5535685.svg)](https://doi.org/10.5281/zenodo.5535685)
 
 
 ## Source code
+
 [![License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/computationalgeography/lue/)
 [![Codacy Badge](https://app.codacy.com/project/badge/Grade/2c02fc1c5b13424abfc414b82104801d)](https://www.codacy.com/gh/computationalgeography/lue/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=computationalgeography/lue&amp;utm_campaign=Badge_Grade)
 [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)
@@ -43,6 +47,7 @@ the related technology.
 
 
 ## C/I builds
+
 [![Linux build status](https://github.com/computationalgeography/lue/actions/workflows/linux.yml/badge.svg)](https://github.com/computationalgeography/lue/actions/workflows/linux.yml)
 [![macOS build status](https://github.com/computationalgeography/lue/actions/workflows/macos.yml/badge.svg)](https://github.com/computationalgeography/lue/actions/workflows/macos.yml)
 [![Windows build status](https://github.com/computationalgeography/lue/actions/workflows/windows.yml/badge.svg)](https://github.com/computationalgeography/lue/actions/workflows/windows.yml)
@@ -50,11 +55,13 @@ the related technology.
 [![Conda packages build status](https://github.com/computationalgeography/lue/actions/workflows/conda.yml/badge.svg)](https://github.com/computationalgeography/lue/actions/workflows/conda.yml)
 
 ## Installation
+
 [![Anaconda-Server Badge](https://anaconda.org/conda-forge/lue/badges/version.svg)](https://anaconda.org/conda-forge/lue)
 [![Anaconda-Server Badge](https://anaconda.org/conda-forge/lue/badges/platforms.svg)](https://anaconda.org/conda-forge/lue)
 [![Anaconda-Server Badge](https://anaconda.org/conda-forge/lue/badges/downloads.svg)](https://anaconda.org/conda-forge/lue)
 
 The easiest way to install LUE is using Conda:
+
 ```bash
 conda install -c conda-forge lue
 ```
diff --git a/conanfile.py b/conanfile.py
index f9c989ec8..88418565f 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -1,6 +1,7 @@
 """
 Conan recipe
 """
+
 import os
 import shutil
 
diff --git a/document/doc/about/project.md b/document/doc/about/project.md
index 51c374142..f12edb85f 100644
--- a/document/doc/about/project.md
+++ b/document/doc/about/project.md
@@ -1,4 +1,5 @@
 (doc-about-project)=
+
 # Project
 
 ```{include} short_description.md
diff --git a/document/doc/about/related.md b/document/doc/about/related.md
index cde04c497..5d01a9d90 100644
--- a/document/doc/about/related.md
+++ b/document/doc/about/related.md
@@ -13,11 +13,14 @@
 %    rasdaman / SciDB (distributed storage, computing?)
 %
 %    https://geotrellis.io/
-%    GeoTrellis provides a number of operations to manipulate raster data, including cropping/warping, Map Algebra operations, and rendering operations, as well as vector to raster operations such as Kernel Density and vectorization of raster data.
+%    GeoTrellis provides a number of operations to manipulate raster data, including cropping/warping, Map
+%    Algebra operations, and rendering operations, as well as vector to raster operations such as Kernel
+%    Density and vectorization of raster data.
 %
 %
 %    https://openeo.org/
-%    openEO develops an open API to connect R, Python, JavaScript and other clients to big Earth observation cloud back-ends in a simple and unified way.
+%    openEO develops an open API to connect R, Python, JavaScript and other clients to big Earth observation
+%    cloud back-ends in a simple and unified way.
 %
 %
 %    xarray combined with dask (distributed  computing)
@@ -27,12 +30,13 @@
 %    agents:
 %
 %    https://en.wikipedia.org/wiki/SARL_language
-%    SARL language level are supported by this run-time environment: fully distributed, parallel execution of agent’s behaviors
+%    SARL language level are supported by this run-time environment: fully distributed, parallel execution of
+%    agent’s behaviors
 %
 %    hier vandaan...
 %    https://en.wikipedia.org/wiki/Comparison_of_agent-based_modeling_software
 %
-%    ik denk niet dat netlogo distributed kan, repast misschien wel...
+%    ik denk niet dat netlogo distributed kan, repast misschien well...
 %
 %
 %
diff --git a/document/doc/about/release.md b/document/doc/about/release.md
index 428809c20..03f3d9f94 100644
--- a/document/doc/about/release.md
+++ b/document/doc/about/release.md
@@ -1,4 +1,5 @@
 (doc-about-release)=
+
 # Releases
 
 ## 0.3.8 (WIP)
diff --git a/document/doc/contribute/index.md b/document/doc/contribute/index.md
index e2c01578a..ceb79f00c 100644
--- a/document/doc/contribute/index.md
+++ b/document/doc/contribute/index.md
@@ -1,4 +1,5 @@
 (doc-contribute)=
+
 # Contribute
 
 Thank you for investing your time in contributing to this project!
diff --git a/document/doc/contribute/release.md b/document/doc/contribute/release.md
index 53438231f..b30a972b5 100644
--- a/document/doc/contribute/release.md
+++ b/document/doc/contribute/release.md
@@ -38,7 +38,7 @@ Information about this can be found on the [lue-feedstock page](https://github.c
 at Github.
 
 The pull request is based on a new branch in a clone of the `lue-feedstock` repository, located in the
-`regro-cf-autotick-bot` Github organisation. To make changes to this branch, the folowing workflow can be
+`regro-cf-autotick-bot` Github organisation. To make changes to this branch, the following workflow can be
 used:
 
 ```bash
diff --git a/document/doc/manual/framework/execute.md b/document/doc/manual/framework/execute.md
index 5a62fc866..bf25a339c 100644
--- a/document/doc/manual/framework/execute.md
+++ b/document/doc/manual/framework/execute.md
@@ -44,6 +44,7 @@ starting LUE Python scripts like this solved the crashes:
 ```bash
 LD_PRELOAD=<prefix>/lib/libtcmalloc_minimal.so.4 python ./my_lue_script.py
 ```
+
 :::
 
 
diff --git a/document/doc/manual/index.md b/document/doc/manual/index.md
index 57564ba88..350bf792b 100644
--- a/document/doc/manual/index.md
+++ b/document/doc/manual/index.md
@@ -1,2 +1,3 @@
 (doc-manual)=
+
 # Manual
diff --git a/document/doc/manual/install/source.md b/document/doc/manual/install/source.md
index 73541e1a9..f004ca062 100644
--- a/document/doc/manual/install/source.md
+++ b/document/doc/manual/install/source.md
@@ -92,8 +92,8 @@ Optional features:
 | ---                                   | ---     | --- |
 | `LUE_QA_WITH_PYTHON_API`              | `FALSE` | Build QA Python API |
 | `LUE_QA_WITH_TESTS`                   | `FALSE` | Build test targets |
-| `LUE_QA_TEST_NR_LOCALITIES_PER_TEST`  | `1`     | Number of localities used when testing the framework |
-| `LUE_QA_TEST_NR_THREADS_PER_LOCALITY` | `1`     | Number of threads per locality used when testing the framework |
+| `LUE_QA_TEST_NR_LOCALITIES_PER_TEST`  | `1`     | Localities used when testing the framework |
+| `LUE_QA_TEST_NR_THREADS_PER_LOCALITY` | `1`     | Threads per locality used when testing the framework |
 | `LUE_QA_TEST_HPX_RUNWRAPPER`          | `none`  | Runwrapper to use (see `hpxrun.py`) |
 | `LUE_QA_TEST_HPX_PARCELPORT`          | `tcp`   | Parcelport to use (see `hpxrun.py`) |
 
@@ -106,7 +106,7 @@ requires that HPX is built with support for networking.
 #### Dependencies
 
 - Nlohmann JSON
-- `LUE_QA_WITH_TESTS`: Boost filesytem, sytem, unit-test framework libraries
+- `LUE_QA_WITH_TESTS`: Boost filesystem, system, unit-test framework libraries
 - `LUE_QA_WITH_PYTHON_API`: pybind11, Python
 
 
@@ -115,8 +115,8 @@ requires that HPX is built with support for networking.
 There are at least three options for installing prerequisite libraries and tools:
 
 1. Install using platform specific package manager
-2. Install using Conan, either before building LUE or by the LUE build scripts
-3. Build by the LUE build scripts
+1. Install using Conan, either before building LUE or by the LUE build scripts
+1. Build by the LUE build scripts
 
 The next variables determine what happens in each case by default.
 
diff --git a/document/doc/pcraster/status.md b/document/doc/pcraster/status.md
index 84f66f5a5..cf5971f00 100644
--- a/document/doc/pcraster/status.md
+++ b/document/doc/pcraster/status.md
@@ -502,6 +502,7 @@ these differences as much as possible.
 *   - ycoordinate
     - 🗑
     - Not sure why this is useful...
+
 :::
 
 %    In LUE, not in PCRaster:
diff --git a/document/doc/quick_start/index.md b/document/doc/quick_start/index.md
index 9d79a93ba..26ca97cb3 100644
--- a/document/doc/quick_start/index.md
+++ b/document/doc/quick_start/index.md
@@ -1,5 +1,5 @@
 # Quick start
 
-Here, you will find just enough information to get started with using LUE. It is targetted at model
+Here, you will find just enough information to get started with using LUE. It is targeted at model
 developers. We will be implementing [Conway's Game of
 Life](https://en.wikipedia.org/wiki/Conway's_Game_of_Life) and execute it in parallel, using a single process.
diff --git a/document/doc/quick_start/python.md b/document/doc/quick_start/python.md
index 15283f9af..a56b88beb 100644
--- a/document/doc/quick_start/python.md
+++ b/document/doc/quick_start/python.md
@@ -1,6 +1,7 @@
 # Game of Life in Python
 
 ## Install
+
 ```bash
 conda install -c conda-forge lue
 ```
diff --git a/document/doc/reference/python/framework/trigonometry.rst b/document/doc/reference/python/framework/trigonometry.rst
index 4fd9f63d1..daa07d7a2 100644
--- a/document/doc/reference/python/framework/trigonometry.rst
+++ b/document/doc/reference/python/framework/trigonometry.rst
@@ -17,7 +17,7 @@ Trigonometry
 
    Compute the principal value of the arc cosine
 
-   :parm cosine: Datastructure containing cosines
+   :param cosine: Datastructure containing cosines
    :return: New instance of the same datastructure as passed in
 
    This function is overloaded for arrays containing float32 and float64 elements.
@@ -27,7 +27,7 @@ Trigonometry
 
    Compute the principal value of the arc sine
 
-   :parm sine: Datastructure containing sines
+   :param sine: Datastructure containing sines
    :return: New instance of the same datastructure as passed in
 
    This function is overloaded for arrays containing float32 and float64 elements.
@@ -37,7 +37,7 @@ Trigonometry
 
    Compute the principal value of the arc tangent
 
-   :parm tangent: Datastructure containing tangents
+   :param tangent: Datastructure containing tangents
    :return: New instance of the same datastructure as passed in
 
    This function is overloaded for arrays containing float32 and float64 elements.
@@ -47,8 +47,8 @@ Trigonometry
 
    Compute the arc tangent of y/x
 
-   :parm y: Datastructure containing distances in y-direction
-   :parm x: Datastructure containing distances in x-direction
+   :param y: Datastructure containing distances in y-direction
+   :param x: Datastructure containing distances in x-direction
    :return: New instance of the same datastructure as passed in
 
    This function is overloaded for arrays containing float32 and float64 elements.
@@ -60,7 +60,7 @@ Trigonometry
 
    Compute the cosine
 
-   :parm angle: Datastructure containing angles in radians
+   :param angle: Datastructure containing angles in radians
    :return: New instance of the same datastructure as passed in
 
    This function is overloaded for arrays containing float32 and float64 elements.
@@ -70,7 +70,7 @@ Trigonometry
 
    Compute the sine
 
-   :parm angle: Datastructure containing angles in radians
+   :param angle: Datastructure containing angles in radians
    :return: New instance of the same datastructure as passed in
 
    This function is overloaded for arrays containing float32 and float64 elements.
@@ -80,7 +80,7 @@ Trigonometry
 
    Compute the tangent
 
-   :parm angle: Datastructure containing angles in radians
+   :param angle: Datastructure containing angles in radians
    :return: New instance of the same datastructure as passed in
 
    This function is overloaded for arrays containing float32 and float64 elements.
diff --git a/document/luepy/case_study/elevation.py b/document/luepy/case_study/elevation.py
index a9a65de53..ad07e4d79 100644
--- a/document/luepy/case_study/elevation.py
+++ b/document/luepy/case_study/elevation.py
@@ -36,7 +36,7 @@
 ### time_boxes = time_domain.reserve(nr_time_boxes)
 ### # A box is defined by a begin and end time point (two coordinates per box)
 ### # Here, we configure time boxes with a duration of 10 days. The time
-### # inbetween the boxes is time were we don't have information.
+### # in between the boxes is time were we don't have information.
 ### time_boxes[:] = np.array([  # Dummy data...
 ###         [10,  20],
 ###         [30,  40],
@@ -67,7 +67,7 @@
 ### nr_cells = nr_cells.reshape(nr_areas, 2)
 ### space_discretization.values.reserve(nr_areas)[:] = nr_cells
 ###
-### # Re-use nr_cells array with shapes of spatial fields, but add information
+### # Reuse nr_cells array with shapes of spatial fields, but add information
 ### # about the number of time steps. The resulting values will be
 ### # [nr_time_steps, nr_rows, nr_cols], where nr_rows, nr_cols is different
 ### # for each raster.
diff --git a/document/luepy/discretization.rst b/document/luepy/discretization.rst
index 24a48c00a..37cb2363b 100644
--- a/document/luepy/discretization.rst
+++ b/document/luepy/discretization.rst
@@ -1,6 +1,10 @@
 Discretization
 ==============
-LUE property values can be discretized. This is one way to store the continuous variation of some property value through the time and/or space domain. For example, to store the continuous variation of topographic elevation in an area, to folowing approach can be used (assuming elevation does not change over the time considered):
+
+LUE property values can be discretized. This is one way to store the continuous variation of some property
+value through the time and/or space domain. For example, to store the continuous variation of topographic
+elevation in an area, to following approach can be used (assuming elevation does not change over the time
+considered):
 
 - property set
     - time domain: omnipresent
@@ -18,7 +22,8 @@ LUE property values can be discretized. This is one way to store the continuous
 
 The result of this layout is a representation in the LUE data model of zero or more rasters. In general, the information required to understand the way a property value is discretized is stored itself in a property. This discretization property is a property like any other property, but it is linked to a property whose values are discretized using a special keyword (`lue_space_discretization` in the above example). This means that the domain of a discretization property can be different from the property being discretized.
 
-In the folowing sections the approach is described of storing continuous varying property values according to different kinds of discretization.
+In the following sections the approach is described of storing continuous varying property values according to
+different kinds of discretization.
 
 
 Variation through time
diff --git a/document/luepy/installation.rst b/document/luepy/installation.rst
index 6fe3652ac..40e66859f 100644
--- a/document/luepy/installation.rst
+++ b/document/luepy/installation.rst
@@ -14,7 +14,7 @@ The LUE package can be installed with `conda`::
 
         $ pip install --upgrade lue
 
-    During the installation a C++ compiler will be used to compile some source files. The LUE C++ sources depend on the folowing packages to be installed:
+    During the installation a C++ compiler will be used to compile some source files. The LUE C++ sources depend on the following packages to be installed:
 
     - `boost`_ C++ libraries (headers)
     - `hdf5`_ C library (library and headers)
diff --git a/document/luepy/naming.rst b/document/luepy/naming.rst
index 193a6dd62..2041882a3 100644
--- a/document/luepy/naming.rst
+++ b/document/luepy/naming.rst
@@ -5,7 +5,7 @@ The LUE datamodel requires you to provide names for various things. Here, we pro
 
 Style
 -----
-See `PEP 8 -- Style Guide for Python Code`_, especially the `section about naming conventions`_ for information about styling Python code in general. Given the information in PEP 8, we adopted the folowing naming rule for naming things in de LUE datamodel: "use lowercase with words separated by underscores as necessary to improve readability".
+See `PEP 8 -- Style Guide for Python Code`_, especially the `section about naming conventions`_ for information about styling Python code in general. Given the information in PEP 8, we adopted the following naming rule for naming things in de LUE datamodel: "use lowercase with words separated by underscores as necessary to improve readability".
 
 
 .. _PEP 8 -- Style Guide for Python Code: https://www.python.org/dev/peps/pep-0008/
diff --git a/environment/cmake/LueConfiguration.cmake b/environment/cmake/LueConfiguration.cmake
index ba4f2f46a..1f6949c6e 100644
--- a/environment/cmake/LueConfiguration.cmake
+++ b/environment/cmake/LueConfiguration.cmake
@@ -459,7 +459,7 @@ if(LUE_HPX_REQUIRED)
                 foreach(hpx_version_ ${hpx_versions_to_try})
                     if(EXISTS "${LUE_REPOSITORY_CACHE}/${hpx_version_}.tar.gz")
                         # Use local archive
-                        set(hpx_version ${hpx_version_})  # Loop veriables are not available outside a loop
+                        set(hpx_version ${hpx_version_})  # Loop variables are not available outside a loop
                         set(hpx_url "file://${LUE_REPOSITORY_CACHE}/${hpx_version}.tar.gz")
                         break()
                     endif()
diff --git a/environment/script/write_conan_profile.py b/environment/script/write_conan_profile.py
index 2819fdffe..19beb4151 100755
--- a/environment/script/write_conan_profile.py
+++ b/environment/script/write_conan_profile.py
@@ -323,8 +323,8 @@ def write_conan_profile(compiler_filename, profile_pathname):
         compiler_versions = conan_settings["compiler"][compiler]["version"]
 
         # This happens if the compiler is more recent than the Conan settings file. Here,
-        # we just add the newer version to the list of supported versions. Otherwise Conan wil
-        # not install packages.
+        # we just add the newer version to the list of supported versions. Otherwise Conan
+        # will not install packages.
         if compiler_version not in compiler_versions:
             String = type(compiler_versions[0])
 
diff --git a/license/glfw.txt b/license/glfw.txt
index 7494a3f68..b8c096845 100644
--- a/license/glfw.txt
+++ b/license/glfw.txt
@@ -20,4 +20,3 @@ freely, subject to the following restrictions:
 
 3. This notice may not be removed or altered from any source
    distribution.
-
diff --git a/license/hdf5.txt b/license/hdf5.txt
index c54363922..2aea06c00 100644
--- a/license/hdf5.txt
+++ b/license/hdf5.txt
@@ -1,107 +1,107 @@
 HDF5 Software Library and Utilities License
 ===========================================
 
-Copyright Notice and License Terms for 
+Copyright Notice and License Terms for
 HDF5 (Hierarchical Data Format 5) Software Library and Utilities
 -----------------------------------------------------------------------------
 
 HDF5 (Hierarchical Data Format 5) Software Library and Utilities
-Copyright 2006 by The HDF Group. 
+Copyright 2006 by The HDF Group.
 
 NCSA HDF5 (Hierarchical Data Format 5) Software Library and Utilities
-Copyright 1998-2006 by The Board of Trustees of the University of Illinois. 
+Copyright 1998-2006 by The Board of Trustees of the University of Illinois.
 
 All rights reserved.
 
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted for any purpose (including commercial purposes) 
+Redistribution and use in source and binary forms, with or without
+modification, are permitted for any purpose (including commercial purposes)
 provided that the following conditions are met:
 
-1. Redistributions of source code must retain the above copyright notice, 
+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 
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions, and the following disclaimer in the documentation
    and/or materials provided with the distribution.
 
-3. Neither the name of The HDF Group, the name of the University, nor the 
-   name of any Contributor may be used to endorse or promote products derived 
-   from this software without specific prior written permission from 
+3. Neither the name of The HDF Group, the name of the University, nor the
+   name of any Contributor may be used to endorse or promote products derived
+   from this software without specific prior written permission from
    The HDF Group, the University, or the Contributor, respectively.
 
-DISCLAIMER: 
-THIS SOFTWARE IS PROVIDED BY THE HDF GROUP AND THE CONTRIBUTORS 
-"AS IS" WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED. IN NO 
-EVENT SHALL THE HDF GROUP OR THE CONTRIBUTORS BE LIABLE FOR ANY DAMAGES 
-SUFFERED BY THE USERS ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
+DISCLAIMER:
+THIS SOFTWARE IS PROVIDED BY THE HDF GROUP AND THE CONTRIBUTORS
+"AS IS" WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED. IN NO
+EVENT SHALL THE HDF GROUP OR THE CONTRIBUTORS BE LIABLE FOR ANY DAMAGES
+SUFFERED BY THE USERS ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- 
-You are under no obligation whatsoever to provide any bug fixes, patches, or 
-upgrades to the features, functionality or performance of the source code 
-("Enhancements") to anyone; however, if you choose to make your Enhancements 
-available either publicly, or directly to The HDF Group, without imposing a 
-separate written license agreement for such Enhancements, then you hereby 
-grant the following license: a non-exclusive, royalty-free perpetual license 
-to install, use, modify, prepare derivative works, incorporate into other 
-computer software, distribute, and sublicense such enhancements or derivative 
+
+You are under no obligation whatsoever to provide any bug fixes, patches, or
+upgrades to the features, functionality or performance of the source code
+("Enhancements") to anyone; however, if you choose to make your Enhancements
+available either publicly, or directly to The HDF Group, without imposing a
+separate written license agreement for such Enhancements, then you hereby
+grant the following license: a non-exclusive, royalty-free perpetual license
+to install, use, modify, prepare derivative works, incorporate into other
+computer software, distribute, and sublicense such enhancements or derivative
 works thereof, in binary and source code form.
 
 -----------------------------------------------------------------------------
 -----------------------------------------------------------------------------
 
-Limited portions of HDF5 were developed by Lawrence Berkeley National 
+Limited portions of HDF5 were developed by Lawrence Berkeley National
 Laboratory (LBNL). LBNL's Copyright Notice and Licensing Terms can be
-found here: COPYING_LBNL_HDF5 file in this directory or at 
-https://raw.githubusercontent.com/hdfgroup/hdf5/develop/COPYING_LBNL_HDF5. 
+found here: COPYING_LBNL_HDF5 file in this directory or at
+https://raw.githubusercontent.com/hdfgroup/hdf5/develop/COPYING_LBNL_HDF5.
 
 -----------------------------------------------------------------------------
 -----------------------------------------------------------------------------
 
-Contributors:   National Center for Supercomputing Applications (NCSA) at 
-the University of Illinois, Fortner Software, Unidata Program Center 
-(netCDF), The Independent JPEG Group (JPEG), Jean-loup Gailly and Mark Adler 
+Contributors:   National Center for Supercomputing Applications (NCSA) at
+the University of Illinois, Fortner Software, Unidata Program Center
+(netCDF), The Independent JPEG Group (JPEG), Jean-loup Gailly and Mark Adler
 (gzip), and Digital Equipment Corporation (DEC).
 
 -----------------------------------------------------------------------------
- 
-Portions of HDF5 were developed with support from the Lawrence Berkeley 
-National Laboratory (LBNL) and the United States Department of Energy 
+
+Portions of HDF5 were developed with support from the Lawrence Berkeley
+National Laboratory (LBNL) and the United States Department of Energy
 under Prime Contract No. DE-AC02-05CH11231.
 
 -----------------------------------------------------------------------------
 
-Portions of HDF5 were developed with support from Lawrence Livermore 
-National Laboratory and the United States Department of Energy under 
+Portions of HDF5 were developed with support from Lawrence Livermore
+National Laboratory and the United States Department of Energy under
 Prime Contract No. DE-AC52-07NA27344.
 
 -----------------------------------------------------------------------------
 
-Portions of HDF5 were developed with support from the University of 
-California, Lawrence Livermore National Laboratory (UC LLNL).  
-The following statement applies to those portions of the product and must 
-be retained in any redistribution of source code, binaries, documentation, 
+Portions of HDF5 were developed with support from the University of
+California, Lawrence Livermore National Laboratory (UC LLNL).
+The following statement applies to those portions of the product and must
+be retained in any redistribution of source code, binaries, documentation,
 and/or accompanying materials:
 
-   This work was partially produced at the University of California, 
-   Lawrence Livermore National Laboratory (UC LLNL) under contract 
-   no. W-7405-ENG-48 (Contract 48) between the U.S. Department of Energy 
-   (DOE) and The Regents of the University of California (University) 
+   This work was partially produced at the University of California,
+   Lawrence Livermore National Laboratory (UC LLNL) under contract
+   no. W-7405-ENG-48 (Contract 48) between the U.S. Department of Energy
+   (DOE) and The Regents of the University of California (University)
    for the operation of UC LLNL.
 
-   DISCLAIMER: 
-   THIS WORK WAS PREPARED AS AN ACCOUNT OF WORK SPONSORED BY AN AGENCY OF 
-   THE UNITED STATES GOVERNMENT. NEITHER THE UNITED STATES GOVERNMENT NOR 
-   THE UNIVERSITY OF CALIFORNIA NOR ANY OF THEIR EMPLOYEES, MAKES ANY 
-   WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY OR RESPONSIBILITY 
-   FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, 
-   APPARATUS, PRODUCT, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE 
-   WOULD NOT INFRINGE PRIVATELY- OWNED RIGHTS. REFERENCE HEREIN TO ANY 
-   SPECIFIC COMMERCIAL PRODUCTS, PROCESS, OR SERVICE BY TRADE NAME, 
-   TRADEMARK, MANUFACTURER, OR OTHERWISE, DOES NOT NECESSARILY CONSTITUTE 
-   OR IMPLY ITS ENDORSEMENT, RECOMMENDATION, OR FAVORING BY THE UNITED 
-   STATES GOVERNMENT OR THE UNIVERSITY OF CALIFORNIA. THE VIEWS AND 
-   OPINIONS OF AUTHORS EXPRESSED HEREIN DO NOT NECESSARILY STATE OR REFLECT 
-   THOSE OF THE UNITED STATES GOVERNMENT OR THE UNIVERSITY OF CALIFORNIA, 
+   DISCLAIMER:
+   THIS WORK WAS PREPARED AS AN ACCOUNT OF WORK SPONSORED BY AN AGENCY OF
+   THE UNITED STATES GOVERNMENT. NEITHER THE UNITED STATES GOVERNMENT NOR
+   THE UNIVERSITY OF CALIFORNIA NOR ANY OF THEIR EMPLOYEES, MAKES ANY
+   WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY OR RESPONSIBILITY
+   FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY INFORMATION,
+   APPARATUS, PRODUCT, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE
+   WOULD NOT INFRINGE PRIVATELY- OWNED RIGHTS. REFERENCE HEREIN TO ANY
+   SPECIFIC COMMERCIAL PRODUCTS, PROCESS, OR SERVICE BY TRADE NAME,
+   TRADEMARK, MANUFACTURER, OR OTHERWISE, DOES NOT NECESSARILY CONSTITUTE
+   OR IMPLY ITS ENDORSEMENT, RECOMMENDATION, OR FAVORING BY THE UNITED
+   STATES GOVERNMENT OR THE UNIVERSITY OF CALIFORNIA. THE VIEWS AND
+   OPINIONS OF AUTHORS EXPRESSED HEREIN DO NOT NECESSARILY STATE OR REFLECT
+   THOSE OF THE UNITED STATES GOVERNMENT OR THE UNIVERSITY OF CALIFORNIA,
    AND SHALL NOT BE USED FOR ADVERTISING OR PRODUCT ENDORSEMENT PURPOSES.
 
 -----------------------------------------------------------------------------
@@ -111,63 +111,61 @@ COPYING_LBNL_HDF5
 
 ****************************
 *** Copyright Notice ***
-Hierarchical Data Format 5 (HDF5) v1.12.0 Copyright (c) 2020, HDF Group and The 
-Regents of the University of California, through Lawrence Berkeley National 
-Laboratory (subject to receipt of any required approvals from the U.S. Dept. of 
+Hierarchical Data Format 5 (HDF5) v1.12.0 Copyright (c) 2020, HDF Group and The
+Regents of the University of California, through Lawrence Berkeley National
+Laboratory (subject to receipt of any required approvals from the U.S. Dept. of
 Energy). All rights reserved.
 
-If you have questions about your rights to use or distribute this software, 
+If you have questions about your rights to use or distribute this software,
 please contact Berkeley Lab's Intellectual Property Office at IPO@lbl.gov.
 
-NOTICE.  This Software was partially developed under funding from the U.S. 
-Department of Energy and the U.S. Government consequently retains certain 
-rights.  As such, the U.S. Government has been granted for itself and others 
-acting on its behalf a paid-up, nonexclusive, irrevocable, worldwide license in 
-the Software to reproduce, distribute copies to the public, prepare derivative 
+NOTICE.  This Software was partially developed under funding from the U.S.
+Department of Energy and the U.S. Government consequently retains certain
+rights.  As such, the U.S. Government has been granted for itself and others
+acting on its behalf a paid-up, nonexclusive, irrevocable, worldwide license in
+the Software to reproduce, distribute copies to the public, prepare derivative
 works, and perform publicly and display publicly, and to permit others to do so.
 
 ****************************
 *** License Agreement ***
 
-Hierarchical Data Format 5 (HDF5) v1.12.0 Copyright (c) 2020, HDF Group and The 
-Regents of the University of California, through Lawrence Berkeley National 
-Laboratory (subject to receipt of any required approvals from the U.S. Dept. of 
+Hierarchical Data Format 5 (HDF5) v1.12.0 Copyright (c) 2020, HDF Group and The
+Regents of the University of California, through Lawrence Berkeley National
+Laboratory (subject to receipt of any required approvals from the U.S. Dept. of
 Energy). All rights reserved.
 
-Redistribution and use in source and binary forms, with or without modification, 
+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 
+(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 
+(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 HDF Group, University of California, Lawrence 
-Berkeley National Laboratory, U.S. Dept. of Energy, nor the names of its 
-contributors may be used to endorse or promote products derived from this 
+(3) Neither the name of the HDF Group, University of California, Lawrence
+Berkeley National Laboratory, U.S. Dept. of Energy, 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 OWNER 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 
+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 OWNER 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.
 
-You are under no obligation whatsoever to provide any bug fixes, patches, or 
-upgrades to the features, functionality or performance of the source code 
-("Enhancements") to anyone; however, if you choose to make your Enhancements 
-available either publicly, or directly to Lawrence Berkeley National Laboratory, 
-without imposing a separate written license agreement for such Enhancements, 
-then you hereby grant the following license: a non-exclusive, royalty-free 
-perpetual license to install, use, modify, prepare derivative works, incorporate 
-into other computer software, distribute, and sublicense such enhancements or 
+You are under no obligation whatsoever to provide any bug fixes, patches, or
+upgrades to the features, functionality or performance of the source code
+("Enhancements") to anyone; however, if you choose to make your Enhancements
+available either publicly, or directly to Lawrence Berkeley National Laboratory,
+without imposing a separate written license agreement for such Enhancements,
+then you hereby grant the following license: a non-exclusive, royalty-free
+perpetual license to install, use, modify, prepare derivative works, incorporate
+into other computer software, distribute, and sublicense such enhancements or
 derivative works thereof, in binary and source code form.
-
-
diff --git a/license/numpy.txt b/license/numpy.txt
index 84cc2f3e3..86309e515 100644
--- a/license/numpy.txt
+++ b/license/numpy.txt
@@ -67,4 +67,3 @@ Name: spin
 Files: .spin/cmds.py
 License: BSD-3
   For license text, see https://github.com/numpy/numpy/tree/main/.spin/LICENSE
-
diff --git a/pyproject.toml b/pyproject.toml
index 6917fbad0..efa7d729b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,3 +3,18 @@ known_lue = "lue, lue_test"
 lines_after_imports = 2
 sections = "FUTURE,STDLIB,THIRDPARTY,LUE,FIRSTPARTY,LOCALFOLDER"
 profile = "black"
+
+[tool.codespell]
+skip = "*.cpp,*.hpp,*.tex,*_test.py,pyproject.toml"
+ignore-words-list = "nD"
+
+[tool.typos]
+default.extend-ignore-identifiers-re = [
+    ".*_FPR_.*",
+    "InputElemenT",
+    "nd",
+    "ND",
+]
+default.extend-ignore-words-re = [
+    "PN",
+]
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index 854bc0706..be4dd90af 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -24,7 +24,7 @@ endif()
 if(LUE_BUILD_DOCUMENTATION)
     ### edit_data_model_graphs(
     ###     TARGET data_model_graphs
-    ###     DESTINATIONS editted_dot_graphs
+    ###     DESTINATIONS edited_dot_graphs
     ###     TEMPLATE
     ###         logical_data_model
     ###     OBJECTS
@@ -48,7 +48,7 @@ if(LUE_BUILD_DOCUMENTATION)
     ###         doc/space_domain_taxonomy.dot
     ###         doc/time_domain_taxonomy.dot
     ###         doc/value_taxonomy.dot
-    ###         ${editted_dot_graphs}
+    ###         ${edited_dot_graphs}
     ### )
 
     ### add_custom_target(copy_svg_files
diff --git a/source/data_model/cxx/doc/directory.dox b/source/data_model/cxx/doc/directory.dox
index cee7eee75..a7231fb1b 100644
--- a/source/data_model/cxx/doc/directory.dox
+++ b/source/data_model/cxx/doc/directory.dox
@@ -3,7 +3,7 @@
     @brief  Code related to storing object arrays
 
     ## Design
-    - Seperate *object array packing* from *active object tracking*. Some
+    - Separate *object array packing* from *active object tracking*. Some
         optimizations can be made, which should be handled at a higher
         level. So, nothing in the interface should suggest how active
         objects are tracked.
diff --git a/source/data_model/cxx/doc/time.md b/source/data_model/cxx/doc/time.md
index efbadf07c..615c90578 100644
--- a/source/data_model/cxx/doc/time.md
+++ b/source/data_model/cxx/doc/time.md
@@ -1,21 +1,21 @@
 [TOC]
 
 # Time  {#lue_time}
+
 Time is a one-dimensional domain. Different applications have different
 requirements for storing time. In some cases time is represented by
 light years, while in other cases it is represented by nanoseconds. The
 LUE time library contains various classes for handling time.
 
-
 Notes:
+
 ```cpp
-// A Calendar maps a clock to real-world time. There are differend kinds:
+// A Calendar maps a clock to real-world time. There are different kinds:
 // - Gregorian calendar
 // - Julian calendar
 // - Islamic calendar
 // - ...
 
-
 // Pass an epoch and a clock to a calendar. Then the calendar instance
 // can translate time points to calendar dates.
 GregorianCalendar<Clock> GregorianCalendar(
@@ -25,8 +25,6 @@ calendar.date(time_point);
 
 auto date = parse<Calendar>(calendar, string)
 
-
-
 // See also:
 // - Geological Calendar: map geological lifetime of the earth to a
 //   single year
@@ -35,8 +33,6 @@ auto date = parse<Calendar>(calendar, string)
 // Handle:
 // - periodization
 
-
-
 // Store in dataset:
 // - Clock info
 //     - unit
@@ -44,5 +40,4 @@ auto date = parse<Calendar>(calendar, string)
 // - Calendar info
 //     - kind
 //     - epoch
-
 ```
diff --git a/source/data_model/cxx/include/lue/core/configuration.hpp b/source/data_model/cxx/include/lue/core/configuration.hpp
index f1867cc8c..fdfa30b84 100644
--- a/source/data_model/cxx/include/lue/core/configuration.hpp
+++ b/source/data_model/cxx/include/lue/core/configuration.hpp
@@ -77,7 +77,7 @@ namespace lue {
                 void save(hdf5::Attributes& attributes) const;
 
                 /*!
-                    @brief      Return wheter @a lhs equals @a rhs
+                    @brief      Return whether @a lhs equals @a rhs
 
                     Configuration instances are considered equal when their collections
                     of aspects are equal.
diff --git a/source/data_model/cxx/include/lue/info/identity/active_object_id.hpp b/source/data_model/cxx/include/lue/info/identity/active_object_id.hpp
index b8a89f1b7..3e1a686c4 100644
--- a/source/data_model/cxx/include/lue/info/identity/active_object_id.hpp
+++ b/source/data_model/cxx/include/lue/info/identity/active_object_id.hpp
@@ -20,7 +20,7 @@ namespace lue {
             not needed.
 
             Tracking the IDs of the active objects is needed in combination with
-            the folowing object array kinds:
+            the following object array kinds:
             - same_shape::constant_shape::Value
             - same_shape::variable_shape::Value
             - different_shape::constant_shape::Value
diff --git a/source/data_model/cxx/include/lue/info/identity/active_object_index.hpp b/source/data_model/cxx/include/lue/info/identity/active_object_index.hpp
index 2ace63334..15234878a 100644
--- a/source/data_model/cxx/include/lue/info/identity/active_object_index.hpp
+++ b/source/data_model/cxx/include/lue/info/identity/active_object_index.hpp
@@ -15,7 +15,7 @@ namespace lue {
             object in a set can be stored using the ActiveSetIndex class.
 
             Tracking the indices of the active objects is needed in combination
-            with the folowing object array kinds:
+            with the following object array kinds:
             - different_shape::constant_shape::Value
 
             The indices stored are the indices into the value array of each
diff --git a/source/data_model/cxx/include/lue/info/identity/active_set_index.hpp b/source/data_model/cxx/include/lue/info/identity/active_set_index.hpp
index 0b53ec4b5..8525c0493 100644
--- a/source/data_model/cxx/include/lue/info/identity/active_set_index.hpp
+++ b/source/data_model/cxx/include/lue/info/identity/active_set_index.hpp
@@ -14,7 +14,7 @@ namespace lue {
             can be stored using the ActiveID class.
 
             Tracking the indices of active sets is needed in combination with
-            the folowing array kinds:
+            the following array kinds:
             - same_shape::constant_shape::Value
             - same_shape::variable_shape::Value
             - different_shape::constant_shape::Value
diff --git a/source/data_model/cxx/include/lue/info/space/mobile_space_box.hpp b/source/data_model/cxx/include/lue/info/space/mobile_space_box.hpp
index 53d0706e6..52bbce4a5 100644
--- a/source/data_model/cxx/include/lue/info/space/mobile_space_box.hpp
+++ b/source/data_model/cxx/include/lue/info/space/mobile_space_box.hpp
@@ -6,7 +6,7 @@ namespace lue {
     namespace data_model {
 
         /*!
-            - Zero or more space boxs per item
+            - Zero or more space boxes per item
             - Each space box has a unique location in space
         */
         class MobileSpaceBox: public same_shape::constant_shape::Value
diff --git a/source/data_model/cxx/src/validate.cpp b/source/data_model/cxx/src/validate.cpp
index 7b487324b..8e6df23ae 100644
--- a/source/data_model/cxx/src/validate.cpp
+++ b/source/data_model/cxx/src/validate.cpp
@@ -756,7 +756,7 @@ namespace lue {
 
                 // TODO(KDJ) Actually, if we allow boxes to overlap, we should test the
                 //      start coordinates and end coordinates of the boxes
-                //      seperately. A start coordinate of a next box can be
+                //      separately. A start coordinate of a next box can be
                 //      smaller than an end coordinate of a previous box.
                 assert_increasing(time_box.id(), boxes, issues);
             }
@@ -795,7 +795,7 @@ namespace lue {
 
                 // TODO(KDJ) Actually, if we allow boxes to overlap, we should test the
                 //      start coordinates and end coordinates of the boxes
-                //      seperately. A start coordinate of a next box can be
+                //      separately. A start coordinate of a next box can be
                 //      smaller than an end coordinate of a previous box.
                 assert_increasing(time_cell.id(), boxes, issues);
             }
@@ -1572,7 +1572,7 @@ namespace lue {
                                             }
 
                                             // TODO(KDJ) The presence property's value must contain
-                                            // unsigned integers (= convertable to boolean)
+                                            // unsigned integers (= convertible to boolean)
 
                                             break;
                                         }
diff --git a/source/data_model/doc/index.md b/source/data_model/doc/index.md
index 6556e820f..47bda29ad 100644
--- a/source/data_model/doc/index.md
+++ b/source/data_model/doc/index.md
@@ -1,4 +1,5 @@
 (source-lue-data-model)=
+
 # Data model
 
 The data model code is divided into libraries that depend on each other. From lower to higher levels of
diff --git a/source/data_model/gdal/doc/lue_gdal.md b/source/data_model/gdal/doc/lue_gdal.md
index 9399fc1ce..c7b6a4a63 100644
--- a/source/data_model/gdal/doc/lue_gdal.md
+++ b/source/data_model/gdal/doc/lue_gdal.md
@@ -4,12 +4,15 @@
 
 
 # Introduction  {#lue_gdal_introduction}
+
 TODO
 
 
 # Design
+
 TODO
 
 
 # See also  {#lue_gdal_see_also}
+
 - [GDAL API](https://gdal.org/api/index.html)
diff --git a/source/data_model/gdal/include/lue/gdal/library.hpp b/source/data_model/gdal/include/lue/gdal/library.hpp
index c2c90b6ee..edd3a721b 100644
--- a/source/data_model/gdal/include/lue/gdal/library.hpp
+++ b/source/data_model/gdal/include/lue/gdal/library.hpp
@@ -14,22 +14,17 @@ namespace lue::gdal {
     template<typename Element>
     void verify_support()
     {
-        if constexpr (
-            (std::is_same_v<Element, std::int64_t> || std::is_same_v<Element, std::uint64_t>) &&
-            !supports_64bit_integers)
+        if constexpr ((std::is_same_v<Element, std::int64_t> ||
+                       std::is_same_v<Element, std::uint64_t>)&&!supports_64bit_integers)
         {
-            throw std::runtime_error(
-                "The GDAL library doesn't support I/O of 64-bit integrals. "
-                "Upgrade GDAL to version ≥ 3.5.0.");
+            throw std::runtime_error("The GDAL library doesn't support I/O of 64-bit integrals. "
+                                     "Upgrade GDAL to version ≥ 3.5.0.");
         }
 
-        if constexpr (
-            std::is_same_v<Element, std::int8_t> &&
-            !supports_8bit_signed_integers)
+        if constexpr (std::is_same_v<Element, std::int8_t> && !supports_8bit_signed_integers)
         {
-            throw std::runtime_error(
-                "The GDAL library doesn't support I/O of signed 8-bit integrals. "
-                "Upgrade GDAL to version ≥ 3.7.0.");
+            throw std::runtime_error("The GDAL library doesn't support I/O of signed 8-bit integrals. "
+                                     "Upgrade GDAL to version ≥ 3.7.0.");
         }
     }
 
diff --git a/source/data_model/hdf5/doc/lue_hdf5.md b/source/data_model/hdf5/doc/lue_hdf5.md
index fc8c5fb7f..f5ea95861 100644
--- a/source/data_model/hdf5/doc/lue_hdf5.md
+++ b/source/data_model/hdf5/doc/lue_hdf5.md
@@ -4,6 +4,7 @@
 
 
 # Introduction  {#lue_hdf5_introduction}
+
 The `lue_hdf5` library wraps the HDF5 C-API using C++. The goal is to make
 the HDF5 API more convenient to use. The library is used by the LUE
 C++ library, but it might also be useful in other projects, not related
@@ -12,7 +13,9 @@ only the `lue_hdf5` library.
 
 
 # Design
+
 ## Const correctness
+
 Many of the HDF5 classes represent something in the HDF5 file, like
 an HDF5 group or dataset. Think of these classes as pointers. Copying
 their instances allows someone else to make changes to the stuff in the
@@ -23,14 +26,16 @@ using non-const references to instances. If all we have is a const
 instance, then we are not allowed to copy it.
 
 See also:
+
 - [C++ FAQ: Const correctness and logical vs physical state](
     https://support.hdfgroup.org/HDF5/doc/RM/CollectiveCalls.html)
 
 
 # Example  {#lue_hdf5_example}
+
 Lets assume we need to write an empty HDF5 file called `hello_world.h5`:
 
-~~~cpp
+```cpp
 // hello_hdf5.cpp
 #include <lue/hdf5.hpp>
 
@@ -39,25 +44,25 @@ void main()
 {
     lue::hdf5::create_file("hello_world.h5");
 }
-~~~
+```
 
 
 First we need to build and install the `lue_hdf5` library to some location
 (assuming that the LUE sources are in `/tmp/lue_source`):
 
-~~~bash
+```bash
 mkdir -p /tmp/lue_build
 cd /tmp/lue_build
 cmake \
     -DCMAKE_INSTALL_PREFIX=/tmp/lue_install \
     /tmp/lue_source
 cmake --build . --target install
-~~~
+```
 
 
 Now we can write a CMake project file for building our project:
 
-~~~cmake
+```cmake
 # CMakeLists.txt
 cmake_minimum_required(VERSION 3.9)
 project(hello_hdf5 LANGUAGES CXX)
@@ -71,7 +76,7 @@ target_link_libraries(hello_hdf5
     PRIVATE
         lue::hdf5
 )
-~~~
+```
 
 In this project, we tell CMake to try and find the `lue` package. When
 this succeeds, we can use the `lue::hdf5` library target to link
@@ -79,24 +84,26 @@ against our application. Our application will now automatically depend
 on the public dependencies of `lue_hdf5`.
 
 To make CMake find the LUE package, we need to tell it where it is
-installed. Given the example above the folowing commands build our
+installed. Given the example above the following commands build our
 `hello_hdf5` project:
 
 
-~~~bash
+```bash
 mkdir -p /tmp/hello_hdf5_build
 cd /tmp/hello_hdf5lue_build
 cmake \
     -DCMAKE_PREFIX_PATH="/tmp/lue_install" \
     /tmp/hello_hdf5
 cmake --build .
-~~~
+```
 
 We can now run the resulting executable:
-~~~bash
+
+```bash
 ./hello_hdf5
-~~~
+```
 
 
 # See also  {#lue_hdf5_see_also}
+
 - [Collective calling requirements in parallel HDF5 applications](https://support.hdfgroup.org/HDF5/doc/RM/CollectiveCalls.html)
diff --git a/source/data_model/hdf5/include/lue/hdf5/offset.hpp b/source/data_model/hdf5/include/lue/hdf5/offset.hpp
index 75ebbf8e8..602408c43 100644
--- a/source/data_model/hdf5/include/lue/hdf5/offset.hpp
+++ b/source/data_model/hdf5/include/lue/hdf5/offset.hpp
@@ -3,19 +3,17 @@
 #include <vector>
 
 
-namespace lue {
-    namespace hdf5 {
+namespace lue::hdf5 {
 
-        /*!
-            @brief      Class for instances representing offsets in each dimension
-            @sa         Stride, Count
+    /*!
+        @brief      Class for instances representing offsets in each dimension
+        @sa         Stride, Count
 
-            Using this class instead of HDF5's `hsize_t const*` is more type-safe.
-        */
-        class Offset: public std::vector<::hsize_t>
-        {
-                using std::vector<::hsize_t>::vector;
-        };
+        Using this class instead of HDF5's `hsize_t const*` is more type-safe.
+    */
+    class Offset: public std::vector<::hsize_t>
+    {
+            using std::vector<::hsize_t>::vector;
+    };
 
-    }  // namespace hdf5
-}  // namespace lue
+}  // namespace lue::hdf5
diff --git a/source/data_model/hdf5/src/chunk.cpp b/source/data_model/hdf5/src/chunk.cpp
index 520b35b98..1f604cf52 100644
--- a/source/data_model/hdf5/src/chunk.cpp
+++ b/source/data_model/hdf5/src/chunk.cpp
@@ -40,7 +40,7 @@ namespace lue {
             dataset. The resulting shape has one additional dimension, representing
             the (domain) items for which values are stored.
 
-            The folowing guidelines are implemented:
+            The following guidelines are implemented:
             - Try to express the 'natural' access pattern
             - Don't make the shapes too small
             - Don't make the shapes too large
diff --git a/source/data_model/hdf5/src/dataset.cpp b/source/data_model/hdf5/src/dataset.cpp
index e0231b448..662ff7fc2 100644
--- a/source/data_model/hdf5/src/dataset.cpp
+++ b/source/data_model/hdf5/src/dataset.cpp
@@ -308,7 +308,7 @@ namespace lue::hdf5 {
         TransferPropertyList const& transfer_property_list,
         void const* buffer) const
     {
-        // Assume values in memory are layed out contiguously in all dimensions
+        // Assume values in memory are laid out contiguously in all dimensions
         Dataspace const memory_dataspace{
             create_dataspace(Shape{hyperslab.count().begin(), hyperslab.count().end()})};
 
diff --git a/source/data_model/hl/src/raster_view.cpp b/source/data_model/hl/src/raster_view.cpp
index 8374bdf02..5195c9efb 100644
--- a/source/data_model/hl/src/raster_view.cpp
+++ b/source/data_model/hl/src/raster_view.cpp
@@ -210,7 +210,7 @@ namespace lue::data_model {
             @brief      Construct an instance
             @param      dataset Dataset to manage
 
-            It is assumed that @a dataset is already layed out per this class'
+            It is assumed that @a dataset is already laid out per this class'
             conventions. Typically, it is the result of calling
             create_raster_view(), or similar.
         */
@@ -440,7 +440,7 @@ namespace lue::data_model {
             @brief      Construct an instance
             @param      dataset Dataset to manage
 
-            It is assumed that @a dataset is already layed out per this class'
+            It is assumed that @a dataset is already laid out per this class'
             conventions. Typically, it is the result of calling
             create_raster_view(), or similar.
         */
diff --git a/source/data_model/python/src/core/array.cpp b/source/data_model/python/src/core/array.cpp
index 448c0a9fa..611e1b82e 100644
--- a/source/data_model/python/src/core/array.cpp
+++ b/source/data_model/python/src/core/array.cpp
@@ -509,7 +509,7 @@ namespace lue {
         //     std::stringstream stream;
         //     stream << "(";
         //
-        //     // Prevent seperator at end of string.
+        //     // Prevent separator at end of string.
         //     // C++17: ostream_joiner
         //     if(!collection.empty()) {
         //         std::copy(collection.begin(), collection.end() - 1,
diff --git a/source/data_model/python/src/core/time/epoch.cpp b/source/data_model/python/src/core/time/epoch.cpp
index 0bdb83e92..0984d0805 100644
--- a/source/data_model/python/src/core/time/epoch.cpp
+++ b/source/data_model/python/src/core/time/epoch.cpp
@@ -76,7 +76,7 @@ namespace lue {
     necessary, to be able to interpret the origin string, a calendar
     can be passed in also.
 
-    The origin and calendar are not used internally. They are usefull for
+    The origin and calendar are not used internally. They are useful for
     clients that need to translate locations in time to more user-friendly
     formats.
 )");
diff --git a/source/data_model/python/src/identity/active_object_index.cpp b/source/data_model/python/src/identity/active_object_index.cpp
index 322977ea7..c266c6071 100644
--- a/source/data_model/python/src/identity/active_object_index.cpp
+++ b/source/data_model/python/src/identity/active_object_index.cpp
@@ -43,7 +43,7 @@ namespace lue {
     :class:`ActiveSetIndex` instance.
 
     Use this class when, for each object, object arrays are stored in
-    a seperate value array. This is the case when storing object arrays
+    a separate value array. This is the case when storing object arrays
     whose shape is different per object, but constant through time
     (:class:`different_shape.constant_shape.Value`).
 
diff --git a/source/data_model/python/src/object/property_set.cpp b/source/data_model/python/src/object/property_set.cpp
index aab35adee..89cfbff0e 100644
--- a/source/data_model/python/src/object/property_set.cpp
+++ b/source/data_model/python/src/object/property_set.cpp
@@ -371,7 +371,7 @@ namespace lue {
     Class aggregating a time domain, space domain, and properties of a
     set of objects
 
-    The information stored in a property-set is a consistant whole. In
+    The information stored in a property-set is a consistent whole. In
     case a time domain is present, and a space domain is present and
     one or more properties are present, then for each location in time
     and for each active object, a location in space is stored, and
diff --git a/source/data_model/translate/doc/lue_translate.md b/source/data_model/translate/doc/lue_translate.md
index 690ba225b..a223b452c 100644
--- a/source/data_model/translate/doc/lue_translate.md
+++ b/source/data_model/translate/doc/lue_translate.md
@@ -4,28 +4,34 @@
 
 
 # Introduction  {#lue_translate_introduction}
+
 TODO
 
 
 # Import  {#lue_translate_import}
+
 TODO
 
 
 ## GDAL raster  {#lue_translate_import_gdal_raster}
+
 TODO
 
 
 ## GDAL raster stack  {#lue_translate_import_gdal_raster_stack}
+
 TODO
 
 
 ## GDAL feature  {#lue_translate_import_gdal_feature}
+
 TODO
 
 
 # Export  {#lue_translate_export}
 
 ## DOT  {#lue_translate_export_to_dot}
+
 To get an impression of the layout of a LUE dataset, a
 [Graphviz](http://www.graphviz.org) graph in DOT format can be generated
 and written to a file. The `dot` tool can then be used to generate yet
@@ -45,7 +51,7 @@ can contains three sections:
 | hdf5  | Formatting HDF5 objects        |
 | lue   | Formatting LUE objects         |
 
-The folowing listing shows an example.
+The following listing shows an example.
 
 ~~~json
 {
@@ -98,6 +104,7 @@ dot -Tsvg -o my_dataset.svg my_dataset.dot
 
 
 ## Shapefile  {#lue_translate_export_to_shapefile}
+
 A single domain in a LUE dataset can be translated to a Shapefile:
 
 ~~~bash
@@ -106,7 +113,7 @@ lue_translate export --meta meta.json my_dataset.lue my_dataset.shp
 
 The domain-items end up as geometries in the Shapefile. Which domain
 to translate is determined by the contents of the metadata file. In the
-folowing example, (the domain of) `my_property_set` is selected.
+following example, (the domain of) `my_property_set` is selected.
 
 ~~~json
 {
diff --git a/source/data_model/translate/src/format/gdal_stack.cpp b/source/data_model/translate/src/format/gdal_stack.cpp
index 243bd67e8..f839cd892 100644
--- a/source/data_model/translate/src/format/gdal_stack.cpp
+++ b/source/data_model/translate/src/format/gdal_stack.cpp
@@ -19,7 +19,7 @@ namespace lue {
                 gdal::DatasetPtr try_open_gdal_raster_stack_dataset_for_read(std::string const& dataset_name)
                 {
                     // What makes a raster a stack:
-                    // - dataset_name matches one of the folowing patterns:
+                    // - dataset_name matches one of the following patterns:
                     //     - <name>_<step>.map
                     //   Only the name part is provided by the user, we need to see whether
                     //   files exists that match the pattern. If they do, pick the first one and
diff --git a/source/data_model/utility/include/lue/utility/command.hpp b/source/data_model/utility/include/lue/utility/command.hpp
index 51ac67794..1ad3fcd59 100644
--- a/source/data_model/utility/include/lue/utility/command.hpp
+++ b/source/data_model/utility/include/lue/utility/command.hpp
@@ -89,7 +89,7 @@ namespace lue {
 
             private:
 
-                //! Stream to wite informational message to
+                //! Stream to write informational message to
                 std::ostream& _info_stream;
 
                 //! Stream to write error messages to
diff --git a/source/doc/index.md b/source/doc/index.md
index b20a75ac5..73d9fd0ab 100644
--- a/source/doc/index.md
+++ b/source/doc/index.md
@@ -1,4 +1,5 @@
 (source-lue)=
+
 # Source code
 
 The LUE software contains two main parts: code related to the physical [](#source-lue-data-model) and code
diff --git a/source/framework/algorithm/doc/grouped_operation/array_operation.md b/source/framework/algorithm/doc/grouped_operation/array_operation.md
index 793fe9f03..0ac71e725 100644
--- a/source/framework/algorithm/doc/grouped_operation/array_operation.md
+++ b/source/framework/algorithm/doc/grouped_operation/array_operation.md
@@ -1,4 +1,5 @@
 (source-framework-algorithm-array)=
+
 # Array operations
 
 
diff --git a/source/framework/algorithm/doc/grouped_operation/focal_operation.md b/source/framework/algorithm/doc/grouped_operation/focal_operation.md
index c5f61d5e3..2a1cb3a07 100644
--- a/source/framework/algorithm/doc/grouped_operation/focal_operation.md
+++ b/source/framework/algorithm/doc/grouped_operation/focal_operation.md
@@ -1,4 +1,5 @@
 (source-framework-algorithm-focal)=
+
 # Focal operations
 
 
diff --git a/source/framework/algorithm/doc/grouped_operation/global_operation.md b/source/framework/algorithm/doc/grouped_operation/global_operation.md
index 91396e7eb..db9fb7294 100644
--- a/source/framework/algorithm/doc/grouped_operation/global_operation.md
+++ b/source/framework/algorithm/doc/grouped_operation/global_operation.md
@@ -1,4 +1,5 @@
 (source-framework-algorithm-global)=
+
 # Global operations
 
 
diff --git a/source/framework/algorithm/doc/grouped_operation/index.md b/source/framework/algorithm/doc/grouped_operation/index.md
index 0c9a5254a..b236bbef8 100644
--- a/source/framework/algorithm/doc/grouped_operation/index.md
+++ b/source/framework/algorithm/doc/grouped_operation/index.md
@@ -1,4 +1,5 @@
 (source-framework-algorithm-grouped)=
+
 # Grouped operations
 
 % Operations can be part of multiple groups.
diff --git a/source/framework/algorithm/doc/grouped_operation/local_operation.md b/source/framework/algorithm/doc/grouped_operation/local_operation.md
index cd40dfbfe..0050e2b9a 100644
--- a/source/framework/algorithm/doc/grouped_operation/local_operation.md
+++ b/source/framework/algorithm/doc/grouped_operation/local_operation.md
@@ -1,4 +1,5 @@
 (source-framework-algorithm-local)=
+
 # Local operations
 
 
diff --git a/source/framework/algorithm/doc/grouped_operation/mathematical_operation.md b/source/framework/algorithm/doc/grouped_operation/mathematical_operation.md
index e83645ed6..2ebc50292 100644
--- a/source/framework/algorithm/doc/grouped_operation/mathematical_operation.md
+++ b/source/framework/algorithm/doc/grouped_operation/mathematical_operation.md
@@ -1,4 +1,5 @@
 (source-framework-algorithm-mathematical)=
+
 # Mathematical operations
 
 
diff --git a/source/framework/algorithm/doc/grouped_operation/random_number_operation.md b/source/framework/algorithm/doc/grouped_operation/random_number_operation.md
index 28ce12f56..09329f415 100644
--- a/source/framework/algorithm/doc/grouped_operation/random_number_operation.md
+++ b/source/framework/algorithm/doc/grouped_operation/random_number_operation.md
@@ -1,4 +1,5 @@
 (source-framework-algorithm-random)=
+
 # Random number operations
 
 
diff --git a/source/framework/algorithm/doc/grouped_operation/routing_operation.md b/source/framework/algorithm/doc/grouped_operation/routing_operation.md
index 5c605fbe1..4dbfe810d 100644
--- a/source/framework/algorithm/doc/grouped_operation/routing_operation.md
+++ b/source/framework/algorithm/doc/grouped_operation/routing_operation.md
@@ -1,4 +1,5 @@
 (source-framework-algorithm-routing)=
+
 # Routing operations
 
 
diff --git a/source/framework/algorithm/doc/grouped_operation/zonal_operation.md b/source/framework/algorithm/doc/grouped_operation/zonal_operation.md
index 27b8b207c..d89ddacc7 100644
--- a/source/framework/algorithm/doc/grouped_operation/zonal_operation.md
+++ b/source/framework/algorithm/doc/grouped_operation/zonal_operation.md
@@ -1,4 +1,5 @@
 (source-framework-algorithm-zonal)=
+
 # Zonal operations
 
 
diff --git a/source/framework/algorithm/doc/index.md b/source/framework/algorithm/doc/index.md
index 61aa5524b..1e46e3cd5 100644
--- a/source/framework/algorithm/doc/index.md
+++ b/source/framework/algorithm/doc/index.md
@@ -8,117 +8,117 @@ tasks may continue to spawn additional tasks at these localities.
 
 ## Arithmetic
 
-Name   | Description
--------|------------
-{cpp:func}`lue::add`, operator+ | Return the result of adding something to a partitioned array
-lue::divide, operator/ | Return the result of multiplying something with a partitioned array
-lue::multiply, operator* | Return the result of multiplying something with a partitioned array
-lue::subtract, operator- | Return the result of subtracting something from a partitioned array
+| Name   | Description |
+| ------ | ----------- |
+| {cpp:func}`lue::add`, operator+ | Return the result of adding something to a partitioned array |
+| lue::divide, operator/ | Return the result of multiplying something with a partitioned array |
+| lue::multiply, operator* | Return the result of multiplying something with a partitioned array |
+| lue::subtract, operator- | Return the result of subtracting something from a partitioned array |
 
 
 ## Comparison
 
-Name   | Description
--------|------------
-lue::equal_to, operator== | Return the result of comparing something with a partitioned array
-lue::close_to | Return the result of comparing something with a partitioned array
-lue::not_equal_to, operator!= | Return the result of comparing something with a partitioned array
-lue::greater_than, operator> | Return the result of comparing something with a partitioned array
-lue::less_than, operator< | Return the result of comparing something with a partitioned array
-lue::greater_than_equal_to, operator>= | Return the result of comparing something with a partitioned array
-lue::less_than_equal_to, operator<= | Return the result of comparing something with a partitioned array
+| Name   | Description |
+| ------ | ----------- |
+| lue::equal_to, operator== | Return the result of comparing something with a partitioned array |
+| lue::close_to | Return the result of comparing something with a partitioned array |
+| lue::not_equal_to, operator!= | Return the result of comparing something with a partitioned array |
+| lue::greater_than, operator> | Return the result of comparing something with a partitioned array |
+| lue::less_than, operator< | Return the result of comparing something with a partitioned array |
+| lue::greater_than_equal_to, operator>= | Return the result of comparing something with a partitioned array |
+| lue::less_than_equal_to, operator<= | Return the result of comparing something with a partitioned array |
 
 
 ## Logical
 
-Name   | Description
--------|------------
-lue::logical_and, operator&& | Logical conjunction
-lue::logical_inclusive_or, operator\|\| | Logical inclusive disjunction
-lue::logical_not, operator! | Logical negation
+| Name   | Description |
+| ------ | ----------- |
+| lue::logical_and, operator&& | Logical conjunction |
+| lue::logical_inclusive_or, operator&#124;&#124; | Logical inclusive disjunction |
+| lue::logical_not, operator! | Logical negation |
 
 
 ## Trigonometric
 
-Name   | Description
--------|------------
-lue::cos | cos...
-lue::sin | sin...
-lue::atan | atan...
-lue::atan2 | atan2...
+| Name   | Description |
+| ------ | ----------- |
+| lue::cos | cos... |
+| lue::sin | sin... |
+| lue::atan | atan... |
+| lue::atan2 | atan2... |
 
 
 ## Mathematical
 
-Name   | Description
--------|------------
-lue::pow | Return the result of rasing the elements in a partitioned array by the power of an exponent
-lue::sqrt | Return the result of taking the square root of the elements in a partitioned array
+| Name   | Description |
+| ------ | ----------- |
+| lue::pow | Return the result of raising the elements in a partitioned array by the power of an exponent |
+| lue::sqrt | Return the result of taking the square root of the elements in a partitioned array |
 
 
 ## Focal
 
-Name   | Description
--------|------------
-lue::convolve | Return the result of convolving a kernel with weights with a partitioned array
-lue::focal_maximum | focal_maximum...
-lue::focal_mean | focal_mean...
-lue::focal_sum | focal_sum...
-lue::slope | Return the slope of a digital elevation model
+| Name   | Description |
+| ------ | ----------- |
+| lue::convolve | Return the result of convolving a kernel with weights with a partitioned array |
+| lue::focal_maximum | focal_maximum... |
+| lue::focal_mean | focal_mean... |
+| lue::focal_sum | focal_sum... |
+| lue::slope | Return the slope of a digital elevation model |
 
 
 ## Global
 
-Name   | Description
--------|------------
-lue::minimum | Return the minimum value in an array
-lue::maximum | Return the maximum value in an array
-lue::sum | Return the result of summing the elements in a partitioned array
+| Name   | Description |
+| ------ | ----------- |
+| lue::minimum | Return the minimum value in an array |
+| lue::maximum | Return the maximum value in an array |
+| lue::sum | Return the result of summing the elements in a partitioned array |
 
 
 ## Random
 
-Name   | Description
--------|------------
-lue::uniform | Fill a partitioned array in-place with a uniform random value
+| Name   | Description |
+| ------ | ----------- |
+| lue::uniform | Fill a partitioned array in-place with a uniform random value |
 
 
 ## Statistic
 
-Name   | Description
--------|------------
-lue::minimum | Return the minimum value in an array
-lue::maximum | Return the maximum value in an array
-lue::focal_maximum | focal_maximum...
-lue::focal_mean | focal_mean...
-lue::focal_sum | focal_sum...
+| Name   | Description |
+| ------ | ----------- |
+| lue::minimum | Return the minimum value in an array |
+| lue::maximum | Return the maximum value in an array |
+| lue::focal_maximum | focal_maximum... |
+| lue::focal_mean | focal_mean... |
+| lue::focal_sum | focal_sum... |
 
 
 ## I/O
 
-Name   | Description
--------|------------
-lue::read | Read a partitioned array from a dataset
-lue::write | Write a partitioned array to a dataset
+| Name   | Description |
+| ------ | ----------- |
+| lue::read | Read a partitioned array from a dataset |
+| lue::write | Write a partitioned array to a dataset |
 
 
 ## Uncategorized
 
-Name   | Description
--------|------------
-lue::all | Return whether a partitioned array contains only elements that evaluate to true
-lue::any | Return whether a partitioned array contains at least one element that evaluates to true
-lue::none | Return whether a partitioned array contains no elements that evaluate to true
-
-
-Name   | Description
--------|------------
-lue::cast | Return the result of casting a partitioned array to another type
-lue::copy | Return the result of copying a partitioned array
-lue::fill | Fill a partitioned array in-place with a value
-lue::iterate_per_element | Per cell in a partitioned array, iterate a number of times
-lue::unique | Return the unique values in a partitioned array
-lue::unique_id | Fill a partitioned array in-place with unique IDs
-lue::where | Conditionally assign values to the result
-lue::mesh_grid | Create arrays with multidimensional `mesh grid`
-lue::scale | Return the result of scaling values in a partitioned array to a range defined by a minimum and maximum value
+| Name   | Description |
+| ------ | ----------- |
+| lue::all | Return whether a partitioned array contains only elements that evaluate to true |
+| lue::any | Return whether a partitioned array contains at least one element that evaluates to true |
+| lue::none | Return whether a partitioned array contains no elements that evaluate to true |
+
+
+| Name   | Description |
+| ------ | ----------- |
+| lue::cast | Return the result of casting a partitioned array to another type |
+| lue::copy | Return the result of copying a partitioned array |
+| lue::fill | Fill a partitioned array in-place with a value |
+| lue::iterate_per_element | Per cell in a partitioned array, iterate a number of times |
+| lue::unique | Return the unique values in a partitioned array |
+| lue::unique_id | Fill a partitioned array in-place with unique IDs |
+| lue::where | Conditionally assign values to the result |
+| lue::mesh_grid | Create arrays with multidimensional `mesh grid` |
+| lue::scale | Return the result of scaling values in a partitioned array to a range |
diff --git a/source/framework/algorithm/doc/policy/domain.md b/source/framework/algorithm/doc/policy/domain.md
index 369ab7277..a63c7a0b7 100644
--- a/source/framework/algorithm/doc/policy/domain.md
+++ b/source/framework/algorithm/doc/policy/domain.md
@@ -1,4 +1,5 @@
 (source-framework-algorithm-policy-domain)=
+
 # Domain policies
 
 A domain policy is any class that provides an interface similar to the following class:
diff --git a/source/framework/algorithm/doc/policy/index.md b/source/framework/algorithm/doc/policy/index.md
index 01f07cb17..7151f2c59 100644
--- a/source/framework/algorithm/doc/policy/index.md
+++ b/source/framework/algorithm/doc/policy/index.md
@@ -1,4 +1,5 @@
 (source-framework-algorithm-policies)=
+
 # Policies
 
 
@@ -25,6 +26,7 @@ Currently there are several kinds of policies used by the algorithms:
     - Determine whether an output element value can be represented by the output element's type
 *   - [Output no-data policy](#source-framework-algorithm-policy-output-no-data)
     - Mark an output element value as no-data
+
 :::
 
 How the various policies perform their responsibility is up to the implementation. This way, the same
@@ -64,6 +66,7 @@ These policies are typically used as default policies:
 - Use LUE's default no-data policies
 
 These policies are typically used as value policies:
+
 - {cpp:class}`lue::policy::DetectNoDataByValue`
 - {cpp:class}`lue::policy::DetectNoDataByNaN`
 - {cpp:class}`lue::policy::MarkNoDataByValue`
diff --git a/source/framework/algorithm/doc/policy/no_data.md b/source/framework/algorithm/doc/policy/no_data.md
index ec00b2017..91dd79654 100644
--- a/source/framework/algorithm/doc/policy/no_data.md
+++ b/source/framework/algorithm/doc/policy/no_data.md
@@ -5,7 +5,7 @@ exist to do this. To support these conventions, algorithms can make use of input
 Depending on the policies used when instantiating an algorithm, it will use a specific concrete convention.
 A single application can support multiple conventions.
 
-Often a special value is used to mark no-data. This special value is then dependant on the element type. In
+Often a special value is used to mark no-data. This special value is then dependent on the element type. In
 case of floating point values, `NaN` is a popular option to represent no-data. In case of signed integral
 values, `std::numeric_limits<Element>::min` is an option, and in case of unsigned integral values,
 `std::numeric_limits<Element>::max`. But other conventions exist as well.
@@ -15,6 +15,7 @@ configurable at compile-time, LUE can support most of them, without sacrificing
 
 
 (source-framework-algorithm-policy-input-no-data)=
+
 ## Input no-data
 
 An input no-data policy is any class that provides an interface similar to the following class:
@@ -48,6 +49,7 @@ optimizing compiler will completely remove the "check" from the code.
 
 
 (source-framework-algorithm-policy-output-no-data)=
+
 ## Output no-data
 
 An output no-data policy is any class that provides an interface similar to the following class:
diff --git a/source/framework/algorithm/doc/policy/range.md b/source/framework/algorithm/doc/policy/range.md
index d9187f04f..751144183 100644
--- a/source/framework/algorithm/doc/policy/range.md
+++ b/source/framework/algorithm/doc/policy/range.md
@@ -1,4 +1,5 @@
 (source-framework-algorithm-policy-range)=
+
 # Range policies
 
 A range policy is any class that provides an interface similar to the following class:
diff --git a/source/framework/algorithm/doc/template.md b/source/framework/algorithm/doc/template.md
index 3008634d3..12461bfa7 100644
--- a/source/framework/algorithm/doc/template.md
+++ b/source/framework/algorithm/doc/template.md
@@ -1,4 +1,5 @@
 (source-framework-algorithm-templates)=
+
 # Templates
 
 
diff --git a/source/framework/algorithm/include/lue/framework/algorithm/create_partitioned_array.hpp b/source/framework/algorithm/include/lue/framework/algorithm/create_partitioned_array.hpp
index 9a5f458a0..90d180d92 100644
--- a/source/framework/algorithm/include/lue/framework/algorithm/create_partitioned_array.hpp
+++ b/source/framework/algorithm/include/lue/framework/algorithm/create_partitioned_array.hpp
@@ -791,7 +791,7 @@ namespace lue {
 
                             if (no_data_value)
                             {
-                                // Mark occurences of no_data_value in the input as no-data
+                                // Mark occurrences of no_data_value in the input as no-data
                                 for (Index i = 0; i < partition_shape[1]; ++i)
                                 {
                                     if (destination[i] == *no_data_value)
diff --git a/source/framework/algorithm/include/lue/framework/algorithm/definition/d8_flow_direction.hpp b/source/framework/algorithm/include/lue/framework/algorithm/definition/d8_flow_direction.hpp
index 935f54172..eac2b2775 100644
--- a/source/framework/algorithm/include/lue/framework/algorithm/definition/d8_flow_direction.hpp
+++ b/source/framework/algorithm/include/lue/framework/algorithm/definition/d8_flow_direction.hpp
@@ -158,7 +158,7 @@ namespace lue {
 
 
     /*!
-      @brief      Determine the D8 flow direction in each cell ofr the array passed in
+      @brief      Determine the D8 flow direction in each cell for the array passed in
       @ingroup    routing_operation
     */
     template<typename FlowDirectionElement, typename Policies, typename ElevationElement, Rank rank>
diff --git a/source/framework/algorithm/include/lue/framework/algorithm/definition/decreasing_order.hpp b/source/framework/algorithm/include/lue/framework/algorithm/definition/decreasing_order.hpp
index c06b2ba2f..c772b06d6 100644
--- a/source/framework/algorithm/include/lue/framework/algorithm/definition/decreasing_order.hpp
+++ b/source/framework/algorithm/include/lue/framework/algorithm/definition/decreasing_order.hpp
@@ -455,7 +455,7 @@ namespace lue {
                                 // max_nr_cells), to record remaining values. We need to insert
                                 // our new maximum value back to the downstream_maxima collection.
 
-                                // Grab new maximum. This is the first one in our colleciton.
+                                // Grab new maximum. This is the first one in our collection.
                                 Value const new_maximum = std::get<0>(local_values[0]);
 
                                 lue_hpx_assert(new_maximum < std::get<0>(downstream_maxima.front()));
diff --git a/source/framework/algorithm/include/lue/framework/algorithm/definition/first_n.hpp b/source/framework/algorithm/include/lue/framework/algorithm/definition/first_n.hpp
index 8fa98f77e..e73ca04cf 100644
--- a/source/framework/algorithm/include/lue/framework/algorithm/definition/first_n.hpp
+++ b/source/framework/algorithm/include/lue/framework/algorithm/definition/first_n.hpp
@@ -126,7 +126,7 @@ namespace lue {
                         // std::shared_lock read_lock{_walk_mutex, std::defer_lock};
                         std::unique_lock write_lock{_walk_mutex, std::defer_lock};
 
-                        // First, do stuff, *using* state veriables. Don't change stuff that
+                        // First, do stuff, *using* state variables. Don't change stuff that
                         // is shared between threads. Changing different cells in a raster
                         // is fine, just don't change the same values.
                         // TODO read_lock.lock();
@@ -459,7 +459,7 @@ namespace lue {
         using WalkComponentServer = detail::first_n::server::Walk<Policies, rank>;
 
         // TODO
-        // Since a partioned array currently caches locality IDs, we need to retrieve them,
+        // Since a partitioned array currently caches locality IDs, we need to retrieve them,
         // unfortunately. The localities stuff can be removed once arrays don't cache locality
         // IDs anymore.
 
diff --git a/source/framework/algorithm/include/lue/framework/algorithm/definition/inflow_count3.hpp b/source/framework/algorithm/include/lue/framework/algorithm/definition/inflow_count3.hpp
index 886ce10c7..22e7daa14 100644
--- a/source/framework/algorithm/include/lue/framework/algorithm/definition/inflow_count3.hpp
+++ b/source/framework/algorithm/include/lue/framework/algorithm/definition/inflow_count3.hpp
@@ -719,7 +719,7 @@ namespace lue {
             // determine inflow counts based on flow directions, and merge
             // the information about input cells. This could be split
             // into to tasks, but experiments show that the result scales
-            // worse. Apparantly, the resulting tasks become too small.
+            // worse. Apparently, the resulting tasks become too small.
             // Guideline: sometimes it is better to wait on more
             // information in order to be able to do more within a single
             // task.
diff --git a/source/framework/algorithm/include/lue/framework/algorithm/definition/slope.hpp b/source/framework/algorithm/include/lue/framework/algorithm/definition/slope.hpp
index 5147e5406..e586018e5 100644
--- a/source/framework/algorithm/include/lue/framework/algorithm/definition/slope.hpp
+++ b/source/framework/algorithm/include/lue/framework/algorithm/definition/slope.hpp
@@ -71,7 +71,7 @@ namespace lue {
 
         This algorithm implements Horne's slope algorithm (Horn, B.K.P. (1981)
         Hill shading and the reflectance map. Proceedings of IEEE 69(1), 14-47).
-        In pseudo-code this works as folows:
+        In pseudo-code this works as follows:
 
         @code
         dz_dx = convolve(value, dz_dx_kernel) / (8 * cell_size)
diff --git a/source/framework/algorithm/include/lue/framework/algorithm/definition/zonal_uniform.hpp b/source/framework/algorithm/include/lue/framework/algorithm/definition/zonal_uniform.hpp
index 2aa40d30f..d63910c53 100644
--- a/source/framework/algorithm/include/lue/framework/algorithm/definition/zonal_uniform.hpp
+++ b/source/framework/algorithm/include/lue/framework/algorithm/definition/zonal_uniform.hpp
@@ -23,7 +23,7 @@ namespace lue {
 
         // Determine unique values in zones array passed in
 
-        // TODO Link errors. I think because we instantiate for specific policie using base
+        // TODO Link errors. I think because we instantiate for specific policy using base
         // classes (e.g. DefaultValuePolicies), which result in a different type than what we do
         // here, although the actual policies used are exactly the same. We must get rid of the
         // base classes.
diff --git a/source/framework/algorithm/include/lue/framework/algorithm/detail/communicator.hpp b/source/framework/algorithm/include/lue/framework/algorithm/detail/communicator.hpp
index ac76d6cd2..c854a22e9 100644
--- a/source/framework/algorithm/include/lue/framework/algorithm/detail/communicator.hpp
+++ b/source/framework/algorithm/include/lue/framework/algorithm/detail/communicator.hpp
@@ -132,7 +132,7 @@ namespace lue::detail {
                 if (extent0 > 1 || extent1 > 1)
                 {
                     // There is at least one neighbour. Setup channels
-                    // to our neigbouring communicators.
+                    // to our neighbouring communicators.
 
                     if (idx0 > 0)
                     {
diff --git a/source/framework/algorithm/include/lue/framework/algorithm/detail/halo_partition.hpp b/source/framework/algorithm/include/lue/framework/algorithm/detail/halo_partition.hpp
index f248beafd..2d852fc12 100644
--- a/source/framework/algorithm/include/lue/framework/algorithm/detail/halo_partition.hpp
+++ b/source/framework/algorithm/include/lue/framework/algorithm/detail/halo_partition.hpp
@@ -15,7 +15,7 @@ namespace lue::detail {
         ShapeT<ArrayPartition<Element, 2>> const& min_shape, Element const fill_value)
     {
         // Asynchronously create a new partition:
-        // - With a shape based on the partition passsed in
+        // - With a shape based on the partition paѕsed in
         // - Filled with the fill_value passed in
 
         using Partition = ArrayPartition<Element, 2>;
@@ -32,7 +32,7 @@ namespace lue::detail {
         Element const fill_value)
     {
         // Asynchronously create a new partition:
-        // - With a shape based on the partition passsed in
+        // - With a shape based on the partition paѕsed in
         // - Filled with the fill_value passed in
 
         using Partition = ArrayPartition<Element, 2>;
@@ -61,7 +61,7 @@ namespace lue::detail {
         Element const fill_value)
     {
         // Asynchronously create a new partition:
-        // - With a shape based on the partition passsed in
+        // - With a shape based on the partition paѕsed in
         // - Filled with the fill_value passed in
 
         using Partition = ArrayPartition<Element, 2>;
diff --git a/source/framework/api/c/doc/index.md b/source/framework/api/c/doc/index.md
index 401fb64e7..21c715674 100644
--- a/source/framework/api/c/doc/index.md
+++ b/source/framework/api/c/doc/index.md
@@ -1,3 +1,4 @@
 Inspiration:
+
 - https://isocpp.org/wiki/faq/mixing-c-and-cpp
 - https://nachtimwald.com/2017/08/18/wrapping-c-objects-in-c/
diff --git a/source/framework/api/c/include/lue/framework/api/c/io.h b/source/framework/api/c/include/lue/framework/api/c/io.h
index f34a6de7a..343ffbf30 100644
--- a/source/framework/api/c/include/lue/framework/api/c/io.h
+++ b/source/framework/api/c/include/lue/framework/api/c/io.h
@@ -10,7 +10,7 @@ extern "C" {
 
 LUE_FCAPI_EXPORT Field* from_gdal(char const* name);
 
-LUE_FCAPI_EXPORT void to_gdal(Field const* field, char const* name, char const* clone_name=nullptr);
+LUE_FCAPI_EXPORT void to_gdal(Field const* field, char const* name, char const* clone_name = nullptr);
 
 
 #ifdef __cplusplus
diff --git a/source/framework/api/c/src/field.cpp b/source/framework/api/c/src/field.cpp
index 664e22015..e3adae254 100644
--- a/source/framework/api/c/src/field.cpp
+++ b/source/framework/api/c/src/field.cpp
@@ -1,6 +1,6 @@
 #include "lue/framework/api/c/field.h"
-#include "lue/framework/api/cxx/field.hpp"
 #include "field.hpp"
+#include "lue/framework/api/cxx/field.hpp"
 
 
 void destruct_field(Field* field)
diff --git a/source/framework/api/c/src/future.cpp b/source/framework/api/c/src/future.cpp
index f4f810415..5cf5b2ce1 100644
--- a/source/framework/api/c/src/future.cpp
+++ b/source/framework/api/c/src/future.cpp
@@ -1,6 +1,6 @@
 #include "lue/framework/api/c/future.h"
-#include "lue/framework/api/cxx/future.hpp"
 #include "future.hpp"
+#include "lue/framework/api/cxx/future.hpp"
 
 
 void destruct_future(Future* future)
diff --git a/source/framework/api/c/src/io.cpp b/source/framework/api/c/src/io.cpp
index 752cda99b..15818b369 100644
--- a/source/framework/api/c/src/io.cpp
+++ b/source/framework/api/c/src/io.cpp
@@ -1,6 +1,6 @@
 #include "lue/framework/api/c/io.h"
-#include "lue/framework/api/cxx/io.hpp"
 #include "field.hpp"
+#include "lue/framework/api/cxx/io.hpp"
 
 
 auto from_gdal(char const* name) -> Field*
@@ -14,9 +14,9 @@ auto from_gdal(char const* name) -> Field*
 void to_gdal(Field* field, char const* name, char const* clone_name)
 {
     hpx::future<void> result = clone_name == nullptr
-        ? lue::api::to_gdal(as_cxx_field(field), name)
-        : lue::api::to_gdal(as_cxx_field(field), name, clone_name);
-        ;
+                                   ? lue::api::to_gdal(as_cxx_field(field), name)
+                                   : lue::api::to_gdal(as_cxx_field(field), name, clone_name);
+    ;
 
     // TODO What to return? The caller may need the future<void>...
     /* return new Future{.instance = new hpx::future<void>{std::move(result)}}; */
diff --git a/source/framework/api/c/src/local_operation.cpp b/source/framework/api/c/src/local_operation.cpp
index 697d7f624..7c0055280 100644
--- a/source/framework/api/c/src/local_operation.cpp
+++ b/source/framework/api/c/src/local_operation.cpp
@@ -1,6 +1,6 @@
 #include "lue/framework/api/c/local_operation.h"
-#include "lue/framework/api/cxx/local_operation.hpp"
 #include "field.hpp"
+#include "lue/framework/api/cxx/local_operation.hpp"
 
 
 auto add(Field const* field1, Field const* field2) -> Field*
diff --git a/source/framework/api/cxx/doc/index.md b/source/framework/api/cxx/doc/index.md
index 5c5c00691..da0dc33df 100644
--- a/source/framework/api/cxx/doc/index.md
+++ b/source/framework/api/cxx/doc/index.md
@@ -5,16 +5,19 @@
       keeps attached to variables as long as possible.
 
 1. Keep type info as long as possible
-2. Support easy conversion from specialized types to general types:
+1. Support easy conversion from specialized types to general types:
+
     - scalar / array → field
     - The other way around is not needed(?)
-    → Is this permanent? Maybe the specialized type is still needed?
+    - Is this permanent? Maybe the specialized type is still needed?
+
         - Can we store a variant in a variant and have the visit recurse to the leave type?
         - `Field = variant<Array, Scalar, Literal>`
-        → Maybe have an overload ourselves that calls visit on the joint variant of any variants and concrete
+        - Maybe have an overload ourselves that calls visit on the joint variant of any variants and concrete
           types passed in
+
           1. Define Field variant as a combinations of Array and Scalar variants, and concrete types
-          2. Before using a Field instance, `flatten` the Field variant type to a variant type that does not
+          1. Before using a Field instance, `flatten` the Field variant type to a variant type that does not
              contain nested variants. The API user use Field, Array, Scalar instances, but the algorithms use
              concrete types. The C++ API must translate types from general to concrete and call the correct
              overloads.
@@ -22,12 +25,14 @@
 - C++: automatic conversion(?)
 - Python: automatic conversion(?)
 - C:
+
     - `auto scalar_as_field(scalar) -> Field`
     - `auto array_as_field(array) -> Field`
 
 - How about the element type info? A scalar / array is still a family of concrete types.
 
 Don't mix:
+
 - construct / destruct
 - create / destroy
 - new / delete
@@ -35,17 +40,21 @@ Don't mix:
 
 C++ variant types (Scalar, Array, ...) can be created using a `create_<variant_type>` function, returning an
 instance of that variant type.
+
 - Python: Use this function in the custom constructor of a class wrapper
 - C: Use this function from the C equivalent of the `create_<variant_type>` function
-→ Pro: no need for templates, single create function for given set of arguments
+- → Pro: no need for templates, single create function for given set of arguments
 
 Destruction happens in the destructor of the variant type:
+
 - Python: happens automatically
 - C: Call `destroy_<variant_type`, which can call `delete` on the layered opaque pointer
 
 20240710
+
 - Having different types for Literal, Scalar, Array, Field gets us into overload hell again. What about only
   using Field instances and let overload resolution figure out what is supported (and document this so users
   know what to expect).
+
     - A field is a value that varies through time and over space, or not
     - Some functions require a field's value to not vary
diff --git a/source/framework/api/cxx/include/lue/framework/api/cxx/literal.hpp b/source/framework/api/cxx/include/lue/framework/api/cxx/literal.hpp
index dbf59675c..b5492b442 100644
--- a/source/framework/api/cxx/include/lue/framework/api/cxx/literal.hpp
+++ b/source/framework/api/cxx/include/lue/framework/api/cxx/literal.hpp
@@ -23,7 +23,6 @@ namespace lue::api {
         public:
 
             using VariantWrapper::VariantWrapper;
-
     };
 
 }  // namespace lue::api
diff --git a/source/framework/api/cxx/include/lue/framework/api/cxx/scalar.hpp b/source/framework/api/cxx/include/lue/framework/api/cxx/scalar.hpp
index 4b47883fa..0b74bc25b 100644
--- a/source/framework/api/cxx/include/lue/framework/api/cxx/scalar.hpp
+++ b/source/framework/api/cxx/include/lue/framework/api/cxx/scalar.hpp
@@ -1,6 +1,6 @@
 #pragma once
-#include "lue/framework/api/cxx/variant_wrapper.hpp"
 #include "lue/framework/algorithm/scalar.hpp"
+#include "lue/framework/api/cxx/variant_wrapper.hpp"
 #include <cstdint>
 
 
@@ -31,7 +31,6 @@ namespace lue::api {
         public:
 
             using VariantWrapper::VariantWrapper;
-
     };
 
 }  // namespace lue::api
diff --git a/source/framework/api/cxx/include/lue/framework/api/cxx/variant_wrapper.hpp b/source/framework/api/cxx/include/lue/framework/api/cxx/variant_wrapper.hpp
index c8d15ee42..00a5f4052 100644
--- a/source/framework/api/cxx/include/lue/framework/api/cxx/variant_wrapper.hpp
+++ b/source/framework/api/cxx/include/lue/framework/api/cxx/variant_wrapper.hpp
@@ -1,23 +1,24 @@
 #pragma once
-#include <variant>
 #include <type_traits>
+#include <variant>
 
 
 namespace lue::api {
 
     namespace detail {
 
-        template <class T, class U> struct is_one_of;
+        template<class T, class U>
+        struct is_one_of;
 
         template<typename T, typename U>
         inline constexpr bool is_one_of_v = is_one_of<T, U>::value;
 
-        template <class T, class... Ts>
-        struct is_one_of<T, std::variant<Ts...>>:
-            std::bool_constant<(std::is_same_v<T, Ts> || ...)>
-            { };
+        template<class T, class... Ts>
+        struct is_one_of<T, std::variant<Ts...>>: std::bool_constant<(std::is_same_v<T, Ts> || ...)>
+        {
+        };
 
-    }
+    }  // namespace detail
 
 
     /*!
@@ -31,7 +32,10 @@ namespace lue::api {
 
         Copying is disabled.
     */
-    template<typename... Ts> class VariantWrapper { public:
+    template<typename... Ts>
+    class VariantWrapper
+    {
+        public:
 
             using Variant = std::variant<Ts...>;
 
@@ -46,8 +50,7 @@ namespace lue::api {
 
 
             template<typename T>
-            requires is_allowed_v<T>
-            VariantWrapper(T&& value):
+            requires is_allowed_v<T> VariantWrapper(T&& value):
 
                 _variant{std::forward<T>(value)}
 
diff --git a/source/framework/api/cxx/src/create_scalar.cpp b/source/framework/api/cxx/src/create_scalar.cpp
index c01700496..da192a136 100644
--- a/source/framework/api/cxx/src/create_scalar.cpp
+++ b/source/framework/api/cxx/src/create_scalar.cpp
@@ -6,8 +6,7 @@
 
 namespace lue {
 
-    template<
-        Arithmetic T>
+    template<Arithmetic T>
     auto create_scalar(T const& value) -> lue::Scalar<T>
     {
         return lue::Scalar<T>{value};
@@ -22,9 +21,7 @@ namespace lue {
         auto create_scalar(Literal const& value) -> Field
         {
             return std::visit(
-                overload{[](auto const& value) -> Field {
-                    return lue::create_scalar(value);
-                }},
+                overload{[](auto const& value) -> Field { return lue::create_scalar(value); }},
                 value.variant());
         }
 
diff --git a/source/framework/api/python/doc/index.md b/source/framework/api/python/doc/index.md
index 916b6934e..54cd475ba 100644
--- a/source/framework/api/python/doc/index.md
+++ b/source/framework/api/python/doc/index.md
@@ -1,4 +1,5 @@
 Goals:
+
 - Keep the amount of code needed to get the Python package working correctly and conveniently
   as small as possible
 - Keep the amount of (public) documentation needed as small as possible
diff --git a/source/framework/api/python/src/scalar.cpp b/source/framework/api/python/src/scalar.cpp
index b54068808..f02329736 100644
--- a/source/framework/api/python/src/scalar.cpp
+++ b/source/framework/api/python/src/scalar.cpp
@@ -1,5 +1,5 @@
-#include "lue/framework/api/cxx/create_scalar.hpp"
 #include "lue/framework/api/cxx/scalar.hpp"
+#include "lue/framework/api/cxx/create_scalar.hpp"
 #include <fmt/format.h>
 #include <pybind11/numpy.h>
 
@@ -90,8 +90,7 @@ namespace lue::api {
 
             if (!field)
             {
-                throw std::runtime_error(fmt::format("Unsupported dtype (kind={}, itemsize={})", kind,
-                size));
+                throw std::runtime_error(fmt::format("Unsupported dtype (kind={}, itemsize={})", kind, size));
             }
 
             return std::move(*field);
@@ -104,9 +103,7 @@ namespace lue::api {
     {
         module.def(
             "create_scalar",
-            [](
-                double const value,
-                pybind11::object const& dtype_args) -> Field
+            [](double const value, pybind11::object const& dtype_args) -> Field
             {
                 pybind11::dtype const dtype{pybind11::dtype::from_args(dtype_args)};
 
diff --git a/source/framework/case_study/airpolution/CMakeLists.txt b/source/framework/case_study/airpolution/CMakeLists.txt
index 397b443aa..10bc212a5 100644
--- a/source/framework/case_study/airpolution/CMakeLists.txt
+++ b/source/framework/case_study/airpolution/CMakeLists.txt
@@ -2,37 +2,37 @@ if(LUE_FRAMEWORK_WITH_BENCHMARKS)
     add_subdirectory(benchmark)
 endif()
 
-add_library(lue_airpolution
-    src/polute_air.cpp
+add_library(lue_airpollution
+    src/pollute_air.cpp
 )
 
-add_library(lue::airpolution ALIAS lue_airpolution)
+add_library(lue::airpollution ALIAS lue_airpollution)
 
-hpx_setup_target(lue_airpolution
+hpx_setup_target(lue_airpollution
     TYPE LIBRARY
     COMPONENT_DEPENDENCIES
         iostreams
 )
 
-target_include_directories(lue_airpolution
+target_include_directories(lue_airpollution
     PUBLIC
         $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
 )
 
-target_link_libraries(lue_airpolution
+target_link_libraries(lue_airpollution
     PUBLIC
         lue::framework_algorithm
         # lue::framework_core
 )
 
-add_hpx_executable(lue_polute_air
+add_hpx_executable(lue_pollute_air
     ESSENTIAL
     SOURCES
         src/main.cpp
 )
 
-target_link_libraries(lue_polute_air
+target_link_libraries(lue_pollute_air
     PRIVATE
-        lue::airpolution
+        lue::airpollution
         fmt::fmt
 )
diff --git a/source/framework/case_study/airpolution/benchmark/CMakeLists.txt b/source/framework/case_study/airpolution/benchmark/CMakeLists.txt
index 98fb89336..692008be5 100644
--- a/source/framework/case_study/airpolution/benchmark/CMakeLists.txt
+++ b/source/framework/case_study/airpolution/benchmark/CMakeLists.txt
@@ -1,10 +1,10 @@
-add_hpx_executable(lue_airpolution_benchmark
+add_hpx_executable(lue_airpollution_benchmark
     SOURCES
-        airpolution_benchmark.cpp
+        airpollution_benchmark.cpp
 )
 
-target_link_libraries(lue_airpolution_benchmark
+target_link_libraries(lue_airpollution_benchmark
     PRIVATE
-        lue::airpolution
+        lue::airpollution
         lue::benchmark
 )
diff --git a/source/framework/case_study/airpolution/benchmark/airpolution_benchmark.cpp b/source/framework/case_study/airpolution/benchmark/airpollution_benchmark.cpp
similarity index 89%
rename from source/framework/case_study/airpolution/benchmark/airpolution_benchmark.cpp
rename to source/framework/case_study/airpolution/benchmark/airpollution_benchmark.cpp
index 35a2d3d43..012b09b28 100644
--- a/source/framework/case_study/airpolution/benchmark/airpolution_benchmark.cpp
+++ b/source/framework/case_study/airpolution/benchmark/airpollution_benchmark.cpp
@@ -1,4 +1,4 @@
-#include "polute_air.hpp"
+#include "pollute_air.hpp"
 #include "lue/framework/benchmark/benchmark.hpp"
 #include "lue/framework/benchmark/hpx_main.hpp"
 
@@ -21,7 +21,7 @@ auto setup_benchmark(
         std::copy(task.partition_shape().begin(), task.partition_shape().end(), partition_shape.begin());
 
         lue_assert(!environment.max_tree_depth());
-        lue::polute_air(task.nr_time_steps(), array_shape, partition_shape);
+        lue::pollute_air(task.nr_time_steps(), array_shape, partition_shape);
     };
 
     return lue::benchmark::Benchmark{std::move(callable), environment, task};
diff --git a/source/framework/case_study/airpolution/benchmark/benchmark.sh b/source/framework/case_study/airpolution/benchmark/benchmark.sh
index 16efadac9..213b26517 100755
--- a/source/framework/case_study/airpolution/benchmark/benchmark.sh
+++ b/source/framework/case_study/airpolution/benchmark/benchmark.sh
@@ -10,7 +10,7 @@ set -e
 #     - Run experiment on a number of nodes in a cluster
 #         - Iterate over nr_nodes: 1, 2, 4, 8, 16
 # - All this results in raw outputs per run. Postprocess this as a
-#     seperate step.
+#     separate step.
 #     - Wait until results are available
 #     - Create graphs
 
diff --git a/source/framework/case_study/airpolution/benchmark/eejit.sh b/source/framework/case_study/airpolution/benchmark/eejit.sh
index c94aabdad..f65901222 100644
--- a/source/framework/case_study/airpolution/benchmark/eejit.sh
+++ b/source/framework/case_study/airpolution/benchmark/eejit.sh
@@ -4,5 +4,5 @@
 ####SBATCH -n 2
 #SBATCH --output meh.txt
 
-srun bin/lue_polute_air \
-    --hpx:app-config=$LUE/source/lue_framework/case_study/airpolution/benchmark/lue_polute_air.ini
+srun bin/lue_pollute_air \
+    --hpx:app-config=$LUE/source/lue_framework/case_study/airpolution/benchmark/lue_pollute_air.ini
diff --git a/source/framework/case_study/airpolution/benchmark/lue_polute_air.ini b/source/framework/case_study/airpolution/benchmark/lue_pollute_air.ini
similarity index 84%
rename from source/framework/case_study/airpolution/benchmark/lue_polute_air.ini
rename to source/framework/case_study/airpolution/benchmark/lue_pollute_air.ini
index 1d5e61fa7..e8dcd26e4 100644
--- a/source/framework/case_study/airpolution/benchmark/lue_polute_air.ini
+++ b/source/framework/case_study/airpolution/benchmark/lue_pollute_air.ini
@@ -1,4 +1,4 @@
-[lue_polute_air]
+[lue_pollute_air]
 nr_time_steps = 100
 nr_rows = 60
 nr_cols = 40
diff --git a/source/framework/case_study/airpolution/src/main.cpp b/source/framework/case_study/airpolution/src/main.cpp
index 4df922f4f..e7ebdc4f7 100644
--- a/source/framework/case_study/airpolution/src/main.cpp
+++ b/source/framework/case_study/airpolution/src/main.cpp
@@ -1,4 +1,4 @@
-#include "polute_air.hpp"
+#include "pollute_air.hpp"
 #include "lue/framework/core/configuration_entry.hpp"
 #include <hpx/hpx_init.hpp>
 
@@ -18,7 +18,7 @@ int hpx_main(int const /* argc */, char* /* argv */[])
     Shape const array_shape = lue::required_configuration_entry<Shape>("array_shape");
     Shape const partition_shape = lue::required_configuration_entry<Shape>("partition_shape");
 
-    lue::polute_air(nr_time_steps, array_shape, partition_shape);
+    lue::pollute_air(nr_time_steps, array_shape, partition_shape);
 
     return hpx::finalize();
 }
@@ -33,7 +33,7 @@ int main(int const argc, char* argv[])
     std::vector<std::string> cfg = {
         // // Run hpx_main on all localities
         // "hpx.run_hpx_main!=1",
-        // "application.lue_polute_air.mah!=1"
+        // "application.lue_pollute_air.mah!=1"
     };
 
     return hpx::init(argc, argv, cfg);
diff --git a/source/framework/case_study/airpolution/src/polute_air.cpp b/source/framework/case_study/airpolution/src/pollute_air.cpp
similarity index 97%
rename from source/framework/case_study/airpolution/src/polute_air.cpp
rename to source/framework/case_study/airpolution/src/pollute_air.cpp
index 769c86486..4b5eade3e 100644
--- a/source/framework/case_study/airpolution/src/polute_air.cpp
+++ b/source/framework/case_study/airpolution/src/pollute_air.cpp
@@ -1,4 +1,4 @@
-#include "polute_air.hpp"
+#include "pollute_air.hpp"
 #include "lue/framework/algorithm.hpp"
 #include "lue/framework/core/component/partitioned_array.hpp"
 
@@ -84,12 +84,12 @@ namespace {
 
     // char const* gather_basename()
     // {
-    //     // static char const* basename = "/polute_air/gather/";
+    //     // static char const* basename = "/pollute_air/gather/";
     //     // static auto const nr_localities = hpx::get_num_localities().get();
     //     // static std::string const basename =
-    //     //     fmt::format("/{}/polute_air/gather/", nr_localities);
+    //     //     fmt::format("/{}/pollute_air/gather/", nr_localities);
     //
-    //     static std::string const basename = "/polute_air/gather/";
+    //     static std::string const basename = "/pollute_air/gather/";
     //
     //     return basename.c_str();
     // }
@@ -126,7 +126,7 @@ namespace lue {
     /*!
         @brief      Calculate average airpolution based on synthetic data
     */
-    void polute_air(
+    void pollute_air(
         lue::Count const nr_time_steps,
         Shape<lue::Count, 2> const& array_shape,
         Shape<lue::Count, 2> const& partition_shape)
@@ -163,7 +163,7 @@ namespace lue {
         {
             // array = array * parameter1 + array * parameter2 + array * parameter3
 
-            // The arguments used in the calculations are not editted.
+            // The arguments used in the calculations are not edited.
             // The results are newly created partitioned arrays with
             // partitions that may not be ready yet.
 
diff --git a/source/framework/case_study/airpolution/src/polute_air.hpp b/source/framework/case_study/airpolution/src/pollute_air.hpp
similarity index 79%
rename from source/framework/case_study/airpolution/src/polute_air.hpp
rename to source/framework/case_study/airpolution/src/pollute_air.hpp
index 6d0c628cc..ca8608567 100644
--- a/source/framework/case_study/airpolution/src/polute_air.hpp
+++ b/source/framework/case_study/airpolution/src/pollute_air.hpp
@@ -6,11 +6,11 @@
 
 namespace lue {
 
-    // void               polute_air          (std::string const& dataset_pathname,
+    // void               pollute_air          (std::string const& dataset_pathname,
     //                                         std::uint64_t nr_time_steps,
     //                                         std::uint64_t nr_partitions);
 
-    void polute_air(
+    void pollute_air(
         lue::Count nr_time_steps,
         Shape<lue::Count, 2> const& array_shape,
         Shape<lue::Count, 2> const& partition_shape);
diff --git a/source/framework/case_study/land_use/doc/land_use.tex b/source/framework/case_study/land_use/doc/land_use.tex
index f5e333688..243ca11e5 100644
--- a/source/framework/case_study/land_use/doc/land_use.tex
+++ b/source/framework/case_study/land_use/doc/land_use.tex
@@ -259,7 +259,7 @@ \subsection{Demo model}
 % - order nodig om beste n cellen te selecteren
 %
 % Makkelijker:
-% - suitability 0-1, kans dat ie switcht
+% - suitability 0-1, kans dat ie switched
 % - random generator gebruiken
 %
 % - Suitability op basis van kansen
diff --git a/source/framework/case_study/land_use/src/main.cpp b/source/framework/case_study/land_use/src/main.cpp
index 7495949d4..485938573 100644
--- a/source/framework/case_study/land_use/src/main.cpp
+++ b/source/framework/case_study/land_use/src/main.cpp
@@ -31,7 +31,7 @@ int main(int const argc, char* argv[])
     std::vector<std::string> cfg = {
         // // Run hpx_main on all localities
         // "hpx.run_hpx_main!=1",
-        // "application.lue_polute_air.mah!=1"
+        // "application.lue_pollute_air.mah!=1"
     };
 
     return hpx::init(argc, argv, cfg);
diff --git a/source/framework/core/include/lue/framework/core/hilbert_curve.hpp b/source/framework/core/include/lue/framework/core/hilbert_curve.hpp
index dbcbd1061..5110ceb3f 100644
--- a/source/framework/core/include/lue/framework/core/hilbert_curve.hpp
+++ b/source/framework/core/include/lue/framework/core/hilbert_curve.hpp
@@ -4,7 +4,7 @@
 
 // The Hilbert curve algorithm is inspired by the Gilbert code:
 //     https://github.com/jakubcerveny/gilbert
-// That code is release under the folowing license:
+// That code is release under the following license:
 
 // BSD 2-Clause License
 //
diff --git a/source/framework/core/include/lue/framework/core/offset.hpp b/source/framework/core/include/lue/framework/core/offset.hpp
index 1fc9d343d..e0f533330 100644
--- a/source/framework/core/include/lue/framework/core/offset.hpp
+++ b/source/framework/core/include/lue/framework/core/offset.hpp
@@ -1,6 +1,6 @@
 #pragma once
-#include <array>
 #include "lue/framework/core/define.hpp"  // Rank
+#include <array>
 
 
 namespace lue {
diff --git a/source/framework/doc/howto/add_local_operation.md b/source/framework/doc/howto/add_local_operation.md
index fcdf76458..76393100a 100644
--- a/source/framework/doc/howto/add_local_operation.md
+++ b/source/framework/doc/howto/add_local_operation.md
@@ -1,4 +1,5 @@
 (source-framework-howto-add-local-operation)=
+
 # Add local operation
 
 Here you will find information about how to add a new local operation to the LUE sources.
@@ -15,7 +16,7 @@ All relative paths are relative to `source/framework/algorithm/`
 
 ## Algorithm
 
-### Add unit test(s):
+### Add unit test(s)
 
 The idea is to, before implementing anything, decide on a convenient API for the algorithm. How should it be
 named, which arguments should be passed in, in which order? Also, having unit tests in place and being able to
@@ -27,7 +28,7 @@ quickly add more while implementing the algorithm greatly helps getting things c
 - Decide on results: order, type
 
 
-### Add declaration(s) and "forwarding definitions":
+### Add declaration(s) and "forwarding definitions"
 
 This is all just boilerplate code.
 
diff --git a/source/framework/doc/index.md b/source/framework/doc/index.md
index 7dbf60401..d9e0c528e 100644
--- a/source/framework/doc/index.md
+++ b/source/framework/doc/index.md
@@ -1,4 +1,5 @@
 (source-lue-framework)=
+
 # Framework
 
 The framework contains code for translating environmental modelling state variables.
diff --git a/source/framework/image_land/include/lue/framework/algorithm/definition/integrate.hpp b/source/framework/image_land/include/lue/framework/algorithm/definition/integrate.hpp
index 0a5db5050..45fc8587e 100644
--- a/source/framework/image_land/include/lue/framework/algorithm/definition/integrate.hpp
+++ b/source/framework/image_land/include/lue/framework/algorithm/definition/integrate.hpp
@@ -159,7 +159,7 @@ namespace lue::detail::integrate {
                     // TODO std::shared_lock<hpx::shared_mutex> read_lock{_walk_mutex, std::defer_lock};
                     std::unique_lock<hpx::shared_mutex> write_lock{_walk_mutex, std::defer_lock};
 
-                    // First, do stuff, *using* state veriables. Don't change stuff that
+                    // First, do stuff, *using* state variables. Don't change stuff that
                     // is shared between threads. Changing different cells in a raster
                     // is fine, just don't change the same values.
                     // TODO read_lock.lock();
diff --git a/source/framework/image_land/include/lue/framework/algorithm/definition/integrate_and_allocate.hpp b/source/framework/image_land/include/lue/framework/algorithm/definition/integrate_and_allocate.hpp
index 1551a3afe..438a82aea 100644
--- a/source/framework/image_land/include/lue/framework/algorithm/definition/integrate_and_allocate.hpp
+++ b/source/framework/image_land/include/lue/framework/algorithm/definition/integrate_and_allocate.hpp
@@ -354,7 +354,7 @@ namespace lue::detail::integrate_and_allocate {
                     // TODO std::shared_lock<hpx::shared_mutex> read_lock{_walk_mutex, std::defer_lock};
                     std::unique_lock<hpx::shared_mutex> write_lock{_walk_mutex, std::defer_lock};
 
-                    // First, do stuff, *using* state veriables. Don't change stuff that
+                    // First, do stuff, *using* state variables. Don't change stuff that
                     // is shared between threads. Changing different cells in a raster
                     // is fine, just don't change the same values.
                     // TODO read_lock.lock();
diff --git a/source/framework/io/src/raster.cpp b/source/framework/io/src/raster.cpp
index f06b2ec28..9bc2154a8 100644
--- a/source/framework/io/src/raster.cpp
+++ b/source/framework/io/src/raster.cpp
@@ -256,7 +256,7 @@ namespace lue {
             ReadPartition<Element> partition_reader{
                 std::move(dataset_ptr), std::make_shared<Band>(std::move(band_ptr))};
 
-            // Asynchronously read all partitions, *one after the other*. Partitions read can immidiately
+            // Asynchronously read all partitions, *one after the other*. Partitions read can immediately
             // participate in subsequent work, even when other partitions still need to be read.
 
             partitions[0] = hpx::async(
diff --git a/source/framework/io/src/write.cpp b/source/framework/io/src/write.cpp
index 3ca5de99d..125b3550c 100644
--- a/source/framework/io/src/write.cpp
+++ b/source/framework/io/src/write.cpp
@@ -22,16 +22,16 @@ namespace lue {
 
         auto const nr_partitions{lue::nr_partitions(array)};
 
-        std::vector<hpx::future<PartitionData>> partition_datas(nr_partitions);
+        std::vector<hpx::future<PartitionData>> partition_data(nr_partitions);
         std::vector<hpx::future<Offset>> partition_offsets(nr_partitions);
 
         for (Index p = 0; p < nr_partitions; ++p)
         {
-            partition_datas[p] = array.partitions()[p].data();
+            partition_data[p] = array.partitions()[p].data();
             partition_offsets[p] = array.partitions()[p].offset();
         }
 
-        hpx::wait_all_n(partition_datas.begin(), partition_datas.size());
+        hpx::wait_all_n(partition_data.begin(), partition_data.size());
         hpx::wait_all_n(partition_offsets.begin(), partition_offsets.size());
 
         // Shape of object array: (nr_rows, nr_cols)
@@ -42,9 +42,9 @@ namespace lue {
         for (Index p = 0; p < nr_partitions; ++p)
         {
 
-            auto const& partition_data{partition_datas[p].get()};
+            auto const& partition_data_{partition_data[p].get()};
             auto const& partition_offset{partition_offsets[p].get()};
-            auto const& partition_shape{partition_data.shape()};
+            auto const& partition_shape{partition_data_.shape()};
 
             // Location of partition in HDF5 dataset
             std::copy(partition_offset.begin(), partition_offset.end(), offset.begin());
@@ -54,7 +54,7 @@ namespace lue {
 
             hdf5::Hyperslab hyperslab{offset, count};
 
-            layer.write(hyperslab, &(*partition_data.begin()));
+            layer.write(hyperslab, &(*partition_data_.begin()));
         }
 
         return hpx::make_ready_future<void>();
@@ -96,16 +96,16 @@ namespace lue {
 
         auto const nr_partitions{lue::nr_partitions(array)};
 
-        std::vector<hpx::future<PartitionData>> partition_datas(nr_partitions);
+        std::vector<hpx::future<PartitionData>> partition_data(nr_partitions);
         std::vector<hpx::future<Offset>> partition_offsets(nr_partitions);
 
         for (Index p = 0; p < nr_partitions; ++p)
         {
-            partition_datas[p] = array.partitions()[p].data();
+            partition_data[p] = array.partitions()[p].data();
             partition_offsets[p] = array.partitions()[p].offset();
         }
 
-        hpx::wait_all_n(partition_datas.begin(), partition_datas.size());
+        hpx::wait_all_n(partition_data.begin(), partition_data.size());
         hpx::wait_all_n(partition_offsets.begin(), partition_offsets.size());
 
         // Shape of object array: (nr_time_steps, nr_rows, nr_cols)
@@ -128,9 +128,9 @@ namespace lue {
         for (Index p = 0; p < nr_partitions; ++p)
         {
 
-            auto const& partition_data{partition_datas[p].get()};
+            auto const& partition_data_{partition_data[p].get()};
             auto const& partition_offset{partition_offsets[p].get()};
-            auto const& partition_shape{partition_data.shape()};
+            auto const& partition_shape{partition_data_.shape()};
 
             // Location of partition in HDF5 dataset
             std::copy(partition_offset.begin(), partition_offset.end(), offset.begin() + 2);
@@ -140,7 +140,7 @@ namespace lue {
 
             hdf5::Hyperslab hyperslab{offset, count};
 
-            layer.write(hyperslab, &(*partition_data.begin()));
+            layer.write(hyperslab, &(*partition_data_.begin()));
         }
 
         return hpx::make_ready_future<void>();
diff --git a/source/framework/partitioned_array/include/lue/framework/partitioned_array/array_partition_data.hpp b/source/framework/partitioned_array/include/lue/framework/partitioned_array/array_partition_data.hpp
index accdefe54..3414e5bf0 100644
--- a/source/framework/partitioned_array/include/lue/framework/partitioned_array/array_partition_data.hpp
+++ b/source/framework/partitioned_array/include/lue/framework/partitioned_array/array_partition_data.hpp
@@ -349,7 +349,7 @@ namespace lue {
     void ArrayPartitionData<Element, rank>::reshape(Shape const& shape)
     {
         // Reshaping the elements while multiple ArrayPartitionData instances
-        // refer to it is dangereous because of the _span member. The other
+        // refer to it is dangerous because of the _span member. The other
         // instance(s) do not have there _span member updated.
         // If this fires, move the span and shape into the
         // SharedBuffer(?). Still there might be an issue with multiple threads
diff --git a/source/framework/partitioned_array/include/lue/framework/partitioned_array/server/array_partition.hpp b/source/framework/partitioned_array/include/lue/framework/partitioned_array/server/array_partition.hpp
index 293da4a63..e0672358f 100644
--- a/source/framework/partitioned_array/include/lue/framework/partitioned_array/server/array_partition.hpp
+++ b/source/framework/partitioned_array/include/lue/framework/partitioned_array/server/array_partition.hpp
@@ -9,7 +9,7 @@
 namespace lue::server {
 
     /*!
-        @brief      Component server class for partioned array partitions
+        @brief      Component server class for partitioned array partitions
     */
     template<typename Element, Rank rank>
     class LUE_FPA_EXPORT ArrayPartition: public hpx::components::component_base<ArrayPartition<Element, rank>>
diff --git a/source/framework/partitioned_array/include/lue/framework/partitioned_array/shared_buffer.hpp b/source/framework/partitioned_array/include/lue/framework/partitioned_array/shared_buffer.hpp
index 0adaec417..d5b641823 100644
--- a/source/framework/partitioned_array/include/lue/framework/partitioned_array/shared_buffer.hpp
+++ b/source/framework/partitioned_array/include/lue/framework/partitioned_array/shared_buffer.hpp
@@ -142,7 +142,7 @@ namespace lue {
 
 
             /*!
-                @brief      Return an iterator to the begining of the buffer
+                @brief      Return an iterator to the beginning of the buffer
             */
             Iterator begin()
             {
diff --git a/source/framework/python/pcraster/__init__.py b/source/framework/python/pcraster/__init__.py
index 324ebf9cc..9567c4cb6 100644
--- a/source/framework/python/pcraster/__init__.py
+++ b/source/framework/python/pcraster/__init__.py
@@ -21,11 +21,12 @@
 - int32 for nominal and ordinal values
 - float32 for scalar and directional values
 
-LUE itself supports additional cell represenations (uint32, int64, uint64, float64).
+LUE itself supports additional cell representations (uint32, int64, uint64, float64).
 
 LUE does not have the notion of non-spatial. This is relevant when passing two "non-spatial"
 arguments to an operator (e.g.: ``a & b``). The regular Python rules are then in effect.
 """
+
 import numpy as np
 
 import lue.framework as lfr
@@ -156,7 +157,7 @@ def translate_window_length(pcraster_window_length):
     The assumption here is that @a pcraster_window_length passed in:
     - is dividable by the cell size
     - corresponds with an odd number of cells (odd_number * cell_size)
-    - is possitive
+    - is positive
     """
     assert is_non_spatial(pcraster_window_length), pcraster_window_length
 
diff --git a/source/framework/python/pcraster/framework/__init__.py b/source/framework/python/pcraster/framework/__init__.py
index 9b0dd82d5..7db18ebfc 100644
--- a/source/framework/python/pcraster/framework/__init__.py
+++ b/source/framework/python/pcraster/framework/__init__.py
@@ -6,6 +6,7 @@
 .. _PCRaster Python Modelling Framework documentation:
    https://pcraster.geo.uu.nl/pcraster/latest/documentation/python_modelling_framework/index.html
 """
+
 import os.path
 import re
 
diff --git a/source/python/lue.py.in b/source/python/lue.py.in
index 2f659a818..c2ccf2d75 100644
--- a/source/python/lue.py.in
+++ b/source/python/lue.py.in
@@ -38,7 +38,7 @@ if sys.platform == "win32":
 
             # In one circumstance we want to add a special location before importing LUE. This is in our
             # development environment, where HPX is built by ourselves and installed in a non-standard
-            # location.  Here, we dectect whether this location has been added to the PATH, and if so, add
+            # location.  Here, we detect whether this location has been added to the PATH, and if so, add
             # this location to Python's search path. In 99.9% of the cases this is not needed.
             # This tweak can be removed once we have access to a Conda development package of HPX, besides a
             # runtime package. In that case, we don't have to build HPX ourselves anymore.
diff --git a/source/qa/python/qa/scalability/experiment/job.py b/source/qa/python/qa/scalability/experiment/job.py
index a30d85f22..addee7ffc 100644
--- a/source/qa/python/qa/scalability/experiment/job.py
+++ b/source/qa/python/qa/scalability/experiment/job.py
@@ -243,9 +243,9 @@ def create_slurm_script(
         sbatch_options="\n".join(
             ["#SBATCH {}".format(option) for option in sbatch_options]
         ),
-        max_duration="#SBATCH --time={}".format(max_duration)
-        if max_duration is not None
-        else "",
+        max_duration=(
+            "#SBATCH --time={}".format(max_duration) if max_duration is not None else ""
+        ),
         software_environment=cluster.software_environment.configuration,
         job_steps="\n".join(job_steps),
     )
diff --git a/source/qa/python/qa/scalability/experiment/shape.py b/source/qa/python/qa/scalability/experiment/shape.py
index 12645f979..917c50b9f 100644
--- a/source/qa/python/qa/scalability/experiment/shape.py
+++ b/source/qa/python/qa/scalability/experiment/shape.py
@@ -80,7 +80,7 @@ def partition_shapes(min_shape, max_shape, step):
 
 def range_of_shapes(min_shape, max_nr_elements, multiplier, method):
     """
-    Determine a range of shapes given the folowing requirements:
+    Determine a range of shapes given the following requirements:
     - First shape equals min_shape
     - Number of cells in last shape smaller or equal to max_nr_elements
     - Each next shape contains multiplier times more elements than the
diff --git a/source/qa/python/qa/scalability/experiment/strong_scalability/postprocess_results.py b/source/qa/python/qa/scalability/experiment/strong_scalability/postprocess_results.py
index 1cab241cb..cc08b3f38 100644
--- a/source/qa/python/qa/scalability/experiment/strong_scalability/postprocess_results.py
+++ b/source/qa/python/qa/scalability/experiment/strong_scalability/postprocess_results.py
@@ -10,7 +10,7 @@
 from .experiment import Experiment
 
 
-# TODO perf countrs
+# TODO perf counters
 # from tqdm import trange
 # import collections
 # import os.path
@@ -543,7 +543,7 @@ def plot_relative_efficiency(axis):
 #
 #     for counter_name in counter_names:
 #         # Classify counter and add to group. Create group if not
-#         # existant yet.
+#         # existent yet.
 #         counter = parse_performance_counter_name(counter_name)
 #
 #         # Counters related to the same object
diff --git a/source/qa/script/post_process_benchmarks.py b/source/qa/script/post_process_benchmarks.py
index f195e023d..42d758d5d 100755
--- a/source/qa/script/post_process_benchmarks.py
+++ b/source/qa/script/post_process_benchmarks.py
@@ -91,7 +91,7 @@ def post_process_strong_scaling_benchmarks(
     figure, axes = plt.subplots(
         nrows=1,
         ncols=3,
-        figsize=(15, 5)
+        figsize=(15, 5),
         # sharex=False
     )  # Inches...
 
diff --git a/source/view/view/src/show_dataset.cpp b/source/view/view/src/show_dataset.cpp
index c38f0b548..5dff61a28 100644
--- a/source/view/view/src/show_dataset.cpp
+++ b/source/view/view/src/show_dataset.cpp
@@ -239,7 +239,7 @@ namespace lue {
                 std::stringstream stream;
                 stream << "(";
 
-                // Prevent seperator at end of string.
+                // Prevent separator at end of string.
                 if (!shape.empty())
                 {
                     std::copy(
diff --git a/source/view/vulkan/src/error.cpp b/source/view/vulkan/src/error.cpp
index cb20e8bab..6d5cb16bd 100644
--- a/source/view/vulkan/src/error.cpp
+++ b/source/view/vulkan/src/error.cpp
@@ -12,7 +12,7 @@ namespace lue::vulkan {
     {
         if (result != VK_SUCCESS)
         {
-            throw std::runtime_error("Unexpected error occured while using the Vulkan API");
+            throw std::runtime_error("Unexpected error occurred while using the Vulkan API");
         }
     }
 
diff --git a/source/view/vulkan/src/queue_family.cpp b/source/view/vulkan/src/queue_family.cpp
index cca3c548d..542ec909f 100644
--- a/source/view/vulkan/src/queue_family.cpp
+++ b/source/view/vulkan/src/queue_family.cpp
@@ -6,7 +6,7 @@ namespace lue::vulkan {
     // std::uint32_t findGraphicsQueueFamilyIndex(std::vector<vk::QueueFamilyProperties> const&
     // queueFamilyProperties)
     // {
-    //     // get the first index into queueFamiliyProperties which supports graphics
+    //     // get the first index into queueFamilyProperties which supports graphics
     //     std::vector<vk::QueueFamilyProperties>::const_iterator graphicsQueueFamilyProperty =
     //       std::find_if( queueFamilyProperties.begin(),
     //                     queueFamilyProperties.end(),


Test patch:
diff --git a/source/data_model/python/test/case_study/time_series1_test.py b/source/data_model/python/test/case_study/time_series1_test.py
index a2c86c9dd..a95885f58 100644
--- a/source/data_model/python/test/case_study/time_series1_test.py
+++ b/source/data_model/python/test/case_study/time_series1_test.py
@@ -113,9 +113,9 @@ def discharge_property(phenomenon):
             ]
 
             for t in range(nr_time_boxes):
-                discharge.value.expand(t, active_set_sizes[t], (shapes[t],))[
-                    :
-                ] = discharge_values[t]
+                discharge.value.expand(t, active_set_sizes[t], (shapes[t],))[:] = (
+                    discharge_values[t]
+                )
 
             return discharge
 
diff --git a/source/data_model/python/test/case_study/time_series2_test.py b/source/data_model/python/test/case_study/time_series2_test.py
index 87fb7323b..6b8928c93 100644
--- a/source/data_model/python/test/case_study/time_series2_test.py
+++ b/source/data_model/python/test/case_study/time_series2_test.py
@@ -32,7 +32,7 @@ def test_case_study(self):
 
         # Assume we are simulating some temporal variable (discharge at
         # catchment outlets).
-        # The existance of the objects is modelled using time cells,
+        # The existence of the objects is modelled using time cells,
         # which are discretized time boxes (daily time steps). Per cell we
         # can store which objects are active.
         # Property values are located in time at time cells.
diff --git a/source/data_model/python/test/case_study/tree_crown_test.py b/source/data_model/python/test/case_study/tree_crown_test.py
index 3e646874e..eb918acbb 100644
--- a/source/data_model/python/test/case_study/tree_crown_test.py
+++ b/source/data_model/python/test/case_study/tree_crown_test.py
@@ -114,10 +114,10 @@ def add_crown_properties(phenomenon):
             )
 
             # [0, nr_trees, 2 * nr_tree, ..., t * nr_trees]
-            crown_boxes.object_tracker.active_set_index.expand(nr_time_boxes)[
-                :
-            ] = np.array(
-                [t * nr_trees for t in range(nr_time_boxes)], dtype=ldm.dtype.Index
+            crown_boxes.object_tracker.active_set_index.expand(nr_time_boxes)[:] = (
+                np.array(
+                    [t * nr_trees for t in range(nr_time_boxes)], dtype=ldm.dtype.Index
+                )
             )
 
             # [0, 0, 0, ..., nr_time_boxes-1, nr_time_boxes-1]
diff --git a/source/data_model/python/test/core/array_test.py b/source/data_model/python/test/core/array_test.py
index 046e5e08e..a22289df4 100644
--- a/source/data_model/python/test/core/array_test.py
+++ b/source/data_model/python/test/core/array_test.py
@@ -9,7 +9,7 @@
 class ArrayTest(lue_test.TestCase):
     def setUp(self):
         dataset_name = "my_dataset.lue"
-        lue_test.remove_file_if_existant(dataset_name)
+        lue_test.remove_file_if_existent(dataset_name)
         self.dataset = ldm.create_dataset(dataset_name)
         self.phenomenon = self.dataset.add_phenomenon("my_phenomenon")
 
@@ -205,9 +205,9 @@ def test_two_slice_indices(self):
         )
 
         # Last row of last item
-        self.lue_numeric_values[
-            nr_objects - 1 : nr_objects, nr_rows - 1 : nr_rows
-        ] = new_numpy_values[nr_objects - 1 : nr_objects, nr_rows - 1 : nr_rows]
+        self.lue_numeric_values[nr_objects - 1 : nr_objects, nr_rows - 1 : nr_rows] = (
+            new_numpy_values[nr_objects - 1 : nr_objects, nr_rows - 1 : nr_rows]
+        )
 
         self.assertArraysEqual(
             self.lue_numeric_values[nr_objects - 1 : nr_objects, nr_rows - 1 : nr_rows],
@@ -361,9 +361,9 @@ def test_three_integer_indices(self):
         # )
 
         # Last cell of last item
-        self.lue_numeric_values[
-            nr_objects - 1, nr_rows - 1, nr_cols - 1
-        ] = new_numpy_values[nr_objects - 1, nr_rows - 1, nr_cols - 1]
+        self.lue_numeric_values[nr_objects - 1, nr_rows - 1, nr_cols - 1] = (
+            new_numpy_values[nr_objects - 1, nr_rows - 1, nr_cols - 1]
+        )
 
         # TODO More than two indices doesn't work. Bug in set_item. gh536
         # self.assertArraysEqual(
diff --git a/source/data_model/python/test/dataset_test.py b/source/data_model/python/test/dataset_test.py
index 84568c56b..9b5422680 100644
--- a/source/data_model/python/test/dataset_test.py
+++ b/source/data_model/python/test/dataset_test.py
@@ -11,7 +11,7 @@ class DatasetTest(lue_test.TestCase):
     def test_create(self):
         dataset_name = "dataset_create.lue"
 
-        lue_test.remove_file_if_existant(dataset_name)
+        lue_test.remove_file_if_existent(dataset_name)
 
         dataset = ldm.create_dataset(dataset_name)
 
@@ -98,7 +98,7 @@ def test_release_dataset(self):
         # This issue surfaced only on Windows.
 
         dataset_name = "dataset_release_dataset.lue"
-        lue_test.remove_file_if_existant(dataset_name)
+        lue_test.remove_file_if_existent(dataset_name)
 
         def create_dataset():
             dataset = self.create_dataset(dataset_name)
@@ -158,7 +158,7 @@ def test_release_dataset2(self):
         # gh570: Similar problem as with gh431, tested above in test_release_dataset
 
         dataset_name = "dataset_release_dataset2.lue"
-        lue_test.remove_file_if_existant(dataset_name)
+        lue_test.remove_file_if_existent(dataset_name)
 
         def create_dataset():
             dataset = self.create_dataset(dataset_name)
diff --git a/source/data_model/python/test/hdf5/file_test.py b/source/data_model/python/test/hdf5/file_test.py
index fbec6f126..2d4462a6c 100644
--- a/source/data_model/python/test/hdf5/file_test.py
+++ b/source/data_model/python/test/hdf5/file_test.py
@@ -9,7 +9,7 @@ class FileTest(lue_test.TestCase):
     def test_create_remove(self):
         file_pathname = "file_create.h5"
 
-        lue_test.remove_file_if_existant(file_pathname)
+        lue_test.remove_file_if_existent(file_pathname)
 
         self.assertFalse(lh5.file_exists(file_pathname))
 
@@ -32,34 +32,34 @@ def test_create_remove(self):
     def test_pathname(self):
         # Relative path
         file_pathname = "file_pathname.h5"
-        lue_test.remove_file_if_existant(file_pathname)
+        lue_test.remove_file_if_existent(file_pathname)
         file = lh5.create_file(file_pathname)
         self.assertEqual(file.pathname, file_pathname)
         del file
 
         # Relative path
         file_pathname = "./file_pathname.h5"
-        lue_test.remove_file_if_existant(file_pathname)
+        lue_test.remove_file_if_existent(file_pathname)
         file = lh5.create_file(file_pathname)
         self.assertEqual(file.pathname, file_pathname)
         del file
 
         # Absolute path
         file_pathname = os.path.abspath("file_pathname.h5")
-        lue_test.remove_file_if_existant(file_pathname)
+        lue_test.remove_file_if_existent(file_pathname)
         file = lh5.create_file(file_pathname)
         self.assertEqual(file.pathname, file_pathname)
         del file
 
         # Unicode
         file_pathname = "ﬁlæ_¶åthnæmæ.h5"
-        lue_test.remove_file_if_existant(file_pathname)
+        lue_test.remove_file_if_existent(file_pathname)
         file = lh5.create_file(file_pathname)
         self.assertEqual(file.pathname, file_pathname)
 
     def test_open_readonly(self):
         file_pathname = "file_open_readonly.h5"
-        lue_test.remove_file_if_existant(file_pathname)
+        lue_test.remove_file_if_existent(file_pathname)
         file = lh5.create_file(file_pathname)
         file = lh5.open_file(file_pathname, "r")
         # TODO How to test for readonly-ness
@@ -67,7 +67,7 @@ def test_open_readonly(self):
 
     def test_open_writable(self):
         file_pathname = "file_open_writable.h5"
-        lue_test.remove_file_if_existant(file_pathname)
+        lue_test.remove_file_if_existent(file_pathname)
         file = lh5.create_file(file_pathname)
         file = lh5.open_file(file_pathname, "w")
         # TODO How to test for writable-ness
diff --git a/source/data_model/python/test/lue_test/test_case.py b/source/data_model/python/test/lue_test/test_case.py
index e6048810f..1e0cc7ac8 100644
--- a/source/data_model/python/test/lue_test/test_case.py
+++ b/source/data_model/python/test/lue_test/test_case.py
@@ -34,7 +34,7 @@ def create_dataset(cls, name):
         """
         Create dataset, removing an existing dataset first
         """
-        lue_test.remove_file_if_existant(name)
+        lue_test.remove_file_if_existent(name)
 
         return ldm.create_dataset(name)
 
diff --git a/source/data_model/python/test/lue_test/util.py b/source/data_model/python/test/lue_test/util.py
index daf8edeec..4383080ab 100644
--- a/source/data_model/python/test/lue_test/util.py
+++ b/source/data_model/python/test/lue_test/util.py
@@ -1,7 +1,7 @@
 import os
 
 
-def remove_file_if_existant(pathname):
+def remove_file_if_existent(pathname):
     if os.path.isfile(pathname):
         os.remove(pathname)
 
diff --git a/source/framework/algorithm/test/accu_test.cpp b/source/framework/algorithm/test/accu_test.cpp
index 71547d0a0..25ecb35fe 100644
--- a/source/framework/algorithm/test/accu_test.cpp
+++ b/source/framework/algorithm/test/accu_test.cpp
@@ -3722,7 +3722,7 @@ BOOST_AUTO_TEST_CASE(all_no_data_material)
 
 BOOST_AUTO_TEST_CASE(merging_streams_case_01)
 {
-    // No-data material in ridge cell. From there on, it must propage
+    // No-data material in ridge cell. From there on, it must propagate
     // down to all downstream cells, in all downstream partitions.
 
     auto flow_direction = lue::test::merging_streams();
diff --git a/source/framework/algorithm/test/inter_partition_stream_test.cpp b/source/framework/algorithm/test/inter_partition_stream_test.cpp
index bd81d61cb..21fa5a09b 100644
--- a/source/framework/algorithm/test/inter_partition_stream_test.cpp
+++ b/source/framework/algorithm/test/inter_partition_stream_test.cpp
@@ -28,8 +28,8 @@ namespace lue::test {
 
 
 // ... and only now include compare.hpp which uses check_component_is_equal
-#include "lue/framework/test/hpx_unit_test.hpp"
 #include "stream.hpp"
+#include "lue/framework/test/hpx_unit_test.hpp"
 
 
 namespace lue::test {
diff --git a/source/framework/api/c/test/local_operation_test.cpp b/source/framework/api/c/test/local_operation_test.cpp
index 8aae3471b..4a754db6c 100644
--- a/source/framework/api/c/test/local_operation_test.cpp
+++ b/source/framework/api/c/test/local_operation_test.cpp
@@ -9,7 +9,6 @@ BOOST_AUTO_TEST_CASE(add_raster_raster)
 }
 
 
-
 // #include "lue/framework/api/c/local_operation.h"
 //
 //
diff --git a/source/framework/api/cxx/test/create_scalar_test.cpp b/source/framework/api/cxx/test/create_scalar_test.cpp
index eb6127ad0..d10de91ea 100644
--- a/source/framework/api/cxx/test/create_scalar_test.cpp
+++ b/source/framework/api/cxx/test/create_scalar_test.cpp
@@ -1,6 +1,6 @@
 #define BOOST_TEST_MODULE lue framework api cxx create_scalar
-#include "lue/framework/api/cxx/create_scalar.hpp"
 #include "lue/framework/algorithm/scalar.hpp"
+#include "lue/framework/api/cxx/create_scalar.hpp"
 #include "lue/framework/test/hpx_unit_test.hpp"
 
 
diff --git a/source/framework/partitioned_array/test/array_partition_data_test.cpp b/source/framework/partitioned_array/test/array_partition_data_test.cpp
index 19bd23367..dd7ebf6d3 100644
--- a/source/framework/partitioned_array/test/array_partition_data_test.cpp
+++ b/source/framework/partitioned_array/test/array_partition_data_test.cpp
@@ -38,7 +38,7 @@ BOOST_AUTO_TEST_CASE(default_construct)
         BOOST_CHECK(data.begin() == data.end());
     }
 
-    // Value intialization
+    // Value initialization
     {
         Data<2> data{};
 
diff --git a/source/framework/partitioned_array/test/array_partition_test.cpp b/source/framework/partitioned_array/test/array_partition_test.cpp
index 259f52372..14184de3a 100644
--- a/source/framework/partitioned_array/test/array_partition_test.cpp
+++ b/source/framework/partitioned_array/test/array_partition_test.cpp
@@ -132,7 +132,7 @@ BOOST_AUTO_TEST_CASE(emulate_promise_future)
     // 3. Connect the component client instance created in step 1 with
     //    the component server instance created in step 2.
 
-    // Reasons for not just returning a client instance that whill become
+    // Reasons for not just returning a client instance that will become
     // ready after some continuation has finished executing is that such
     // a continuation cannot be written easily. In some algorithms that
     // result in array of client instances:
diff --git a/source/framework/partitioned_route/test/serial_route_partition_test.cpp b/source/framework/partitioned_route/test/serial_route_partition_test.cpp
index 19a2c5286..edad79d44 100644
--- a/source/framework/partitioned_route/test/serial_route_partition_test.cpp
+++ b/source/framework/partitioned_route/test/serial_route_partition_test.cpp
@@ -1,7 +1,7 @@
 #define BOOST_TEST_MODULE lue framework partitioned_route serial_route_partition
+#include "stream.hpp"
 #include "lue/framework/partitioned_route/serial_route_partition.hpp"
 #include "lue/framework/test/hpx_unit_test.hpp"
-#include "stream.hpp"
 
 
 BOOST_AUTO_TEST_CASE(default_construct_client)
diff --git a/source/framework/python/test/from_numpy_test.py b/source/framework/python/test/from_numpy_test.py
index 2b7028cd0..93569c774 100644
--- a/source/framework/python/test/from_numpy_test.py
+++ b/source/framework/python/test/from_numpy_test.py
@@ -71,7 +71,7 @@ class FromNumPyTest(lue_test.TestCase):
     # def test_dtype(self):
     #     """
     #     The element type of the numpy array determines the element type of the LUE array. The
-    #     element type of the no-data value must be convertable to the element type of the
+    #     element type of the no-data value must be convertible to the element type of the
     #     numpy array.
     #     """
     #     array_shape = (60, 40)
diff --git a/source/framework/python/test/to_numpy_test.py b/source/framework/python/test/to_numpy_test.py
index 732cb5c76..43d6a1368 100644
--- a/source/framework/python/test/to_numpy_test.py
+++ b/source/framework/python/test/to_numpy_test.py
@@ -55,7 +55,7 @@ def test_small_array(self):
     def test_dtype(self):
         """
         The element type of the LUE array determines the element type of the numpy array. The
-        element type of the no-data value must be convertable to the element type of the LUE array.
+        element type of the no-data value must be convertible to the element type of the LUE array.
         """
         array_shape = (60, 40)
 
diff --git a/source/framework/test/include/lue/framework/test/hpx_unit_test.hpp b/source/framework/test/include/lue/framework/test/hpx_unit_test.hpp
index ac0df610b..5c8a0ac6d 100644
--- a/source/framework/test/include/lue/framework/test/hpx_unit_test.hpp
+++ b/source/framework/test/include/lue/framework/test/hpx_unit_test.hpp
@@ -1,9 +1,9 @@
 #pragma once
 #define BOOST_TEST_NO_MAIN
 #define BOOST_TEST_ALTERNATIVE_INIT_API
-#include "lue/gdal.hpp"
 #include "lue/framework/test/array.hpp"
 #include "lue/framework/test/compare.hpp"
+#include "lue/gdal.hpp"
 #include <hpx/config.hpp>
 #include <hpx/hpx_init.hpp>
 #include <boost/cstdlib.hpp>