diff --git a/08-2 Generics Intro/Program.cs b/08-2 Generics Intro/Program.cs
index 6e5123e8e01893e291775c3e2c801bac19d83d1b..34a720cd46eb0a2f912c8648f2ce28ecc1d8b5d7 100644
--- a/08-2 Generics Intro/Program.cs	
+++ b/08-2 Generics Intro/Program.cs	
@@ -3,7 +3,7 @@ using System.Diagnostics.CodeAnalysis;
 
 namespace _08_2_Generics_Intro
 {
-    class Person : IComparable<Person>
+    class Person  : IComparable<Person>
     {
         string name, vorname;
         public Person(string Name, string Vorname) { name = Name;vorname = Vorname; }
@@ -32,17 +32,33 @@ namespace _08_2_Generics_Intro
         //{
         //    return (a.CompareTo(b) < 0) ? a : b;
         //}
-        static T Min<T>(T a, T b) where T:IComparable<T>
+        static TYP Min<TYP>(TYP a, TYP b) where TYP:IComparable<TYP>
         {
             return (a.CompareTo(b)<0) ? a : b;
         }
-            // Dieser Aufruf ist nur dann gültig, wenn der Typ von a eine Methode CompareTo() enthält
-            // => Es muss sichergestellt sein, dass Typ T eine Methode CompareTo() besitzt
+        //static object Min(object a, object b) 
+        //{
+        //    return (a.CompareTo(b) < 0) ? a : b;
+        //}
+        // Dieser Aufruf ist nur dann gültig, wenn der Typ von a eine Methode CompareTo() enthält
+        // => Es muss sichergestellt sein, dass Typ T eine Methode CompareTo() besitzt
 
-            // Constraint: Alle Typen sind erlaubt, welche die geforderten Eigenschaften (=Methoden) besitzen
-            // Hier: IComparable (=CompareTo)
+        // Constraint: Alle Typen sind erlaubt, welche die geforderten Eigenschaften (=Methoden) besitzen
+        // Hier: IComparable (=CompareTo)
 
-        
+        // where ~ Vertrag zwischen der Methode und der Verwendung
+        // Methode sagt, ich kann ..., WENN mir eine oder mehrere geforderte Methoden bereitgestellt werden
+        // Verwendung sagt, ich VERPFLICHTE mich, diese Methode bereitzustellen
+        // Compiler überwacht die Einhaltung des Vertrags
+
+        //static int Min_int(int a, int b) 
+        //{
+        //    return (a.CompareTo(b) < 0) ? a : b;
+        //}
+        //static double Min_double(double a, double b)
+        //{
+        //    return (a.CompareTo(b) < 0) ? a : b;
+        //}
 
         static void Main(string[] args)
         {
@@ -50,7 +66,6 @@ namespace _08_2_Generics_Intro
             Console.WriteLine($"Minimum von 7.5 und 7.3: {Min(7.5, 7.3)}");
             Console.WriteLine($"Minimum von Berta und Anton: {Min("Berta", "Anton")}");
             Console.WriteLine($"Minimum von zwei Person-Objekten: {Min(new Person("Meier","Anton"), new Person ("Meier","Berta"))}");
-
         }
     }
 }
