diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/PlaylistListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/PlaylistListener.java
index 1402fe7ae96105fd8e563096d617dcfaf9f5aaba..d7a70f4d519d505cc4f64878aa412278dd469e39 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/PlaylistListener.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/PlaylistListener.java
@@ -4,5 +4,11 @@ import de.tobias.playpad.pad.Pad;
 
 public interface PlaylistListener {
 
-	void onNextItem(Pad pad, int next, int total);
+	void onPlaylistStart(Pad pad);
+
+	void onPlaylistItemStart(Pad pad);
+
+	void onPlaylistItemEnd(Pad pad);
+
+	void onPlaylistEnd(Pad pad);
 }
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java
index 834121676c93bc610e53b4ed255d8c06536991ae..62a45871da4a76927c530b31a39b525efdc50227 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java
@@ -31,14 +31,24 @@ public class PadTriggerDurationListener implements ChangeListener<Duration> {
 				Profile currentProfile = Profile.currentProfile();
 				PadSettings padSettings = pad.getPadSettings();
 
-				// Execute Start Triggers
-				final Trigger startTrigger = padSettings.getTrigger(TriggerPoint.START);
-				startTrigger.handle(pad, currentTime, pad.getProject(), mainViewController, currentProfile);
-
-				// Execute End Trigger
-				final Duration leftTime = totalDuration.subtract(currentTime);
-				final Trigger endTrigger = padSettings.getTrigger(TriggerPoint.EOF);
-				endTrigger.handle(pad, leftTime, pad.getProject(), mainViewController, currentProfile);
+				if (TriggerPoint.START.isAvailable(pad)) {
+					// Execute Start Triggers
+					final Trigger startTrigger = padSettings.getTrigger(TriggerPoint.START);
+					startTrigger.handle(pad, currentTime, pad.getProject(), mainViewController, currentProfile);
+				}
+
+				if (TriggerPoint.PLAYLIST_ITEM_START.isAvailable(pad)) {
+					// Execute Start Triggers
+					final Trigger startTrigger = padSettings.getTrigger(TriggerPoint.PLAYLIST_ITEM_START);
+					startTrigger.handle(pad, currentTime, pad.getProject(), mainViewController, currentProfile);
+				}
+
+				if (TriggerPoint.EOF.isAvailable(pad)) {
+					// Execute End Trigger
+					final Duration leftTime = totalDuration.subtract(currentTime);
+					final Trigger endTrigger = padSettings.getTrigger(TriggerPoint.EOF);
+					endTrigger.handle(pad, leftTime, pad.getProject(), mainViewController, currentProfile);
+				}
 			}
 		}
 	}
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 eec30a0feaec27cb639cbe7ab76b5329f028981f..4aad600ee6c0e4059c26195bf72b09a0c34b7cdc 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
@@ -12,15 +12,37 @@ import javafx.util.Duration;
 
 public class PadTriggerPlaylistListener implements PlaylistListener {
 	@Override
-	public void onNextItem(Pad pad, int next, int total) {
+	public void onPlaylistStart(Pad pad) {
+
+	}
+
+	@Override
+	public void onPlaylistItemStart(Pad pad) {
 		if (!pad.isIgnoreTrigger()) {
-			PadSettings padSettings = pad.getPadSettings();
-			executeTrigger(pad, padSettings.getTriggers().get(TriggerPoint.PLAYLIST_NEXT));
+			final PadSettings padSettings = pad.getPadSettings();
+			final Trigger trigger = padSettings.getTriggers().get(TriggerPoint.PLAYLIST_ITEM_START);
+			executeTrigger(pad, trigger);
 		} else {
 			pad.setIgnoreTrigger(false);
 		}
 	}
 
+	@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);
+		}
+	}
+
+	@Override
+	public void onPlaylistEnd(Pad pad) {
+
+	}
+
 	private void executeTrigger(Pad pad, Trigger trigger) {
 		IMainViewController mainViewController = PlayPadPlugin.getInstance().getMainViewController();
 		Profile currentProfile = Profile.currentProfile();
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 f6d5fda76ac66f14a09bf7759e569b7ad9357bcb..fdf57e975dd2059d39424987ae670b61fbae25c6 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java
@@ -118,7 +118,9 @@ public class Trigger {
 				} else {
 					handleEndPoint(pad, currentDuration, project, mainViewController, currentProfile, item);
 				}
-			} else if (triggerPoint == TriggerPoint.PLAYLIST_NEXT) {
+			} 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);
 			}
 		}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java
index 4dc9e6f2155903d3a48a7ed57a399b34ecb2b0fb..1f6a6a4b19e0a33faabb6a0314e85dfa33348c7f 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java
@@ -10,7 +10,10 @@ public enum TriggerPoint {
 	START(true, pad -> !(pad.getContent() instanceof Playlistable)),
 	STOP(false, pad -> !(pad.getContent() instanceof Playlistable)),
 	EOF(true,  pad -> !(pad.getContent() instanceof Playlistable)),
-	PLAYLIST_NEXT(false,  pad -> pad.getContent() instanceof Playlistable);
+	PLAYLIST_START(false,  pad -> pad.getContent() instanceof Playlistable),
+	PLAYLIST_ITEM_START(true,  pad -> pad.getContent() instanceof Playlistable),
+	PLAYLIST_ITEM_END(false,  pad -> pad.getContent() instanceof Playlistable),
+	PLAYLIST_END(false,  pad -> pad.getContent() instanceof Playlistable);
 
 	/**
 	 * Defines if a trigger can be run after, before a certain event.
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 8e50a952dbf1a8ecacfbfcc97e14e94e3d68cfc1..e48882110fce35497d2a9dd5b35226899e8cdf23 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,6 +38,9 @@ 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 = {
@@ -55,14 +58,16 @@ class ContentPlayerMediaContainer(val content: ContentPlayerPadContent, private[
 
 
 		if (currentIndex + 1 < players.length) {
-			content.listeners.forEach(listener => listener.onNextItem(content.pad, 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.onNextItem(content.pad, 0, players.length))
+			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)