diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 310a13f7a152c904c382ee5c47362a21ff24d472..a873326af451538cb45b688ca14afe7937f823d2 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -12,6 +12,10 @@ repos:
     rev: 23.3.0
     hooks:
     -   id: black
+-   repo: https://github.com/PyCQA/isort
+    rev: 5.12.0
+    hooks:
+    -   id: isort
 -   repo: https://github.com/cheshirekow/cmake-format-precommit
     rev: v0.6.13
     hooks:
@@ -21,3 +25,7 @@ repos:
     hooks:
     -   id: clang-format
         args: ['--style={BasedOnStyle: Google,SortIncludes: false}']
+-   repo: https://github.com/pappasam/toml-sort
+    rev: v0.23.1
+    hooks:
+    - id: toml-sort-fix
diff --git a/demo/demo_quadruped.py b/demo/demo_quadruped.py
index c31f50ea81b5460da928d7600c404de524186943..411eb0ad85a1ffb6f9a237f0df276fe82e569e68 100644
--- a/demo/demo_quadruped.py
+++ b/demo/demo_quadruped.py
@@ -1,17 +1,19 @@
-import pinocchio as pin
-import tsid
-import numpy as np
-from numpy import nan
-from numpy.linalg import norm as norm
 import os
-import gepetto.corbaserver
-import time
 import subprocess
 import sys
+import time
+
+import gepetto.corbaserver
+import numpy as np
+import pinocchio as pin
+from numpy import nan
+from numpy.linalg import norm as norm
+
+import tsid
 
 sys.path += [os.getcwd() + "/../exercizes"]
-import plot_utils as plut
 import matplotlib.pyplot as plt
+import plot_utils as plut
 
 np.set_printoptions(precision=3, linewidth=200, suppress=True)
 
diff --git a/exercizes/ex_0_ur5_joint_space_control.py b/exercizes/ex_0_ur5_joint_space_control.py
index f453f1d232a0d79a373878779619e68abed51f8e..290e60f7a3836a54ffc560286554b034fac2c51b 100644
--- a/exercizes/ex_0_ur5_joint_space_control.py
+++ b/exercizes/ex_0_ur5_joint_space_control.py
@@ -1,16 +1,17 @@
+import os
+import subprocess
+import time
+
+import gepetto.corbaserver
+import matplotlib.pyplot as plt
 import numpy as np
+import pinocchio as pin
+import plot_utils as plut
+import ur5_conf as conf
 from numpy import nan
 from numpy.linalg import norm as norm
-import matplotlib.pyplot as plt
-import plot_utils as plut
-import time
-import pinocchio as pin
-import tsid
-import gepetto.corbaserver
-import subprocess
-import os
 
-import ur5_conf as conf
+import tsid
 
 print("".center(conf.LINE_WIDTH, "#"))
 print(" Joint Space Inverse Dynamics - Manipulator ".center(conf.LINE_WIDTH, "#"))
diff --git a/exercizes/ex_1.py b/exercizes/ex_1.py
index 94ffffa3989932ad1cc769bb4ca49b8da8445e67..ee779c3bcb5a1f900cc7a1a2259cbbe9662f9300 100644
--- a/exercizes/ex_1.py
+++ b/exercizes/ex_1.py
@@ -1,10 +1,11 @@
-import numpy as np
-from numpy import nan
-from numpy.linalg import norm as norm
+import time
+
 import matplotlib.pyplot as plt
+import numpy as np
 import plot_utils as plut
-import time
 import romeo_conf as conf
+from numpy import nan
+from numpy.linalg import norm as norm
 from tsid_biped import TsidBiped
 
 print("".center(conf.LINE_WIDTH, "#"))
diff --git a/exercizes/ex_1_ur5.py b/exercizes/ex_1_ur5.py
index 583eda9cd4a9e5001ec8f24981f02dfe4aaf4b2a..ea6a54914303a49837858b2d85e07b5d63b8caaf 100644
--- a/exercizes/ex_1_ur5.py
+++ b/exercizes/ex_1_ur5.py
@@ -1,13 +1,14 @@
-import numpy as np
-from numpy import nan
-from numpy.linalg import norm as norm
+import time
+
 import matplotlib.pyplot as plt
+import numpy as np
 import plot_utils as plut
-import time
-from tsid_manipulator import TsidManipulator
 
 # import ur5_conf as conf
 import ur5_reaching_conf as conf
