diff --git a/class/application/Controller$1.class b/class/application/Controller$1.class
index 350fe727e566c934f93bac48affcde463a030c7e..aed693d061b56373910fef0093842d3cb06818ae 100644
Binary files a/class/application/Controller$1.class and b/class/application/Controller$1.class differ
diff --git a/class/application/Controller$2.class b/class/application/Controller$2.class
index 5727fb668a20b53aef5ef45dc18ff6ff3d9ac2d1..12288a7b9eef46237ca681dd56214c213533d04e 100644
Binary files a/class/application/Controller$2.class and b/class/application/Controller$2.class differ
diff --git a/class/application/Controller$3.class b/class/application/Controller$3.class
index d19dbde1a0aa0606ccb2fb617fd2a402c4bdafcc..674254581b6d0aeb10231e38784e9de13bf2f86d 100644
Binary files a/class/application/Controller$3.class and b/class/application/Controller$3.class differ
diff --git a/class/application/Controller$4.class b/class/application/Controller$4.class
index 3d66659312c026d6b7916b1c15f8f990063f1d32..0e30c9ad4c45e9cd5c37fe6434f78c6d976ff278 100644
Binary files a/class/application/Controller$4.class and b/class/application/Controller$4.class differ
diff --git a/class/application/Controller$5.class b/class/application/Controller$5.class
index 083266af95ecf40619ef7678a0a7257d9be6ff10..26f7432484944012f45cea7dd64a0eb14635bc7c 100644
Binary files a/class/application/Controller$5.class and b/class/application/Controller$5.class differ
diff --git a/class/application/Controller$6.class b/class/application/Controller$6.class
index e6748a202ba9d1592f4b298c1b67c8858e96e976..97f1ac5053f5c71bd2e7e2dcee605151db956933 100644
Binary files a/class/application/Controller$6.class and b/class/application/Controller$6.class differ
diff --git a/class/application/Controller$7.class b/class/application/Controller$7.class
index 5fbdceeb78ca94d0af3f56c1bfd188627dbbbf6a..d3e23cf54407d61444c35300d79a4a8fbc069b41 100644
Binary files a/class/application/Controller$7.class and b/class/application/Controller$7.class differ
diff --git a/class/application/Controller$8.class b/class/application/Controller$8.class
index b372bab21638d817f67e8caf0fc1f510c5d2c8ed..140a01e8ff74ecc69b328e2a0066f2fd0b120444 100644
Binary files a/class/application/Controller$8.class and b/class/application/Controller$8.class differ
diff --git a/class/application/Controller$9.class b/class/application/Controller$9.class
index 27ffd23f08d7441495e2ec86494f8cec1e7a2316..3b2a5cbd888c58f847cf613cfe5ff78fad649edf 100644
Binary files a/class/application/Controller$9.class and b/class/application/Controller$9.class differ
diff --git a/class/application/Controller.class b/class/application/Controller.class
index e2e2a5dd5aa6d1c4947479348e68d7fb7eee960f..d8117d6ec6fca5287b61b44ff07823a065014574 100644
Binary files a/class/application/Controller.class and b/class/application/Controller.class differ
diff --git a/class/application/MainGUI.fxml b/class/application/MainGUI.fxml
index 03681dfcc0769858ea129bf7ec76c0b6f2952a09..56a58bd158ee2d27f6e2e83157fc273cef44d7c9 100644
--- a/class/application/MainGUI.fxml
+++ b/class/application/MainGUI.fxml
@@ -78,6 +78,7 @@
         <menus>
           <Menu fx:id="menu1" mnemonicParsing="false" text="Menü">
             <items>
+                  <MenuItem fx:id="menuItemNewGame" mnemonicParsing="false" onAction="#startGame" text="Neues Spiel" />
                   <MenuItem fx:id="menuItem2" mnemonicParsing="false" onAction="#openSettings" text="Einstellungen" />
                   <MenuItem fx:id="menuItem1" mnemonicParsing="false" onAction="#buttonAchievements" text="Achievements" />
               <MenuItem fx:id="menuItem3" mnemonicParsing="false" onAction="#about" text="Über" />
