diff --git a/src/engine/Engine.java b/src/engine/Engine.java
index 013d0a1721656346eacb7e93e7a98cc37553a614..a5bea6350204060fc850860d63fdb57c1e14e2e3 100644
--- a/src/engine/Engine.java
+++ b/src/engine/Engine.java
@@ -4,6 +4,8 @@ import interfaces.ITickable;
 
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -81,6 +83,16 @@ public class Engine
 		gameWindow.setSize(1000, 750);
 		gameWindow.setResizable(false);
 		gameWindow.setContentPane(new GamePanel(world));
+		gameWindow.addWindowListener(new WindowAdapter() 
+	    {
+	        @Override
+	        public void windowClosing(WindowEvent e) 
+	        {
+	        	isGameRunning = false;
+	        	Sounds.StopAllSound();
+	        }
+
+	    });
 		isGameRunning = true;
 	}
 
diff --git a/src/view/Sounds.java b/src/view/Sounds.java
index 537964edea3090788bda37454769330fd1f06aa6..e6fdadc711199613e9528c72b6455a9f3bcfe8fe 100644
--- a/src/view/Sounds.java
+++ b/src/view/Sounds.java
@@ -2,6 +2,7 @@ package view;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 
 import javax.sound.sampled.AudioInputStream;
 import javax.sound.sampled.AudioSystem;
@@ -10,6 +11,7 @@ import javax.sound.sampled.LineUnavailableException;
 import javax.sound.sampled.UnsupportedAudioFileException;
 
 public class Sounds {
+	private static ArrayList<Clip> clips = new ArrayList<Clip>();
 	public static void LoopSound(String file) {
 		AudioInputStream aStream = null;
 		try {
@@ -44,8 +46,17 @@ public class Sounds {
 			clip.open(aStream);
 			clip.setFramePosition(0);
 			clip.start();
+			clips.add(clip);
 		} catch (LineUnavailableException | IOException e1) {
 			e1.printStackTrace();
 		}
 	}
+	
+	public static void StopAllSound()
+	{
+		for (Clip c : clips) {
+			c.stop();
+		}
+		clips.clear();
+	}
 }
diff --git a/src/world/Tower.java b/src/world/Tower.java
index 538bd1136839f7fea3612156d15ab1e13771ca98..1a33f3966f974f9dca138c82606ac6a44dfeea25 100644
--- a/src/world/Tower.java
+++ b/src/world/Tower.java
@@ -76,9 +76,15 @@ public class Tower extends Placeable implements ITickable, IEnemyObserver,
 		for (Field field : visibleFields) {
 			if (field == null)
 				continue;
-			newVisible.addAll(field.getNeighbours());
+			for (Field neigh : field.getNeighbours()) {
+				if(!newVisible.contains(neigh))
+					newVisible.add(neigh);
+			}
+		}
+		for (Field neigh : newVisible) {
+			if(!visibleFields.contains(neigh))
+				visibleFields.add(neigh);
 		}
-		visibleFields.addAll(newVisible);
 		getVisibleFields(visibleFields, iterations - 1);
 	}
 
@@ -86,7 +92,6 @@ public class Tower extends Placeable implements ITickable, IEnemyObserver,
 		enemiesInRange.clear();
 		ArrayList<Field> visibleFields = new ArrayList<Field>();
 		visibleFields.add(field);
-		getVisibleFields(visibleFields, range);
 
 		if (fogDescends)
 			getVisibleFields(visibleFields, range - 1);