+from numpy import nan
+from numpy.linalg import norm as norm
+from tsid_manipulator import TsidManipulator
 
 print(("".center(conf.LINE_WIDTH, "#")))
 print((" TSID - Manipulator End-Effector Sin Tracking ".center(conf.LINE_WIDTH, "#")))
diff --git a/exercizes/ex_2.py b/exercizes/ex_2.py
index 6a7ff6bbd9265d2f341c925a0b48505d3a4aae3b..4d6e184133960225eced7c74e801ce73345d0b51 100644
--- a/exercizes/ex_2.py
+++ b/exercizes/ex_2.py
@@ -1,11 +1,12 @@
-import numpy as np
-from numpy import nan
-from numpy.linalg import norm as norm
+import time
+
 import matplotlib.pyplot as plt
+import numpy as np
+import pinocchio as pin
 import plot_utils as plut
-import time
 import romeo_conf as conf
-import pinocchio as pin
+from numpy import nan
+from numpy.linalg import norm as norm
 from tsid_biped import TsidBiped
 
 print("".center(conf.LINE_WIDTH, "#"))
diff --git a/exercizes/ex_3_biped_balance_with_gui.py b/exercizes/ex_3_biped_balance_with_gui.py
index 1ebe903d99566abfdb4ef15a41cff4ce554c28f7..ffd7ad8bc4d7ee47b6e658f160a47886a2995124 100644
--- a/exercizes/ex_3_biped_balance_with_gui.py
+++ b/exercizes/ex_3_biped_balance_with_gui.py
@@ -12,7 +12,6 @@ from tkinter import HORIZONTAL, Button, Entry, Frame, Label, Scale, Tk, mainloop
 
 import numpy as np
 import pinocchio as pin
-
 import talos_conf as conf
 
 # import romeo_conf as conf
diff --git a/exercizes/ex_4_LIPM_to_TSID.py b/exercizes/ex_4_LIPM_to_TSID.py
index 40561b7c851a67414d9e611a75c8432ec64d68ee..a36268cd4f165bc5c0afa2816f2999504fc6443c 100644
--- a/exercizes/ex_4_LIPM_to_TSID.py
+++ b/exercizes/ex_4_LIPM_to_TSID.py
@@ -1,11 +1,11 @@
-import numpy as np
+import ex_4_conf as conf
 import LMPC_walking.second_order.plot_utils as plot_utils
+import matplotlib.pyplot as plt
+import numpy as np
 from LMPC_walking.second_order.LIPM_to_whole_body import (
     compute_foot_traj,
     interpolate_lipm_traj,
 )
-import matplotlib.pyplot as plt
-import ex_4_conf as conf
 
 # import ex_4_long_conf as conf
 
diff --git a/exercizes/ex_4_conf.py b/exercizes/ex_4_conf.py
index 92754a8e92633fd980a44b9cb13c1630e66ce7f9..74f7a860f7e261bb3496781ade852cedb447443a 100644
--- a/exercizes/ex_4_conf.py
+++ b/exercizes/ex_4_conf.py
@@ -5,8 +5,9 @@ Created on Thu Apr 18 09:47:07 2019
 @author: student
 """
 
-import numpy as np
 import os
+
+import numpy as np
 import pinocchio as pin
 
 np.set_printoptions(precision=3, linewidth=200, suppress=True)
diff --git a/exercizes/ex_4_long_conf.py b/exercizes/ex_4_long_conf.py
index 06e158ce3652f6fe15bd1d31a333288da7602563..c6cacd4af25fb6dc73c18c660c022e1ccea83be6 100644
--- a/exercizes/ex_4_long_conf.py
+++ b/exercizes/ex_4_long_conf.py
@@ -5,9 +5,10 @@ Created on Thu Apr 18 09:47:07 2019
 @author: student
 """
 
-import numpy as np
 import os
 
+import numpy as np
+
 np.set_printoptions(precision=3, linewidth=200, suppress=True)
 LINE_WIDTH = 60
 
diff --git a/exercizes/ex_4_plan_LIPM_romeo.py b/exercizes/ex_4_plan_LIPM_romeo.py
index 703152c45a945d01cd8c3c8ad2c2f03429875fa3..4823256ea35317d5af9c89f9ed987a732933e8db 100644
--- a/exercizes/ex_4_plan_LIPM_romeo.py
+++ b/exercizes/ex_4_plan_LIPM_romeo.py
@@ -22,20 +22,20 @@ import numpy as np
 from quadprog import solve_qp
 
 try:
