diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java
index c49bbd13df0cc78bf46c5a161e79b0f23c1000fe..d393c5fad53cf6506ba688e1cd88fb2b63abfb29 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java
@@ -212,6 +212,7 @@ public class PlayPadImpl implements PlayPad {
 		initializer.submit(new KeyboardDefaultMappingTask());
 
 		initializer.submit(new ServiceInitializationTask());
+		initializer.submit(new ListenerRegistrationTask());
 
 		initializer.submit(new VersionizerSetupTask());
 		initializer.submit(new ComponentLoadingTask());
diff --git a/PlayWall/src/main/java/de/tobias/playpad/pad/content/AudioContent.java b/PlayWall/src/main/java/de/tobias/playpad/pad/content/AudioContent.java
index 3e3d063945f35329000eb53eb51c7aa3299d4754..9ac9d7d961bdefb10bddbcffb81f65cf4e8d10b8 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/pad/content/AudioContent.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/pad/content/AudioContent.java
@@ -134,8 +134,8 @@ public class AudioContent extends PadContent implements Pauseable, Durationable,
 
 	@Override
 	public void onFadeLevelChange(double level) {
-		Pad pad = getPad();
-		audioHandler.setVolume(level * VolumeManager.getInstance().computeVolume(pad));
+		final double newVolume = VolumeManager.getInstance().computeVolume(getPad()) * level;
+		audioHandler.setVolume(newVolume);
 	}
 
 	@Override
diff --git a/PlayWall/src/main/java/de/tobias/playpad/trigger/VolumeTriggerItem.java b/PlayWall/src/main/java/de/tobias/playpad/trigger/VolumeTriggerItem.java
index 96c9ca10899eb9ec564720a974414acce4d05f1c..88fb85bc6d345ff4b1df884d2c7c42152a949f8d 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/trigger/VolumeTriggerItem.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/trigger/VolumeTriggerItem.java
@@ -21,7 +21,7 @@ public class VolumeTriggerItem extends TriggerItem {
 	private Duration duration = new Duration(2000);
 	private List<UUID> uuids;
 
-	private String type;
+	private final String type;
 
 	VolumeTriggerItem(String type) {
 		super();
@@ -58,11 +58,17 @@ public class VolumeTriggerItem extends TriggerItem {
 	public void performAction(Pad pad, Project project, IMainViewController controller, Profile profile) {
 		uuids.stream().map(project::getPad)
 				.filter(i -> i.getContent() instanceof Fadeable)
-				.forEach(destination -> {
-					Fadeable fadeable = (Fadeable) destination.getContent();
+				.forEach(targetPad -> {
+					final Fadeable fadeable = (Fadeable) targetPad.getContent();
 
-					final double start = VolumeManager.getInstance().computeVolume(destination);
-					fadeable.fade(start, volume, duration, null);
+					// Use pad * last VolumeTrigger
+					final double start = VolumeManager.getInstance().computeVolume(targetPad) * VolumeTriggerVolumeFilter.getInstance().getVolume(pad);
+					// Use pad * target VolumeTrigger
+					final double destination = VolumeManager.getInstance().computeVolume(targetPad) * volume;
+					// Update VolumeTrigger
+					VolumeTriggerVolumeFilter.getInstance().setVolume(pad, volume);
+
+					fadeable.fade(start, destination, duration, null);
 				});
 	}
 
diff --git a/PlayWall/src/main/java/de/tobias/playpad/trigger/VolumeTriggerVolumeFilter.java b/PlayWall/src/main/java/de/tobias/playpad/trigger/VolumeTriggerVolumeFilter.java
new file mode 100644
index 0000000000000000000000000000000000000000..b8dad1b748745a1c7415029d505a191865be0e24
--- /dev/null
+++ b/PlayWall/src/main/java/de/tobias/playpad/trigger/VolumeTriggerVolumeFilter.java
@@ -0,0 +1,52 @@
+package de.tobias.playpad.trigger;
+
+import de.tobias.playpad.pad.Pad;
+import de.tobias.playpad.pad.PadStatus;
+import de.tobias.playpad.plugin.PadListener;
+import de.tobias.playpad.volume.VolumeFilter;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+public class VolumeTriggerVolumeFilter implements VolumeFilter, PadListener {
+
+	private static VolumeTriggerVolumeFilter instance;
+
+	public static VolumeTriggerVolumeFilter getInstance() {
+		if (instance == null) {
+			instance = new VolumeTriggerVolumeFilter();
+		}
+		return instance;
+	}
+
+	private VolumeTriggerVolumeFilter() {
+		// nothing to do
+	}
+
+	private final Map<UUID, Double> volumes = new HashMap<>();
+
+	@Override
+	public double getVolume(Pad pad) {
+		return volumes.getOrDefault(pad.getUuid(), 1.0);
+	}
+
+	public void setVolume(Pad pad, double newVolume) {
+		volumes.put(pad.getUuid(), newVolume);
+	}
+
+	// Pad Listener
+
+
+	@Override
+	public void onNameChanged(Pad pad, String oldValue, String newValue) {
+		// nothing to do
+	}
+
+	@Override
+	public void onStatusChange(Pad pad, PadStatus newValue) {
+		if (newValue == PadStatus.READY) {
+			volumes.remove(pad.getUuid());
+		}
+	}
+}
diff --git a/PlayWall/src/main/scala/de/tobias/playpad/initialize/ListenerRegistrationTask.scala b/PlayWall/src/main/scala/de/tobias/playpad/initialize/ListenerRegistrationTask.scala
new file mode 100644
index 0000000000000000000000000000000000000000..5ab0117dad7486c416596fcc3d2c13952d808cb8
--- /dev/null
+++ b/PlayWall/src/main/scala/de/tobias/playpad/initialize/ListenerRegistrationTask.scala
@@ -0,0 +1,13 @@
+package de.tobias.playpad.initialize
+
+import de.thecodelabs.utils.application
+import de.tobias.playpad.PlayPadImpl
+import de.tobias.playpad.trigger.VolumeTriggerVolumeFilter
+
+class ListenerRegistrationTask extends PlayPadInitializeTask {
+	override def name(): String = "ListenerRegistration"
+
+	override def run(app: application.App, instance: PlayPadImpl): Unit = {
+		instance.addPadListener(VolumeTriggerVolumeFilter.getInstance())
+	}
+}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/fade/AbstractFadeController.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/fade/AbstractFadeController.java
index 3923a9e07e8f171ce6b4c2ea714d6ed273136694..21eb241dc28053bba7ffbb8787a8874b8f840a06 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/fade/AbstractFadeController.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/fade/AbstractFadeController.java
@@ -1,5 +1,6 @@
 package de.tobias.playpad.pad.fade;
 
+import de.thecodelabs.logger.Logger;
 import javafx.animation.Transition;
 import javafx.util.Duration;
 
@@ -42,6 +43,8 @@ public abstract class AbstractFadeController {
 	}
 
 	public void fade(double from, double to, Duration duration, Runnable onFinish) {
+		Logger.debug("Fading from {0} to {1} in {2}", from, to, duration);
+
 		if (currentFadeTransition != null) {
 			currentFadeTransition.stop();
 		}