diff --git a/2_Advanced_Data_Types_de.ipynb b/2_Advanced_Data_Types_de.ipynb
index 36325fcd5eb2c8a6f0f1ce48725cdaf7fefb8dad..77ace2db19c36675df4bef01882b2f1c5e43ed1e 100644
--- a/2_Advanced_Data_Types_de.ipynb
+++ b/2_Advanced_Data_Types_de.ipynb
@@ -1125,7 +1125,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Julia 1.9.3",
+   "display_name": "julia 1.9.3",
    "language": "julia",
    "name": "julia-1.9"
   },
diff --git a/2_Advanced_Data_Types_en.ipynb b/2_Advanced_Data_Types_en.ipynb
index 5161c0bc3096d70a32d7e34f9e15dea5e2247708..c7f953b6c30391df7884183c27208639b0268c08 100644
--- a/2_Advanced_Data_Types_en.ipynb
+++ b/2_Advanced_Data_Types_en.ipynb
@@ -1126,7 +1126,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Julia 1.9.3",
+   "display_name": "julia 1.9.3",
    "language": "julia",
    "name": "julia-1.9"
   },
diff --git a/src/3_Data_Types_Multiple_Dispatch.ipynb b/src/3_Data_Types_Multiple_Dispatch.ipynb
index 65a408d3b05920482d1a2ec9cb084a515d56c866..87d4a2c1e6e7c0bceb35a4a1b433ec6eafa2ea5f 100644
--- a/src/3_Data_Types_Multiple_Dispatch.ipynb
+++ b/src/3_Data_Types_Multiple_Dispatch.ipynb
@@ -22,7 +22,7 @@
    "source": [
     "# Datentypen und Multiple Dispatch\n",
     "\n",
-    "In diesem Notizbuch werden wir die grundlegenden Konzepte von Julias Typsystem erforschen und Multiple Dispatch verstehen, wobei wir uns konzentrieren auf:\n",
+    "In diesem Arbeitsblatt werden wir die grundlegenden Konzepte von Julias Typsystem erforschen und Multiple Dispatch verstehen, wobei wir uns konzentrieren auf:\n",
     "\n",
     "- Abstrakte und Konkrete Typen\n",
     "- Dynamische Typen\n",
@@ -124,7 +124,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "@show Int32 <: Integer   # Read Int32 is a sub-type of Integer\n",
+    "@show Int32 <: Integer   # Read:Int32 is a sub-type of Integer\n",
     "@show UInt16 <: Integer  # UInt16 is a sub-type of Integer\n",
     "@show Float32 <: Integer # Float32 is not a sub-type of Integer\n",
     "@show Float32 <: Number  # Float32 is a sub-type of Number\n",
@@ -660,7 +660,24 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# TODO: implement your code\n"
+    "# TODO: implement your code\n",
+    "abstract type Bird <: Animal end  # Abstract type\n",
+    "\n",
+    "struct Taubeb <: Bird\n",
+    "    name::String\n",
+    "    age::Int\n",
+    "    Beute::String\n",
+    "end\n",
+    "\n",
+    "struct Falke <: Bird\n",
+    "    Beute::String\n",
+    "    MaxSpeed::Float64\n",
+    "end\n",
+    "\n",
+    "print_type_tree(Animal)\n",
+    "\n",
+    "a_Taube = Taubeb(\"F\", 2, \"Maus\")\n",
+    "a_Falke = Falke(\"Wiesel\", 200)\n"
    ]
   },
   {
@@ -698,7 +715,8 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# TODO: implement your code\n"
+    "# TODO: implement your code\n",
+    "Float64 <: AbstractFloat"
    ]
   },
   {
@@ -783,7 +801,7 @@
     "    function backen(kartoffeln::Kartoffeln)\n",
     "    function braten(kartoffeln::Kartoffeln)\n",
     "    function backen(fisch::Fisch)\n",
-    "    function braten(fisch::Fisch)\n",
+    "    function braten(fisch::Fisch) \n",
     "    ```\n",
     "\n",
     "Auf diese Weise erfordert das Hinzufügen eines neuen Rezepts für eine bestimmte Art von Lebensmittel keine Änderungen an bereits geschriebenen Dingen.\n",
@@ -1461,7 +1479,7 @@
     "\n",
     "Diese Übung befasst sich mit dem Schreiben eines benutzerdefinierten Datentyps für Polynome, einer Reihe von Konstruktoren dafür und Funktionen zum Durchführen von Operationen an ihnen. **Hinweis:** Das Schreiben benutzerdefinierter Polynome auf diese Weise ist weder effizient noch bequem, aber es ist ein gutes Beispiel für die bisher behandelten Themen.\n",
     "\n",
-    "- Implementieren Sie einen neuen abstrakten Datentyp `AbstractPolynomial`. Dann implementieren Sie einige konkrete Untertypen, `PolynomialDegree0`, `PolynomialDegree1`, `PolynomialDegree2` und `PolynomialArbitraryDegree`. **Tipp:** Verwenden Sie ein Wörterbuch, um die Koeffizienten auf konsistente Weise zwischen den verschiedenen Untertypen zu speichern: Sie können die Potenz von `x` als Schlüssel für den Koeffizientenwert verwenden.\n",
+    "- Implementieren Sie einen neuen abstrakten Datentyp `AbstractPolynomial`. Dann implementieren Sie einige konkrete Untertypen, `PolynomialDegree0`, `PolynomialDegree1`, `PolynomialDegree2` und `PolynomialArbitraryDegree`. **Tipp:** Verwenden Sie eine Zuordnungstabelle, um die Koeffizienten auf konsistente Weise zwischen den verschiedenen Untertypen zu speichern: Sie können die Potenz von `x` als Schlüssel für den Koeffizientenwert verwenden.\n",
     "\n",
     "- Schreiben Sie einen Konstruktor für jeden von ihnen, der die Koeffizienten als Eingabe erhält. **Tipp:** Verwenden Sie `args::Real...`, um eine beliebige Anzahl von Argumenten zu sammeln. Die Angabe des Typs ist wichtig, um Unklarheiten beim Aufruf mit einem Argument zu vermeiden (versuchen Sie, `Real` nicht anzugeben, um das Problem zu sehen).\n",
     "\n",
@@ -1481,13 +1499,73 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# TODO: implement your code here.\n"
+    "# TODO: implement your code here.\n",
+    "abstract type AbstractPolynomial end  # Abstract type\n",
+    "\n",
+    "struct PolynomialDegree0 <: AbstractPolynomial\n",
+    "    coeff::Dict\n",
+    "end\n",
+    "\n",
+    "struct PolynomialDegree1 <: AbstractPolynomial\n",
+    "    coeff::Dict\n",
+    "end\n",
+    "\n",
+    "struct PolynomialDegree2 <: AbstractPolynomial\n",
+    "    coeff::Dict\n",
+    "end\n",
+    "\n",
+    "struct PolynomialArbitraryDegree <: AbstractPolynomial\n",
+    "    coeff::Dict\n",
+    "end\n",
+    "\n",
+    "function PolynomialDegree0(a0::Real) \n",
+    "    coeff[0] = a0\n",
+    "end"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "f6258d48-096e-4c7f-b9d3-aa1bc1db744e",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print_type_tree(AbstractPolynomial)\n",
+    "a = PolynomialDegree0(2.0)\n"
    ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "c0412892-8a47-4583-a0e1-92d2927f4d0d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "c[1] = 3.2\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "deef05e8-a7c1-4c92-8db0-8c6ab510888d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "c\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "757d616e-4479-4755-ae71-3af310453a00",
+   "metadata": {},
+   "outputs": [],
+   "source": []
   }
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Julia 1.9.3",
+   "display_name": "julia 1.9.3",
    "language": "julia",
    "name": "julia-1.9"
   },