diff --git a/generate/generate.py b/generate/generate.py
index 936ed227ce1a0058f86e1cb91a2c61706b1c905f..e55020df4efe532e85fe4a88ca00d191c02a1373 100644
--- a/generate/generate.py
+++ b/generate/generate.py
@@ -355,13 +355,13 @@ def generate_operator(
             components_equal = False
 
     kernel_types = [
-        operator_generation.kernel_types.Apply(
+        operator_generation.kernel_types.ApplyWrapper(
             trial_space,
             test_space,
             type_descriptor=type_descriptor,
             dims=dims,
         ),
-        operator_generation.kernel_types.Assemble(
+        operator_generation.kernel_types.AssembleWrapper(
             trial_space,
             test_space,
             type_descriptor=type_descriptor,
@@ -371,7 +371,7 @@ def generate_operator(
 
     if trial_space == test_space and components_equal:
         kernel_types.append(
-            operator_generation.kernel_types.AssembleDiagonal(
+            operator_generation.kernel_types.AssembleDiagonalWrapper(
                 trial_space,
                 type_descriptor=type_descriptor,
                 dims=dims,
@@ -383,7 +383,7 @@ def generate_operator(
             name,
             symbolizer,
             opts=optimizations,
-            kernel_types=kernel_types,
+            kernel_wrapper_types=kernel_types,
             type_descriptor=type_descriptor,
         )
 
@@ -400,32 +400,33 @@ def generate_operator(
                 blending=blending,  # type: ignore[call-arg] # kw-args are not supported by Callable
             )
 
-            operator.set_element_matrix(
+            operator.add_integral(
+                name="".join(name.split()),
                 dim=geometry.dimensions,
                 geometry=geometry,
                 integration_domain=operator_generation.operators.MacroIntegrationDomain.VOLUME,
                 quad=quad,
                 blending=blending,
                 form=form,
+                loop_strategy=loop_strategies[spec["loop-strategy"]],
             )
 
         dir_path = os.path.join(args.output, form_str)
         operator.generate_class_code(
             dir_path,
-            loop_strategies[spec["loop-strategy"]],
-            class_files=operators.CppClassFiles.HEADER_IMPL_AND_VARIANTS,
             clang_format_binary=args.clang_format_binary,
         )
 
         kernel_implementations = {}
-        for kernel in operator.kernels:
-            for platform, function in kernel.platform_dependent_funcs.items():
-                if not platform in kernel_implementations:
-                    kernel_implementations[platform] = []
-
-                kernel_implementations[platform].append(
-                    f"{operator.name}_{function.function_name}.cpp"
-                )
+        for kernels in operator.operator_methods:
+            for kernel in kernels.platform_dependent_funcs:
+                for platform, function in kernel.items():
+                    if not platform in kernel_implementations:
+                        kernel_implementations[platform] = []
+
+                    kernel_implementations[platform].append(
+                        f"{operator.name}_{function.function_name}.cpp"
+                    )
 
         return kernel_implementations
 
diff --git a/generate/requirements.txt b/generate/requirements.txt
index 0d9d4423d25d90cd8e09e33bffdca63f327462da..0afd3ab81459c8545735cf5707725caf5efa4f29 100644
--- a/generate/requirements.txt
+++ b/generate/requirements.txt
@@ -1,5 +1,5 @@
 --extra-index-url https://test.pypi.org/simple/
 
-hog @ git+ssh://git@i10git.cs.fau.de/hyteg/hog@94ff71ce05b3ee62fdd04c7b09c7ac3ee9a541c8
+hog @ git+ssh://git@i10git.cs.fau.de/hyteg/hog@26f110bc235ad20bff58416a4dba4e1730e74c4e
 tomli >= 1.1.0 ; python_version < "3.11"
 clang-format