diff --git a/class/logic/Game.class b/class/logic/Game.class
index 8991b1a428eac2e6200d00d72e65dd6ad26dc7cd..5a0566118e9f6e4e7d8e84f1a82f03597e1ff95c 100644
Binary files a/class/logic/Game.class and b/class/logic/Game.class differ
diff --git a/src/application/Controller.java b/src/application/Controller.java
index faf3da315d610e2b8b542d6599a0c51258bc26ec..52c0a8a288768ce6e427f427b5ecc0ff6e69a89c 100644
--- a/src/application/Controller.java
+++ b/src/application/Controller.java
@@ -70,6 +70,7 @@ public class Controller
 	@FXML private MenuItem menuItem1;
 	@FXML private MenuItem menuItem2;
 	@FXML private MenuItem menuItem3;
+	@FXML private MenuItem menuItemNewGame;
 	@FXML private ImageView imageViewLogo;
 	@FXML private Label labelLogo;
 	@FXML private Button buttonNewGame;
@@ -179,12 +180,18 @@ public class Controller
 
 	public void startGame()
 	{
+		if(game != null)
+		{
+			game.stop();	
+		}
+		
 		clearAll();
 		menuItem2.setDisable(true);
 		
 		drawCounter = 0;
 		playerHasDrawn = false;
 		labelCurrentPlayer.setVisible(true);
+		labelCurrentPlayer.setText("");
 		
 		iconDeck.setImage(createEmptyBackCard());
 		iconDeck.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>()
@@ -605,58 +612,61 @@ public class Controller
 	
 	public void moveCardFromDeckToPlayer(ArrayList<Card> cards)
 	{
-		Point2D deckPosition = iconDeck.localToScene(Point2D.ZERO);
-		
-		ImageView view = createCard(cards.get(drawCounter), true);
-		view.setId("drawAnimation");
-		view.setX(deckPosition.getX());
-		view.setY(deckPosition.getY());
-		mainPane.getChildren().add(view);	
-		
-		TranslateTransition translateTransition = new TranslateTransition();
-		translateTransition.setDuration(Duration.millis(500));
-		translateTransition.setNode(view);
-		translateTransition.setCycleCount(1);
-		translateTransition.setAutoReverse(false);
-		translateTransition.setFromX(0);
-		translateTransition.setFromY(0);
-		translateTransition.setToX( - (view.getX() - getPositionOfRightCard(null)));
-		translateTransition.setToY( - (view.getY() - PLAYER_STARTING_POINT.getY()));
-		translateTransition.setOnFinished(new EventHandler<ActionEvent>()
-		{
-			@Override
-			public void handle(ActionEvent event)
+		if(game.isRunning())
+		{	
+			Point2D deckPosition = iconDeck.localToScene(Point2D.ZERO);
+			
+			ImageView view = createCard(cards.get(drawCounter), true);
+			view.setId("drawAnimation");
+			view.setX(deckPosition.getX());
+			view.setY(deckPosition.getY());
+			mainPane.getChildren().add(view);	
+			
+			TranslateTransition translateTransition = new TranslateTransition();
+			translateTransition.setDuration(Duration.millis(500));
+			translateTransition.setNode(view);
+			translateTransition.setCycleCount(1);
+			translateTransition.setAutoReverse(false);
+			translateTransition.setFromX(0);
+			translateTransition.setFromY(0);
+			translateTransition.setToX( - (view.getX() - getPositionOfRightCard(null)));
+			translateTransition.setToY( - (view.getY() - PLAYER_STARTING_POINT.getY()));
+			translateTransition.setOnFinished(new EventHandler<ActionEvent>()
 			{
-				ObservableList<Node> nodes = mainPane.getChildren();
-				Iterator<Node> iterator = nodes.iterator();
-				while(iterator.hasNext())
+				@Override
+				public void handle(ActionEvent event)
 				{
-					if(iterator.next().getId().equals("drawAnimation"))
+					ObservableList<Node> nodes = mainPane.getChildren();
+					Iterator<Node> iterator = nodes.iterator();
+					while(iterator.hasNext())
 					{
-						iterator.remove();
+						if(iterator.next().getId().equals("drawAnimation"))
+						{
+							iterator.remove();
+						}
 					}
+					
+					game.getPlayer().drawCard(cards.get(drawCounter));
+					setPlayerDeck(game.getPlayer().getDeck());
+					drawCounter++;
+					playerHasDrawn = false;
+					
+					if(drawCounter < cards.size())
+					{				
+						moveCardFromDeckToPlayer(cards);
+					}
+					else				
+					{
+						game.setShowingInfo(false);
+						hideInfo();
+						drawCounter = 0;
+						game.draw();
+					}						
 				}
-				
-				game.getPlayer().drawCard(cards.get(drawCounter));
-				setPlayerDeck(game.getPlayer().getDeck());
-				drawCounter++;
-				playerHasDrawn = false;
-				
-				if(drawCounter < cards.size())
-				{				
-					moveCardFromDeckToPlayer(cards);
-				}
-				else				
-				{
-					game.setShowingInfo(false);
-					hideInfo();
-					drawCounter = 0;
-					game.draw();
-				}						
-			}
-		});
-
-		translateTransition.play();
+			});
+	
+			translateTransition.play();
+		}
 	}
 	
 	private double getPositionOfRightCard(AI ai)
