diff --git a/pythonbindings/pyfluids-stubs/gpu/__init__.pyi b/pythonbindings/pyfluids-stubs/gpu/__init__.pyi
index 15386f7b0df4d2d06e01f8621805af8790c32442..31fe74fb1a9d607960d21e7bf5448d95d99d1211 100644
--- a/pythonbindings/pyfluids-stubs/gpu/__init__.pyi
+++ b/pythonbindings/pyfluids-stubs/gpu/__init__.pyi
@@ -42,7 +42,7 @@ import basics, parallel
 
 from . import grid_generator as grid_generator
 from . import probes as probes
-from . import Kernel as Kernel
+from . import kernel as kernel
 
 class PreCollisionInteractor:
     def __init__(self, *args, **kwargs) -> None: ...
diff --git a/pythonbindings/pyfluids-stubs/gpu/kernel/__init__.pyi b/pythonbindings/pyfluids-stubs/gpu/kernel/__init__.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..1298ed96deef2f30e129112ff598102984ecf35c
--- /dev/null
+++ b/pythonbindings/pyfluids-stubs/gpu/kernel/__init__.pyi
@@ -0,0 +1,4 @@
+from . import compressible as compressible
+from . import incompressible as incompressible
+from . import porous_media as porous_media
+from . import wale as wale
\ No newline at end of file
diff --git a/pythonbindings/pyfluids-stubs/gpu/kernel/compressible.pyi b/pythonbindings/pyfluids-stubs/gpu/kernel/compressible.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..4b2069fabe339bc66b30e653375e467fbe6ce5e5
--- /dev/null
+++ b/pythonbindings/pyfluids-stubs/gpu/kernel/compressible.pyi
@@ -0,0 +1,17 @@
+BGK: str
+BGKUnified: str
+BGKPlus: str
+MRT: str
+Cascade: str
+CumulantClassic: str
+CumulantK15Unified: str
+K17CompressibleNavierStokesUnified: str
+K17CompressibleNavierStokes: str
+K17CompressibleNavierStokesBulkViscosity: str
+K17CompressibleNavierStokesChimeraLegacy: str
+CumulantAll4SP27: str
+CumulantK18: str
+CumulantK20: str
+K15CompressibleNavierStokes: str
+K15CompressibleNavierStokesBulk: str
+K15CompressibleNavierStokesSponge: str
\ No newline at end of file
diff --git a/pythonbindings/pyfluids-stubs/gpu/kernel/incompressible.pyi b/pythonbindings/pyfluids-stubs/gpu/kernel/incompressible.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..6dd05ff1cb44e45ba2f869b4b2d3e75c60d2eb83
--- /dev/null
+++ b/pythonbindings/pyfluids-stubs/gpu/kernel/incompressible.pyi
@@ -0,0 +1,7 @@
+BGK: str
+BGKPlus: str
+MRT: str
+Cascade: str
+Cumulant1h: str
+CumulantIsometric: str
+CumulantK15: str
\ No newline at end of file
diff --git a/pythonbindings/pyfluids-stubs/gpu/kernel/porous_media.pyi b/pythonbindings/pyfluids-stubs/gpu/kernel/porous_media.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..8e340b2a98b5f716a21a28211190eb6c5f6a2158
--- /dev/null
+++ b/pythonbindings/pyfluids-stubs/gpu/kernel/porous_media.pyi
@@ -0,0 +1 @@
+CumulantOne: str
\ No newline at end of file
diff --git a/pythonbindings/pyfluids-stubs/gpu/kernel/wale.pyi b/pythonbindings/pyfluids-stubs/gpu/kernel/wale.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..95aca0ca9f7cb32dbf3931b92e3618499f7efb2e
--- /dev/null
+++ b/pythonbindings/pyfluids-stubs/gpu/kernel/wale.pyi
@@ -0,0 +1,4 @@
+CumulantK17: str
+CumulantK17Debug: str
+CumulantK15: str
+CumulantK15SoniMalav: str
\ No newline at end of file
diff --git a/pythonbindings/src/gpu/gpu.cpp b/pythonbindings/src/gpu/gpu.cpp
index dcb4ded4b1f0f92748323081b7de9504c2995542..012ffd06e624543b7edcb5415a906e43f528751c 100644
--- a/pythonbindings/src/gpu/gpu.cpp
+++ b/pythonbindings/src/gpu/gpu.cpp
@@ -62,5 +62,6 @@ PYBIND11_MODULE(gpu, m)
     grid_provider::makeModule(m);
     turbulence_model::makeModule(m);
     grid_scaling_factory::makeModule(m);
+    kernel::makeModule(m);
 }
 } // namespace gpu_bindings
