diff --git a/bin/de/bricked/resources/sounds/hit_wall.mp3 b/bin/de/bricked/resources/sounds/hit_wall.mp3
index b3944f7afdc3a2186323014077e1bf74b2190b3d..89e45f6bc237c7d5f3714d315e6b81346bcc4653 100644
Binary files a/bin/de/bricked/resources/sounds/hit_wall.mp3 and b/bin/de/bricked/resources/sounds/hit_wall.mp3 differ
diff --git a/src/de/bricked/game/Game.java b/src/de/bricked/game/Game.java
index dc3a8ed8bdc2887d38d84a85a1f188221c770e4d..649c06251fd8178cf7ba6daa4f767489a4183d52 100644
--- a/src/de/bricked/game/Game.java
+++ b/src/de/bricked/game/Game.java
@@ -36,10 +36,8 @@ public class Game
 	public Game()
 	{
 		this.settings = new Settings();
-		this.soundHandler = new SoundHandler();
-		//DEBUG
-		soundHandler.setVolume(1.0);
-		soundHandler.setMuted(false);
+		//DEBUG values in constructor should be loaded from settings
+		this.soundHandler = new SoundHandler(1.0, false);		
 		this.levelPack = null;
 		this.level = null;
 		this.livesRemaining = 0;
diff --git a/src/de/bricked/game/board/Board.java b/src/de/bricked/game/board/Board.java
index 7e8b3afa18024a4de810b96ecf1862bb8b699ff4..2474070ac7927baf93eb52cf67509a5b169cdef0 100644
--- a/src/de/bricked/game/board/Board.java
+++ b/src/de/bricked/game/board/Board.java
@@ -10,6 +10,7 @@ import de.bricked.game.powerups.ExtraLifePowerUp;
 import de.bricked.game.powerups.PowerUp;
 import de.bricked.game.powerups.ball.ExplodeBallPowerUp;
 import de.bricked.game.powerups.ball.NoCollisionBallPowerUp;
+import de.bricked.game.sound.SoundType;
 import de.bricked.ui.LevelController;
 
 public class Board
@@ -210,11 +211,11 @@ public class Board
 			if(hittedBrick.getType().equals(BrickType.TNT))
 			{
 				explodeBrick(row, col);
-				game.getSoundHandler().play("tnt");
+				game.getSoundHandler().play(SoundType.TNT);
 			}
 			else
 			{
-				game.getSoundHandler().play("destroy_brick");
+				game.getSoundHandler().play(SoundType.DESTROY_BRICK);
 			}
 
 			if(hittedBrick.getPowerUp() != null)
@@ -234,7 +235,7 @@ public class Board
 		}
 		else
 		{
-			game.getSoundHandler().play("hit_brick");
+			game.getSoundHandler().play(SoundType.HIT_BRICK);
 			LevelController.redrawBrick(col, row, bricks.get(row).get(col), false);
 		}
 	}
diff --git a/src/de/bricked/game/sound/SoundHandler.java b/src/de/bricked/game/sound/SoundHandler.java
index e72c1e8dffcb6d7f3e0f920f41e7b37be0105549..f37a3593ea8b97c88a120a47551b29d4d200e6a7 100644
--- a/src/de/bricked/game/sound/SoundHandler.java
+++ b/src/de/bricked/game/sound/SoundHandler.java
@@ -2,72 +2,83 @@ package de.bricked.game.sound;
 
 import java.net.MalformedURLException;
 import java.net.URISyntaxException;
+import java.util.HashMap;
 
 import de.bricked.game.Config;
 import javafx.scene.media.Media;
 import javafx.scene.media.MediaPlayer;
