diff --git a/PlayWall/src/main/resources/lang/_de.properties b/PlayWall/src/main/resources/lang/_de.properties
index 84809cdf0268fa8f6ed2bbb5f625136426f8a3ee..e583b7e22368d531c167a9310fd19018bc4e63e8 100755
--- a/PlayWall/src/main/resources/lang/_de.properties
+++ b/PlayWall/src/main/resources/lang/_de.properties
@@ -215,7 +215,10 @@ Trigger.Volume.Name=Lautst\u00E4rke
 TriggerPoint.START=Start
 TriggerPoint.STOP=Stop
 TriggerPoint.EOF=Ende
-TriggerPoint.PLAYLIST_NEXT=Playlist Next
+TriggerPoint.PLAYLIST_START=Playlist Start
+TriggerPoint.PLAYLIST_ITEM_START=Playlist Item Start
+TriggerPoint.PLAYLIST_ITEM_END=Playlist Item Ende
+TriggerPoint.PLAYLIST_END=Playlist Ende
 
 # Drag and Drop Mode
 DnDMode.Replace=Ersetzen
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerPlaylistListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerPlaylistListener.java
index 4aad600ee6c0e4059c26195bf72b09a0c34b7cdc..efba0d26413e8bbac6095e7a6bc6e3ed58b8b1ed 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerPlaylistListener.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerPlaylistListener.java
@@ -13,40 +13,35 @@ import javafx.util.Duration;
 public class PadTriggerPlaylistListener implements PlaylistListener {
 	@Override
 	public void onPlaylistStart(Pad pad) {
-
+		handleTrigger(pad, TriggerPoint.PLAYLIST_START);
 	}
 
 	@Override
 	public void onPlaylistItemStart(Pad pad) {
-		if (!pad.isIgnoreTrigger()) {
-			final PadSettings padSettings = pad.getPadSettings();
-			final Trigger trigger = padSettings.getTriggers().get(TriggerPoint.PLAYLIST_ITEM_START);
-			executeTrigger(pad, trigger);
-		} else {
-			pad.setIgnoreTrigger(false);
-		}
+		handleTrigger(pad, TriggerPoint.PLAYLIST_ITEM_START);
 	}
 
 	@Override
 	public void onPlaylistItemEnd(Pad pad) {
-		if (!pad.isIgnoreTrigger()) {
-			final PadSettings padSettings = pad.getPadSettings();
-			final Trigger trigger = padSettings.getTriggers().get(TriggerPoint.PLAYLIST_ITEM_END);
-			executeTrigger(pad, trigger);
-		} else {
-			pad.setIgnoreTrigger(false);
-		}
+		handleTrigger(pad, TriggerPoint.PLAYLIST_ITEM_END);
 	}
 
 	@Override
 	public void onPlaylistEnd(Pad pad) {
-
+		handleTrigger(pad, TriggerPoint.PLAYLIST_END);
 	}
 
-	private void executeTrigger(Pad pad, Trigger trigger) {
-		IMainViewController mainViewController = PlayPadPlugin.getInstance().getMainViewController();
-		Profile currentProfile = Profile.currentProfile();
+	private void handleTrigger(Pad pad, TriggerPoint point) {
+		if (!pad.isIgnoreTrigger()) {
+			final PadSettings padSettings = pad.getPadSettings();
+			final Trigger trigger = padSettings.getTriggers().get(point);
 
-		trigger.handle(pad, Duration.ZERO, pad.getProject(), mainViewController, currentProfile);
+			final IMainViewController mainViewController = PlayPadPlugin.getInstance().getMainViewController();
+			final Profile currentProfile = Profile.currentProfile();
+
+			trigger.handle(pad, Duration.ZERO, pad.getProject(), mainViewController, currentProfile);
+		} else {
+			pad.setIgnoreTrigger(false);
+		}
 	}
 }
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java
index fdf57e975dd2059d39424987ae670b61fbae25c6..127c8e007dd6e0f1251717e23ff16aabefcab795 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java
@@ -106,22 +106,30 @@ public class Trigger {
 
 	public void handle(Pad pad, Duration currentDuration, Project project, IMainViewController mainViewController, Profile currentProfile) {
 		for (TriggerItem item : items) {
-			if (triggerPoint == TriggerPoint.START) {
-				handleStartPoint(pad, currentDuration, project, mainViewController, currentProfile, item);
-			} else if (triggerPoint == TriggerPoint.STOP) {
-				item.performAction(pad, project, mainViewController, currentProfile);
-			} else if (triggerPoint == TriggerPoint.EOF) {
-				if (item.getDurationFromPoint() == Duration.ZERO) {
-					if (pad.isEof()) {
-						item.performAction(pad, project, mainViewController, currentProfile);
+			switch (triggerPoint) {
+				case START:
+					handleStartPoint(pad, currentDuration, project, mainViewController, currentProfile, item);
+					break;
+				case STOP:
+					item.performAction(pad, project, mainViewController, currentProfile);
+					break;
+				case EOF:
+					if (item.getDurationFromPoint() == Duration.ZERO) {
+						if (pad.isEof()) {
+							item.performAction(pad, project, mainViewController, currentProfile);
+						}
+					} else {
+						handleEndPoint(pad, currentDuration, project, mainViewController, currentProfile, item);
 					}
-				} else {
-					handleEndPoint(pad, currentDuration, project, mainViewController, currentProfile, item);
-				}
-			} else if (triggerPoint == TriggerPoint.PLAYLIST_ITEM_START) {
-				handleStartPoint(pad, currentDuration, project, mainViewController, currentProfile, item);
-			} else if (triggerPoint == TriggerPoint.PLAYLIST_ITEM_END) {
-				item.performAction(pad, project, mainViewController, currentProfile);
+					break;
+				case PLAYLIST_START:
+				case PLAYLIST_ITEM_START:
+					handleStartPoint(pad, currentDuration, project, mainViewController, currentProfile, item);
+					break;
+				case PLAYLIST_ITEM_END:
+				case PLAYLIST_END:
+					item.performAction(pad, project, mainViewController, currentProfile);
+					break;
 			}
 		}
 	}
diff --git a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala
index e48882110fce35497d2a9dd5b35226899e8cdf23..54235bf261dc2846348f8d67e28f47579ea02e18 100644
--- a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala
+++ b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala
@@ -38,9 +38,6 @@ class ContentPlayerMediaContainer(val content: ContentPlayerPadContent, private[
 
 		content.getPad.setEof(false)
 		content.currentPlayingMediaIndexProperty().set(content.getMediaContainers.indexOf(this))
-
-		content.listeners.forEach(listener => listener.onPlaylistStart(content.pad))
-		content.listeners.forEach(listener => listener.onPlaylistItemStart(content.pad))
 	}
 
 	def resume(withFadeIn: Boolean): Unit = {
@@ -56,18 +53,13 @@ class ContentPlayerMediaContainer(val content: ContentPlayerPadContent, private[
 		val currentIndex = players.indexOf(this)
 		content.currentPlayingMediaIndexProperty().set(currentIndex)
 
-
 		if (currentIndex + 1 < players.length) {
-			content.listeners.forEach(listener => listener.onPlaylistItemEnd(content.pad))
 			if (content.getPad.getStatus == PadStatus.PLAY) {
 				players(currentIndex + 1).play(false)
-				content.listeners.forEach(listener => listener.onPlaylistItemStart(content.pad))
 			}
 		} else if (content.getPad.getPadSettings.isLoop) {
-			content.listeners.forEach(listener => listener.onPlaylistItemEnd(content.pad))
 			if (content.getPad.getStatus == PadStatus.PLAY) {
 				players.head.play(false)
-				content.listeners.forEach(listener => listener.onPlaylistItemStart(content.pad))
 			}
 		} else {
 			content.getPad.setStatus(PadStatus.STOP)
diff --git a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala
index cf3651d22e700c4810e2c0206cf00236288cfca7..1271fc9784635658409a013de478bb5d64b5f209 100644
--- a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala
+++ b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala
@@ -69,6 +69,9 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
 			}
 			getPad.setEof(false)
 			mediaPlayers.head.play(withFadeIn)
+
+			listeners.forEach(listener => listener.onPlaylistStart(pad))
+			listeners.forEach(listener => listener.onPlaylistItemStart(pad))
 		}
 		showingLastFrame = false
 		isPause = false
@@ -81,7 +84,11 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
 	}
 
 	override def next(): Unit = {
-		mediaPlayers(getCurrentPlayingMediaIndex).next()
+		listeners.forEach(listener => listener.onPlaylistItemEnd(pad))
+		if (pad.getStatus == PadStatus.PLAY) {
+			mediaPlayers(getCurrentPlayingMediaIndex).next()
+			listeners.forEach(listener => listener.onPlaylistItemStart(pad))
+		}
 	}
 
 	override def stop(): Boolean = {
@@ -91,6 +98,8 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
 		if (getCurrentPlayingMediaIndex != -1) {
 			mediaPlayers(getCurrentPlayingMediaIndex).stop()
 
+			listeners.forEach(listener => listener.onPlaylistEnd(pad))
+
 			if (showingLastFrame && !stopMediaByOtherPlayer) {
 				ContentPluginMain.playerViewController.clearHold(mediaPlayers(getCurrentPlayingMediaIndex))
 			}
@@ -128,7 +137,7 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
 		// Only automatically go to the next playlist item, if auto next is active or
 		// the item is the last one (next() go into stop state if no item is left)
 		if (isAutoNext || noFurtherItemsInPlaylist) {
-			mediaPlayers(getCurrentPlayingMediaIndex).next()
+			next()
 		}
 	}