diff --git a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java
index 0e787f8e836a1d6c9ef0ca43c37786d97130d84e..fa918c275db9cfdaa9d03a420fc6313e6d3265d0 100644
--- a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java
+++ b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java
@@ -37,6 +37,7 @@ import de.tobias.playpad.viewcontroller.main.MainViewController;
 import de.tobias.playpad.viewcontroller.option.IProfileSettingsViewController;
 import de.tobias.playpad.volume.GlobalVolume;
 import de.tobias.playpad.volume.PadVolume;
+import de.tobias.playpad.volume.VolumeManager;
 import de.tobias.updater.client.Updatable;
 import de.tobias.updater.client.UpdateRegistery;
 import de.tobias.utils.application.App;
@@ -278,8 +279,9 @@ public class PlayPadImpl implements PlayPad {
 		}
 
 		// Volume Management
-		Pad.getVolumeManager().addFilter(new GlobalVolume());
-		Pad.getVolumeManager().addFilter(new PadVolume());
+		VolumeManager volumeManager = VolumeManager.getInstance();
+		volumeManager.addFilter(new GlobalVolume());
+		volumeManager.addFilter(new PadVolume());
 
 		// Mapper
 		BaseMapperOverviewViewController.setInstance(new MapperOverviewViewController());
diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java b/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java
index 4d366155e1475e3cb5fa627265726edd18dcd244..254371b6215a90ed9665e0482574febd63ae6866 100644
--- a/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java
+++ b/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java
@@ -57,13 +57,13 @@ public class DesktopPadDragListener implements EventHandler<DragEvent> {
 	}
 
 	public void addListener() {
-		this.padView.setOnDragOver(event -> dragOver(event));
+		this.padView.setOnDragOver(this::dragOver);
 		this.padView.setOnDragExited(event -> dragExited());
-		this.padView.setOnDragDropped(event -> dragDropped(event));
-		this.padView.setOnDragDetected(event -> dragDetacted(event));
+		this.padView.setOnDragDropped(this::dragDropped);
+		this.padView.setOnDragDetected(this::dragDetacted);
 	}
 
