diff --git a/notebooks/end2end_example/tfc_end2end_verification.ipynb b/notebooks/end2end_example/tfc_end2end_verification.ipynb
index 7b045106dd292c221bf6382a7a499f88e9889d6a..60750b75fbf215c2c3bcdf28c8273fc825b8d3aa 100644
--- a/notebooks/end2end_example/tfc_end2end_verification.ipynb
+++ b/notebooks/end2end_example/tfc_end2end_verification.ipynb
@@ -370,7 +370,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Emulation of model layer-by-layer"
+    "### Emulation of model layer-by-layer\n",
+    "\n",
+    "The child model is loaded and the `exec_mode` for each node is set. Then it is saved in a new .onnx file so that the changed model can be referenced in the parent model."
    ]
   },
   {
@@ -385,24 +387,24 @@
    ]
   },
   {
-   "cell_type": "code",
-   "execution_count": 50,
+   "cell_type": "markdown",
    "metadata": {},
-   "outputs": [],
    "source": [
-    "# parent model\n",
-    "model_for_rtlsim = ModelWrapper(build_dir + \"/tfc_w1_a1_dataflow_parent.onnx\")\n",
-    "# reference child model\n",
-    "sdp_node = getCustomOp(model_for_rtlsim.graph.node[2])\n",
-    "sdp_node.set_nodeattr(\"model\", build_dir + \"/tfc_w1_a1_dataflow_child.onnx\")"
+    "The next step is to load the parent model and set the node attribute `model` in the StreamingDataflowPartition node (`sdp_node`). Afterwards the `exec_mode` is set in the parent model in each node."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 51,
+   "execution_count": 50,
    "metadata": {},
    "outputs": [],
    "source": [
+    "# parent model\n",
+    "model_for_rtlsim = ModelWrapper(build_dir + \"/tfc_w1_a1_dataflow_parent.onnx\")\n",
+    "# reference child model\n",
+    "sdp_node = getCustomOp(model_for_rtlsim.graph.node[2])\n",
+    "sdp_node.set_nodeattr(\"model\", build_dir + \"/tfc_w1_a1_dataflow_child.onnx\")\n",
+    "\n",
     "model_for_rtlsim = model_for_rtlsim.transform(SetExecMode(\"rtlsim\"))"
    ]
   },
@@ -441,7 +443,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Emulation of stitched IP"
+    "### Emulation of stitched IP\n",
+    "\n",
+    "Here we use the same procedure. First the child model is loaded, but in contrast to the layer-by-layer emulation, the metadata property `exec_mode` is set to \"rtlsim\" for the whole child model. When the model is integrated and executed in the last step, the verilog files of the stitched IP of the child model are used."
    ]
   },
   {
@@ -478,13 +482,6 @@
     "output_rtlsim = output_dict[list(output_dict.keys())[0]]\n",
     "assert np.isclose(output_rtlsim, output_golden, atol=1e-3).all(), \"The results are not the same!\""
    ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
   }
  ],
  "metadata": {