@@ -750,72 +760,75 @@ public class Controller
 	@SuppressWarnings("unused")
 	public void moveCardFromDeckToAI(AI ai, ArrayList<Card> cards)
 	{
-		Card card = game.getDeck().drawCard(game.getDeadDeck());
-		
-		Point2D deckPosition = iconDeck.localToScene(Point2D.ZERO);
-		
-		ImageView view = createBackCard();
-		view.setId("drawAnimation");
-		view.setX(deckPosition.getX());
-		view.setY(deckPosition.getY());
-		mainPane.getChildren().add(view);	
-		
-		TranslateTransition translateTransition = new TranslateTransition();
-		translateTransition.setDuration(Duration.millis(500));
-		translateTransition.setNode(view);
-		translateTransition.setCycleCount(1);
-		translateTransition.setAutoReverse(false);
-		translateTransition.setFromX(0);
-		translateTransition.setFromY(0);
+		if(game.isRunning())
+		{		
+			Card card = game.getDeck().drawCard(game.getDeadDeck());
+			
+			Point2D deckPosition = iconDeck.localToScene(Point2D.ZERO);
+			
+			ImageView view = createBackCard();
+			view.setId("drawAnimation");
+			view.setX(deckPosition.getX());
+			view.setY(deckPosition.getY());
+			mainPane.getChildren().add(view);	
+			
+			TranslateTransition translateTransition = new TranslateTransition();
+			translateTransition.setDuration(Duration.millis(500));
+			translateTransition.setNode(view);
+			translateTransition.setCycleCount(1);
+			translateTransition.setAutoReverse(false);
+			translateTransition.setFromX(0);
+			translateTransition.setFromY(0);
+			
+			switch(ai.getID())
+			{
+				case 1:		translateTransition.setToX( - (view.getX() - getPositionOfRightCard(ai)));
+							translateTransition.setToY( - (view.getY() - AI_1_STARTING_POINT.getY()));
+							break;
+				case 2:		translateTransition.setToX( - (view.getX() - AI_2_STARTING_POINT.getX()));
+							translateTransition.setToY( - (view.getY() - getPositionOfBottomCard(ai)));
+							break;				
+				case 3:		translateTransition.setToX( - (view.getX() - AI_3_STARTING_POINT.getX()));
+							translateTransition.setToY( - (view.getY() - getPositionOfBottomCard(ai)));
+							break;				
+				default:	break;
+			}
 		
-		switch(ai.getID())
-		{
-			case 1:		translateTransition.setToX( - (view.getX() - getPositionOfRightCard(ai)));
-						translateTransition.setToY( - (view.getY() - AI_1_STARTING_POINT.getY()));
-						break;
-			case 2:		translateTransition.setToX( - (view.getX() - AI_2_STARTING_POINT.getX()));
-						translateTransition.setToY( - (view.getY() - getPositionOfBottomCard(ai)));
-						break;				
-			case 3:		translateTransition.setToX( - (view.getX() - AI_3_STARTING_POINT.getX()));
-						translateTransition.setToY( - (view.getY() - getPositionOfBottomCard(ai)));
-						break;				
-			default:	break;
-		}
-	
-		translateTransition.setOnFinished(new EventHandler<ActionEvent>()
-		{
-			@Override
-			public void handle(ActionEvent event)
+			translateTransition.setOnFinished(new EventHandler<ActionEvent>()
 			{
-				ObservableList<Node> nodes = mainPane.getChildren();
-				Iterator<Node> iterator = nodes.iterator();
-				while(iterator.hasNext())
+				@Override
+				public void handle(ActionEvent event)
 				{
-					if(iterator.next().getId().equals("drawAnimation"))
+					ObservableList<Node> nodes = mainPane.getChildren();
+					Iterator<Node> iterator = nodes.iterator();
+					while(iterator.hasNext())
 					{
-						iterator.remove();
+						if(iterator.next().getId().equals("drawAnimation"))
+						{
+							iterator.remove();
+						}
 					}
+					
+					ai.drawCard(cards.get(drawCounter));
+					setAIDeck(ai);
+					drawCounter++;
+					
+					if(drawCounter < cards.size())
+					{				
+						moveCardFromDeckToAI(ai, cards);
+					}
+					else				
+					{
+						game.setShowingInfo(false);
+						hideInfo();
+						drawCounter = 0;
+						game.draw();
+					}						
 				}
-				
-				ai.drawCard(cards.get(drawCounter));
-				setAIDeck(ai);
-				drawCounter++;
-				
-				if(drawCounter < cards.size())
-				{				
-					moveCardFromDeckToAI(ai, cards);
-				}
-				else				
-				{
-					game.setShowingInfo(false);
-					hideInfo();
-					drawCounter = 0;
-					game.draw();
-				}						
-			}
-		});
-
-		translateTransition.play();
+			});
+	
+			translateTransition.play();
+		}
 	}
 
 	public void clearPlayerDeck()