diff --git a/08-UbgExceptions/08-UbgExceptions.csproj b/08-UbgExceptions/08-UbgExceptionsMo.csproj
similarity index 100%
rename from 08-UbgExceptions/08-UbgExceptions.csproj
rename to 08-UbgExceptions/08-UbgExceptionsMo.csproj
diff --git a/08-UbgExceptionsDi/08-UbgExceptionsDi.csproj b/08-UbgExceptionsDi/08-UbgExceptionsDi.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..85153c1280991ce4c053986e5b8b7856c297e1c9
--- /dev/null
+++ b/08-UbgExceptionsDi/08-UbgExceptionsDi.csproj
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_08_UbgExceptionsDi</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/08-UbgExceptionsDi/Program.cs b/08-UbgExceptionsDi/Program.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d90a372b8e8910da2802d93f6cfd65a07fcce3ed
--- /dev/null
+++ b/08-UbgExceptionsDi/Program.cs
@@ -0,0 +1,86 @@
+using System;
+using System.Runtime.Serialization;
+
+namespace _08_UbgExceptionsDi
+{
+    // Erstellen Sie eine Dummy-Methode Funktion1, die einen try-catch Block enthält und 
+    // eine zweite Dummy-Methode Funktion2, die wiederum einen try-catch Block besitzt und
+    // eine Methode Funktion3, die bei ihrem Aufruf einen throw mit einer selbst
+    // erstellten Fehlerklasse zur Folge hat.
+    // Main ruft Funktion1, Funktion1 ruft Funktion2 
+    // und Funktion2 ruft Funktion3. Setzen Sie hinter die catches jeweils ein finally
+    // Schreiben Sie entsprechende catch-Methoden, werfen Sie den Fehler weiter
+    // und stellen Sie sicher, dass das Programm unter keinen Umständen mit einer Exception beendet wird!
+
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try
+            {
+                Console.WriteLine("Main: Vor Aufruf der Funktion1");
+                Funktion1();
+                Console.WriteLine("Main: Nach Aufruf der Funktion1");
+            }
+            catch (Exception) { Console.WriteLine("Hier ist noch etwas schief gegangen"); }
+        }
+        static void Funktion1()
+        {
+            try
+            {
+                Console.WriteLine("Funktion 1 vor Aufruf von F2");
+                Funktion2();
+                Console.WriteLine("Funktion 1 nach Aufruf von F2");
+            }
+            catch (MeinFehler)
+            {
+                Console.WriteLine("Funktion 1 - catch MeinFehler");
+            }
+            finally
+            {
+                Console.WriteLine("Funktion 1 - finally");
+            }
+            Console.WriteLine("Funktion 1 - Ende");
+        }
+
+        static void Funktion2()
+        {
+            try
+            {
+                Console.WriteLine("Funktion 2 vor Aufruf von F3");
+                Funktion3();
+                Console.WriteLine("Funktion 2 nach Aufruf von F3");
+            }
+            catch (MeinFehler)
+            {
+                Console.WriteLine("Funktion 2 - catch MeinFehler");
+                throw;
+            }
+            finally
+            {
+                Console.WriteLine("Funktion 2 - finally");
+            }
+            Console.WriteLine("Funktion 2 - Ende");
+        }
+        static void Funktion3()
+        {
+            Console.WriteLine("Funktion 3 vor Aufruf von throw");
+            throw new MeinFehler("Mein Fehler aus Funktion 3",12);
+            //Console.WriteLine("Funktion 3 nach Aufruf von throw");
+        }
+        
+    }
+
+    
+    class MeinFehler : Exception
+    {
+        public int Fehlercode { get; private set; }
+
+        
+        public MeinFehler(string message, int Fehlercode) : base(message)
+        {
+            this.Fehlercode = Fehlercode;
+        }     
+       
+    }
+}
diff --git a/08-x HTMLEngine/Program.cs b/08-x HTMLEngine/Program.cs
index 3d1e1c8b9430a778c1e67b87e122f995464ede18..bfdb516f3d7e16e177e4c7a8bc813158341462bf 100644
--- a/08-x HTMLEngine/Program.cs	
+++ b/08-x HTMLEngine/Program.cs	
@@ -4,73 +4,73 @@ using static System.Console;
 
 class Program
 {
-  // Test program for HTML generation:
+    // Test program for HTML generation:
 
-  //static void Main()
-  //{
-  //  // Generate HTML document and store result in string:
+    static void Main()
+    {
+        //  // Generate HTML document and store result in string:
 
-  //  string html = Engine.Generate
-  //  (
-  //    new DocumentType(),
+        //  string html = Engine.Generate
+        //  (
+        //    new DocumentType(),
 
-  //    new Html
-  //    (
-  //      new Head
-  //      (
-  //        new Title("Generated HTML5 Example")
-  //      ),
+        //    new Html
+        //    (
+        //      new Head
+        //      (
+        //        new Title("Generated HTML5 Example")
+        //      ),
 
-  //      new Body
-  //      (
-  //        new Heading1("Welcome to the Technical University oAS Nuremberg"),
+        //      new Body
+        //      (
+        //        new Heading1("Welcome to the Technical University oAS Nuremberg"),
 
-  //        new Paragraph
-  //        (
-  //          "We have a distinct profile ", new Underline("and"), " strive to maintain ", new Underline("our"), " leading position among comparable universities."
+        //        new Paragraph
+        //        (
+        //          "We have a distinct profile ", new Underline("and"), " strive to maintain ", new Underline("our"), " leading position among comparable universities."
 
-  //        ),
+        //        ),
 
-  //        new Heading2("Study for your future"),
+        //        new Heading2("Study for your future"),
 
-  //        new Paragraph
-  //        (
-  //          12, " departments provide more than ", 40, " degree programs in ", new Bold("engineering, business, design and social sciences."),
-  //          new LineBreak(),
-  //          "If you have questions, please contact the ", new Italic("Student Counseling Service"), " or the ", new Italic("Student Office.")
-  //        )
-  //      )
-  //    )
-  //  );
+        //        new Paragraph
+        //        (
+        //          12, " departments provide more than ", 40, " degree programs in ", new Bold("engineering, business, design and social sciences."),
+        //          new LineBreak(),
+        //          "If you have questions, please contact the ", new Italic("Student Counseling Service"), " or the ", new Italic("Student Office.")
+        //        )
+        //      )
+        //    )
+        //  );
 
-  //  // Write resulting HTML string:
+        //  // Write resulting HTML string:
 
-  //  WriteLine("GENERATED HTML DOCUMENT:");
+        //  WriteLine("GENERATED HTML DOCUMENT:");
 
-  //  WriteLine(html);
+        //  WriteLine(html);
 
-  //  WriteLine("\nPlease press a key to continue...");
+        //  WriteLine("\nPlease press a key to continue...");
 
-  //  ReadKey(true);
+        //  ReadKey(true);
 
-  //  /*
-  //    // Write reformatted HTML string:
+        //  /*
+        //    // Write reformatted HTML string:
 
-  //    WriteLine("\nREFORMATTED HTML DOCUMENT:");
+        //    WriteLine("\nREFORMATTED HTML DOCUMENT:");
 
-  //    WriteLine("\n<" + new DocumentType().TagId + ">\n" + System.Xml.Linq.XElement.Parse(html.Replace("\n", "")));
+        //    WriteLine("\n<" + new DocumentType().TagId + ">\n" + System.Xml.Linq.XElement.Parse(html.Replace("\n", "")));
 
-  //    WriteLine("\nPlease press a key to continue...");
+        //    WriteLine("\nPlease press a key to continue...");
 
-  //    ReadKey(true);
-  //  */
+        //    ReadKey(true);
+        //  */
 
-  //  // Show (original) HTML string in default browser:
+        //  // Show (original) HTML string in default browser:
 
-  //  WriteLine("\nSTARTING BROWSER WITH GENERATED DOCUMENT...");
+        //  WriteLine("\nSTARTING BROWSER WITH GENERATED DOCUMENT...");
 
-  //  System.IO.File.WriteAllText("Example.html", html);
+        //  System.IO.File.WriteAllText("Example.html", html);
 
-  //  System.Diagnostics.Process.Start("Example.html");
-  //}
+        System.Diagnostics.Process.Start("Hallo.txt");
+  }
 }