-    import LMPC_walking.second_order.reference_trajectories as reference_trajectories
-    import LMPC_walking.second_order.motion_model as motion_model
-    import LMPC_walking.second_order.cost_function as cost_function
     import LMPC_walking.second_order.constraints as constraints
+    import LMPC_walking.second_order.cost_function as cost_function
+    import LMPC_walking.second_order.motion_model as motion_model
     import LMPC_walking.second_order.plot_utils as plot_utils
+    import LMPC_walking.second_order.reference_trajectories as reference_trajectories
 except ModuleNotFoundError as e:
     print(
         "Please download LMPC_walking from https://github.com/machines-in-motion/lmpc_walking."
     )
     raise e
 
+import ex_4_conf as conf
 import matplotlib.pyplot as plt
 from plot_utils import *
-import ex_4_conf as conf
 
 # import ex_4_long_conf as conf
 
diff --git a/exercizes/ex_4_talos_conf.py b/exercizes/ex_4_talos_conf.py
index ff22f6ad203902324e3379fdc804975cea5d2bbc..0f76b111bfe400bfb0d1845e970620e527e8c514 100644
--- a/exercizes/ex_4_talos_conf.py
+++ b/exercizes/ex_4_talos_conf.py
@@ -5,8 +5,9 @@ Created on Thu Apr 18 09:47:07 2019
 @author: student
 """
 
-import numpy as np
 import os
+
+import numpy as np
 import pinocchio as pin
 from example_robot_data.robots_loader import getModelPath
 
diff --git a/exercizes/ex_4_walking.py b/exercizes/ex_4_walking.py
index a3ba4b57e7685ff4b0d0de3b670202c2c7710f65..986751ed3fd394d3aa54aa6ccf32ba5008d8a88a 100644
--- a/exercizes/ex_4_walking.py
+++ b/exercizes/ex_4_walking.py
@@ -1,16 +1,15 @@
 import time
-import numpy as np
-import scipy.sparse as spa
-import matplotlib.pyplot as plt
 
-import tsid
-import plot_utils as plut
 import ex_4_conf as conf
-
+import matplotlib.pyplot as plt
+import numpy as np
+import plot_utils as plut
+import scipy.sparse as spa
 from numpy import nan
 from numpy.linalg import norm as norm
 from tsid_biped import TsidBiped
 
+import tsid
 
 print("".center(conf.LINE_WIDTH, "#"))
 print(" Test Walking ".center(conf.LINE_WIDTH, "#"))
diff --git a/exercizes/romeo_conf.py b/exercizes/romeo_conf.py
index 3b7003ba2230ab54c18b45463e00aaba0db987fa..a2040151de2179ad534ced3058be8f8cb65dc9db 100644
--- a/exercizes/romeo_conf.py
+++ b/exercizes/romeo_conf.py
@@ -5,8 +5,9 @@ Created on Thu Apr 18 09:47:07 2019
 @author: student
 """
 
-import numpy as np
 import os
+
+import numpy as np
 import pinocchio as pin
 
 np.set_printoptions(precision=3, linewidth=200, suppress=True)
diff --git a/exercizes/talos_conf.py b/exercizes/talos_conf.py
index 9e3e075c1c8225e6adf0056cf32f738d53e2b152..4e8d93331bd0791be5294751ba3f6a37f1c808e8 100644
--- a/exercizes/talos_conf.py
+++ b/exercizes/talos_conf.py
@@ -1,6 +1,7 @@
 import os
-import pinocchio as pin
+
 import numpy as np
+import pinocchio as pin
 from example_robot_data.robots_loader import getModelPath
 
 np.set_printoptions(precision=3, linewidth=200, suppress=True)
