diff --git a/doc/notebooks/demo_ve.ipynb b/doc/notebooks/demo_ve.ipynb
index f1ff3dd8d09bdec52a4a180e17654b7d80e06ad8..0604b21c227ed4331ac2887dbe9f996f242df638 100644
--- a/doc/notebooks/demo_ve.ipynb
+++ b/doc/notebooks/demo_ve.ipynb
@@ -43,7 +43,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 29,
+   "execution_count": 1,
    "id": "5d56a49c-5963-4f86-a8d8-0b753a971e52",
    "metadata": {},
    "outputs": [],
@@ -54,7 +54,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 30,
+   "execution_count": 2,
    "id": "9c204a47-a39b-450b-9026-9bb63cf54e83",
    "metadata": {},
    "outputs": [],
@@ -64,7 +64,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 31,
+   "execution_count": 3,
    "id": "5bbc4118-e1b7-412b-9dc8-7d7d524786df",
    "metadata": {},
    "outputs": [],
@@ -75,19 +75,19 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 32,
+   "execution_count": 4,
    "id": "85641913-f00a-4f95-af69-c7646ad5b3d0",
    "metadata": {},
    "outputs": [],
    "source": [
-    "@ps.kernel(config)\n",
+    "@ps.kernel_config(config)\n",
     "def vadd():\n",
     "    a[0] @= b[0] + c[0]"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 33,
+   "execution_count": 5,
    "id": "33097862-9f60-4624-a1f2-0fdfd82831bc",
    "metadata": {},
    "outputs": [
@@ -115,19 +115,19 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 34,
+   "execution_count": 6,
    "id": "99aee06b-1704-4d06-b261-cc07a6a7f9a3",
    "metadata": {},
    "outputs": [],
    "source": [
-    "@ps.kernel(config)\n",
+    "@ps.kernel_config(config)\n",
     "def daxpy():\n",
     "    b[0] @= alpha * a[0] + b[0]"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 35,
+   "execution_count": 7,
    "id": "e79ab7bb-128e-47ee-9d53-8779c4f55d7e",
    "metadata": {},
    "outputs": [
@@ -155,19 +155,19 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 36,
+   "execution_count": 8,
    "id": "4bb14872-11de-42cc-b5fc-4f995c7a6725",
    "metadata": {},
    "outputs": [],
    "source": [
-    "@ps.kernel(config)\n",
+    "@ps.kernel_config(config)\n",
     "def daxpy_one_off():\n",
     "    b[0] @= alpha * a[0] + b[0]"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 37,
+   "execution_count": 9,
    "id": "457cc1fe-1aef-44bd-9fd1-f914e019c933",
    "metadata": {},
    "outputs": [
@@ -195,87 +195,51 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 38,
-   "id": "fea2f8e4",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "#from pystencils.kerncraft_coupling import generate_benchmark"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 39,
-   "id": "4fbd5c90",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "#print(generate_benchmark(kernel_vadd))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 40,
+   "execution_count": 12,
    "id": "ae05beb9-745f-4885-ad4f-667aae867f05",
    "metadata": {},
    "outputs": [],
    "source": [
-    "from pystencils.benchmark import kernel_header, kernel_source, generate_benchmark\n",
+    "from pystencils_benchmark import kernel_header, kernel_source, generate_benchmark\n",
     "from pathlib import Path"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 41,
+   "execution_count": 13,
    "id": "7dfa86e1-8962-47df-900c-3133883a19c7",
    "metadata": {},
    "outputs": [],
    "source": [
-    "example_path = Path.cwd() / 'example'\n",
-    "example_path.mkdir(parents=True, exist_ok=True)"
+    "example_path = Path.cwd() / 'example'"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 42,
+   "execution_count": 21,
    "id": "dd39502f-d935-4b88-b8c8-896b1a294bf9",
    "metadata": {},
-   "outputs": [
-    {
-     "ename": "ValueError",
-     "evalue": "Unknown dialect='c'",
-     "output_type": "error",
-     "traceback": [
-      "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
-      "\u001B[0;31mValueError\u001B[0m                                Traceback (most recent call last)",
-      "\u001B[0;32m/tmp/ipykernel_209040/990452426.py\u001B[0m in \u001B[0;36m<module>\u001B[0;34m\u001B[0m\n\u001B[0;32m----> 1\u001B[0;31m \u001B[0mgenerate_benchmark\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mkernel_vadd\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mexample_path\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m      2\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n",
-      "\u001B[0;32m~/git/pystencils/pystencils/benchmark/benchmark.py\u001B[0m in \u001B[0;36mgenerate_benchmark\u001B[0;34m(kernel_ast, path, dialect, kernel_name)\u001B[0m\n\u001B[1;32m     13\u001B[0m         \u001B[0mkernel_name\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mkernel_ast\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mfunction_name\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m     14\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 15\u001B[0;31m     \u001B[0mheader\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mkernel_header\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mkernel_ast\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mdialect\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m     16\u001B[0m     \u001B[0;32mwith\u001B[0m \u001B[0mopen\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mpath\u001B[0m \u001B[0;34m/\u001B[0m \u001B[0;34mf'{kernel_name}.h'\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0;34m'w+'\u001B[0m\u001B[0;34m)\u001B[0m \u001B[0;32mas\u001B[0m \u001B[0mf\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m     17\u001B[0m         \u001B[0mf\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mwrite\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mheader\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n",
-      "\u001B[0;32m~/git/pystencils/pystencils/benchmark/benchmark.py\u001B[0m in \u001B[0;36mkernel_header\u001B[0;34m(kernel_ast, dialect)\u001B[0m\n\u001B[1;32m     23\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m     24\u001B[0m \u001B[0;32mdef\u001B[0m \u001B[0mkernel_header\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mkernel_ast\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mdialect\u001B[0m\u001B[0;34m=\u001B[0m\u001B[0;34m'c'\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 25\u001B[0;31m     \u001B[0mfunction_signature\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mgenerate_c\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mkernel_ast\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mdialect\u001B[0m\u001B[0;34m=\u001B[0m\u001B[0mdialect\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0msignature_only\u001B[0m\u001B[0;34m=\u001B[0m\u001B[0;32mTrue\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m     26\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m     27\u001B[0m     jinja_context = {\n",
-      "\u001B[0;32m~/git/pystencils/pystencils/backends/cbackend.py\u001B[0m in \u001B[0;36mgenerate_c\u001B[0;34m(ast_node, signature_only, dialect, custom_backend, with_globals)\u001B[0m\n\u001B[1;32m     76\u001B[0m         \u001B[0mprinter\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mOpenClBackend\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0msignature_only\u001B[0m\u001B[0;34m=\u001B[0m\u001B[0msignature_only\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m     77\u001B[0m     \u001B[0;32melse\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 78\u001B[0;31m         \u001B[0;32mraise\u001B[0m \u001B[0mValueError\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34mf'Unknown {dialect=}'\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m     79\u001B[0m     \u001B[0mcode\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mprinter\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mast_node\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m     80\u001B[0m     \u001B[0;32mif\u001B[0m \u001B[0;32mnot\u001B[0m \u001B[0msignature_only\u001B[0m \u001B[0;32mand\u001B[0m \u001B[0misinstance\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mast_node\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mKernelFunction\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n",
-      "\u001B[0;31mValueError\u001B[0m: Unknown dialect='c'"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
-    "generate_benchmark(kernel_vadd, example_path)"
+    "generate_benchmark([kernel_vadd, kernel_daxpy, kernel_daxpy_one_off], example_path)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 20,
    "id": "f084548f-3a8e-4d45-8c7e-5845013b222e",
    "metadata": {},
    "outputs": [],
    "source": [
     "# Examples:\n",
-    "generate_benchmark(kernel_daxpy, example_path)\n",
-    "generate_benchmark(kernel_vadd, example_path)\n",
-    "generate_benchmark(kernel_daxpy_one_off, example_path)"
+    "# generate_benchmark(kernel_daxpy, example_path)\n",
+    "# generate_benchmark(kernel_vadd, example_path)\n",
+    "# generate_benchmark(kernel_daxpy_one_off, example_path)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 15,
    "id": "954b5ec7-a88a-4723-bd7f-227a3919b32d",
    "metadata": {},
    "outputs": [],
@@ -283,7 +247,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 15,
    "id": "f51f2aff-f232-4de9-a0c4-94d3682eff86",
    "metadata": {},
    "outputs": [],