diff --git a/test.py b/test.py
index dbc6261eec15b0d0ef11180314fa0571b1be38d5..17e7f8f5bf84b352ca3bc5980dae57729865a929 100644
--- a/test.py
+++ b/test.py
@@ -16,8 +16,6 @@ from pyopencl.tools import (  # noqa
         pytest_generate_tests_for_pyopencl
         as pytest_generate_tests)
 
-import kernel_fixtures as kernel
-
 
 _QUEUE = []
 
@@ -185,6 +183,52 @@ def split_map_to_list(string, map_func, splitter):
     return list(map(map_func, string.split(splitter)))
 
 
+def with_root_kernel(prg, root_name):
+    # FIXME This is a little less beautiful than it could be
+    new_prg = prg.copy(name=root_name)
+    for name in prg:
+        clbl = new_prg[name]
+        if isinstance(clbl, lp.LoopKernel) and clbl.is_called_from_host:
+            new_prg = new_prg.with_kernel(clbl.copy(is_called_from_host=False))
+
+    new_prg = new_prg.with_kernel(prg[root_name].copy(is_called_from_host=True))
+    return new_prg
+
+
+def kernel_roe_eigensystem(queue, prg, params, states, metrics_frozen):
+    R_dev = setup_empty_array_on_device(queue, params.mat_bounds())
+    Rinv_dev = setup_empty_array_on_device(queue, params.mat_bounds())
+    lam_dev = setup_empty_array_on_device(queue, params.vec_bounds())
+
+    prg = with_root_kernel(prg, "roe_eigensystem")
+    prg(queue, nvars=params.nvars, ndim=params.ndim, d=params.d,
+            states=states, metrics_frozen=metrics_frozen,
+            R=R_dev, R_inv=Rinv_dev, lambda_roe=lam_dev)
+
+    return R_dev.get(), Rinv_dev.get(), lam_dev.get()
+
+
+def kernel_mult_mat_vec(queue, prg, alpha, a, b):
+    c_dev = setup_empty_array_on_device(queue, b.shape)
+
+    prg = with_root_kernel(prg, "mult_mat_vec")
+    prg(queue, a=a, b=b, c=c_dev, alpha=alpha)
+
+    return c_dev.get()
+
+
+def kernel_compute_flux_derivatives(queue, prg, params, arrays):
+    flux_derivatives_dev = setup_empty_array_on_device(queue, (params.nvars, params.ndim,
+        params.nx_halo, params.ny_halo, params.nz_halo))
+
+    prg(queue, nvars=params.nvars, ndim=params.ndim,
+            states=arrays.states, fluxes=arrays.fluxes, metrics=arrays.metrics,
+            metric_jacobians=arrays.metric_jacobians,
+            flux_derivatives=flux_derivatives_dev)
+
+    return flux_derivatives_dev.get()
+
+
 def compare_arrays(a, b):
     assert a == approx(b)
 
@@ -286,7 +330,7 @@ def test_roe_uniform_grid(ctx_factory, states_str, fluxes_str, direction):
     params = setup_roe_params(nvars=5, ndim=3, direction=direction)
     states = array_from_string(states_str)
     metrics_frozen = setup_identity(params.ndim)
-    R, Rinv, lam = kernel.roe_eigensystem(queue, prg, params, states, metrics_frozen)
+    R, Rinv, lam = kernel_roe_eigensystem(queue, prg, params, states, metrics_frozen)
 
     compare_roe_identity(states, R, Rinv)
 
@@ -301,7 +345,7 @@ def test_matvec(ctx_factory):
     a = setup_random_array(10, 10)
     b = setup_random_array(10)
 
-    c = kernel.mult_mat_vec(queue, prg, alpha=1.0, a=a, b=b)
+    c = kernel_mult_mat_vec(queue, prg, alpha=1.0, a=a, b=b)
 
     compare_arrays(a@b, c)
 
@@ -315,7 +359,7 @@ def test_compute_flux_derivatives(ctx_factory):
     params = setup_flux_derivative_params(ndim=3, nvars=5, n=10)
     arrays = setup_random_flux_derivative_arrays(params)
 
-    kernel.compute_flux_derivatives(queue, prg, params, arrays)
+    kernel_compute_flux_derivatives(queue, prg, params, arrays)
 
 
 #@pytest.mark.slow
@@ -327,7 +371,7 @@ def test_compute_flux_derivatives_gpu(ctx_factory):
     params = setup_flux_derivative_params(ndim=3, nvars=5, n=10)
     arrays = setup_random_flux_derivative_arrays_on_device(ctx_factory, params)
 
-    kernel.compute_flux_derivatives(queue, prg, params, arrays)
+    kernel_compute_flux_derivatives(queue, prg, params, arrays)
 
 
 # This lets you run 'python test.py test_case(cl._csc)' without pytest.