diff --git a/exercizes/test_cop_task.py b/exercizes/test_cop_task.py
index 1561fe4179a998aea630f3355b5bd2d8d9e4d057..1894c06f53082b06754209c1abc07b05ef655588 100644
--- a/exercizes/test_cop_task.py
+++ b/exercizes/test_cop_task.py
@@ -7,13 +7,14 @@
     which was the goal of the test, validating the CoP task.
 """
 
+import time
+
+import ex_4_conf as conf
+import matplotlib.pyplot as plt
 import numpy as np
+import plot_utils as plut
 from numpy import nan
 from numpy.linalg import norm as norm
-import matplotlib.pyplot as plt
-import plot_utils as plut
-import time
-import ex_4_conf as conf
 
 # import ex_4_long_conf as conf
 from tsid_biped import TsidBiped
diff --git a/exercizes/tsid_biped.py b/exercizes/tsid_biped.py
index 58a229c6f76d51eb6df906472b2c841590cd8f67..d63d25ae19bfbeadebd5176f9bf5782d7481fc3a 100644
--- a/exercizes/tsid_biped.py
+++ b/exercizes/tsid_biped.py
@@ -4,6 +4,7 @@ import time
 
 import numpy as np
 import pinocchio as pin
+
 import tsid
 
 
diff --git a/exercizes/tsid_manipulator.py b/exercizes/tsid_manipulator.py
index c2c1b08c57a5fdd3951eb68028628dc7c0bc785f..93a7bc83ed082c1765d775b6191075e9667a1542 100644
--- a/exercizes/tsid_manipulator.py
+++ b/exercizes/tsid_manipulator.py
@@ -1,11 +1,13 @@
-import pinocchio as se3
-import tsid
-import numpy as np
-import numpy.matlib as matlib
 import os
-import gepetto.corbaserver
-import time
 import subprocess
+import time
+
+import gepetto.corbaserver
+import numpy as np
+import numpy.matlib as matlib
+import pinocchio as se3
+
+import tsid
 
 
 class TsidManipulator:
diff --git a/exercizes/ur5_conf.py b/exercizes/ur5_conf.py
index a42b51e52697dcc20bbe9c7a4b9399b7a1bf744d..97f4f815f7c57d822fc6c7ccf5c4b36af302856c 100644
--- a/exercizes/ur5_conf.py
+++ b/exercizes/ur5_conf.py
@@ -5,9 +5,10 @@ Created on Thu Apr 18 09:47:07 2019
 @author: student
 """
 
-import numpy as np
 import os
 
+import numpy as np
+
 np.set_printoptions(precision=3, linewidth=200, suppress=True)
 LINE_WIDTH = 60
 
@@ -52,9 +53,10 @@ REF_SPHERE_RADIUS = 0.03
 EE_SPHERE_COLOR = (1, 0.5, 0, 0.5)
 EE_REF_SPHERE_COLOR = (1, 0, 0, 0.5)
 
-from example_robot_data.robots_loader import getModelPath
 from os.path import join
 
+from example_robot_data.robots_loader import getModelPath
+
 urdf = "ur_description/urdf/ur5_robot.urdf"
 path = getModelPath(urdf)
 urdf = join(path, urdf)