+import javafx.scene.media.MediaPlayer.Status;
 import logger.LogLevel;
 import logger.Logger;
 
 public class SoundHandler
 {
-    private double volume;
-    private boolean muted;
-    private boolean isPlayingTNT;
-    
-    public SoundHandler()
-    {
-        volume = 0.0;
-        muted = false;
-        isPlayingTNT = false;
-    }
+	private double volume;
+	private boolean muted;
+	private HashMap<SoundType, MediaPlayer> mediaPlayers;
 
-    public void play(String soundID)
-	{
-        if(volume > 0 && !muted)
-        {
-            try
-            {
-            	if(!isPlayingTNT)
-            	{
-	            	if(soundID.equalsIgnoreCase("tnt"))
-	            	{
-	            		isPlayingTNT = true;
-	            	}
-	                String path = SoundHandler.class.getResource(Config.JAR_SOUND_SAVEDIR + soundID + ".mp3").toURI().toURL().toString();
-	                Media sound = new Media(path);
-	                MediaPlayer mediaPlayer = new MediaPlayer(sound);	              
-	                mediaPlayer.setVolume(volume);
-	                mediaPlayer.setAutoPlay(true);
-	                mediaPlayer.setOnEndOfMedia(()->{
-	                	isPlayingTNT = false;					
-					});
-            	}
-            }
-            catch (MalformedURLException | URISyntaxException e)
-            {
-                Logger.log(LogLevel.ERROR, Logger.exceptionToString(e));
-            }            
-        }
+	public SoundHandler(double volume, boolean muted)
+	{		
+		this.volume = volume;
+		this.muted = muted;
+		
+		mediaPlayers = new HashMap<>();
+		
+		for(SoundType currentType : SoundType.values())
+		{
+			try
+			{
+				String path = SoundHandler.class.getResource(Config.JAR_SOUND_SAVEDIR + currentType.getFileName() + ".mp3").toURI().toURL().toString();
+				Media sound = new Media(path);
+				MediaPlayer mediaPlayer = new MediaPlayer(sound);
+				mediaPlayer.setVolume(volume);
+				mediaPlayer.setAutoPlay(false);	
+				mediaPlayer.setOnEndOfMedia(()->{
+					mediaPlayer.stop();
+				});
+
+				mediaPlayers.put(currentType, mediaPlayer);
+			}
+			catch(MalformedURLException | URISyntaxException e)
+			{
+				Logger.log(LogLevel.ERROR, Logger.exceptionToString(e));
+			}
+		}
+	}
+
+	public void play(SoundType soundType)
+	{	
+		if(volume > 0 && !muted)
+		{		
+			MediaPlayer player = mediaPlayers.get(soundType);
+			
+			if(player != null)
+			{						
+				if(!player.getStatus().equals(Status.PLAYING))
+				{				
+					player.play();
+				}
+			}
+		}
 	}
 
-    public double getVolume()
-    {
-        return volume;
-    }
+	public double getVolume()
+	{
+		return volume;
+	}
 
-    public boolean isMuted()
-    {
-        return muted;
-    }
+	public boolean isMuted()
+	{
+		return muted;
+	}
 
-    public void setVolume(double volume)
-    {
-        this.volume = volume;
-    }
+	public void setVolume(double volume)
+	{
+		this.volume = volume;
+	}
 
-    public void setMuted(boolean muted)
-    {
-        this.muted = muted;
-    }
+	public void setMuted(boolean muted)
+	{
+		this.muted = muted;
+	}
 }
\ No newline at end of file
diff --git a/src/de/bricked/game/sound/SoundType.java b/src/de/bricked/game/sound/SoundType.java
new file mode 100644
index 0000000000000000000000000000000000000000..191d459747e628d8af9c7dbe62c87760e01f4762
--- /dev/null
+++ b/src/de/bricked/game/sound/SoundType.java
@@ -0,0 +1,26 @@
+package de.bricked.game.sound;
+
+public enum SoundType
+{
+	HIT_WALL("hit_wall"),
+	HIT_PADDLE("hit_paddle"),
+	HIT_BRICK("hit_brick"),
+	DESTROY_BRICK("destroy_brick"),
+	TNT("tnt"),
+	LIFE_LOST("life_lost"),
+	GAME_OVER("game_over"),
+	FINISHED_LEVEL("finished_level"),
+	UNLOCKED("unlocked");
+	
+	private String fileName;
+	
+	private SoundType(String fileName)
+	{
+		this.fileName = fileName;
+	}
+
+	public String getFileName()
+	{
+		return fileName;
+	}
+}
\ No newline at end of file
diff --git a/src/de/bricked/resources/sounds/hit_wall.mp3 b/src/de/bricked/resources/sounds/hit_wall.mp3
index b3944f7afdc3a2186323014077e1bf74b2190b3d..89e45f6bc237c7d5f3714d315e6b81346bcc4653 100644
Binary files a/src/de/bricked/resources/sounds/hit_wall.mp3 and b/src/de/bricked/resources/sounds/hit_wall.mp3 differ
diff --git a/src/de/bricked/ui/LevelController.java b/src/de/bricked/ui/LevelController.java
index 185cf18ff8ddfd39921ab8832a6738a968f5245b..f2d2d082bd8119af07eb865adf43790236f5aba0 100644
--- a/src/de/bricked/ui/LevelController.java
+++ b/src/de/bricked/ui/LevelController.java
@@ -19,6 +19,7 @@ import de.bricked.game.paddle.Paddle;
 import de.bricked.game.paddle.PaddleSize;
 import de.bricked.game.powerups.PowerUp;
 import de.bricked.game.powerups.PowerUpType;
+import de.bricked.game.sound.SoundType;
 import de.bricked.utils.CountdownTimer;
 import fontAwesome.FontIcon;
 import fontAwesome.FontIconType;
@@ -441,7 +442,7 @@ public class LevelController
 							gameState = GameState.STOPPED;
 							timer.stop();		
 							
-							game.getSoundHandler().play("game_over");							
+							game.getSoundHandler().play(SoundType.GAME_OVER);							
 
 							Platform.runLater(() -> {								
 								Alert alert = new Alert(AlertType.INFORMATION);
@@ -460,7 +461,7 @@ public class LevelController
 							gameState = GameState.WAITING;
 							timer.stop();
 							
-							game.getSoundHandler().play("life_lost");							
+							game.getSoundHandler().play(SoundType.LIFE_LOST);							
 
 							// reset paddle and ball
 							initPaddle(game.getLevel().getInitPadSize());
@@ -472,7 +473,7 @@ public class LevelController
 					{
 						game.getBall().setDirection(game.reflectBall(hitLocation, game.getBall().getDirection()));
 						
-						game.getSoundHandler().play("hit_wall");
+						game.getSoundHandler().play(SoundType.HIT_WALL);
 
 						switch(hitLocation)
 						{
@@ -524,7 +525,7 @@ public class LevelController
 
 						resetMultiplicator();
 						
-						game.getSoundHandler().play("hit_paddle");
+						game.getSoundHandler().play(SoundType.HIT_PADDLE);
 					}
 					// ball doesn't collide with paddle --> check collision with bricks
 					else
@@ -804,7 +805,7 @@ public class LevelController
 					resetMultiplicator();
 					timer.stop();
 					
-					game.getSoundHandler().play("finished_level");		
+					game.getSoundHandler().play(SoundType.FINISHED_LEVEL);		
 
 					Platform.runLater(() -> {
 						Alert alert = new Alert(AlertType.INFORMATION);