-	public void removeListener() {
+	void removeListener() {
 		this.padView.setOnDragOver(null);
 		this.padView.setOnDragExited(null);
 		this.padView.setOnDragDropped(null);
diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java
index 2bc58a613630428c13db0e5a594fafb19c063083..c7b506c3defaba50f7de39e6e0cb1b1ed0244bc5 100644
--- a/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java
+++ b/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java
@@ -57,7 +57,7 @@ public class DesktopPadViewController implements IPadViewController, EventHandle
 
 	private static DesktopMainLayoutFactory connect;
 
-	public DesktopPadViewController(DesktopPadView padView, DesktopMainLayoutFactory connect) {
+	DesktopPadViewController(DesktopPadView padView, DesktopMainLayoutFactory connect) {
 		this.padView = padView;
 
 		if (DesktopPadViewController.connect != connect) // Set once
diff --git a/PlayWall/src/de/tobias/playpad/pad/content/AudioContent.java b/PlayWall/src/de/tobias/playpad/pad/content/AudioContent.java
index da672b214f0672fe402588161f0235fefdc6b631..61b760270059bdd99aa1a5f7de0183a8ec3411b3 100644
--- a/PlayWall/src/de/tobias/playpad/pad/content/AudioContent.java
+++ b/PlayWall/src/de/tobias/playpad/pad/content/AudioContent.java
@@ -73,7 +73,7 @@ public class AudioContent extends PadContent implements Pauseable, Durationable,
 
 	@Override
 	public void updateVolume() {
-		double volume = Pad.getVolumeManager().computeVolume(getPad());
+		double volume = VolumeManager.getInstance().computeVolume(getPad());
 		audioHandler.setVolume(volume);
 	}
 
@@ -129,9 +129,7 @@ public class AudioContent extends PadContent implements Pauseable, Durationable,
 	@Override
 	public void onFadeLevelChange(double level) {
 		Pad pad = getPad();
-		VolumeManager manager = Pad.getVolumeManager();
-
-		audioHandler.setVolume(level * manager.computeVolume(pad));
+		audioHandler.setVolume(level * VolumeManager.getInstance().computeVolume(pad));
 	}
 
 	@Override
diff --git a/PlayWallCore/src/de/tobias/playpad/pad/Pad.java b/PlayWallCore/src/de/tobias/playpad/pad/Pad.java
index a7e340fc5fb8f88eab2797e5d83fba1178445fdc..116fea6be67584baf20878449d6db60fe91b283e 100644
--- a/PlayWallCore/src/de/tobias/playpad/pad/Pad.java
+++ b/PlayWallCore/src/de/tobias/playpad/pad/Pad.java
@@ -1,8 +1,5 @@
 package de.tobias.playpad.pad;
 
-import java.nio.file.Path;
-import java.util.UUID;
-
 import de.tobias.playpad.pad.content.PadContent;
 import de.tobias.playpad.pad.content.play.Pauseable;
 import de.tobias.playpad.pad.listener.trigger.PadTriggerContentListener;
@@ -12,22 +9,15 @@ import de.tobias.playpad.pad.viewcontroller.IPadViewController;
 import de.tobias.playpad.project.Project;
 import de.tobias.playpad.project.page.PadIndex;
 import de.tobias.playpad.registry.NoSuchComponentException;
-import de.tobias.playpad.volume.VolumeManager;
-import javafx.beans.property.IntegerProperty;
-import javafx.beans.property.ObjectProperty;
-import javafx.beans.property.ReadOnlyIntegerProperty;
-import javafx.beans.property.SimpleIntegerProperty;
-import javafx.beans.property.SimpleObjectProperty;
-import javafx.beans.property.SimpleStringProperty;
-import javafx.beans.property.StringProperty;
+import javafx.beans.property.*;
 
-public class Pad implements Cloneable {
-
-	private static final VolumeManager volumeManager;
+import java.nio.file.Path;
+import java.util.UUID;
 
-	static {
-		volumeManager = new VolumeManager();
-	}
+/**
+ * Container for Media (PadContent). It represents a slot on a page.
+ */
+public class Pad implements Cloneable {
 
 	// Verwaltung
 	private UUID uuid;
@@ -177,7 +167,7 @@ public class Pad implements Cloneable {
 				return;
 			}
 		}
-		// Pause nur wenn Pause möglich
+		// Only set pause if pad supports pause
 		if (status == PadStatus.PAUSE && !(getContent() instanceof Pauseable)) {
 			return;
 		}
@@ -293,11 +283,6 @@ public class Pad implements Cloneable {
 		return (indexProperty.get() + 1) + " - " + nameProperty.get();
 	}
 
-	// Volume Manager
-	public static VolumeManager getVolumeManager() {
-		return volumeManager;
-	}
-
 	// Clone
 	@Override
 	public Pad clone() throws CloneNotSupportedException {
diff --git a/PlayWallCore/src/de/tobias/playpad/pad/PadStatusListener.java b/PlayWallCore/src/de/tobias/playpad/pad/PadStatusListener.java
index f0d641051e54357468c82c94459df5c445f37c96..2e924c49651ac88cd2ddb596e47a889647fa2617 100644
--- a/PlayWallCore/src/de/tobias/playpad/pad/PadStatusListener.java
+++ b/PlayWallCore/src/de/tobias/playpad/pad/PadStatusListener.java
@@ -18,7 +18,7 @@ public class PadStatusListener implements ChangeListener<PadStatus> {
 	// Utils für Single Pad Playing
 	private static Pad currentPlayingPad; // Nur wenn ProfileSettings.isMultiplePlayer == false
 
-	public PadStatusListener(Pad pad) {
+	PadStatusListener(Pad pad) {
 		this.pad = pad;
 	}
 
@@ -30,7 +30,8 @@ public class PadStatusListener implements ChangeListener<PadStatus> {
 		if (newValue == PadStatus.PLAY) {
 			if (pad.getContent() != null) {
 				PlayPadPlugin.getImplementation().getPadListener().forEach(listener -> listener.onPlay(pad));
-				pad.getProject().increaseActivePlayers();
+
+				pad.getProject().updateActivePlayerProperty();
 
 				// bei Single Pad Playing wird das alte Pad beendet.
 				if (!profileSettings.isMultiplePlayer()) {
@@ -65,7 +66,7 @@ public class PadStatusListener implements ChangeListener<PadStatus> {
 		} else if (newValue == PadStatus.STOP) {
 			if (pad.getContent() != null) {
 				PlayPadPlugin.getImplementation().getPadListener().forEach(listener -> listener.onStop(pad));
-				pad.getProject().dereaseActivePlayers();
+				pad.getProject().updateActivePlayerProperty();
 
 				if (pad.getContent() instanceof Fadeable && !pad.isEof() && padSettings.getFade().isFadeOutStop()) { // Fade nur wenn Pad
 																														// nicht am ende ist
@@ -73,11 +74,14 @@ public class PadStatusListener implements ChangeListener<PadStatus> {
 					{
 						pad.getContent().stop();
 						pad.setStatus(PadStatus.READY);
+						pad.getProject().updateActivePlayerProperty();
 					});
 				} else {
 					boolean shouldBeReady = pad.getContent().stop();
-					if (shouldBeReady)
+					if (shouldBeReady) {
 						pad.setStatus(PadStatus.READY);
+						pad.getProject().updateActivePlayerProperty();
+					}
 				}
 			}
 		}
diff --git a/PlayWallCore/src/de/tobias/playpad/project/Project.java b/PlayWallCore/src/de/tobias/playpad/project/Project.java
index 100a296d8ac438e3a7fd450570b7339be4a4afb2..8fb4da8c38926a6d4050e8d7b20bcd1889ae43f9 100644
--- a/PlayWallCore/src/de/tobias/playpad/project/Project.java
+++ b/PlayWallCore/src/de/tobias/playpad/project/Project.java
@@ -56,20 +56,20 @@ public class Project {
 
 	private final ProjectReference projectReference;
 	private ProjectSettings settings;
+	private IntegerProperty activePlayerProperty;
 
 	/**
 	 * Liste mit den aktuellen Laufzeitfehlern.
 	 */
 	private transient ObservableList<PadException> exceptions;
-	private transient IntegerProperty activePlayers;
 
 	public Project(ProjectReference ref) {
 		this.projectReference = ref;
 		this.pages = new ArrayList<>();
 		this.settings = new ProjectSettings();
+		this.activePlayerProperty = new SimpleIntegerProperty();
 
 		this.exceptions = FXCollections.observableArrayList();
-		this.activePlayers = new SimpleIntegerProperty();
 	}
 
 	public ProjectSettings getSettings() {
@@ -80,14 +80,6 @@ public class Project {
 		return projectReference;
 	}
 
-	public long getPlayedPlayers() {
-		return getPads().stream().filter(p -> p.getStatus() == PadStatus.PLAY || p.getStatus() == PadStatus.PAUSE).count();
-	}
-
-	public boolean hasPlayedPlayers() {
-		return getPlayedPlayers() != 0;
-	}
-
 	public Pad getPad(int x, int y, int page) {
 		return getPage(page).getPad(x, y);
 	}
@@ -222,24 +214,19 @@ public class Project {
 	}
 
 	public int getActivePlayers() {
-		return activePlayers.get();
+		return (int) getPads().stream().filter(p -> p.getStatus() == PadStatus.PLAY || p.getStatus() == PadStatus.PAUSE).count();
 	}
 
 	public boolean hasActivePlayers() {
 		return getActivePlayers() > 0;
 	}
 
-	public void increaseActivePlayers() {
-		activePlayers.set(getActivePlayers() + 1);
+	public IntegerProperty activePlayerProperty() {
+		return activePlayerProperty;
 	}
 
-	public void dereaseActivePlayers() {
-		if (activePlayers.greaterThan(0).get())
-			activePlayers.set(getActivePlayers() - 1);
-	}
-
-	public ReadOnlyIntegerProperty activePlayerProperty() {
-		return activePlayers;
+	public void updateActivePlayerProperty() {
+		activePlayerProperty.set(getActivePlayers());
 	}
 
 	// Exceptions
@@ -257,13 +244,7 @@ public class Project {
 			Platform.runLater(() -> removeExceptions(pad));
 			return;
 		}
-		Iterator<PadException> i = exceptions.iterator();
-		while (i.hasNext()) {
-			PadException exception = i.next();
-			if (exception.getPad().equals(pad)) {
-				i.remove();
-			}
-		}
+		exceptions.removeIf(exception -> exception.getPad().equals(pad));
 	}
 
 	public void removeException(PadException exception) {
diff --git a/PlayWallCore/src/de/tobias/playpad/volume/VolumeManager.java b/PlayWallCore/src/de/tobias/playpad/volume/VolumeManager.java
index 8a809d40be62223c8fa99ab307f68912547594bf..5e3ef1ea7b0ae360ced0b6e22c246d65a4c7038d 100644
--- a/PlayWallCore/src/de/tobias/playpad/volume/VolumeManager.java
+++ b/PlayWallCore/src/de/tobias/playpad/volume/VolumeManager.java
@@ -7,9 +7,19 @@ import de.tobias.playpad.pad.Pad;
 
 public class VolumeManager {
 
+	private static final VolumeManager instance;
+
+	static {
+		instance = new VolumeManager();
+	}
+
+	public static VolumeManager getInstance() {
+		return instance;
+	}
+
 	private List<VolumeFilter> filters;
 
-	public VolumeManager() {
+	private VolumeManager() {
 		this.filters = new ArrayList<>();
 	}
 
diff --git a/PluginMedia/src/de/tobias/playpad/mediaplugin/video/VideoContent.java b/PluginMedia/src/de/tobias/playpad/mediaplugin/video/VideoContent.java
index d975de94f2b4de3b406e99a0c2b82ca95a478eff..589aa59945c462025c4625df62d942c2e47eb12a 100644
--- a/PluginMedia/src/de/tobias/playpad/mediaplugin/video/VideoContent.java
+++ b/PluginMedia/src/de/tobias/playpad/mediaplugin/video/VideoContent.java
@@ -70,8 +70,7 @@ public class VideoContent extends PadContent implements Pauseable, Durationable
 	@Override
 	public void updateVolume() {
 		if (player != null) {
-			VolumeManager manager = Pad.getVolumeManager();
-			double volume = manager.computeVolume(getPad());
+			double volume = VolumeManager.getInstance().computeVolume(getPad());
 			player.setVolume(volume);
 		}
 	}