diff --git a/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java b/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java
index 96018fd9e44d571a9841cf184de8cbcdf98db73d..07c7b4ddae9458ad11c1c11ed38a32a72951fb23 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java
@@ -5,6 +5,7 @@ import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.pad.PadStatus;
 import de.tobias.playpad.profile.Profile;
 import de.tobias.playpad.project.Project;
+import de.tobias.playpad.tigger.LocalPadTrigger;
 import de.tobias.playpad.tigger.TriggerItem;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
 import org.dom4j.Element;
@@ -12,7 +13,7 @@ import org.dom4j.Element;
 import java.util.List;
 import java.util.UUID;
 
-public class CartTriggerItem extends TriggerItem {
+public class CartTriggerItem extends TriggerItem implements LocalPadTrigger {
 
 	private List<UUID> uuids;
 	private boolean allCarts;
@@ -27,6 +28,7 @@ public class CartTriggerItem extends TriggerItem {
 		this.uuids = new UniqList<>();
 	}
 
+	@Override
 	public List<UUID> getCarts() {
 		return uuids;
 	}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/LocalPadTrigger.java b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/LocalPadTrigger.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab4668911416d81f86e9b3726a43f19a4b57745e
--- /dev/null
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/LocalPadTrigger.java
@@ -0,0 +1,8 @@
+package de.tobias.playpad.tigger;
+
+import java.util.List;
+import java.util.UUID;
+
+public interface LocalPadTrigger {
+	List<UUID> getCarts();
+}
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 63002be0cebe88bca6874645b2334101ce41b590..e524e428994f4150d9f6873461cf6bce10dbbf74 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
@@ -37,7 +37,7 @@ class ContentPlayerMediaContainer(val content: ContentPlayerPadContent, private[
 		ContentPluginMain.playerViewController.play(this, withFadeIn)
 
 		content.getPad.setEof(false)
-		content.currentPlayingMediaIndexProperty().set(content.getMediaPlayers.indexOf(this))
+		content.currentPlayingMediaIndexProperty().set(content.getMediaContainers.indexOf(this))
 	}
 
 	def resume(withFadeIn: Boolean): Unit = {
@@ -51,12 +51,12 @@ class ContentPlayerMediaContainer(val content: ContentPlayerPadContent, private[
 	def next(): Unit = {
 		stop()
 
-		val players = content.getMediaPlayers
-		val index = players.indexOf(this)
-		content.currentPlayingMediaIndexProperty().set(index)
+		val players = content.getMediaContainers
+		val currentIndex = players.indexOf(this)
+		content.currentPlayingMediaIndexProperty().set(currentIndex)
 
-		if (index + 1 < players.length) {
-			players(index + 1).play(false)
+		if (currentIndex + 1 < players.length) {
+			players(currentIndex + 1).play(false)
 		} else if (content.getPad.getPadSettings.isLoop) {
 			players.head.play(false)
 		} else {
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 215e2d236d725b293a36adf8626b677882f99be5..07ef1279d32a42c9ef7a7a05e90bb8ceefef4a81 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
@@ -10,6 +10,7 @@ import de.tobias.playpad.plugin.content.ContentPluginMain
 import de.tobias.playpad.plugin.content.settings.{ContentPlayerPluginConfiguration, Zone}
 import de.tobias.playpad.plugin.content.util._
 import de.tobias.playpad.profile.Profile
+import de.tobias.playpad.tigger.{LocalPadTrigger, TriggerPoint}
 import javafx.application.Platform
 import javafx.beans.binding.{Bindings, ObjectBinding}
 import javafx.beans.property._
@@ -48,7 +49,7 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
 
 	override def currentPlayingMediaIndexProperty(): IntegerProperty = currentRunningIndexProperty
 
-	def getMediaPlayers: ObservableList[ContentPlayerMediaContainer] = mediaPlayers
+	def getMediaContainers: ObservableList[ContentPlayerMediaContainer] = mediaPlayers
 
 	override def hasNext: Boolean = getCurrentPlayingMediaIndex + 1 < mediaPlayers.length
 
@@ -92,25 +93,42 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
 	}
 
 	def onEof(): Unit = {
+		val hasLocalPadTrigger = getPad.getPadSettings.getTrigger(TriggerPoint.EOF)
+		  .getItems
+		  .stream()
+		  .filter(item => item.isInstanceOf[LocalPadTrigger])
+		  .map(item => item.asInstanceOf[LocalPadTrigger])
+		  .filter(item => hasPadTriggerInterferingZones(item))
+		  .count() > 0
+
+		val noFurtherItemsInPlaylist = getCurrentPlayingMediaIndex + 1 == mediaPlayers.length
+
 		// By default the last frame will be displayed. Only under certain conditions the last frame will be cleared
 		// 1. User settings set to "Clear last frame"
 		// 2. There is no loop
 		// 3. There is no playlist
-		if (!pad.getPadSettings.isLoop && getCurrentPlayingMediaIndex + 1 == mediaPlayers.length) {
-			if (!shouldShowLastFrame()) {
-				ContentPluginMain.playerViewController.clearHold(mediaPlayers(getCurrentPlayingMediaIndex))
-			} else {
+		if (!pad.getPadSettings.isLoop && noFurtherItemsInPlaylist) {
+			if (shouldShowLastFrame() || hasLocalPadTrigger) {
 				showingLastFrame = true
 				return
+			} else {
+				ContentPluginMain.playerViewController.clearHold(mediaPlayers(getCurrentPlayingMediaIndex))
 			}
 		}
 
 		showingLastFrame = false
+		mediaPlayers(getCurrentPlayingMediaIndex).next()
+	}
 
-		if (getPad.isEof) {
-			mediaPlayers(getCurrentPlayingMediaIndex).next()
-			return
-		}
+	private def hasPadTriggerInterferingZones(item: LocalPadTrigger): Boolean = {
+		item.getCarts.stream().anyMatch(id => {
+			val content = pad.getProject.getPad(id).getContent
+			if (!content.isInstanceOf[ContentPlayerPadContent]) {
+				return false
+			}
+			val targetZones = content.asInstanceOf[ContentPlayerPadContent].getSelectedZones
+			return targetZones.exists(zone => getSelectedZones.contains(zone))
+		})
 	}
 
 	/*