diff --git a/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java b/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java
index fb6aeb02c32fbfe403dc7f84273dbc7827b4772f..81026c1fb961451aa921de4acdff401e3c656804 100644
--- a/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java
+++ b/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java
@@ -80,16 +80,16 @@ public class Client {
                 info.close();
                 clientSocket.close();
                 break;
-            } else if (ausgabe.equals("PONG")) {
-                System.out.println(ausgabe);
-            } else if (ausgabe.substring(0, 4).equals("ECHO")) {
+            } else if (ausgabe.length()>3 && ausgabe.substring(0, 4).equals("ECHO")) {
                 System.out.println(ausgabe.substring(5));
-            } else if (ausgabe.substring(0, 4).equals("TIME")) {
+            } else if (ausgabe.length()>3 && ausgabe.substring(0, 4).equals("TIME")) {
                 System.out.println(ausgabe.substring(5));
-            } else if (ausgabe.substring(0, 4).equals("DATE")) {
+            } else if (ausgabe.length()>3 && ausgabe.substring(0, 4).equals("DATE")) {
                 System.out.println(ausgabe.substring(5));
-            } else if (ausgabe.substring(0, 5).equals("ERROR")) {
+            } else if (ausgabe.length()>4 && ausgabe.substring(0, 5).equals("ERROR")) {
                 System.out.println(ausgabe.substring(6));
+            } else {    // Bei Ping, Verlauf etc:
+                System.out.println(ausgabe);
             }
         }
     }
diff --git a/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java b/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java
index d2a7149acaf25eb3967558c91613d029d75cd6bf..393e01bb6c6ef7ecec8b3a3ecb534d7e3234bce8 100644
--- a/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java
+++ b/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java
@@ -38,17 +38,18 @@ public class Server{
         Socket serverSocket = null;
         BufferedWriter zumClient;
         BufferedReader vomClient;
-        LinkedList<String> verlauf;
+        ArrayList<String> verlauf;
         try {
             ServerSocket tempSocket = new ServerSocket(2022);   // Port wird festgelegt
             System.out.println("Warte auf Client...");
             serverSocket = tempSocket.accept(); // Sobald cleint sich verbindet, geht es weiter
             System.out.println("Client hat sich verbunden!");
+            tempSocket.close();
         } catch (Exception e) {
             System.err.println("Probleme bei Verbidnungsherstellung zum CLient");
             return;
         }
-        verlauf = new LinkedList<String>();
+        verlauf = new ArrayList<String>();
         try{
             zumClient = new BufferedWriter(new OutputStreamWriter(serverSocket.getOutputStream()));
             vomClient = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
@@ -60,29 +61,96 @@ public class Server{
         // Befehle Werden aufgenommen
         System.out.println("Erwarte Eingabe...");
         boolean abbruch = false;
+        String eingabe = "";
         while(!abbruch) {
-            String eingabe = "";
             try{
                 eingabe = vomClient.readLine();
                 System.out.println("Eingabe vom Client: "+eingabe);
+                verlauf.add(eingabe);   // Jede Anfrage wird sich gemerkt
             } catch (IOException e) {
                 System.err.println("Probleme beim Lesen der Client-Eingabe");
                 abbruch = true;
+                try {
+                    zumClient.write(" 500 INTERNAL SERVER ERROR\n");
+                    zumClient.flush();
+                } catch (IOException f) {
+                    System.err.println("Zusätzlicher Fehler beim Fehler Report an Client");
+                }
             }
-            try{    // Jede mögliche Eingabe wird überprüft
+            // Jede mögliche Eingabe wird überprüft
+            try{
                 if(eingabe.equalsIgnoreCase("exit")){
                     abbruch = true;
                     runs = false;   // Server runned nicht mehr, zurück zum Konstruktor
                     zumClient.write("EXIT\n");
                     zumClient.flush();
                     System.out.println("Der Server wird neugestartet");
+                    serverSocket.close();
                 }
-                if(eingabe.equalsIgnoreCase("ping")) {
-                    zumClient.write("PONG");
+                else if(eingabe.equalsIgnoreCase("ping")) {
+                    zumClient.write("PONG\n");
                     zumClient.flush();
                 }
+                else if(eingabe.equalsIgnoreCase("current time")) {
+                    zumClient.write("TIME "+new SimpleDateFormat("hh:mm:ss").format(new Date())+"\n");
+                    zumClient.flush();
+                }
+                else if(eingabe.equalsIgnoreCase("current date")) {
+                    zumClient.write("DATE "+new SimpleDateFormat("dd.MM.yyyy").format(new Date())+"\n");
+                    zumClient.flush();
+                }
+                else if(eingabe.equalsIgnoreCase("history")) {
+                    String ausg = "Gesamter Verlauf: ";
+                    for(int i=0; i<verlauf.size()-1; i++) {
+                        ausg = ausg.concat(verlauf.get(i)+", ");
+                    }
+                    ausg = ausg.concat(verlauf.get(verlauf.size()-1)+"\n");
+                    zumClient.write(ausg);
+                    zumClient.flush();
+                }
+                else if(eingabe.length()>=9 && eingabe.substring(0,7).equalsIgnoreCase("history")) {
+                    int zahl = -1;
+                    try{
+                        zahl = Integer.parseInt(eingabe.substring(8,eingabe.length()));
+                    } catch (NumberFormatException e) {
+                        System.out.println("Der Client muss Zahlen hinter history schreiben smh");
+                        zumClient.write("ERROR 400 BAD REQUEST\n"); // Bei falschem Aufruf
+                    }
+                    if (zahl>=verlauf.size()) {
+                        String ausg = "Gesamter Verlauf: ";
+                        for(int i=0; i<verlauf.size()-1; i++) {
+                            ausg = ausg.concat(verlauf.get(i)+", ");
+                        }
+                        ausg = ausg.concat(verlauf.get(verlauf.size()-1)+"\n");
+                        zumClient.write(ausg);
+                    }
+                    else {
+                        if(zahl>0) {
+                            String ausg = "Verlauf der letzten "+zahl+" Anfragen: ";
+                            for(int i=verlauf.size()-zahl; i<verlauf.size(); i++) {
+                                ausg = ausg.concat(verlauf.get(i)+", ");
+                            }
+                            zumClient.write(ausg);
+                        }
+                        else {
+                            zumClient.write("Super witzig");
+                        }
+                    }
+                    zumClient.flush();
+                }
+                else {
+                    zumClient.write("ERROR 400 BAD REQUEST\n"); // Bei falschem Aufruf
+                    zumClient.flush();
+                }
+
             } catch (IOException | NullPointerException e) {
                 System.err.println("Fehler beim schreiben zum Client");
+                try {
+                    zumClient.write("ERROR  500 INTERNAL SERVER ERROR\n");
+                    zumClient.flush();
+                } catch (IOException f) {
+                    System.err.println("Zusätzlicher Fehler beim Fehler Report an Client");
+                }
                 abbruch = true;
                 runs = false;
             }