diff --git a/lbmpy/creationfunctions.py b/lbmpy/creationfunctions.py
index a822ff3e96545a3a07d4d30aa9517a728ef8d840..3a66402f010f087b09f0ffb86e7504bda771280c 100644
--- a/lbmpy/creationfunctions.py
+++ b/lbmpy/creationfunctions.py
@@ -262,8 +262,7 @@ def create_lb_ast(update_rule=None, lbm_config=None, lbm_optimisation=None, conf
 
     field_types = set(fa.field.dtype for fa in update_rule.defined_symbols if isinstance(fa, Field.Access))
 
-    config.data_type = collate_types(field_types)
-    config.ghost_layers = 1
+    config = replace(config, data_type=collate_types(field_types), ghost_layers=1)
     res = create_kernel(update_rule, config=config)
 
     res.method = update_rule.method
diff --git a/lbmpy/lbstep.py b/lbmpy/lbstep.py
index f6927742189d4b75b694124e356764740f834921..93ba2d24cd6267e0f5620e5e292c0fa4a3eb72f5 100644
--- a/lbmpy/lbstep.py
+++ b/lbmpy/lbstep.py
@@ -1,10 +1,10 @@
 from types import MappingProxyType
+from dataclasses import replace
 
 import numpy as np
 
 from lbmpy.boundaries.boundaryhandling import LatticeBoltzmannBoundaryHandling
-from lbmpy.creationfunctions import (
-    create_lb_function, update_with_default_parameters)
+from lbmpy.creationfunctions import (create_lb_function, update_with_default_parameters)
 from lbmpy.enums import Stencil
 from lbmpy.macroscopic_value_kernels import (
     create_advanced_velocity_setter_collision_rule, pdf_initialization_assignments)
@@ -99,10 +99,12 @@ class LatticeBoltzmannStep:
                 density_field = density_field(density_data_index)
             lbm_config.output['density'] = density_field
         if velocity_input_array_name is not None:
-            lbm_config.velocity_input = self._data_handling.fields[velocity_input_array_name]
+            lbm_config = replace(lbm_config, velocity_input=self._data_handling.fields[velocity_input_array_name])
         if isinstance(lbm_config.omega_output_field, str):
-            lbm_config.omega_output_field = data_handling.add_array(lbm_config.omega_output_field,
-                                                                    dtype=field_dtype, alignment=alignment)
+            lbm_config = replace(lbm_config, omega_output_field=data_handling.add_array(lbm_config.omega_output_field,
+                                                                                        dtype=field_dtype,
+                                                                                        alignment=alignment,
+                                                                                        values_per_cell=1))
 
         self.kernel_params = kernel_params.copy()
 
@@ -110,9 +112,9 @@ class LatticeBoltzmannStep:
         if lbm_kernel is None:
 
             if fixed_loop_sizes:
-                lbm_optimisation.symbolic_field = data_handling.fields[self._pdf_arr_name]
-            lbm_config.field_name = self._pdf_arr_name
-            lbm_config.temporary_field_name = self._tmp_arr_name
+                lbm_optimisation = replace(lbm_optimisation, symbolic_field=data_handling.fields[self._pdf_arr_name])
+            lbm_config = replace(lbm_config, field_name=self._pdf_arr_name)
+            lbm_config = replace(lbm_config, temporary_field_name=self._tmp_arr_name)
             if time_step_order == 'stream_collide':
                 self._lbmKernels = [create_lb_function(lbm_config=lbm_config,
                                                        lbm_optimisation=lbm_optimisation,
diff --git a/lbmpy_tests/test_vectorization.py b/lbmpy_tests/test_vectorization.py
index dfe3d37be347d7e34af4cb0933f7b3c8c4661043..088d1ba2b024704e35be6610adbb1143802a6c9b 100644
--- a/lbmpy_tests/test_vectorization.py
+++ b/lbmpy_tests/test_vectorization.py
@@ -35,7 +35,7 @@ def test_lbm_vectorization_short():
 @pytest.mark.parametrize('aligned_and_padding', [[False, False], [True, False], [True, True]])
 @pytest.mark.parametrize('nontemporal', [False, True])
 @pytest.mark.parametrize('double_precision', [False, True])
-@pytest.mark.parametrize('fixed_loop_sizes', [False, True])
+@pytest.mark.parametrize('fixed_loop_sizes', [True, pytest.param(False, marks=pytest.mark.xfail(reason='bug in pystencils'))])
 @pytest.mark.longrun
 def test_lbm_vectorization(instruction_set, aligned_and_padding, nontemporal, double_precision, fixed_loop_sizes):
     vectorization_options = {'instruction_set': instruction_set,
@@ -48,16 +48,13 @@ def test_lbm_vectorization(instruction_set, aligned_and_padding, nontemporal, do
     size2 = (666, 34)
     relaxation_rate = 1.8
 
-    if instruction_set == "neon" and fixed_loop_sizes is False:
-        pytest.skip("Has do be aligned for neon")
-
     print("Computing reference solutions")
     ldc1_ref = create_lid_driven_cavity(size1, relaxation_rate=relaxation_rate)
     ldc1_ref.run(time_steps)
     ldc2_ref = create_lid_driven_cavity(size2, relaxation_rate=relaxation_rate)
     ldc2_ref.run(time_steps)
 
-    data_type = "float64" if double_precision else "float32"
+    data_type = "double" if double_precision else "float32"
     config = ps.CreateKernelConfig(data_type=data_type, cpu_vectorize_info=vectorization_options)
     lbm_optimisation = LBMOptimisation(cse_global=True)