\ No newline at end of file
diff --git "a/0\303\2378-3 GenericList/08-3 GenericList.csproj" "b/0\303\2378-3 GenericList/08-3 GenericList.csproj"
new file mode 100644
index 0000000000000000000000000000000000000000..38c17abbd5db0e456741a23102dd138402ae4caa
--- /dev/null
+++ "b/0\303\2378-3 GenericList/08-3 GenericList.csproj"	
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_0ß8_3_GenericList</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git "a/0\303\2378-3 GenericList/GenericList.cs" "b/0\303\2378-3 GenericList/GenericList.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..67471a7b1740785ea6ac48cb874eaa3af1db6190
--- /dev/null
+++ "b/0\303\2378-3 GenericList/GenericList.cs"	
@@ -0,0 +1,166 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+namespace _08_3_GenericList
+{
+
+    class Liste<T> where T:IComparable<T>
+    {
+        class LItem
+        {
+            public T data;
+            public LItem next = null, prev = null;
+            public LItem(T Data) { data = Data; }
+
+            public override string ToString()
+            => $"Name: {data}, prev: {(prev == null ? "null" : prev.data.ToString())}, next: {(next == null ? "null" : next.data.ToString())}";
+        }
+
+        LItem first = null, last = null;
+
+        public void AddEnd(T Data)
+        {
+            LItem newItem = new LItem(Data);
+            if (first == null)
+                first = last = newItem;
+            else  // Es gibt schon Listenelemente
+            {
+                last.next = newItem;
+                newItem.prev = last;
+                last = newItem;
+            }
+        }
+        public void AddFront(T Data)
+        {
+            LItem newItem = new LItem(Data);
+            if (first == null)
+                first = last = newItem;
+            else
+            {
+                newItem.next = first;
+                first.prev = newItem;
+                first = newItem;
+            }
+        }
+        public void AddSorted(T InsData)
+        {
+            // 1. Fall: Leere Liste oder Anfügen am Listenende
+            if (first == null || last.data.CompareTo(InsData) <= 0)
+                AddEnd(InsData);
+            else if (InsData.CompareTo(first.data) <= 0) 
+                // 2. Fall: Anfügen am Listenende
+                AddFront(InsData);
+            else
+            {
+                // Wir wissen: Das neue Element ist NICHT das erste und nicht das letzte Element
+                LItem newItem = new LItem(InsData);
+
+                LItem item = first;
+                while (item.next.data.CompareTo(InsData) < 0)
+                    item = item.next;
+                // bis hierher identisch zur einfach-verketteten Liste
+                newItem.next = item.next; // Vorwärtsverkettung vom neuen Element zur Restliste
+                newItem.prev = item;      // Rückwärtsverkettung vom neuen Elenent zum Listenanfangsstück
+                item.next.prev = newItem; // Rückwärtsverkettung vom nachfolgenden Listenelement
+                item.next = newItem;      // Vorwärtsverkettung zum neuen Element
+            }
+        }
+        public void DeleteFirst()
+        {
+            // Fall 1: Liste ist leer
+            // Fall 2: Liste besteht nur aus EINEM Element
+            // Fall 3: Liste hat mehr als ein Element
+
+            if (first == null)  // Fall 1
+                return;
+            if (first == last)  // Fall 2
+                first = last = null;
+            else
+            {
+                first = first.next;
+                first.prev = null;
+            }
+        }
+        public void DeleteLast()
+        {
+            // Fall 1: Liste ist leer
+            // Fall 2: Liste besteht nur aus EINEM Element
+            // Fall 3: Liste hat mehr als ein Element
+
+            if (first == null)  // Fall 1
+                return;
+            if (first == last)  // Fall 2
+                first = last = null;
+            else
+            {
+                last = last.prev;
+                last.next = null;
+            }
+        }
+        public void DeleteByName(T DelData)
+        {
+            // Fall 1: Liste ist leer
+            // Fall 2: Das gesuchte Element befindet sich am Anfang
+            // Fall 3: Das gesuchte Element befindet sich am Ende
+            // Fall 4: Das gesuchte Element befindet sich mittendrin
+
+            if (first == null)  // Fall 1
+                return;
+            if (first.data.CompareTo(DelData) == 0)   // Fall 2
+                DeleteFirst();
+            else if (last.data.CompareTo(DelData) == 0) // Fall 3
+                DeleteLast();
+            else
+            {
+                // Fall 4: Wir wissen:
+                // Das zu löschende Element befindet sich weder am Anfang noch am Ende
+                //    --> Es gibt ein Vorgänger- UND ein Nachfolger-Element
+                LItem item = first.next;
+                while (item.next != null && item.data.CompareTo(DelData) != 0)
+                    item = item.next;
+                if (item.next != null) 
+                {
+                    // d.h. Element wurde gefunden und item zeigt auf dieses Element
+                    //                                  20 - 21 - 22
+                    item.prev.next = item.next;      // 20 -> 22 Nachfolger
+                    item.next.prev = item.prev;      // 22 -> 20 Vorgänger
+                }
+            }
+        }
+        public void  Print()
+        {
+            for (LItem item = first;item!=null;item=item.next)
+            {
+                Console.WriteLine(item.data);
+            }
+            Console.WriteLine("-------------------");
+        }
+        public void PrintReverse()
+        {
+            for (LItem item = last; item != null; item = item.prev)
+            {
+                Console.WriteLine(item.data);
+            }
+            Console.WriteLine("-------------------");
+        }
+        public bool Exist(T findData)
+        {
+            for (LItem item = first; item != null; item = item.next)
+            {
+                if (item.data.CompareTo(findData)==0)
+                    return true;
+            }
+            return false;
+        }
+        public IEnumerator<T> Reverse()
+        {
+            for (LItem item = last; item != null; item = item.prev)
+            yield return item.data;
+        }
+        public IEnumerator<T> GetEnumerator()
+        {
+            for (LItem item = first; item != null; item = item.next)
+                yield return item.data;
+        }
+    }
+}
diff --git "a/0\303\2378-3 GenericList/Kfz.cs" "b/0\303\2378-3 GenericList/Kfz.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..32edaedccedbee843fc790cf88da389230dc2208
--- /dev/null
+++ "b/0\303\2378-3 GenericList/Kfz.cs"	
@@ -0,0 +1,112 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace _08_3_GenericList
+{
+    abstract class Kfz : IComparable<Kfz>     // KfzCoolStyle
+        // Ist die Basisklasse von mehreren kfz-Ausprägungen
+    {
+        // public string kennzeichen;  -- Nicht public machen!
+
+        protected   string kennzeichen;
+        // protected ~ öffentlich für abgeleitete Klassen
+        //           ~ private für alle anderen
+
+        public int CompareTo(Kfz other)
+            => kennzeichen.CompareTo(other.kennzeichen);
+
+        public Kfz(string Kennzeichen) { kennzeichen = Kennzeichen; }
+        // Initialisierung bzw. Parameterübernahme unbedingt über
+        // den Konstruktor realisieren!!!
+
+        // public virtual double Steuern() { return -1; }
+        // virtual ~ Diese Methode kann/darf in einer 
+        // von Kfz abgeleiteten Klasse überschrieben werden
+        // (Dies muss aber nicht gemacht werden!)
+
+        public abstract double Steuern();
+        // abstract ~ Diese Methode MUSS in jeder
+        // von Kfz abgeleiteten Klasse überschrieben werden
+
+        // Abstrakte Klasse --> von dieser Klasse können keine Objekte angelegt werden
+    }
+
+    class Pkw : Kfz   // Pkw ist-ein Kfz
+        // Pkw ist eine Spezialisierung eines Kfz
+        // Pkw ist ein Kfz mit Zusatzeigenschaften
+        // Pkw erbt von Kfz
+        // Pkw ist von Kfz abgeleitet 
+    {
+        int hubraum=1599;
+        int co2;
+        public Pkw(int Hubraum, int CO2, string Kennzeichen)
+            : base(Kennzeichen)
+        {
+            hubraum = Hubraum;
+            co2 = CO2;
+        }
+        public override double Steuern()
+        {
+            return (hubraum + 99) / 100 * 2;
+        }
+        public double CO2Wert() => co2;
+
+        public override string ToString()
+        => $"Pkw: {kennzeichen}: {hubraum}";
+    }
+
+    class Motorrad : Kfz
+    {
+        public Motorrad(string Kennzeichen, int Hubraum)
+            : base (Kennzeichen)
+        { hubraum = Hubraum; }
+        int hubraum = 250;
+        public override double Steuern()
+        {
+            return (hubraum + 24) / 25 * 1.84;
+        }
+        public override string ToString()
+        => $"Motorrad: {kennzeichen}: {hubraum}";
+    }
+
+    class LKW : Kfz
+    {
+        int gewicht;
+        int hubraum;
+        public LKW(string Kennzeichen, int Gewicht, int Hubraum) 
+            : base(Kennzeichen)
+            // Erst wird der Basisklassenkonstruktor aufgerufen
+            // DANN die eigene Initialiserung
+        {
+            // kennzeichen = Kennzeichen;
+            // Kein explizites Initialisieren von Basisklassen-Variablen!!!
+            gewicht = Gewicht;
+            hubraum = Hubraum;
+        }
+        public override double Steuern()
+        {
+            return 556;
+        }
+        public override string ToString()
+        => $"LKW: {kennzeichen}: {hubraum}";
+    }
+    class Tieflader : LKW
+    {
+        int zuladung;
+        public Tieflader(string Kennzeichen, int Gewicht, int Hubraum, int Zuladung)
+            : base(Kennzeichen,Gewicht,Hubraum)
+        { zuladung = Zuladung; }
+        //public override double Steuern() => 999;
+        // Wenn in der abgeleiteten Klasse eine Überschreibung der 
+        // Basisklassenmethodendefinition erfolgt, wird die Definition
+        // aus der Basisklasse verwendet
+
+        public override double Steuern()
+        {
+            return base.Steuern();
+        }
+        public override string ToString()
+        => $"Tieflader: {kennzeichen}: Zuladung: {zuladung}";
+    }
+}
diff --git "a/0\303\2378-3 GenericList/Person.cs" "b/0\303\2378-3 GenericList/Person.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..a7abf40ca2ecd7cf924d3dcb0b33876b85e49f33
--- /dev/null
+++ "b/0\303\2378-3 GenericList/Person.cs"	
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace _08_3_GenericList
+{
+    class Person : IComparable<Person>
+    {
+        string name, vorname;
+        public Person(string Name, string Vorname) { name = Name; vorname = Vorname; }
+
+        public int CompareTo(Person other)
+        {
+            int comp = name.CompareTo(other.name);
+            return (comp != 0) ? comp : vorname.CompareTo(other.vorname);
+            //string vollname1 = name + vorname;                  // "MeierAnton"
+            //string vollname2 = other.name + other.vorname;      // "MeierBerta"
+            //return vollname1.CompareTo(vollname2);              // "MeierAnton".CompareTo("MeierBerta")
+        }
+        public override string ToString() => $"{vorname} {name}";
+    }
+}
diff --git "a/0\303\2378-3 GenericList/Program.cs" "b/0\303\2378-3 GenericList/Program.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..42073352e4523a314cfed613f694f106c77e3828
--- /dev/null
+++ "b/0\303\2378-3 GenericList/Program.cs"	
@@ -0,0 +1,47 @@
+using System;
+
+namespace _08_3_GenericList
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            Liste<int> il = new Liste<int>();
+            il.AddSorted(10);
+            il.AddSorted(90);
+            il.AddSorted(60);
+            il.AddSorted(30);
+            il.AddSorted(80);
+            il.AddSorted(20);
+            il.Print();
+
+            Liste<string> sl = new Liste<string>();
+            sl.AddSorted("Berta");
+            sl.AddSorted("Dieter");
+            sl.AddSorted("Emil");
+            sl.AddSorted("Claudia");
+            sl.AddSorted("Anton");
+            sl.Print();
+
+            Liste<Person> pl = new Liste<Person>();
+            pl.AddSorted(new Person("Meier", "Berta"));
+            pl.AddSorted(new Person("Meier", "Anton"));
+            pl.AddSorted(new Person("Huber", "Claudia"));
+            pl.Print();
+
+            //Liste<Liste<int>> ll = new Liste<Liste<int>>();
+            //ll.AddSorted(il);
+
+            Liste<Kfz> kl = new Liste<Kfz>();
+            kl.AddSorted(new Pkw(1599, 100, "N-AB 123"));
+            kl.AddSorted(new Motorrad("ER-X 534", 250));
+            kl.AddSorted(new LKW("FÜ-MN 543", 20000, 5000));
+            kl.Print();
+
+            foreach (var item in kl)
+            {
+                Console.WriteLine(item);
+            }
+        }
+    }
+}
diff --git a/Prog2WienkopSS2021.sln b/Prog2WienkopSS2021.sln
index 0bd2391bf6c14a396f60c21b29765eedbd8e4f95..3927216c818c65ba7705ad4be6165b112eb0e419 100644
--- a/Prog2WienkopSS2021.sln
+++ b/Prog2WienkopSS2021.sln
@@ -53,7 +53,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "07-Ubg Warenwirtschaft-Di",
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "07-2 Intro Exceptions", "07-2 Intro Exceptions\07-2 Intro Exceptions.csproj", "{7E8671A1-00B5-4E86-AB29-67726F407BA1}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "08-UbgExceptions", "08-UbgExceptions\08-UbgExceptions.csproj", "{6E9854D3-DF28-467E-A744-EAE2936B981E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "08-UbgExceptionsMo", "08-UbgExceptions\08-UbgExceptionsMo.csproj", "{6E9854D3-DF28-467E-A744-EAE2936B981E}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "08-1 Exceptions", "08-1 Exceptions\08-1 Exceptions.csproj", "{F766FA48-BE15-429D-A4B3-B4CD13912C88}"
 EndProject
@@ -61,6 +61,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "08-2 Generics Intro", "08-2
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "08x HTML", "08-x HTMLEngine\08x HTML.csproj", "{BCED82D0-F95F-4D82-9019-2C63D6B3CC8A}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "08-UbgExceptionsDi", "08-UbgExceptionsDi\08-UbgExceptionsDi.csproj", "{57F7EAD8-D0C8-4080-B939-D2B4D0A7CC56}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "08-3 GenericList", "0ß8-3 GenericList\08-3 GenericList.csproj", "{05E06BC5-768E-44D2-82C3-B473AEEDBD6B}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -183,6 +187,14 @@ Global
 		{BCED82D0-F95F-4D82-9019-2C63D6B3CC8A}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{BCED82D0-F95F-4D82-9019-2C63D6B3CC8A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{BCED82D0-F95F-4D82-9019-2C63D6B3CC8A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{57F7EAD8-D0C8-4080-B939-D2B4D0A7CC56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{57F7EAD8-D0C8-4080-B939-D2B4D0A7CC56}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{57F7EAD8-D0C8-4080-B939-D2B4D0A7CC56}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{57F7EAD8-D0C8-4080-B939-D2B4D0A7CC56}.Release|Any CPU.Build.0 = Release|Any CPU
+		{05E06BC5-768E-44D2-82C3-B473AEEDBD6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{05E06BC5-768E-44D2-82C3-B473AEEDBD6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{05E06BC5-768E-44D2-82C3-B473AEEDBD6B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{05E06BC5-768E-44D2-82C3-B473AEEDBD6B}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE