diff --git a/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignAnimator.java b/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignAnimator.java
index d7ebadfc7f1e14ae7e77ffa5cad5ae4d618f71e5..ffd70e7b8b949a039aeb21718fdd335de4193f16 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignAnimator.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignAnimator.java
@@ -1,7 +1,7 @@
 package de.tobias.playpad.design;
 
 import de.tobias.playpad.pad.view.IPadView;
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import de.tobias.playpad.util.FadeableColor;
 import de.tobias.playpad.view.PseudoClasses;
 import javafx.animation.KeyFrame;
@@ -23,7 +23,7 @@ public class ModernDesignAnimator {
 
 	private static HashMap<Integer, Timeline> timelines = new HashMap<>();
 
-	public static void animateFade(IPadViewController padViewController, FadeableColor startColor, FadeableColor endColor, Duration duration) {
+	public static void animateFade(AbstractPadViewController padViewController, FadeableColor startColor, FadeableColor endColor, Duration duration) {
 		ObjectProperty<FadeableColor> backgroundColor = new SimpleObjectProperty<>();
 
 		Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(0), new KeyValue(backgroundColor, startColor)),
@@ -32,7 +32,7 @@ public class ModernDesignAnimator {
 		animate(padViewController, timeline, backgroundColor);
 	}
 
-	public static void animateWarn(IPadViewController padViewController, FadeableColor startColor, FadeableColor endColor, Duration duration) {
+	public static void animateWarn(AbstractPadViewController padViewController, FadeableColor startColor, FadeableColor endColor, Duration duration) {
 		ObjectProperty<FadeableColor> backgroundColor = new SimpleObjectProperty<>();
 
 		Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(0), new KeyValue(backgroundColor, startColor)),
@@ -45,7 +45,7 @@ public class ModernDesignAnimator {
 		animate(padViewController, timeline, backgroundColor);
 	}
 
-	private static void animate(IPadViewController padViewController, Timeline timeline, ObjectProperty<FadeableColor> objectProperty) {
+	private static void animate(AbstractPadViewController padViewController, Timeline timeline, ObjectProperty<FadeableColor> objectProperty) {
 		int index = padViewController.getPad().getPosition();
 
 		if (timelines.containsKey(index)) {
@@ -68,7 +68,7 @@ public class ModernDesignAnimator {
 		timelines.put(index, timeline);
 	}
 
-	public static void stopAnimation(IPadViewController controller) {
+	public static void stopAnimation(AbstractPadViewController controller) {
 		int index = controller.getPad().getPosition();
 
 		if (timelines.containsKey(index)) {
@@ -76,7 +76,7 @@ public class ModernDesignAnimator {
 		}
 	}
 
-	public static void warnFlash(IPadViewController controller) {
+	public static void warnFlash(AbstractPadViewController controller) {
 		final IPadView view = controller.getView();
 		try {
 			while (!Thread.interrupted()) {
diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java
index 137d20bb6cfa6f92dd108741cfdce2878bc7d41b..e1489f3445343db9ef7b1b3a46be0e6030a8f690 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java
@@ -18,7 +18,7 @@ import de.tobias.playpad.pad.content.Playlistable;
 import de.tobias.playpad.pad.content.play.Pauseable;
 import de.tobias.playpad.pad.view.IPadContentView;
 import de.tobias.playpad.pad.view.IPadView;
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import de.tobias.playpad.profile.Profile;
 import de.tobias.playpad.project.page.PadIndex;
 import de.tobias.playpad.registry.NoSuchComponentException;
@@ -171,7 +171,7 @@ public class DesktopPadView implements IPadView {
 	}
 
 	@Override
-	public IPadViewController getViewController() {
+	public AbstractPadViewController getViewController() {
 		return controller;
 	}
 
@@ -332,7 +332,7 @@ public class DesktopPadView implements IPadView {
 		setContentView(null);
 	}
 
-	Label getPlaylistLabel() {
+	public Label getPlaylistLabel() {
 		return playlistLabel;
 	}
 
diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java
index 9ca4d6625e8a5e0f9864d1710118b5de97a74818..0bd8aab676d73a3bd10ec39b37c7f27e69c7af19 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java
@@ -13,7 +13,7 @@ import de.tobias.playpad.pad.content.Playlistable;
 import de.tobias.playpad.pad.content.play.Durationable;
 import de.tobias.playpad.pad.listener.*;
 import de.tobias.playpad.pad.view.IPadView;
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import de.tobias.playpad.profile.Profile;
 import de.tobias.playpad.profile.ProfileSettings;
 import de.tobias.playpad.registry.NoSuchComponentException;
@@ -21,14 +21,13 @@ import de.tobias.playpad.settings.GlobalSettings;
 import de.tobias.playpad.view.FileDragOptionView;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
 import de.tobias.playpad.viewcontroller.option.pad.PadSettingsViewController;
-import javafx.beans.binding.Bindings;
 import javafx.beans.value.ChangeListener;
 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
 import javafx.stage.Stage;
 import javafx.util.Duration;
 
-public class DesktopPadViewController implements IPadViewController, EventHandler<ActionEvent> {
+public class DesktopPadViewController extends AbstractPadViewController implements EventHandler<ActionEvent> {
 
 	public static final String OPEN_FOLDER = "openFolder";
 	private static final String DURATION_FORMAT = "%d:%02d";
@@ -86,19 +85,7 @@ public class DesktopPadViewController implements IPadViewController, EventHandle
 			padView.loopLabelVisibleProperty().bind(pad.getPadSettings().loopProperty());
 			padView.setTriggerLabelActive(pad.getPadSettings().hasTriggerItems());
 
-			if (pad.getContent() instanceof Playlistable) {
-				final Playlistable content = (Playlistable) pad.getContent();
-				padView.getPlaylistLabel().textProperty().bind(Bindings.createStringBinding(() -> {
-					final int currentPlayingMediaIndex = content.getCurrentPlayingMediaIndex();
-					final int totalCount = pad.getPaths().size();
-
-					if (currentPlayingMediaIndex < 0) {
-						return "- / " + totalCount;
-					} else {
-						return (currentPlayingMediaIndex + 1) + " / " + totalCount;
-					}
-				}, content.currentPlayingMediaIndexProperty(), pad.getPaths()));
-			}
+			updatePlaylistLabelBinding(pad);
 
 			// Update Listener
 			padContentListener.setPad(pad);
diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadView.java b/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadView.java
index e5c35e1a609bbbcd8f170ef81bf421851bb1c790..3c220b8ba255b641ea8355d2cc818418e90e1a5f 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadView.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadView.java
@@ -14,7 +14,7 @@ import de.tobias.playpad.pad.content.PadContent;
 import de.tobias.playpad.pad.content.PadContentFactory;
 import de.tobias.playpad.pad.view.IPadContentView;
 import de.tobias.playpad.pad.view.IPadView;
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import de.tobias.playpad.profile.Profile;
 import de.tobias.playpad.project.page.PadIndex;
 import de.tobias.playpad.registry.NoSuchComponentException;
@@ -149,7 +149,7 @@ public class TouchPadView implements IPadView {
 	}
 
 	@Override
-	public IPadViewController getViewController() {
+	public AbstractPadViewController getViewController() {
 		return controller;
 	}
 
@@ -260,7 +260,7 @@ public class TouchPadView implements IPadView {
 		setContentView(null);
 	}
 
-	Label getPlaylistLabel() {
+	public Label getPlaylistLabel() {
 		return playlistLabel;
 	}
 
diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadViewController.java b/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadViewController.java
index 8b2b590a9ec12866261547f2c0c442a0057607f6..c43b9679075c400a0e949b80e2b9ab64e28d4f50 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadViewController.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadViewController.java
@@ -4,14 +4,12 @@ import de.thecodelabs.logger.Logger;
 import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.pad.PadStatus;
 import de.tobias.playpad.pad.TimeMode;
-import de.tobias.playpad.pad.content.Playlistable;
 import de.tobias.playpad.pad.content.play.Durationable;
 import de.tobias.playpad.pad.listener.*;
 import de.tobias.playpad.pad.view.IPadView;
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import de.tobias.playpad.profile.Profile;
 import de.tobias.playpad.profile.ProfileSettings;
-import javafx.beans.binding.Bindings;
 import javafx.beans.value.ChangeListener;
 import javafx.event.Event;
 import javafx.event.EventHandler;
@@ -20,7 +18,7 @@ import javafx.scene.input.MouseEvent;
 import javafx.scene.input.TouchEvent;
 import javafx.util.Duration;
 
-public class TouchPadViewController implements IPadViewController, EventHandler<Event> {
+public class TouchPadViewController extends AbstractPadViewController implements EventHandler<Event> {
 
 	protected static final String CURRENT_PAGE_BUTTON = "current-page-button";
 	private static final String DURATION_FORMAT = "%d:%02d";
@@ -72,20 +70,7 @@ public class TouchPadViewController implements IPadViewController, EventHandler<
 			padView.loopLabelVisibleProperty().bind(pad.getPadSettings().loopProperty());
 			padView.setTriggerLabelActive(pad.getPadSettings().hasTriggerItems());
 
-			if (pad.getContent() instanceof Playlistable) {
-				final Playlistable content = (Playlistable) pad.getContent();
-				padView.getPlaylistLabel().textProperty().bind(Bindings.createStringBinding(() -> {
-					final int currentPlayingMediaIndex = content.getCurrentPlayingMediaIndex();
-					final int totalCount = pad.getPaths().size();
-
-					if (currentPlayingMediaIndex < 0) {
-						return "- / " + totalCount;
-					} else {
-						return (currentPlayingMediaIndex + 1) + " / " + totalCount;
-					}
-				}, content.currentPlayingMediaIndexProperty(), pad.getPaths()));
-			}
-
+			updatePlaylistLabelBinding(pad);
 
 			// Update Listener
 			padContentListener.setPad(pad);
diff --git a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadContentListener.java b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadContentListener.java
index 0b88a71ca642f337b7c892cf68bc04d3a2efc9ab..20c58f70592345eadb08fc634bcf34a7824951ec 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadContentListener.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadContentListener.java
@@ -3,16 +3,16 @@ package de.tobias.playpad.pad.listener;
 import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.pad.content.PadContent;
 import de.tobias.playpad.pad.content.play.Durationable;
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 
 public class PadContentListener implements ChangeListener<PadContent> {
 
 	private Pad pad;
-	private IPadViewController controller;
+	private final AbstractPadViewController controller;
 
-	public PadContentListener(IPadViewController controller) {
+	public PadContentListener(AbstractPadViewController controller) {
 		this.controller = controller;
 	}
 
@@ -49,5 +49,7 @@ public class PadContentListener implements ChangeListener<PadContent> {
 		} else {
 			controller.getView().setPlaybarVisible(false);
 		}
+
+		controller.updatePlaylistLabelBinding(pad);
 	}
 }
diff --git a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadDurationListener.java b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadDurationListener.java
index ce208522f99ec464cbe6996109ad0a4b3c9210d5..a364fed1a5f5f6996c4885374d1b8acd70faa936 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadDurationListener.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadDurationListener.java
@@ -1,15 +1,15 @@
 package de.tobias.playpad.pad.listener;
 
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.util.Duration;
 
 public class PadDurationListener implements ChangeListener<Duration> {
 
-	private IPadViewController controller;
+	private AbstractPadViewController controller;
 
-	public PadDurationListener(IPadViewController controller) {
+	public PadDurationListener(AbstractPadViewController controller) {
 		this.controller = controller;
 	}
 
diff --git a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadLockedListener.java b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadLockedListener.java
index 702951b06dab11e634e5c4aec827a06c98638f4e..e94995dda657050904571c0d88dec486b4d62dfa 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadLockedListener.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadLockedListener.java
@@ -1,14 +1,14 @@
 package de.tobias.playpad.pad.listener;
 
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 
 public class PadLockedListener implements ChangeListener<Boolean> {
 
-	private IPadViewController controller;
+	private AbstractPadViewController controller;
 
-	public PadLockedListener(IPadViewController controller) {
+	public PadLockedListener(AbstractPadViewController controller) {
 		this.controller = controller;
 	}
 
diff --git a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadPositionListener.java b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadPositionListener.java
index 579fe5a9dfb6fbac7a207b2f67b09cfce5c74800..5326b5f914229d7a4e1b9499bb44c01234d00ecf 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadPositionListener.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadPositionListener.java
@@ -13,7 +13,7 @@ import de.tobias.playpad.pad.PadStatus;
 import de.tobias.playpad.pad.content.PadContent;
 import de.tobias.playpad.pad.content.play.Durationable;
 import de.tobias.playpad.pad.fade.Fadeable;
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import de.tobias.playpad.profile.Profile;
 import javafx.beans.value.ObservableValue;
 import javafx.util.Duration;
@@ -21,9 +21,9 @@ import javafx.util.Duration;
 public class PadPositionListener implements Runnable, IPadPositionListener {
 
 	private Pad pad;
-	private IPadViewController controller;
+	private AbstractPadViewController controller;
 
-	public PadPositionListener(IPadViewController controller) {
+	public PadPositionListener(AbstractPadViewController controller) {
 		this.controller = controller;
 	}
 
diff --git a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadStatusListener.java b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadStatusListener.java
index bda5270de706c8c4ecfece808faaa2780eb11170..061cc894962680419298d76f8b326c825afb6770 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadStatusListener.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadStatusListener.java
@@ -3,16 +3,16 @@ package de.tobias.playpad.pad.listener;
 import de.thecodelabs.midi.Mapping;
 import de.tobias.playpad.action.actions.CartAction;
 import de.tobias.playpad.pad.PadStatus;
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import de.tobias.playpad.view.PseudoClasses;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 
 public class PadStatusListener implements ChangeListener<PadStatus> {
 
-	private IPadViewController controller;
+	private AbstractPadViewController controller;
 
-	public PadStatusListener(IPadViewController controller) {
+	public PadStatusListener(AbstractPadViewController controller) {
 		this.controller = controller;
 	}
 
diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala
index aec4ccf9145de83e3b41e86038504f1dbf585ea9..b639f9099419bd956a0b420216f9c01568b2c679 100644
--- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala
+++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala
@@ -4,7 +4,7 @@ import de.thecodelabs.utils.application.ApplicationUtils
 import de.tobias.playpad.design.modern.model.{ModernCartDesign, ModernGlobalDesign}
 import de.tobias.playpad.design.modern.{ModernCartDesignHandler, ModernColor}
 import de.tobias.playpad.pad.content.play.Durationable
-import de.tobias.playpad.pad.viewcontroller.IPadViewController
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController
 import de.tobias.playpad.util.Minifier
 import de.tobias.playpad.view.PseudoClasses
 import javafx.util.Duration
@@ -47,7 +47,7 @@ class ModernCartDesignHandlerImpl extends ModernCartDesignHandler {
 		expressionParser.parseExpression(string, new TemplateParserContext("${", "}")).getValue(context, classOf[String])
 	}
 
-	override def handleWarning(design: ModernCartDesign, controller: IPadViewController, warning: Duration, globalDesign: ModernGlobalDesign): Unit = {
+	override def handleWarning(design: ModernCartDesign, controller: AbstractPadViewController, warning: Duration, globalDesign: ModernGlobalDesign): Unit = {
 		if (globalDesign.isWarnAnimation) {
 			val playColor = design.getPlayColor
 			val backgroundColor = design.getBackgroundColor
@@ -71,5 +71,5 @@ class ModernCartDesignHandlerImpl extends ModernCartDesignHandler {
 		}
 	}
 
-	override def stopWarning(design: ModernCartDesign, controller: IPadViewController): Unit = ModernDesignAnimator.stopAnimation(controller)
+	override def stopWarning(design: ModernCartDesign, controller: AbstractPadViewController): Unit = ModernDesignAnimator.stopAnimation(controller)
 }
diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala
index ca1ade7277a8ba8e726e3d3b1844575ea2b47f0b..3eea45b74878a931b801b72ea341ce13375be7d2 100644
--- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala
+++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala
@@ -1,14 +1,11 @@
 package de.tobias.playpad.design
 
-import java.nio.file.Files
-import java.util.function.Consumer
-
 import de.thecodelabs.utils.application.ApplicationUtils
 import de.thecodelabs.utils.application.container.PathType
 import de.tobias.playpad.design.modern.model.{ModernCartDesign, ModernGlobalDesign}
 import de.tobias.playpad.design.modern.{ModernColor, ModernGlobalDesignHandler}
 import de.tobias.playpad.pad.content.play.Durationable
-import de.tobias.playpad.pad.viewcontroller.IPadViewController
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController
 import de.tobias.playpad.project.Project
 import de.tobias.playpad.util.Minifier
 import de.tobias.playpad.view.{ColorPickerView, PseudoClasses}
@@ -22,6 +19,8 @@ import org.springframework.expression.common.TemplateParserContext
 import org.springframework.expression.spel.standard.SpelExpressionParser
 import org.springframework.expression.spel.support.StandardEvaluationContext
 
+import java.nio.file.Files
+import java.util.function.Consumer
 import scala.jdk.CollectionConverters._
 
 class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with ColorModeHandler {
@@ -93,7 +92,7 @@ class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with Color
 		expressionParser.parseExpression(string, new TemplateParserContext("${", "}")).getValue(context, classOf[String])
 	}
 
-	override def handleWarning(design: ModernGlobalDesign, controller: IPadViewController, warning: Duration): Unit = {
+	override def handleWarning(design: ModernGlobalDesign, controller: AbstractPadViewController, warning: Duration): Unit = {
 		if (design.isWarnAnimation) {
 			warnAnimation(design, controller, warning)
 		} else {
@@ -101,7 +100,7 @@ class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with Color
 		}
 	}
 
-	private def warnAnimation(design: ModernGlobalDesign, controller: IPadViewController, warning: Duration): Unit = {
+	private def warnAnimation(design: ModernGlobalDesign, controller: AbstractPadViewController, warning: Duration): Unit = {
 		val stopColor = if (design.isFlatDesign) design.getBackgroundColor.toFlatFadeableColor else design.getBackgroundColor.toFadeableColor
 		val playColor = if (design.isFlatDesign) design.getPlayColor.toFlatFadeableColor else design.getPlayColor.toFadeableColor
 
@@ -118,7 +117,7 @@ class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with Color
 		ModernDesignAnimator.animateWarn(controller, playColor, stopColor, duration)
 	}
 
-	override def stopWarning(design: ModernGlobalDesign, controller: IPadViewController): Unit = ModernDesignAnimator.stopAnimation(controller)
+	override def stopWarning(design: ModernGlobalDesign, controller: AbstractPadViewController): Unit = ModernDesignAnimator.stopAnimation(controller)
 
 	override def getColorInterface(onSelection: Consumer[DisplayableColor]) = new ColorPickerView(null, ModernColor.values.asInstanceOf[Array[DisplayableColor]], onSelection)
 
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernCartDesignHandler.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernCartDesignHandler.java
index 0f34344711461d7ef8a26a175053fc2be731f27b..200ead1fd6e412137370b6393167bb1092adc90d 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernCartDesignHandler.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernCartDesignHandler.java
@@ -2,7 +2,7 @@ package de.tobias.playpad.design.modern;
 
 import de.tobias.playpad.design.modern.model.ModernCartDesign;
 import de.tobias.playpad.design.modern.model.ModernGlobalDesign;
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import javafx.util.Duration;
 
 public interface ModernCartDesignHandler {
@@ -12,9 +12,9 @@ public interface ModernCartDesignHandler {
 	/*
 	 * Wird in einem neuen Thread aufgerufen
 	 */
-	void handleWarning(ModernCartDesign design, IPadViewController controller, Duration warning, ModernGlobalDesign globalDesign);
+	void handleWarning(ModernCartDesign design, AbstractPadViewController controller, Duration warning, ModernGlobalDesign globalDesign);
 
-	default void stopWarning(ModernCartDesign design, IPadViewController controller) {
+	default void stopWarning(ModernCartDesign design, AbstractPadViewController controller) {
 	}
 
 }
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernGlobalDesignHandler.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernGlobalDesignHandler.java
index 1c6930dd44d0737bfce2454d18f96ba131652aff..bca1e4aa9cee672852326f41dffe582e115f10e4 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernGlobalDesignHandler.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernGlobalDesignHandler.java
@@ -1,7 +1,7 @@
 package de.tobias.playpad.design.modern;
 
 import de.tobias.playpad.design.modern.model.ModernGlobalDesign;
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import de.tobias.playpad.project.Project;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
 import javafx.stage.Stage;
@@ -16,8 +16,8 @@ public interface ModernGlobalDesignHandler {
 	/*
 	 * Wird in einem neuen Thread aufgerufen
 	 */
-	void handleWarning(ModernGlobalDesign design, IPadViewController controller, Duration warning);
+	void handleWarning(ModernGlobalDesign design, AbstractPadViewController controller, Duration warning);
 
-	default void stopWarning(ModernGlobalDesign design, IPadViewController controller) {
+	default void stopWarning(ModernGlobalDesign design, AbstractPadViewController controller) {
 	}
 }
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java
index 618e0530d051cf4ce6434f5d504ebe4c5e6801e8..cbefe4d2a0c9c95ce5607e7bcd510b7311212ea9 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java
@@ -13,7 +13,7 @@ import de.tobias.playpad.pad.listener.trigger.PadTriggerContentListener;
 import de.tobias.playpad.pad.listener.trigger.PadTriggerDurationListener;
 import de.tobias.playpad.pad.listener.trigger.PadTriggerStatusListener;
 import de.tobias.playpad.pad.mediapath.MediaPath;
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import de.tobias.playpad.project.Project;
 import de.tobias.playpad.project.ProjectSettings;
 import de.tobias.playpad.project.page.PadIndex;
@@ -78,7 +78,7 @@ public class Pad {
 	// Utils
 	private transient boolean eof;
 
-	private transient IPadViewController controller;
+	private transient AbstractPadViewController controller;
 	private transient Project project;
 	private transient PadUpdateListener padListener;
 
@@ -574,11 +574,11 @@ public class Pad {
 		return controller != null;
 	}
 
-	public IPadViewController getController() {
+	public AbstractPadViewController getController() {
 		return controller;
 	}
 
-	public void setController(IPadViewController controller) {
+	public void setController(AbstractPadViewController controller) {
 		this.controller = controller;
 	}
 
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/view/IPadView.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/view/IPadView.java
index 51c6ae1b2d7450bf0cd0c191d822bc7f43be7beb..fd2be672d536176e22eb2a1097acca69a666be8e 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/view/IPadView.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/view/IPadView.java
@@ -1,9 +1,10 @@
 package de.tobias.playpad.pad.view;
 
 import de.tobias.playpad.pad.Pad;
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import de.tobias.playpad.project.page.PadIndex;
 import javafx.css.PseudoClass;
+import javafx.scene.control.Label;
 import javafx.scene.layout.Pane;
 
 /**
@@ -33,7 +34,7 @@ public interface IPadView {
 	 *
 	 * @return ViewController des Pad
 	 */
-	IPadViewController getViewController();
+	AbstractPadViewController getViewController();
 
 	/**
 	 * Gibt das oberste GUI Element des Pads zurück, welche im MainView verwendet wird.
@@ -106,6 +107,8 @@ public interface IPadView {
 	 */
 	void setPlaybarVisible(boolean visible);
 
+	Label getPlaylistLabel();
+
 	/**
 	 * Fügt die Standart Elemente der PadView hinzu. Die GUI Element sind Abhängig vom Pad, und welchen Content es hat.
 	 *
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/AbstractPadViewController.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/AbstractPadViewController.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1cbb5372b4768424ceae0a0f1cee17adf0a6527
--- /dev/null
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/AbstractPadViewController.java
@@ -0,0 +1,71 @@
+package de.tobias.playpad.pad.viewcontroller;
+
+import de.tobias.playpad.pad.Pad;
+import de.tobias.playpad.pad.content.Playlistable;
+import de.tobias.playpad.pad.listener.IPadPositionListener;
+import de.tobias.playpad.pad.view.IPadView;
+import javafx.beans.binding.Bindings;
+import javafx.beans.value.ChangeListener;
+import javafx.util.Duration;
+
+/**
+ * Schnittstellen um mit einem PadViewController zu kommunizieren.
+ *
+ * @author tobias
+ * @since 5.1.0
+ */
+public abstract class AbstractPadViewController {
+
+	/**
+	 * Gibt das Pad zurück, welches er verwaltet. (Das Datenmodel)
+	 *
+	 * @return Pad
+	 */
+	public abstract Pad getPad();
+
+	/**
+	 * Gibt die View des Controllers zurück.
+	 *
+	 * @return View
+	 */
+	public abstract IPadView getView();
+
+	/**
+	 * Setzt ein Pad für ein View. Hier werden die Datein mittels ViewController der View bekannt gemacht.
+	 *
+	 * @param pad Neues Pad
+	 */
+	public abstract void setupPad(Pad pad);
+
+	/**
+	 * Entfertn des Verbundene Pad von der View.
+	 */
+	public abstract void removePad();
+
+	public abstract void updateTimeLabel();
+
+	public abstract void updateButtonDisable();
+
+	public abstract IPadPositionListener getPadPositionListener();
+
+	public abstract ChangeListener<Duration> getPadDurationListener();
+
+	public void updatePlaylistLabelBinding(Pad pad) {
+		if (pad.getContent() instanceof Playlistable) {
+			final Playlistable content = (Playlistable) pad.getContent();
+			getView().getPlaylistLabel().textProperty().bind(Bindings.createStringBinding(() -> {
+				final int currentPlayingMediaIndex = content.getCurrentPlayingMediaIndex();
+				final int totalCount = pad.getPaths().size();
+
+				if (currentPlayingMediaIndex < 0) {
+					return "- / " + totalCount;
+				} else {
+					return (currentPlayingMediaIndex + 1) + " / " + totalCount;
+				}
+			}, content.currentPlayingMediaIndexProperty(), pad.getPaths()));
+		} else {
+			getView().getPlaylistLabel().textProperty().unbind();
+			getView().getPlaylistLabel().setText("");
+		}
+	}
+}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/IPadViewController.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/IPadViewController.java
deleted file mode 100644
index 6c010518809856910286625e81179040dfcb5c13..0000000000000000000000000000000000000000
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/IPadViewController.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package de.tobias.playpad.pad.viewcontroller;
-
-import de.tobias.playpad.pad.Pad;
-import de.tobias.playpad.pad.listener.IPadPositionListener;
-import de.tobias.playpad.pad.view.IPadView;
-import javafx.beans.value.ChangeListener;
-import javafx.util.Duration;
-
-/**
- * Schnittstellen um mit einem PadViewController zu kommunizieren.
- *
- * @author tobias
- * @since 5.1.0
- */
-public interface IPadViewController {
-
-	/**
-	 * Gibt das Pad zurück, welches er verwaltet. (Das Datenmodel)
-	 *
-	 * @return Pad
-	 */
-	Pad getPad();
-
-	/**
-	 * Gibt die View des Controllers zurück.
-	 *
-	 * @return View
-	 */
-	IPadView getView();
-
-	/**
-	 * Setzt ein Pad für ein View. Hier werden die Datein mittels ViewController der View bekannt gemacht.
-	 *
-	 * @param pad Neues Pad
-	 */
-	void setupPad(Pad pad);
-
-	/**
-	 * Entfertn des Verbundene Pad von der View.
-	 */
-	void removePad();
-
-	void updateTimeLabel();
-
-	void updateButtonDisable();
-
-	IPadPositionListener getPadPositionListener();
-
-	ChangeListener<Duration> getPadDurationListener();
-}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/view/main/MainLayoutFactory.java b/PlayWallCore/src/main/java/de/tobias/playpad/view/main/MainLayoutFactory.java
index f7cf7399636ec98235da323c9e75f1c23a0631f1..88039dcb374505f9f913fc81b4d72d5c20fdfd63 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/view/main/MainLayoutFactory.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/view/main/MainLayoutFactory.java
@@ -1,7 +1,7 @@
 package de.tobias.playpad.view.main;
 
 import de.tobias.playpad.pad.view.IPadView;
-import de.tobias.playpad.pad.viewcontroller.IPadViewController;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import de.tobias.playpad.registry.Component;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
 import de.tobias.playpad.viewcontroller.main.MenuToolbarViewController;
@@ -31,7 +31,7 @@ public abstract class MainLayoutFactory extends Component {
 	 *
 	 * @return Pad
 	 * @see IPadView notwendige Methoden für ein Pad
-	 * @see IPadViewController ViewController zum Pad
+	 * @see AbstractPadViewController ViewController zum Pad
 	 */
 	public abstract IPadView createPadView();