diff --git a/exercizes/ur5_reaching_conf.py b/exercizes/ur5_reaching_conf.py
index d46a370570431ce146f914b330341a1f059b0da9..cfa9f6269387956df3c5bf944aa1c1007a661443 100644
--- a/exercizes/ur5_reaching_conf.py
+++ b/exercizes/ur5_reaching_conf.py
@@ -5,9 +5,10 @@ Created on Thu Apr 18 09:47:07 2019
 @author: student
 """
 
-import numpy as np
 import os
 
+import numpy as np
+
 np.set_printoptions(precision=3, linewidth=200, suppress=True)
 LINE_WIDTH = 60
 
@@ -52,9 +53,10 @@ REF_SPHERE_RADIUS = 0.03
 EE_SPHERE_COLOR = (1, 0.5, 0, 0.5)
 EE_REF_SPHERE_COLOR = (1, 0, 0, 0.5)
 
-from example_robot_data.robots_loader import getModelPath
 from os.path import join
 
+from example_robot_data.robots_loader import getModelPath
+
 urdf = "ur_description/urdf/ur5_robot.urdf"
 path = getModelPath(urdf)
 urdf = join(path, urdf)
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000000000000000000000000000000000000..4441909ff45a7ca65234f61f2ae137fb931347d2
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,5 @@
+[tool.isort]
+profile = "black"
+
+[tool.tomlsort]
+all = true
diff --git a/tests/python/generator.py b/tests/python/generator.py
index 2f303c93e8e8409b47866f3ab6bea84138ab96d8..78b19335bdbeb10e34782a9f362fadd48a6ae05f 100644
--- a/tests/python/generator.py
+++ b/tests/python/generator.py
@@ -1,7 +1,8 @@
-import pinocchio as pin
+from math import pi
+
 import hppfcl as fcl
 import numpy as np
-from math import pi
+import pinocchio as pin
 
 
 def create_7dof_arm(revoluteOnly=False):
diff --git a/tests/python/test_Contact.py b/tests/python/test_Contact.py
index a7417c1f4a44744bb5fdc2b027a052db44f54984..33381911f50fa3fbacc3184153ac8fb747104c73 100644
--- a/tests/python/test_Contact.py
+++ b/tests/python/test_Contact.py
@@ -1,7 +1,9 @@
+import copy
+
+import numpy as np
 import pinocchio as se3
+
 import tsid
-import numpy as np
-import copy
 
 print("")
 print("Test Contact")
diff --git a/tests/python/test_ContactPoint.py b/tests/python/test_ContactPoint.py
index 56ae36516edce28c7bddbad1e0914c58d03478c0..cdf9e5050b45dcdf54873dddbca2464538ce19b2 100644
--- a/tests/python/test_ContactPoint.py
+++ b/tests/python/test_ContactPoint.py
@@ -6,7 +6,6 @@ import pinocchio as se3
 
 import tsid
 
-
 print("")
 print("Test Contact")
 print("")
diff --git a/tests/python/test_Deprecations.py b/tests/python/test_Deprecations.py
index 7cdd3533aa2fb57963a136c228ef891a6a2997c7..8e0bf828514b549876d5a02add83d876b557a064 100644
--- a/tests/python/test_Deprecations.py
+++ b/tests/python/test_Deprecations.py
@@ -1,5 +1,5 @@
-import unittest
 import sys
+import unittest
 import warnings
 
 import numpy as np
diff --git a/tests/python/test_Formulation.py b/tests/python/test_Formulation.py
index 07d3af0679074983aadf4ef74996463e12930dca..6d9933064f9f1ae6b874a05b14e10718d0456be2 100644
--- a/tests/python/test_Formulation.py
+++ b/tests/python/test_Formulation.py
@@ -2,9 +2,10 @@ import os
 
 import numpy as np
 import pinocchio as se3
-import tsid
 from numpy.linalg import norm
 
+import tsid
+
 print("")
 print("Test InvDyn")
 print("")
diff --git a/tests/python/test_RobotWrapper.py b/tests/python/test_RobotWrapper.py
index 6e7bb073b3e470b577975e10e82b82e2ddf14e3b..7fa1df85ce73e8a3bbf5d6a1bfd09a13ebea066a 100644
--- a/tests/python/test_RobotWrapper.py
+++ b/tests/python/test_RobotWrapper.py
@@ -2,6 +2,7 @@ import os
 
 import numpy as np
 import pinocchio as se3
+
 import tsid
 
 print("")
diff --git a/tests/python/test_Solvers.py b/tests/python/test_Solvers.py
index d5c8f3a6fc72c4ee9b7887ae72f079e8328ce003..b0d8bb46ef23a844b4729b051e1f6ad628176621 100644
--- a/tests/python/test_Solvers.py
+++ b/tests/python/test_Solvers.py
@@ -1,4 +1,5 @@
 import numpy as np
+
 import tsid
 
 print("")
diff --git a/tests/python/test_Tasks.py b/tests/python/test_Tasks.py
index 59711dc1f9c2f777a5fcd93f6f2b4c41670a8ee4..cb98d577b4ae72e30be226f595108533a1ea5453 100644
--- a/tests/python/test_Tasks.py
+++ b/tests/python/test_Tasks.py
@@ -2,9 +2,10 @@ import os
 
 import numpy as np
 import pinocchio as pin
-import tsid
 from numpy.linalg import norm
 
+import tsid
+
 print("")
 print("Test Task COM")
 print("")
diff --git a/tests/python/test_Trajectories.py b/tests/python/test_Trajectories.py
index 8c0acdd581745c9c6765c87be064ce3c4c66877b..0674e98931fc1b3cd182e580d8485df29c0b3740 100644
--- a/tests/python/test_Trajectories.py
+++ b/tests/python/test_Trajectories.py
@@ -1,5 +1,6 @@
 import numpy as np
 import pinocchio as se3
+
 import tsid
 
 print("")