diff --git a/pythonbindings/src/gpu/submodules/kernel.cpp b/pythonbindings/src/gpu/submodules/kernel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..baf1252b7d17e26548763a686216d740657c48d5
--- /dev/null
+++ b/pythonbindings/src/gpu/submodules/kernel.cpp
@@ -0,0 +1,83 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  This file is part of VirtualFluids. VirtualFluids is free software: you can
+//  redistribute it and/or modify it under the terms of the GNU General Public
+//  License as published by the Free Software Foundation, either version 3 of
+//  the License, or (at your option) any later version.
+//
+//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
+//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+//  for more details.
+//
+//  You should have received a copy of the GNU General Public License along
+//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
+//
+//! \file kernel.cpp
+//! \ingroup submodules
+//! \author Henry Korb
+//=======================================================================================
+#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
+#include <gpu/core/Kernel/Utilities/KernelTypes.h>
+
+namespace kernel
+{
+    namespace py = pybind11;
+
+    void makeModule(py::module_ &parentModule)
+    {
+        auto kernel_module = parentModule.def_submodule("Kernel", "Kernel types");
+        auto compressible = kernel_module.def_submodule("compressible", "Compressible Kernel types");
+        auto incompressible = kernel_module.def_submodule("incompressible", "Incompressible Kernel types");
+        auto porous_media = kernel_module.def_submodule("porous_media", "Porous Media Kernel types");
+        auto wale = kernel_module.def_submodule("wale", "WALE Kernel types");
+
+        compressible.attr("BGK") = vf::collisionKernel::compressible::BGK;
+        compressible.attr("BGKUnified") = vf::collisionKernel::compressible::BGKUnified;
+        compressible.attr("BGKPlus") = vf::collisionKernel::compressible::BGKPlus;
+        compressible.attr("MRT") = vf::collisionKernel::compressible::MRT;
+        compressible.attr("Cascade") = vf::collisionKernel::compressible::Cascade;
+        compressible.attr("CumulantClassic") = vf::collisionKernel::compressible::CumulantClassic;
+        compressible.attr("CumulantK15Unified") = vf::collisionKernel::compressible::CumulantK15Unified;
+        compressible.attr("K17CompressibleNavierStokesUnified") = vf::collisionKernel::compressible::K17CompressibleNavierStokesUnified;
+        compressible.attr("K17CompressibleNavierStokes") = vf::collisionKernel::compressible::K17CompressibleNavierStokes;
+        compressible.attr("K17CompressibleNavierStokesBulkViscosity") = vf::collisionKernel::compressible::K17CompressibleNavierStokesBulkViscosity;
+        compressible.attr("K17CompressibleNavierStokesChimeraLegacy") = vf::collisionKernel::compressible::K17CompressibleNavierStokesChimeraLegacy;
+        compressible.attr("CumulantAll4SP27") = vf::collisionKernel::compressible::CumulantAll4SP27;
+        compressible.attr("CumulantK18") = vf::collisionKernel::compressible::CumulantK18;
+        compressible.attr("CumulantK20") = vf::collisionKernel::compressible::CumulantK20;
+        compressible.attr("K15CompressibleNavierStokes") = vf::collisionKernel::compressible::K15CompressibleNavierStokes;
+        compressible.attr("K15CompressibleNavierStokesBulk") = vf::collisionKernel::compressible::K15CompressibleNavierStokesBulk;
+        compressible.attr("K15CompressibleNavierStokesSponge") = vf::collisionKernel::compressible::K15CompressibleNavierStokesSponge;
+
+        incompressible.attr("BGK") = vf::collisionKernel::incompressible::BGK;
+        incompressible.attr("BGKPlus") = vf::collisionKernel::incompressible::BGKPlus;
+        incompressible.attr("MRT") = vf::collisionKernel::incompressible::MRT;
+        incompressible.attr("Cascade") = vf::collisionKernel::incompressible::Cascade;
+        incompressible.attr("Cumulant1h") = vf::collisionKernel::incompressible::Cumulant1h;
+        incompressible.attr("CumulantIsometric") = vf::collisionKernel::incompressible::CumulantIsometric;
+        incompressible.attr("CumulantK15") = vf::collisionKernel::incompressible::CumulantK15;
+
+        porous_media.attr("CumulantOne") = vf::collisionKernel::porousMedia::CumulantOne;
+        
+        wale.attr("CumulantK17") = vf::collisionKernel::wale::CumulantK17;
+        wale.attr("CumulantK17Debug") = vf::collisionKernel::wale::CumulantK17Debug;
+        wale.attr("CumulantK15") = vf::collisionKernel::wale::CumulantK15;
+        wale.attr("CumulantK15SoniMalav") = vf::collisionKernel::wale::CumulantK15SoniMalav;
+
+    }
+}
diff --git a/pythonbindings/src/gpu/submodules/parameter.cpp b/pythonbindings/src/gpu/submodules/parameter.cpp
index 6b9d57a715eb309295f6537daaccf56ff5397384..167ae0a3f2f2e061847d546e506fb3502c44e63e 100644
--- a/pythonbindings/src/gpu/submodules/parameter.cpp
+++ b/pythonbindings/src/gpu/submodules/parameter.cpp
@@ -83,7 +83,7 @@ namespace parameter
         .def("set_max_dev", &Parameter::setMaxDev, py::arg("max_dev"))
         .def("set_is_body_force", &Parameter::setIsBodyForce, py::arg("is_body_force"))
         .def("set_use_streams", &Parameter::setUseStreams, py::arg("use_streams"))
-        .def("set_main_kernel", &Parameter::configureMainKernel, py::arg("kernel"))
+        .def("configure_main_kernel", &Parameter::configureMainKernel, py::arg("kernel"))
         .def("set_AD_kernel", &Parameter::setADKernel, py::arg("ad_kernel"))
         .def("set_has_wall_model_monitor", &Parameter::setHasWallModelMonitor, py::arg("has_wall_monitor"))
         .def("set_outflow_pressure_correction_factor", &Parameter::setOutflowPressureCorrectionFactor, py::arg("correction_factor"))