diff --git a/src/application/MainGUI.fxml b/src/application/MainGUI.fxml
index 03681dfcc0769858ea129bf7ec76c0b6f2952a09..56a58bd158ee2d27f6e2e83157fc273cef44d7c9 100644
--- a/src/application/MainGUI.fxml
+++ b/src/application/MainGUI.fxml
@@ -78,6 +78,7 @@
         <menus>
           <Menu fx:id="menu1" mnemonicParsing="false" text="Menü">
             <items>
+                  <MenuItem fx:id="menuItemNewGame" mnemonicParsing="false" onAction="#startGame" text="Neues Spiel" />
                   <MenuItem fx:id="menuItem2" mnemonicParsing="false" onAction="#openSettings" text="Einstellungen" />
                   <MenuItem fx:id="menuItem1" mnemonicParsing="false" onAction="#buttonAchievements" text="Achievements" />
               <MenuItem fx:id="menuItem3" mnemonicParsing="false" onAction="#about" text="Über" />
diff --git a/src/logic/Game.java b/src/logic/Game.java
index 54363f2fd8826aea5477dbdab932f0b92996e207..3eb5cdab5cac0dfce185438b25b7e86830643475 100644
--- a/src/logic/Game.java
+++ b/src/logic/Game.java
@@ -126,101 +126,102 @@ public class Game
 		run();
 	}
 	
