diff --git a/.isort.cfg b/.isort.cfg
index 8d7af1de97c8aea738c0f7c503d1461ad413db4f..91f3180b95f43b4dcf75bad5d3cb47349ba74f1a 100644
--- a/.isort.cfg
+++ b/.isort.cfg
@@ -1,4 +1,10 @@
 [settings]
+multi_line_output=3
+include_trailing_comma=true
+force_grid_wrap=0
+use_parentheses=true
+ensure_newline_before_comments=true
 line_length=88
+force_single_line=true
 order_by_type=true
 lines_between_types=1
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index b8be7b76e83826593fa81b855cb192d76e409f68..255d30427c09122af0d59818bbfdbf7487d94a45 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -2,17 +2,17 @@
 # See https://pre-commit.com/hooks.html for more hooks
 repos:
   - repo: https://github.com/timothycrosley/isort
-    rev: 4.3.21-2
+    rev: 5.0.5
     hooks:
     - id: isort
       args: [-sl]
   - repo: https://github.com/psf/black
-    rev: stable
+    rev: 19.10b0
     hooks:
       - id: black
         exclude: beat/backend/python/test/prefix/.*/syntax_error
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v2.0.0
+    rev: v3.1.0
     hooks:
       - id: check-ast
         exclude: beat/backend/python/test/prefix/.*/syntax_error
@@ -23,12 +23,15 @@ repos:
         exclude: beat/backend/python/test/prefix/.*/syntax_error
       - id: check-added-large-files
       - id: check-docstring-first
-      - id: flake8
-        exclude: beat/backend/python/test/prefix/.*/(.*crash|syntax_error)
       - id: check-yaml
         exclude: conda/meta.yaml
+  - repo: https://github.com/PyCQA/flake8/
+    rev: 3.8.3
+    hooks:
+      - id: flake8
+        exclude: beat/backend/python/test/prefix/.*/(.*crash|syntax_error)
   - repo: https://github.com/PyCQA/bandit
-    rev: 'master' # Update me!
+    rev: 1.6.2
     hooks:
       - id: bandit
         exclude: beat/backend/python/test/prefix/.*/syntax_error
diff --git a/beat/backend/python/algorithm.py b/beat/backend/python/algorithm.py
index ee6c4489e0a03f1f760c3d4455f1653893195c4a..883c7e7eb62239cfc0d7d352d7e3ebb183b32aa1 100644
--- a/beat/backend/python/algorithm.py
+++ b/beat/backend/python/algorithm.py
@@ -785,7 +785,9 @@ class Algorithm(object):
 
     @property
     def uses(self):
-        "Mapping object defining the required library import name (keys) and the full-names (values)"""
+        """Mapping object defining the required library import name (keys) and the
+        full-names (values)
+        """
 
         return self.data.get("uses")
 
diff --git a/beat/backend/python/dataformat.py b/beat/backend/python/dataformat.py
index 2d030fdb2564208b0127c91f70986d3e842dee0a..de44081b0cb9a54ff7f250120866232ad6aa1038 100644
--- a/beat/backend/python/dataformat.py
+++ b/beat/backend/python/dataformat.py
@@ -255,7 +255,9 @@ class DataFormat(object):
 
     @property
     def name(self):
-        """Name of this object, either from the filename or composed from the hierarchy it belongs."""
+        """Name of this object, either from the filename or composed from the hierarchy
+        it belongs.
+        """
         if self.parent and self._name is None:
             return self.parent[0].name + "." + self.parent[1] + "_type"
         else:
@@ -353,7 +355,8 @@ class DataFormat(object):
 
     @property
     def description(self):
-        "Short description string, loaded from the JSON file if one was set"""
+        """Short description string, loaded from the JSON file if one was set"""
+
         return self.data.get("#description", None)
 
     @description.setter
diff --git a/beat/backend/python/test/prefix/databases/syntax_error/1.py b/beat/backend/python/test/prefix/databases/syntax_error/1.py
index 9a616fa17d6d1d00a0e98105cb8cf99d2c91aab0..22c785c22473f7a4e51e6b8db7cc3bf331d28465 100755
--- a/beat/backend/python/test/prefix/databases/syntax_error/1.py
+++ b/beat/backend/python/test/prefix/databases/syntax_error/1.py
@@ -36,7 +36,6 @@
 
 from beat.backend.python.database import View
 
-
 class SyntaxError(View); # <-- syntax error!
 
     def get(self, output, index):
diff --git a/doc/conf.py b/doc/conf.py
index 23be1f685f72c45610d712381087db937a965c50..b886e51cd707b62f67f2e6197ac3a8adf93555e6 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -6,14 +6,15 @@ import time
 
 import pkg_resources
 
-# For inter-documentation mapping:
-from bob.extension.utils import link_documentation
-from bob.extension.utils import load_requirements
-
 # The theme to use for HTML and HTML Help pages.  See the documentation for
 # a list of builtin themes.
 import sphinx_rtd_theme
 
+
+# For inter-documentation mapping:
+from bob.extension.utils import link_documentation
+from bob.extension.utils import load_requirements
+
 # -- General configuration -----------------------------------------------------
 
 # If your documentation needs a minimal Sphinx version, state it here.
@@ -229,10 +230,10 @@ rst_epilog = """
 autoclass_content = "class"
 autodoc_member_order = "bysource"
 autodoc_default_options = {
-        "members": True,
-        "undoc-members": True,
-        "show-inheritance": True,
-        }
+    "members": True,
+    "undoc-members": True,
+    "show-inheritance": True,
+}
 
 if "BOB_DOCUMENTATION_SERVER" not in os.environ:
     # notice we need to overwrite this for BEAT projects - defaults from Bob are
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000000000000000000000000000000000000..9787c3bdf008a57ae3cb2e27a8261eb3f134ff73
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["setuptools", "wheel"]
+build-backend = "setuptools.build_meta"
diff --git a/version.txt b/version.txt
index 7228995f201848fe6bf638552ec7bf9f5a00270f..e18dfc8c48cde909af3ece189c283be808e4d73e 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-1.7.13b0
\ No newline at end of file
+1.7.13b0