diff --git a/src/Regelwerk.java b/src/Regelwerk.java
index a490c5babc19a46cd7909c343e5e9d77dc2d11b7..02f6802f6184a8ad66157da70cfe26cbdd764498 100644
--- a/src/Regelwerk.java
+++ b/src/Regelwerk.java
@@ -16,10 +16,10 @@ public class Regelwerk {
         reihenfolge.add(3, 3);
     }
 
-    public UnoKarte ersteKarte(UnoDeck hand, int zug) {
+    public UnoKarte ersteKarte(UnoDeck hand, int zug, int anzahl) {
         if (zug == 1) {
             Random rand = new Random();
-            int n = rand.nextInt(53);
+            int n = rand.nextInt(anzahl);
             UnoKarte aktuellekarte = hand.get(n);
             System.out.println("Die Aktuelle Karte:");
             System.out.println(aktuellekarte);
@@ -45,6 +45,7 @@ public class Regelwerk {
 
     public boolean karteLegbar(UnoKarte aktuellekarte, UnoKarte neueKarte, String PlayerName[], UnoDeck deck, SpielerHand spielerHand) {
         if (color.size() == 2) {
+            System.out.println("Wunchfarbe: " + color.get(1));
             if ((color.get(1) == neueKarte.getFarbe()) || (color.get(0) == neueKarte.getFarbe())) {
                 color.remove(1);
                 return Lege(aktuellekarte, neueKarte, PlayerName, deck, spielerHand);
@@ -57,9 +58,9 @@ public class Regelwerk {
     }
 
     public boolean Lege(UnoKarte aktuellekarte, UnoKarte neueKarte,String PlayerName[], UnoDeck deck, SpielerHand spielerHand){
-        if ((aktuellekarte.getFarbe() == neueKarte.getFarbe()) || (Farbe.Wild == neueKarte.getFarbe()) || (Farbe.Wild != neueKarte.getFarbe())) {
+        if ((aktuellekarte.getFarbe() == neueKarte.getFarbe()) || (Farbe.Wild == neueKarte.getFarbe()) || ((aktuellekarte.getFarbe() == Farbe.Wild) && (Farbe.Wild != neueKarte.getFarbe()))) {
             if (neueKarte.getWert() == Wert.Zwei_Ziehen) {
-                zweiZiehen(PlayerName, deck, 2, spielerHand);
+                Ziehen(PlayerName, deck, 2, spielerHand);
             } else if (neueKarte.getWert() == Wert.Aussetzen) {
                 aussetzen();
             } else if (neueKarte.getWert() == Wert.Richtungswechsel) {
@@ -68,12 +69,12 @@ public class Regelwerk {
                 wunschFarbe();
             }else if (neueKarte.getWert() == Wert.Draw_Four) {
                 wunschFarbe();
-                zweiZiehen(PlayerName, deck, 4, spielerHand);
+                Ziehen(PlayerName, deck, 4, spielerHand);
             }
             return true;
-        } else if ((aktuellekarte.getWert() == neueKarte.getWert()) || (Farbe.Wild == neueKarte.getFarbe()) || (Farbe.Wild != neueKarte.getFarbe())) {
+        } else if ((aktuellekarte.getWert() == neueKarte.getWert()) || (Farbe.Wild == neueKarte.getFarbe()) || ((aktuellekarte.getFarbe() == Farbe.Wild) && (Farbe.Wild != neueKarte.getFarbe()))) {
             if (neueKarte.getWert() == Wert.Zwei_Ziehen) {
-                zweiZiehen(PlayerName, deck, 2, spielerHand);
+                Ziehen(PlayerName, deck, 2, spielerHand);
             } else if (neueKarte.getWert() == Wert.Aussetzen) {
                 aussetzen();
             } else if (neueKarte.getWert() == Wert.Richtungswechsel) {
@@ -82,13 +83,13 @@ public class Regelwerk {
                 wunschFarbe();
             }else if (neueKarte.getWert() == Wert.Draw_Four) {
                 wunschFarbe();
-                zweiZiehen(PlayerName, deck, 4, spielerHand);
+                Ziehen(PlayerName, deck, 4, spielerHand);
             }
             return true;
         }
         return false;
     }
-    public void zweiZiehen(String PlayerName[], UnoDeck deck, int anzahl,SpielerHand spielerHand){
+    public void Ziehen(String PlayerName[], UnoDeck deck, int anzahl,SpielerHand spielerHand){
         int spieler = reihenfolge.get(0);
         spielerHand.befuelleSpieleHand(spieler, deck, anzahl);
     }
@@ -114,7 +115,7 @@ public class Regelwerk {
         reihenfolge.add(zwischen);
     }
     public void wunschFarbe(){
-        System.out.println("Welche Farbe möchteswt du?(Gruen, Blau, Gelb, Rot");
+        System.out.println("Welche Farbe möchteswt du?(Gruen, Blau, Gelb, Rot)");
         switch (scanner.nextLine().toLowerCase()){
             case "gruen":
                 color.add(Farbe.Gruen);
diff --git a/src/SpielerHand.java b/src/SpielerHand.java
index d0bf16a2eaa4fef52f873f311a23ced6072aa6b6..574eea8fba954462a9ce4411f5fb83dc3d7396a3 100644
--- a/src/SpielerHand.java
+++ b/src/SpielerHand.java
@@ -14,16 +14,18 @@ public class SpielerHand{
         }
     }
 
-    public void fuegeKarteHinzu(int spielerIndex, UnoDeck hand, int kartenIndex) {
-        UnoKarte karte = hand.get(kartenIndex);
+    public void fuegeKarteHinzu(int spielerIndex, UnoDeck deck, int kartenIndex) {
+        UnoKarte karte = deck.get(kartenIndex);
         spielerHaende.get(spielerIndex).add(karte);
+        deck.hand.remove(kartenIndex);
         //Diese Fuktion fügt karten in die Hand des jeweiligen spielers
     }
 
-    public void entferneKarteHand(int spielerIndex, int kartenIdex, UnoDeck hand, int zug){
+    public void entferneKarteHand(int spielerIndex, int kartenIdex, UnoDeck deck, int zug){
         Regelwerk regel = new Regelwerk();
         kartenIdex = kartenIdex-1;
         regel.aktuelleKarte(spielerHaende.get(spielerIndex).get(kartenIdex));
+        deck.hand.add(spielerHaende.get(spielerIndex).get(kartenIdex));
         spielerHaende.get(spielerIndex).remove(kartenIdex);
         //Diese Methode entfernt eine Karte aus der Hand des Spielers
     }
@@ -39,13 +41,18 @@ public class SpielerHand{
         System.out.println();
         //Diese Methode zeigt die Hand des Spielers
     }
-    public void befuelleSpieleHand(int spielerIndex, UnoDeck hand, int anzahl){
+    public void befuelleSpieleHand(int spielerIndex, UnoDeck deck, int anzahl){
         Random rand = new Random();
         for (int i = 0; i < anzahl; i++) {
-            int n = rand.nextInt(53);
-            fuegeKarteHinzu(spielerIndex, hand, n);
+            int n = rand.nextInt(deck.hand.size());
+            fuegeKarteHinzu(spielerIndex, deck, n);
         }
         //Diese Methode gibt die Anzhal der Karten die der Spieler bekommen soll und wählt die zufähligge karte aus
     }
+    public void ranking(){
+        for (int i = 0; i < spielerHaende.size(); i++){
+            System.out.println(spielerNamen[i] + " Menge an Karten: " +spielerHaende.get(i).size());
+        }
+    }
 }
 
diff --git a/src/UNO.java b/src/UNO.java
index b9088632890c2f67e0b0760c0004bd0c091cb4c0..1e4a9333a2685d4eb2e206a90d4d139ae90bba40 100644
--- a/src/UNO.java
+++ b/src/UNO.java
@@ -1,4 +1,3 @@
-
 import java.util.Scanner;
 
 public class UNO {
@@ -41,7 +40,7 @@ public class UNO {
             }
 
             SpielerHand spielerHand = new SpielerHand(PlayerName[0], PlayerName[1], PlayerName[2], PlayerName[3]);
-            spielerHand.befuelleSpieleHand(0,deck,30);
+            spielerHand.befuelleSpieleHand(0,deck,7);
             spielerHand.befuelleSpieleHand(1,deck,7);
             spielerHand.befuelleSpieleHand(2,deck,7);
             spielerHand.befuelleSpieleHand(3,deck,7);
@@ -52,9 +51,9 @@ public class UNO {
             //GameLoop:
             boolean win = false;
             int zug = 1;
-            UnoKarte aktuelleKarte = regel.ersteKarte(deck,zug);
+            UnoKarte aktuelleKarte = regel.ersteKarte(deck,zug,deck.hand.size());
             int legeKarte;
-            boolean geht = false;
+            boolean geht = false;   //Das boolean hilft bei der kontrolle ob die Karte legbar ist!!!!
             while (!win) {
                 System.out.println("Zum Zug Starten, Start schreiben");
                 if("start" .equals(scanner.nextLine().toLowerCase())) {
@@ -124,16 +123,12 @@ public class UNO {
                         }
                     }
                     if(spielerHand.spielerHaende.get(spieler).size() == 0){
+                        spielerHand.ranking();
                         win = true;
                     }
                 }
             }
-
-
-
-            //Game Loop
-
-
         }
     }
 }
+
diff --git a/src/UnoDeck.java b/src/UnoDeck.java
index c1ae3a9876b2e36f81016883554734a230866ec7..e0eedebb63e9110593a392142abfbdc6e0bad5c3 100644
--- a/src/UnoDeck.java
+++ b/src/UnoDeck.java
@@ -22,7 +22,7 @@ public class UnoDeck {
         //Diese Methode mischt die UnoHand
     }
 
-    public void zeigeHand() {
+    public void zeigeDeck() {
         for (UnoKarte karte : hand) {
             System.out.println(karte);
             //Diese Methode gibt das Array der UnoHand aus
@@ -65,14 +65,20 @@ public class UnoDeck {
             }
             for (int zahl = 0; zahl <= 9; zahl++) {
                 fuegeKarteHinzu(new UnoKarte(farbe, wertVonZahl(zahl)));
+                if (zahl != 0) {
+                    fuegeKarteHinzu(new UnoKarte(farbe, wertVonZahl(zahl)));
+                }
+            }
+            for (int i = 0; i < 2; i++) {
+                fuegeKarteHinzu(new UnoKarte(farbe, Wert.Richtungswechsel));
+                fuegeKarteHinzu(new UnoKarte(farbe, Wert.Aussetzen));
+                fuegeKarteHinzu(new UnoKarte(farbe, Wert.Zwei_Ziehen));
             }
-            fuegeKarteHinzu(new UnoKarte(farbe, Wert.Richtungswechsel));
-            fuegeKarteHinzu(new UnoKarte(farbe, Wert.Aussetzen));
-            fuegeKarteHinzu(new UnoKarte(farbe, Wert.Zwei_Ziehen));
         }
-        fuegeKarteHinzu(new UnoKarte(Farbe.Wild, Wert.Multicolor));
-        fuegeKarteHinzu(new UnoKarte(Farbe.Wild, Wert.Draw_Four));
-
+        for (int i = 0; i < 4; i++) {
+            fuegeKarteHinzu(new UnoKarte(Farbe.Wild, Wert.Multicolor));
+            fuegeKarteHinzu(new UnoKarte(Farbe.Wild, Wert.Draw_Four));
+        }
         //Diese Methode verbindet die Farben und die Zahlen der jeweiligen enums
     }
 }