-	private String run()
+	private void run()
 	{	
-		if(player.getDeckSize() == 0)
-		{						
-			end(player.getName());	
-			return null;
-		}	
-		
-			for(AI winningAI : ais)
-			{
-				if(winningAI.getDeckSize() == 0)
-				{
-					end(winningAI.getName());
-					return null;
-				}
-			}		
-		
-		System.out.println("ROUND: " + counter / 4 + 1);
-		
-		if(lastCard.getType().equals(CardType.REVERSE) && !lastPlayerDraw)
+		if(running)
 		{
-			if(direction.equals(Direction.RIGHT))
-			{
-				direction = Direction.LEFT;
-				controller.setImageViewDirection(Direction.LEFT);		
-
-			}
-			else
-			{
-				direction = Direction.RIGHT;
-				controller.setImageViewDirection(Direction.RIGHT);	
-			}				
-		}		
-		
-		determineNextPlayer();				
-		
-		System.out.println("Player " + currentPlayer + "'s turn");
-		
-		if(skipped || !lastCard.getType().equals(CardType.SKIP))
-		{		
-			if(currentPlayer == 1)
-			{			
-				controller.setLabelCurrentPlayer(player.getName() + " ist am Zug");
-							
-				controller.setValidPlayerDeck(player.getDeck(), player.getValidCards(lastCard, wishColor, challenge));					
-				
-				player.turn(lastCard, wishColor, challenge);										
-			}
-			else
-			{	
+			if(player.getDeckSize() == 0)
+			{						
+				end(player.getName());	
+				return;
+			}	
 			
-				AI currentAI = ais.get(currentPlayer - 2);
-				
-				controller.setLabelCurrentPlayer(currentAI.getName() + " ist am Zug");
-				
-				controller.setAIDeck(currentAI);	
-				
-				try
+				for(AI winningAI : ais)
 				{
-					switch(aiSpeed)
+					if(winningAI.getDeckSize() == 0)
 					{
-						case 1:		Thread.sleep(500);
-									break;
-						case 2:		Thread.sleep(250);
-									break;
-						case 3:		Thread.sleep(50);
-									break;
-						case 4:		Thread.sleep(0);
-									break;
-						default: 	break;
-					}					
+						end(winningAI.getName());
+						return;
+					}
+				}		
+			
+			System.out.println("ROUND: " + counter / 4 + 1);
+			
+			if(lastCard.getType().equals(CardType.REVERSE) && !lastPlayerDraw)
+			{
+				if(direction.equals(Direction.RIGHT))
+				{
+					direction = Direction.LEFT;
+					controller.setImageViewDirection(Direction.LEFT);		
+	
 				}
-				catch(InterruptedException e)
+				else
 				{
-					//ERRORHANDLING
-					e.printStackTrace();
+					direction = Direction.RIGHT;
+					controller.setImageViewDirection(Direction.RIGHT);	
+				}				
+			}		
+			
+			determineNextPlayer();				
+			
+			System.out.println("Player " + currentPlayer + "'s turn");
+			
+			if(skipped || !lastCard.getType().equals(CardType.SKIP))
+			{		
+				if(currentPlayer == 1)
+				{			
+					controller.setLabelCurrentPlayer(player.getName() + " ist am Zug");
+								
+					controller.setValidPlayerDeck(player.getDeck(), player.getValidCards(lastCard, wishColor, challenge));					
+					
+					player.turn(lastCard, wishColor, challenge);										
 				}
+				else
+				{	
 				
-				currentAI.turn(lastCard, wishColor, challenge);							
+					AI currentAI = ais.get(currentPlayer - 2);
+					
+					controller.setLabelCurrentPlayer(currentAI.getName() + " ist am Zug");
+					
+					controller.setAIDeck(currentAI);	
+					
+					try
+					{
+						switch(aiSpeed)
+						{
+							case 1:		Thread.sleep(500);
+										break;
+							case 2:		Thread.sleep(250);
+										break;
+							case 3:		Thread.sleep(50);
+										break;
+							case 4:		Thread.sleep(0);
+										break;
+							default: 	break;
+						}					
+					}
+					catch(InterruptedException e)
+					{
+						//ERRORHANDLING
+						e.printStackTrace();
+					}
+					
+					currentAI.turn(lastCard, wishColor, challenge);							
+				}
 			}
+			else
+			{				
+				if(!skipped)
+				{	
+					System.out.println("SKIPPED player " + currentPlayer);
+					skipped = true;				
+					run();
+				}					
+			}
+			counter++;
 		}
-		else
-		{				
-			if(!skipped)
-			{	
-				System.out.println("SKIPPED player " + currentPlayer);
-				skipped = true;				
-				run();
-			}					
-		}
-		counter++;		
-		
-		return null;
 	}
-	
+		
 	private void determineNextPlayer()
 	{
 		if(direction.equals(Direction.RIGHT))
@@ -244,7 +245,7 @@ public class Game
 			{
 				currentPlayer--;
 			}
-		}
+		}		
 	}
 
 	private void end(String name)
@@ -413,4 +414,9 @@ public class Game
 		
 		run();
 	}
+	
+	public void stop()
+	{
+		running = false;
+	}
 }
\ No newline at end of file