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 7bb7597bec88d5a0f72cfae7fb6d7f75e62c5ebe..a9bb720c3fc9b2e5ac0a080cf5b7175b08fbc57c 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java
@@ -19,14 +19,13 @@ public class CartTriggerItem extends TriggerItem {
 	private boolean allCarts;
 	private PadStatus newStatus; // Only Play, Pause, Stop
 
-	private String type;
+	private final String type;
 
 	CartTriggerItem(String type) {
-		super();
 		this.type = type;
-		newStatus = PadStatus.PLAY;
-		allCarts = false;
-		uuids = new UniqList<>();
+		this.newStatus = PadStatus.PLAY;
+		this.allCarts = false;
+		this.uuids = new UniqList<>();
 	}
 
 	public List<UUID> getCarts() {
diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/CartTriggerViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/CartTriggerViewController.java
index 1168ae13aedb828a12ba14ff18c14bad68718a1d..1d58f123a2ceb0ab27de8d3dda69a55e48501112 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/CartTriggerViewController.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/CartTriggerViewController.java
@@ -3,9 +3,9 @@ package de.tobias.playpad.viewcontroller.option.pad.trigger;
 import de.thecodelabs.utils.ui.NVC;
 import de.thecodelabs.utils.util.Localization;
 import de.tobias.playpad.PlayPadMain;
-import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.pad.PadStatus;
 import de.tobias.playpad.project.Project;
+import de.tobias.playpad.project.api.IPad;
 import de.tobias.playpad.trigger.CartTriggerItem;
 import de.tobias.playpad.view.main.ProjectPreviewView;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
@@ -35,12 +35,12 @@ public class CartTriggerViewController extends NVC {
 		this.item = item;
 
 		Project project = PlayPadMain.getProgramInstance().getCurrentProject();
-		final List<Pad> pads = item.getCarts().stream().map(project::getPad).collect(Collectors.toList());
+		final List<? extends IPad> pads = item.getCarts().stream().map(project::getPad).collect(Collectors.toList());
 		projectPreviewView = new ProjectPreviewView(project, pads, mainViewController.getPage());
 		projectPreviewView.setPadding(new Insets(0, 0, 0, 164));
 		projectPreviewView.selectedProperty().addListener((InvalidationListener) observable -> {
 			item.getCarts().clear();
-			for (Pad pad : projectPreviewView.getSelected()) {
+			for (IPad pad : projectPreviewView.getSelected()) {
 				item.getCarts().add(pad.getUuid());
 			}
 		});
diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/VolumeTriggerViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/VolumeTriggerViewController.java
index f48a57341e8a354af30dafc4ead00f256d7955f4..66718e15186b963c68d064339c0ac51aa15581c5 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/VolumeTriggerViewController.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/VolumeTriggerViewController.java
@@ -6,6 +6,7 @@ import de.tobias.playpad.PlayPadMain;
 import de.tobias.playpad.Strings;
 import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.project.Project;
+import de.tobias.playpad.project.api.IPad;
 import de.tobias.playpad.trigger.VolumeTriggerItem;
 import de.tobias.playpad.view.main.ProjectPreviewView;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
@@ -48,7 +49,7 @@ public class VolumeTriggerViewController extends NVC {
 		projectPreviewView.setPadding(new Insets(0, 0, 0, 164));
 		projectPreviewView.selectedProperty().addListener((InvalidationListener) observable -> {
 			item.getCarts().clear();
-			for (Pad pad : projectPreviewView.getSelected()) {
+			for (IPad pad : projectPreviewView.getSelected()) {
 				item.getCarts().add(pad.getUuid());
 			}
 		});
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 cbefe4d2a0c9c95ce5607e7bcd510b7311212ea9..cfc4fdd270537ebde4fe40b6e6a3500f813ff231 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java
@@ -16,6 +16,7 @@ import de.tobias.playpad.pad.mediapath.MediaPath;
 import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import de.tobias.playpad.project.Project;
 import de.tobias.playpad.project.ProjectSettings;
+import de.tobias.playpad.project.api.IPad;
 import de.tobias.playpad.project.page.PadIndex;
 import de.tobias.playpad.project.page.Page;
 import de.tobias.playpad.project.page.PageCoordinate;
@@ -39,7 +40,7 @@ import java.util.UUID;
  * @author tobias
  * @version 6.2.0
  */
-public class Pad {
+public class Pad implements IPad {
 
 	private UUID uuid;
 	private IntegerProperty positionProperty = new SimpleIntegerProperty();
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/Project.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/Project.java
index eedc4bcac8b6176a772fb4b133d1ac2a7d3682f6..9d9d3962f8b991c7c6ba09830843c75883f873be 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/project/Project.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/Project.java
@@ -3,6 +3,7 @@ package de.tobias.playpad.project;
 import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.pad.PadStatus;
 import de.tobias.playpad.pad.mediapath.MediaPath;
+import de.tobias.playpad.project.api.IProject;
 import de.tobias.playpad.project.page.PadIndex;
 import de.tobias.playpad.project.page.Page;
 import de.tobias.playpad.project.ref.ProjectReference;
@@ -27,7 +28,7 @@ import java.util.stream.Collectors;
  * @author tobias
  * @since 6.0.0
  */
-public class Project {
+public class Project implements IProject {
 
 	/**
 	 * Project file extension.
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java
index 0e4d089f1fa7f183a685ac292fc2fc363ca7cb2d..34c065494f144ce1e3321292514e2b14a5f87c90 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java
@@ -2,10 +2,11 @@ package de.tobias.playpad.project;
 
 import de.thecodelabs.storage.settings.annotation.Key;
 import de.thecodelabs.utils.application.ApplicationUtils;
+import de.tobias.playpad.project.api.IProjectSettings;
 
 import java.nio.file.Path;
 
-public class ProjectSettings {
+public class ProjectSettings implements IProjectSettings {
 
 	public static final int MAX_PAGES;
 
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPad.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPad.java
new file mode 100644
index 0000000000000000000000000000000000000000..cca8d7203b80679feca92d1df8421924091a86d9
--- /dev/null
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPad.java
@@ -0,0 +1,15 @@
+package de.tobias.playpad.project.api;
+
+import de.tobias.playpad.pad.PadStatus;
+
+import java.util.UUID;
+
+public interface IPad {
+	UUID getUuid();
+
+	String getName();
+
+	PadStatus getStatus();
+
+	int getPositionReadable();
+}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPage.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPage.java
new file mode 100644
index 0000000000000000000000000000000000000000..23ba1b4a8c7eff9b1f3935c281869786a5e5e5ef
--- /dev/null
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPage.java
@@ -0,0 +1,5 @@
+package de.tobias.playpad.project.api;
+
+public interface IPage {
+	IPad getPad(int x, int y);
+}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProject.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProject.java
new file mode 100644
index 0000000000000000000000000000000000000000..1b19a1baabfe815cad8cb5eb7525d3ba2249981b
--- /dev/null
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProject.java
@@ -0,0 +1,11 @@
+package de.tobias.playpad.project.api;
+
+import java.util.List;
+
+public interface IProject {
+	List<? extends IPage> getPages();
+
+	IPage getPage(int index);
+
+	IProjectSettings getSettings();
+}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProjectSettings.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProjectSettings.java
new file mode 100644
index 0000000000000000000000000000000000000000..d2970dcb0c4971f05b30c1b420ceabb2279038c5
--- /dev/null
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProjectSettings.java
@@ -0,0 +1,8 @@
+package de.tobias.playpad.project.api;
+
+public interface IProjectSettings {
+
+	int getColumns();
+
+	int getRows();
+}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/page/Page.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/page/Page.java
index 24f207894be9dc118cf8c20439094e3ab46ce851..1419a7e88f1d68a1f018cf2a1dd7408d7ea1a637 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/project/page/Page.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/page/Page.java
@@ -3,6 +3,7 @@ package de.tobias.playpad.project.page;
 import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.project.Project;
 import de.tobias.playpad.project.ProjectSettings;
+import de.tobias.playpad.project.api.IPage;
 import de.tobias.playpad.server.sync.command.CommandManager;
 import de.tobias.playpad.server.sync.command.Commands;
 import de.tobias.playpad.server.sync.listener.upstream.PageUpdateListener;
@@ -16,7 +17,7 @@ import java.util.*;
  * @author tobias
  * @since 6.0.0
  */
-public class Page {
+public class Page implements IPage {
 
 	private UUID id;
 	private IntegerProperty positionProperty;
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerItemFactory.java b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerItemFactory.java
index 118dc56017638413688062a0bd742f59ffc05dec..3872372739901d826233366244c371c5f437451f 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerItemFactory.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerItemFactory.java
@@ -13,5 +13,4 @@ public abstract class TriggerItemFactory extends Component {
 	public abstract TriggerItem newInstance(Trigger trigger);
 
 	public abstract NVC getSettingsController(TriggerItem item, IMainViewController mainViewController);
-
 }
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/view/main/ProjectPreviewView.java b/PlayWallCore/src/main/java/de/tobias/playpad/view/main/ProjectPreviewView.java
index 2e16c3cb79abe3471b9e6c0c185852f9efb87816..849d93003b3112b2522fb5b3c2ae525e27f9ef97 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/view/main/ProjectPreviewView.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/view/main/ProjectPreviewView.java
@@ -1,9 +1,9 @@
 package de.tobias.playpad.view.main;
 
-import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.pad.PadStatus;
-import de.tobias.playpad.project.Project;
-import de.tobias.playpad.project.page.Page;
+import de.tobias.playpad.project.api.IPad;
+import de.tobias.playpad.project.api.IPage;
+import de.tobias.playpad.project.api.IProject;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.geometry.Insets;
@@ -18,10 +18,10 @@ import java.util.List;
 
 public class ProjectPreviewView extends Pagination {
 
-	private final Project project;
-	private final ObservableList<Pad> selected;
+	private final IProject project;
+	private final ObservableList<IPad> selected;
 
-	public ProjectPreviewView(Project project, List<Pad> preSelect, int initialPage) {
+	public ProjectPreviewView(IProject project, List<? extends IPad> preSelect, int initialPage) {
 		super(project.getPages().size());
 		this.project = project;
 		this.selected = FXCollections.observableArrayList(preSelect);
@@ -38,10 +38,10 @@ public class ProjectPreviewView extends Pagination {
 
 		gridPane.setPadding(new Insets(0, 0, 7, 0));
 
-		final Page page = project.getPage(index);
+		final IPage page = project.getPage(index);
 		for (int x = 0; x < project.getSettings().getColumns(); x++) {
 			for (int y = 0; y < project.getSettings().getRows(); y++) {
-				final Pad pad = page.getPad(x, y);
+				final IPad pad = page.getPad(x, y);
 				ToggleButton toggleButton = getToggleButton(selected, pad);
 
 				gridPane.add(toggleButton, x, y);
@@ -50,7 +50,7 @@ public class ProjectPreviewView extends Pagination {
 		return gridPane;
 	}
 
-	private ToggleButton getToggleButton(List<Pad> preSelect, Pad pad) {
+	private ToggleButton getToggleButton(List<IPad> preSelect, IPad pad) {
 		ToggleButton toggleButton = new ToggleButton(String.valueOf(pad.getPositionReadable()));
 		if (pad.getStatus() != PadStatus.EMPTY) {
 			toggleButton.setTooltip(new Tooltip(pad.getName()));
@@ -72,11 +72,11 @@ public class ProjectPreviewView extends Pagination {
 		return toggleButton;
 	}
 
-	public List<Pad> getSelected() {
+	public List<? extends IPad> getSelected() {
 		return selected;
 	}
 
-	public ObservableList<Pad> selectedProperty() {
+	public ObservableList<? extends IPad> selectedProperty() {
 		return selected;
 	}
 }
diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItem.java b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItem.java
new file mode 100644
index 0000000000000000000000000000000000000000..87371e602d3959f7f8ec55281a32e40fe8d0a50a
--- /dev/null
+++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItem.java
@@ -0,0 +1,31 @@
+package de.tobias.playpad.plugin.api.trigger;
+
+import de.tobias.playpad.pad.Pad;
+import de.tobias.playpad.profile.Profile;
+import de.tobias.playpad.project.Project;
+import de.tobias.playpad.tigger.TriggerItem;
+import de.tobias.playpad.viewcontroller.main.IMainViewController;
+
+public class RemoteTriggerItem extends TriggerItem {
+
+	private final String type;
+
+	public RemoteTriggerItem(String type) {
+		this.type = type;
+	}
+
+	@Override
+	public String getType() {
+		return type;
+	}
+
+	@Override
+	public void performAction(Pad pad, Project project, IMainViewController controller, Profile profile) {
+
+	}
+
+	@Override
+	public TriggerItem copy() {
+		return null;
+	}
+}
diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemFactory.java b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e5bb19c7588507111862ccb1f711775ac929170
--- /dev/null
+++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemFactory.java
@@ -0,0 +1,24 @@
+package de.tobias.playpad.plugin.api.trigger;
+
+import de.thecodelabs.utils.ui.NVC;
+import de.tobias.playpad.tigger.Trigger;
+import de.tobias.playpad.tigger.TriggerItem;
+import de.tobias.playpad.tigger.TriggerItemFactory;
+import de.tobias.playpad.viewcontroller.main.IMainViewController;
+
+public class RemoteTriggerItemFactory extends TriggerItemFactory {
+
+	public RemoteTriggerItemFactory(String type) {
+		super(type);
+	}
+
+	@Override
+	public TriggerItem newInstance(Trigger trigger) {
+		return new RemoteTriggerItem(getType());
+	}
+
+	@Override
+	public NVC getSettingsController(TriggerItem item, IMainViewController mainViewController) {
+		return null;
+	}
+}
diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemSettingsController.java b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemSettingsController.java
new file mode 100644
index 0000000000000000000000000000000000000000..235f933d5d53612da483b42b0e679312ed24b546
--- /dev/null
+++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemSettingsController.java
@@ -0,0 +1,4 @@
+package de.tobias.playpad.plugin.api.trigger;
+
+public class RemoteTriggerItemSettingsController {
+}
diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/Trigger.xml b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/Trigger.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5fb97b9bbdeeb4d568f8517e44e0c8c6dccdf801
--- /dev/null
+++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/Trigger.xml
@@ -0,0 +1,3 @@
+<Actions>
+    <Component id="RemoteCart" name="Trigger.RemoteCart.Name">de.tobias.playpad.plugin.api.trigger.RemoteTriggerItemFactory</Component>
+</Actions>
\ No newline at end of file
diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/lang/base_de.properties b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/lang/base_de.properties
index 7a95dbf926e2f468c3f450654a661f0eeb6f54a3..74bfbb3a632d77f93e46304ae28a2b2915e4ba38 100644
--- a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/lang/base_de.properties
+++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/lang/base_de.properties
@@ -11,3 +11,5 @@ webapi-settings.remote.address=IP-Address/Host
 webapi-settings.remote.port=Port
 webapi-settings.remote.add=Hinzuf\u00FCgen
 webapi-settings.remote.remove=L\u00F6schen
+
+Trigger.RemoteCart.Name=Remote Kachel
\ No newline at end of file
diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/WebApiPlugin.scala b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/WebApiPlugin.scala
index 23e9900a831a191987f0b7f3a4d199a4a883d154..d932311848a8520f29df01aa8738a6bbc2d4196a 100644
--- a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/WebApiPlugin.scala
+++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/WebApiPlugin.scala
@@ -27,12 +27,15 @@ class WebApiPlugin extends PlayPadPluginStub with PluginArtifact {
 
 	override def startup(descriptor: PluginDescriptor): Unit = {
 		module = new Module(descriptor.getName, descriptor.getArtifactId)
+		Localization.addResourceBundle("plugin/webapi/lang/base", getClass.getClassLoader)
 
 		PlayPadPlugin.getInstance().addPadListener(new PadStatusListener)
 		PlayPadPlugin.getInstance().addGlobalListener(new ProjectListener)
 
 		Logger.debug("Enable Web API Plugin")
 
+		PlayPadPlugin.getRegistries.getTriggerItems.loadComponentsFromFile("plugin/webapi/Trigger.xml", getClass.getClassLoader, module, Localization.getBundle)
+
 		val settingsPath = WebApiPlugin.getWebApiSettingsPath
 		if (Files.exists(settingsPath)) {
 			webApiSettings = Storage.load(StorageTypes.JSON, classOf[WebApiSettings])
@@ -62,7 +65,6 @@ class WebApiPlugin extends PlayPadPluginStub with PluginArtifact {
 		})
 
 		PlayPadPlugin.getInstance().addGlobalSettingsTab(() => new WebApiSettingsViewController(webApiSettings))
-		Localization.addResourceBundle("plugin/webapi/lang/base", getClass.getClassLoader)
 	}
 
 	override def shutdown(): Unit = {