diff --git a/.gitignore b/.gitignore
index 2a2b1bc2f3c3f3eec2889dc8c9fe13f4870f7542..3fde153d06b468f4673d3c1bcbfdefdeb2eef532 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 **/target/
 **/build
 **/.idea/**
-*.iml
\ No newline at end of file
+*.iml
+.idea/encodings.xml 
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
deleted file mode 100644
index c1500a33cb5596556ab38560f449acbae8fbe473..0000000000000000000000000000000000000000
--- a/.idea/encodings.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="Encoding" native2AsciiForPropertiesFiles="true">
-    <file url="file://$PROJECT_DIR$" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWall" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWall/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWall/src/main/resources" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWall/src/main/resources/config" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallComponents" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallComponents/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallComponents/src/main/resources" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallCore" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallCore/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallCore/src/main/resources" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginAwake" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginAwake/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginAwake/src/main/resources" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/resources" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginEqualizer" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginEqualizer/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginEqualizer/src/main/resources" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginLaunchpad" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginLaunchpad/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginLaunchpad/src/main/resources" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginMedia" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginMedia/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginMedia/src/main/resources" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginNativeAudio" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginNativeAudio/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginNativeAudio/src/main/resources" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginPlayoutLog" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/resources" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginWebAPI" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources" charset="UTF-8" />
-    <file url="PROJECT" charset="UTF-8" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java
index f7eb8026b7ac5464277a43715c071459265ec514..c49bbd13df0cc78bf46c5a161e79b0f23c1000fe 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java
@@ -9,7 +9,7 @@ import de.thecodelabs.utils.threading.Worker;
 import de.thecodelabs.utils.ui.NVC;
 import de.thecodelabs.utils.util.SystemUtils;
 import de.thecodelabs.versionizer.service.UpdateService;
-import de.tobias.playpad.design.ModernDesignHandler;
+import de.tobias.playpad.design.ModernDesignProvider;
 import de.tobias.playpad.initialize.*;
 import de.tobias.playpad.plugin.*;
 import de.tobias.playpad.profile.ProfileNotFoundException;
@@ -65,7 +65,7 @@ public class PlayPadImpl implements PlayPad {
 
 	private UpdateService updateService;
 	protected GlobalSettings globalSettings;
-	private ModernDesignHandler modernDesign;
+	private ModernDesignProvider modernDesign;
 
 	private Session session;
 
@@ -239,11 +239,11 @@ public class PlayPadImpl implements PlayPad {
 		return parameters;
 	}
 
-	public ModernDesignHandler getModernDesign() {
+	public ModernDesignProvider getModernDesign() {
 		return modernDesign;
 	}
 
-	void setModernDesign(ModernDesignHandler modernDesign) {
+	void setModernDesign(ModernDesignProvider modernDesign) {
 		this.modernDesign = modernDesign;
 	}
 
diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java
index d52ffecfb20f1bf03f7a1f5ee00721fac4035c69..b4e367111bb127f74f0f2b0cdb713a96c7f21848 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java
@@ -12,7 +12,7 @@ import de.thecodelabs.utils.ui.Alerts;
 import de.thecodelabs.utils.util.OS;
 import de.thecodelabs.utils.util.OS.OSType;
 import de.thecodelabs.utils.util.SystemUtils;
-import de.tobias.playpad.design.ModernDesignHandlerImpl;
+import de.tobias.playpad.design.ModernDesignProviderImpl;
 import de.tobias.playpad.design.ModernStyleableImpl;
 import de.tobias.playpad.profile.ref.ProfileReferenceManager;
 import de.tobias.playpad.project.Project;
@@ -108,7 +108,7 @@ public class PlayPadMain extends Application {
 		impl.setIcon(stageIcon, getClass().getClassLoader().getResourceAsStream(ICON_PATH));
 
 		PlayPadPlugin.setStyleable(new ModernStyleableImpl());
-		impl.setModernDesign(new ModernDesignHandlerImpl());
+		impl.setModernDesign(new ModernDesignProviderImpl());
 
 		PlayPadPlugin.setInstance(impl);
 	}
diff --git a/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignHandlerImpl.java b/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignProviderImpl.java
similarity index 63%
rename from PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignHandlerImpl.java
rename to PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignProviderImpl.java
index 4d14df99a3f684c79a02dbfa75b37b259b20a9ff..9e96bcc90e115741f47183b1a5709da5e7767cae 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignHandlerImpl.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignProviderImpl.java
@@ -2,12 +2,22 @@ package de.tobias.playpad.design;
 
 import de.tobias.playpad.design.modern.ModernCartDesignHandler;
 import de.tobias.playpad.design.modern.ModernGlobalDesignHandler;
+import de.tobias.playpad.design.modern.ModernWarningDesignHandler;
 
-public class ModernDesignHandlerImpl implements ModernDesignHandler {
-
+public class ModernDesignProviderImpl implements ModernDesignProvider
+{
+	private ModernWarningDesignHandler warningHandler;
 	private ModernCartDesignHandler cartDesignHandler;
 	private ModernGlobalDesignHandler globalDesignHandler;
 
+	@Override
+	public ModernWarningDesignHandler warning() {
+		if (warningHandler == null) {
+			warningHandler = new ModernWarningDesignHandlerImpl();
+		}
+		return warningHandler;
+	}
+
 	@Override
 	public ModernGlobalDesignHandler global() {
 		if (globalDesignHandler == null) {
diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java
index b71c1305615c898f1db7f4d3bf7d5f443116c5a9..0e3de9499da41130e72e786773960f9a09cccd8e 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java
@@ -66,11 +66,11 @@ public class DesktopColorPickerView implements Consumer<DisplayableColor>, Event
 				PadSettings padSettings = pad.getPadSettings();
 
 				if (event.getButton() == MouseButton.PRIMARY) {
-					padSettings.setCustomDesign(true);
 					ModernCartDesign design = padSettings.getDesign();
+					design.setEnableCustomBackgroundColor(true);
 					colorModeHandler.setColor(design, selectedColor);
 				} else if (event.getButton() == MouseButton.SECONDARY) {
-					padSettings.setCustomDesign(false);
+					padSettings.getDesign().setEnableCustomBackgroundColor(false);
 				}
 				PlayPadMain.getProgramInstance().getMainViewController().loadUserCss();
 			}
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 e1489f3445343db9ef7b1b3a46be0e6030a8f690..09038fa1959a241e22247f06c6ae34ea83daf2c6 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
@@ -8,6 +8,7 @@ import de.thecodelabs.utils.ui.scene.BusyView;
 import de.thecodelabs.utils.util.ColorUtils;
 import de.tobias.playpad.PlayPadPlugin;
 import de.tobias.playpad.design.FeedbackDesignColorSuggester;
+import de.tobias.playpad.design.modern.model.ModernCartDesign;
 import de.tobias.playpad.layout.desktop.DesktopMainLayoutFactory;
 import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.pad.PadStatus;
@@ -354,19 +355,20 @@ public class DesktopPadView implements IPadView {
 	@Override
 	public void showNotFoundIcon(Pad pad, boolean show) {
 		if (show) {
-			FeedbackDesignColorSuggester associator;
-			if (pad.getPadSettings().isCustomDesign()) {
-				associator = pad.getPadSettings().getDesign();
-			} else {
-				associator = Profile.currentProfile().getProfileSettings().getDesign();
-			}
+			FeedbackDesignColorSuggester globalDesign = Profile.currentProfile().getProfileSettings().getDesign();
+			Color layoutStdColor = globalDesign.getDesignDefaultColor();
 
-			if (associator != null) {
-				Color color = associator.getDesignDefaultColor();
-				notFoundLabel.setColor(ColorUtils.getAppropriateTextColor(color));
-			} else {
-				notFoundLabel.setColor(Color.RED);
+			if(pad != null)
+			{
+				final ModernCartDesign padDesign = pad.getPadSettings().getDesign();
+
+				if(padDesign.isEnableCustomBackgroundColor())
+				{
+					layoutStdColor = padDesign.getDesignDefaultColor();
+				}
 			}
+
+			notFoundLabel.setColor(ColorUtils.getAppropriateTextColor(layoutStdColor));
 		}
 		notFoundLabel.setVisible(show);
 		root.setOpacity(show ? 0.5 : 1.0);
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 c9f233e15d351c154a65fd41e47ad3f2f9196eb2..f0f20d4a74d40b4548e5276711cc3da60860a852 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
@@ -10,6 +10,7 @@ import de.thecodelabs.utils.util.OS;
 import de.thecodelabs.utils.util.win.User32X;
 import de.tobias.playpad.PlayPadPlugin;
 import de.tobias.playpad.design.FeedbackDesignColorSuggester;
+import de.tobias.playpad.design.modern.model.ModernCartDesign;
 import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.pad.content.PadContent;
 import de.tobias.playpad.pad.content.PadContentFactory;
@@ -283,20 +284,21 @@ public class TouchPadView implements IPadView {
 
 	@Override
 	public void showNotFoundIcon(Pad pad, boolean show) {
-		if (show) {
-			FeedbackDesignColorSuggester associator = null;
-			if (pad.getPadSettings().isCustomDesign()) {
-				associator = pad.getPadSettings().getDesign();
-			} else {
-				associator = Profile.currentProfile().getProfileSettings().getDesign();
-			}
+		if(show) {
+			FeedbackDesignColorSuggester globalDesign = Profile.currentProfile().getProfileSettings().getDesign();
+			Color layoutStdColor = globalDesign.getDesignDefaultColor();
+
+			if(pad != null)
+			{
+				final ModernCartDesign padDesign = pad.getPadSettings().getDesign();
 
-			if (associator != null) {
-				Color color = associator.getDesignDefaultColor();
-				notFoundLabel.setColor(ColorUtils.getAppropriateTextColor(color));
-			} else {
-				notFoundLabel.setColor(Color.RED);
+				if(padDesign.isEnableCustomBackgroundColor())
+				{
+					layoutStdColor = padDesign.getDesignDefaultColor();
+				}
 			}
+
+			notFoundLabel.setColor(ColorUtils.getAppropriateTextColor(layoutStdColor));
 		}
 		notFoundLabel.setVisible(show);
 		root.setOpacity(show ? 0.5 : 1.0);
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 5326b5f914229d7a4e1b9499bb44c01234d00ecf..e325c7877dd59f83dbb70accf9dc16fb0ae71771 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
@@ -2,9 +2,9 @@ package de.tobias.playpad.pad.listener;
 
 import de.tobias.playpad.PlayPadMain;
 import de.tobias.playpad.action.actions.CartAction;
-import de.tobias.playpad.design.ModernDesignHandler;
-import de.tobias.playpad.design.modern.ModernCartDesignHandler;
+import de.tobias.playpad.design.ModernDesignProvider;
 import de.tobias.playpad.design.modern.ModernGlobalDesignHandler;
+import de.tobias.playpad.design.modern.ModernWarningDesignHandler;
 import de.tobias.playpad.design.modern.model.ModernCartDesign;
 import de.tobias.playpad.design.modern.model.ModernGlobalDesign;
 import de.tobias.playpad.pad.Pad;
@@ -104,21 +104,16 @@ public class PadPositionListener implements Runnable, IPadPositionListener {
 	 */
 	@Override
 	public void run() {
-		PadSettings padSettings = pad.getPadSettings();
-		Duration warning = padSettings.getWarning();
+		final PadSettings padSettings = pad.getPadSettings();
+		final Duration warningDuration = padSettings.getWarning();
 
-		ModernGlobalDesign globalDesign = Profile.currentProfile().getProfileSettings().getDesign();
-		final ModernDesignHandler modernDesign = PlayPadMain.getProgramInstance().getModernDesign();
+		final ModernGlobalDesign globalDesign = Profile.currentProfile().getProfileSettings().getDesign();
+		final ModernCartDesign cartDesign = padSettings.getDesign();
 
-		if (padSettings.isCustomDesign()) {
-			ModernCartDesignHandler handler = modernDesign.cart();
-			ModernCartDesign design = pad.getPadSettings().getDesign();
+		final ModernDesignProvider modernDesign = PlayPadMain.getProgramInstance().getModernDesign();
 
-			handler.handleWarning(design, controller, warning, globalDesign);
-		} else {
-			ModernGlobalDesignHandler handler = modernDesign.global();
-			handler.handleWarning(globalDesign, controller, warning);
-		}
+		final ModernWarningDesignHandler handler = modernDesign.warning();
+		handler.handleWarning(globalDesign, cartDesign, controller, warningDuration);
 	}
 
 	private void startWarningThread() {
@@ -136,20 +131,10 @@ public class PadPositionListener implements Runnable, IPadPositionListener {
 			warningThread = null;
 		}
 
-		PadSettings padSettings = pad.getPadSettings();
-		final ModernDesignHandler modernDesign = PlayPadMain.getProgramInstance().getModernDesign();
-
-		if (padSettings.isCustomDesign()) {
-			ModernCartDesignHandler handler = modernDesign.cart();
-			ModernCartDesign design = pad.getPadSettings().getDesign();
+		final ModernDesignProvider modernDesign = PlayPadMain.getProgramInstance().getModernDesign();
 
-			handler.stopWarning(design, controller);
-		} else {
-			ModernGlobalDesignHandler handler = modernDesign.global();
-			ModernGlobalDesign globalDesign = Profile.currentProfile().getProfileSettings().getDesign();
-
-			handler.stopWarning(globalDesign, controller);
-		}
+		final ModernWarningDesignHandler handler = modernDesign.warning();
+		handler.stopWarning(controller);
 		controller.getView().setStyle("");
 	}
 }
diff --git a/PlayWall/src/main/java/de/tobias/playpad/project/ProjectJsonReader.java b/PlayWall/src/main/java/de/tobias/playpad/project/ProjectJsonReader.java
index 6f33e38af123e5c80346b484ffed63211fee6171..29030b5abfe80efd80615cf5ac5385cb5b371ca5 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/project/ProjectJsonReader.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/project/ProjectJsonReader.java
@@ -78,7 +78,6 @@ public class ProjectJsonReader {
 			ModernCartDesign design = readModernCartDesign(pad, object.getJSONObject("design"));
 			if (design != null) {
 				pad.getPadSettings().setDesign(design);
-				pad.getPadSettings().setCustomDesign(true); // TODO Sync
 			}
 		}
 
@@ -101,7 +100,11 @@ public class ProjectJsonReader {
 			ModernColor backgroundColor = ModernColor.valueOf(object.getString("background_color"));
 			ModernColor playColor = ModernColor.valueOf(object.getString("play_color"));
 
-			return new ModernCartDesign(pad, id, backgroundColor, playColor, ModernColor.RED2); // TODO Fix Cue In Color
+			return new ModernCartDesign.ModernCartDesignBuilder(pad, id)
+					.withBackgroundColor(backgroundColor, false)
+					.withPlayColor(playColor, false)
+					.withCueInColor(ModernColor.RED2, false)
+					.build(); // TODO Fix Cue In Color
 		}
 		return null;
 	}
diff --git a/PlayWall/src/main/java/de/tobias/playpad/update/VersionUpdater.java b/PlayWall/src/main/java/de/tobias/playpad/update/VersionUpdater.java
index b5f7c5be9793d58da416f0c68334c94194d36afe..96fc17c2f4c66c96fd4b8e5d9d4a26a0d80ff86d 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/update/VersionUpdater.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/update/VersionUpdater.java
@@ -1,13 +1,106 @@
 package de.tobias.playpad.update;
 
+import de.thecodelabs.logger.Logger;
 import de.thecodelabs.utils.application.App;
+import de.thecodelabs.utils.application.container.PathType;
 import de.thecodelabs.utils.application.update.UpdateService;
+import org.dom4j.Attribute;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.OutputFormat;
+import org.dom4j.io.SAXReader;
+import org.dom4j.io.XMLWriter;
 
-public class VersionUpdater implements UpdateService {
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.text.MessageFormat;
+import java.util.UUID;
 
+public class VersionUpdater implements UpdateService
+{
 	@Override
-	public void update(App app, long oldVersion, long newVersion) {
+	public void update(App app, long oldVersion, long newVersion)
+	{
+		try
+		{
+			if(oldVersion < 44)
+			{
+				updateTo44(app);
+			}
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+		}
+	}
+
+	private void updateTo44(App app) throws DocumentException, IOException
+	{
+		Logger.debug("Updating to app version 44...");
+
+		SAXReader reader = new SAXReader();
+
+		Document projectsDocument = reader.read(Files.newInputStream(app.getPath(PathType.CONFIGURATION, "Projects.xml")));
+		for(Element element : projectsDocument.getRootElement().elements("Project"))
+		{
+			final String projectName = element.attributeValue("name");
+			final UUID projectUUID = UUID.fromString(element.attributeValue("uuid"));
 
+			Logger.debug(MessageFormat.format("Updating project \"{0}\" (id: {1})...", projectName, projectUUID));
+			Path projectPath = app.getPath(PathType.DOCUMENTS, projectUUID.toString() + ".xml");
+			final Document migratedProject = updateProject(Files.newInputStream(projectPath));
+
+			XMLWriter writer = new XMLWriter(Files.newOutputStream(projectPath), OutputFormat.createPrettyPrint());
+			writer.write(migratedProject);
+			writer.close();
+		}
 	}
 
+	public static Document updateProject(InputStream projectInputStream) throws DocumentException
+	{
+		SAXReader reader = new SAXReader();
+
+		Document projectDocument = reader.read(projectInputStream);
+		Element rootProjectElement = projectDocument.getRootElement();
+
+		for(Element page : rootProjectElement.elements())
+		{
+			for(Element pad : page.elements())
+			{
+				final Element settings = pad.element("Settings");
+				if(settings == null)
+				{
+					continue;
+				}
+
+				final Element designElement = settings.element("Design");
+				if(designElement == null)
+				{
+					continue;
+				}
+
+				final Attribute customFlag = designElement.attribute("custom");
+				if(customFlag == null)
+				{
+					continue;
+				}
+
+				designElement.remove(customFlag);
+
+				if(customFlag.getValue().equals("false"))
+				{
+					continue;
+				}
+
+				designElement.addElement("EnableCustomBackgroundColor").addText("true");
+				designElement.addElement("EnableCustomPlayColor").addText("true");
+				designElement.addElement("EnableCustomCueInColor").addText("true");
+			}
+		}
+
+		return projectDocument;
+	}
 }
diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionTypeViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionTypeViewController.java
index da08e59d72a87d0213f66478b116bb28ebba7972..ee1dda9212e66fe9acc5ab4a1916a74445d94ab1 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionTypeViewController.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionTypeViewController.java
@@ -17,7 +17,9 @@ import javafx.scene.control.ToggleGroup;
 import javafx.scene.layout.*;
 import org.controlsfx.control.SegmentedButton;
 
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * Diese View ist die Basis für die Einstellunge für eine CartAction. Dabei enthällt diese View ein Grid aus Buttons (Carts), eine
@@ -44,7 +46,7 @@ public class CartActionTypeViewController extends NVC {
 
 
 	public CartActionTypeViewController(Mapping mapping, IMappingTabViewController parentController, String actionType) {
-		this(mapping, parentController, actionType,null);
+		this(mapping, parentController, actionType, null);
 	}
 
 	public CartActionTypeViewController(Mapping mapping, IMappingTabViewController parentController, String actionType, AbstractActionViewController actionViewController) {
@@ -113,17 +115,21 @@ public class CartActionTypeViewController extends NVC {
 			int currentY = data[1];
 
 			try {
-				List<Action> cartActions = mapping.getActionsForType(actionType);
-				for (Action action : cartActions) {
-					if (CartAction.getX(action) == currentX && CartAction.getY(action) == currentY) {
-						if (actionViewController != null) {
-							cartActionContainer.getChildren().setAll(actionViewController.getParent());
-							cartActionContainer.setVisible(true);
-							actionViewController.setCartAction(action);
-						}
-						parentController.showMapperFor(action);
-					}
+				final List<Action> cartActions = mapping.getActionsForType(actionType).stream()
+						.filter(action -> CartAction.getX(action) == currentX && CartAction.getY(action) == currentY)
+						.collect(Collectors.toList());
+
+				if (cartActions.size() > 1) {
+					throw new IllegalArgumentException("Only one action allowed per pad. Currently " + cartActions.size() + " are registered for pad coordinate " + Arrays.toString(data));
+				}
+
+				final Action action = cartActions.get(0);
+				if (actionViewController != null) {
+					cartActionContainer.getChildren().setAll(actionViewController.getParent());
+					cartActionContainer.setVisible(true);
+					actionViewController.setCartAction(action);
 				}
+				parentController.showMapperFor(action);
 			} catch (NoSuchComponentException e) {
 				Logger.error(e);
 			}
diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java
index 737251c6fe259d64d4d058ba20ec9727d250a8cb..e3fe4664112f86babef0a24a3ce16e1f4c1c2159 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java
@@ -1,7 +1,6 @@
 package de.tobias.playpad.viewcontroller.actions;
 
 import de.thecodelabs.midi.action.Action;
-import de.thecodelabs.utils.ui.NVC;
 import de.thecodelabs.utils.util.Localization;
 import de.tobias.playpad.Strings;
 import de.tobias.playpad.action.actions.CartAction;
diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/design/ModernCartDesignViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/design/ModernCartDesignViewController.java
index fbf39d6b0e6d113d1b5d08bcf1852194f17f2e02..5ee9469334a4ee1ee5649fd4adbab2e02a1c6048 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/design/ModernCartDesignViewController.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/design/ModernCartDesignViewController.java
@@ -17,6 +17,13 @@ import java.util.function.Consumer;
 
 public class ModernCartDesignViewController extends NVC implements IColorButton {
 
+	@FXML
+	private CheckBox backgroundColorCheckbox;
+	@FXML
+	private CheckBox playColorCheckbox;
+	@FXML
+	private CheckBox cueInColorCheckbox;
+
 	@FXML
 	private Button backgroundColorButton;
 	@FXML
@@ -29,25 +36,49 @@ public class ModernCartDesignViewController extends NVC implements IColorButton
 	@FXML
 	private Button resetButton;
 
-	private ModernCartDesign design;
+	private final ModernCartDesign design;
 
 	private PopOver colorChooser;
 
-	public ModernCartDesignViewController(ModernCartDesign layout) {
+	public ModernCartDesignViewController(ModernCartDesign design) {
 		load("view/option/layout", "ModernLayoutCart", Localization.getBundle());
 
-		this.design = layout;
-		setLayout();
+		this.design = design;
+		setDesign();
 	}
 
-	private void setLayout() {
+	private void setDesign() {
 		backgroundColorButton.setStyle(getLinearGradientCss(design.getBackgroundColor()));
 		playColorButton.setStyle(getLinearGradientCss(design.getPlayColor()));
 		cueInColorButton.setStyle(getLinearGradientCss(design.getCueInColor()));
+
+		backgroundColorCheckbox.setSelected(design.isEnableCustomBackgroundColor());
+		playColorCheckbox.setSelected(design.isEnableCustomPlayColor());
+		cueInColorCheckbox.setSelected(design.isEnableCustomCueInColor());
 	}
 
 	@Override
 	public void init() {
+		backgroundColorCheckbox.selectedProperty().addListener((observable, oldValue, newValue) ->
+		{
+			design.setEnableCustomBackgroundColor(newValue);
+			backgroundColorButton.setDisable(!newValue);
+		});
+		playColorCheckbox.selectedProperty().addListener((observable, oldValue, newValue) ->
+		{
+			design.setEnableCustomPlayColor(newValue);
+			playColorButton.setDisable(!newValue);
+		});
+		cueInColorCheckbox.selectedProperty().addListener((observable, oldValue, newValue) ->
+		{
+			design.setEnableCustomCueInColor(newValue);
+			cueInColorButton.setDisable(!newValue);
+		});
+
+		backgroundColorButton.setDisable(true);
+		playColorButton.setDisable(true);
+		cueInColorButton.setDisable(true);
+
 		addIconToButton(backgroundColorButton);
 		addIconToButton(playColorButton);
 		addIconToButton(cueInColorButton);
@@ -56,22 +87,22 @@ public class ModernCartDesignViewController extends NVC implements IColorButton
 	@FXML
 	private void resetButtonHandler(ActionEvent event) {
 		design.reset();
-		setLayout();
+		setDesign();
 	}
 
 	@FXML
 	private void backgroundColorButtonHandler(ActionEvent event) {
-		colorChooser(backgroundColorButton, design.getBackgroundColor(), color -> design.setBackgroundColor(color));
+		colorChooser(backgroundColorButton, design.getBackgroundColor(), design::setBackgroundColor);
 	}
 
 	@FXML
 	private void playColorButtonHandler(ActionEvent event) {
-		colorChooser(playColorButton, design.getPlayColor(), color -> design.setPlayColor(color));
+		colorChooser(playColorButton, design.getPlayColor(), design::setPlayColor);
 	}
 
 	@FXML
 	private void cueInColorButtonHandler(ActionEvent event) {
-		colorChooser(cueInColorButton, design.getPlayColor(), color -> design.setCueInColor(color));
+		colorChooser(cueInColorButton, design.getPlayColor(), design::setCueInColor);
 	}
 
 	private void colorChooser(Button anchorNode, ModernColor startColor, Consumer<ModernColor> onFinish) {
@@ -95,11 +126,10 @@ public class ModernCartDesignViewController extends NVC implements IColorButton
 	}
 
 	private String getLinearGradientCss(ModernColor color) {
-		if (Profile.currentProfile().getProfileSettings().getDesign().isFlatDesign()) {
+		if(Profile.currentProfile().getProfileSettings().getDesign().isFlatDesign()) {
 			return "-fx-background-color: " + color.paint() + ";";
 		} else {
 			return "-fx-background-color: " + color.linearGradient() + ";";
 		}
 	}
-
 }
diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/DesignPadTabViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/DesignPadTabViewController.java
index 9350b63841d763894290086376d135a3df8b02cf..c08a6a30d3ee2a2822d4ad105b73eb1dc09941c2 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/DesignPadTabViewController.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/DesignPadTabViewController.java
@@ -6,23 +6,18 @@ import de.tobias.playpad.PlayPadPlugin;
 import de.tobias.playpad.Strings;
 import de.tobias.playpad.design.modern.model.ModernCartDesign;
 import de.tobias.playpad.pad.Pad;
-import de.tobias.playpad.pad.PadSettings;
-import de.tobias.playpad.profile.Profile;
 import de.tobias.playpad.viewcontroller.PadSettingsTabViewController;
 import de.tobias.playpad.viewcontroller.design.ModernCartDesignViewController;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
 import javafx.fxml.FXML;
-import javafx.scene.control.CheckBox;
 import javafx.scene.layout.VBox;
 
 public class DesignPadTabViewController extends PadSettingsTabViewController {
 
 	@FXML
 	private VBox layoutContainer;
-	@FXML
-	private CheckBox enableLayoutCheckBox;
 
-	private Pad pad;
+	private final Pad pad;
 
 	DesignPadTabViewController(Pad pad) {
 		load("view/option/pad", "LayoutTab", Localization.getBundle());
@@ -31,26 +26,6 @@ public class DesignPadTabViewController extends PadSettingsTabViewController {
 
 	@Override
 	public void init() {
-		enableLayoutCheckBox.selectedProperty().addListener((a, b, c) ->
-		{
-			PadSettings padSettings = pad.getPadSettings();
-			if (c && !padSettings.isCustomDesign()) {
-				try {
-					padSettings.setCustomDesign(true);
-
-					ModernCartDesign layout = padSettings.getDesign();
-					layout.copyGlobalLayout(Profile.currentProfile().getProfileSettings().getDesign());
-
-					setLayoutViewController(pad);
-				} catch (Exception e) {
-					showErrorMessage(Localization.getString(Strings.ERROR_STANDARD_GEN, e.getLocalizedMessage()));
-					Logger.error(e);
-				}
-			} else if (!c && padSettings.isCustomDesign()) {
-				padSettings.setCustomDesign(false);
-				setLayoutViewController(null);
-			}
-		});
 	}
 
 	@Override
@@ -60,12 +35,7 @@ public class DesignPadTabViewController extends PadSettingsTabViewController {
 
 	@Override
 	public void loadSettings(Pad pad) {
-		PadSettings padSettings = pad.getPadSettings();
-
-		enableLayoutCheckBox.setSelected(padSettings.isCustomDesign());
-		if (padSettings.isCustomDesign()) {
-			setLayoutViewController(pad);
-		}
+		setLayoutViewController(pad);
 	}
 
 	private void setLayoutViewController(Pad pad) {
diff --git a/PlayWall/src/main/resources/style/modern-pad-cue-in.css b/PlayWall/src/main/resources/style/modern-pad-cue-in.css
new file mode 100644
index 0000000000000000000000000000000000000000..65ea71f1be01bb6a98b7e566b10c8e995bd4c33d
--- /dev/null
+++ b/PlayWall/src/main/resources/style/modern-pad-cue-in.css
@@ -0,0 +1,4 @@
+
+.pad${#prefix}-cue-in {
+    -fx-background-color: ${#padCueInColor} !important;
+}
\ No newline at end of file
diff --git a/PlayWall/src/main/resources/style/modern-pad.css b/PlayWall/src/main/resources/style/modern-pad.css
index abd17dbdf936ab7d80a0c9fd7a022c98935d9669..11df504e7820334526c06d2003bd0ce425313b1c 100644
--- a/PlayWall/src/main/resources/style/modern-pad.css
+++ b/PlayWall/src/main/resources/style/modern-pad.css
@@ -21,15 +21,10 @@
 	-fx-background-color: ${#padColor};
 }
 
-.pad${#prefix}-cue-in${#class} {
-	-fx-background-color: ${#padCueInColor};
-}
-
-
 .pad${#prefix}-info${#class} {
 	-fx-text-fill: ${#fontColor};
 }
 
 .pad${#prefix}-title${#class} {
 	-fx-text-fill: ${#fontColor};
-}
\ No newline at end of file
+}
diff --git a/PlayWall/src/main/resources/view/option/layout/ModernLayoutCart.fxml b/PlayWall/src/main/resources/view/option/layout/ModernLayoutCart.fxml
index 4d3d165be6852b06cfdf2750f2bb8af7b6be3023..1044f83b5a0e9b552eab50d00b3929b7b1f787f3 100644
--- a/PlayWall/src/main/resources/view/option/layout/ModernLayoutCart.fxml
+++ b/PlayWall/src/main/resources/view/option/layout/ModernLayoutCart.fxml
@@ -1,51 +1,51 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <?import javafx.geometry.Insets?>
-<?import javafx.scene.control.*?>
-<?import javafx.scene.layout.*?>
-<VBox spacing="14.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.CheckBox?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.VBox?>
+
+<VBox spacing="14.0" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1">
     <children>
         <HBox spacing="14.0">
             <children>
                 <VBox alignment="BOTTOM_LEFT" prefWidth="150.0">
                     <children>
-                        <Label alignment="CENTER_RIGHT" prefWidth="150.0" text="%layout.label.color"
-                               VBox.vgrow="ALWAYS">
+                        <Label alignment="CENTER_RIGHT" prefWidth="150.0" text="%layout.label.color" VBox.vgrow="ALWAYS">
                             <VBox.margin>
-                                <Insets bottom="5.0"/>
+                                <Insets bottom="5.0" />
                             </VBox.margin>
                         </Label>
                     </children>
                 </VBox>
                 <VBox layoutX="110.0" layoutY="8.0" maxWidth="1.7976931348623157E308" prefWidth="125.0" spacing="14.0">
                     <children>
-                        <Label alignment="BOTTOM_LEFT" layoutX="110.0" layoutY="8.0" prefHeight="60.0" prefWidth="150.0"
-                               text="%layout.label.background" wrapText="true" VBox.vgrow="ALWAYS"/>
-                        <Button fx:id="backgroundColorButton" focusTraversable="false" mnemonicParsing="false"
-                                onAction="#backgroundColorButtonHandler" prefWidth="150.0"/>
+                  <CheckBox fx:id="backgroundColorCheckbox" mnemonicParsing="false" text="%padSettings.layout.checkbox.custom" />
+                        <Label alignment="BOTTOM_LEFT" layoutX="110.0" layoutY="8.0" prefWidth="150.0" text="%layout.label.background" wrapText="true" VBox.vgrow="ALWAYS" />
+                        <Button fx:id="backgroundColorButton" focusTraversable="false" mnemonicParsing="false" onAction="#backgroundColorButtonHandler" prefWidth="150.0" />
                     </children>
                 </VBox>
                 <VBox layoutX="243.0" layoutY="8.0" maxWidth="1.7976931348623157E308" prefWidth="125.0" spacing="14.0">
                     <children>
-                        <Label alignment="BOTTOM_LEFT" layoutX="243.0" layoutY="8.0" prefHeight="60.0" prefWidth="150.0"
-                               text="%layout.label.play" wrapText="true" VBox.vgrow="ALWAYS"/>
-                        <Button fx:id="playColorButton" focusTraversable="false" mnemonicParsing="false"
-                                onAction="#playColorButtonHandler" prefWidth="150.0"/>
+                  <CheckBox fx:id="playColorCheckbox" mnemonicParsing="false" text="%padSettings.layout.checkbox.custom" />
+                        <Label alignment="BOTTOM_LEFT" layoutX="243.0" layoutY="8.0" prefWidth="150.0" text="%layout.label.play" wrapText="true" VBox.vgrow="ALWAYS" />
+                        <Button fx:id="playColorButton" focusTraversable="false" mnemonicParsing="false" onAction="#playColorButtonHandler" prefWidth="150.0" />
                     </children>
                 </VBox>
                 <VBox layoutX="243.0" layoutY="8.0" maxWidth="1.7976931348623157E308" prefWidth="125.0" spacing="14.0">
                     <children>
-                        <Label alignment="BOTTOM_LEFT" layoutX="243.0" layoutY="8.0" prefHeight="60.0" prefWidth="150.0"
-                               text="%layout.label.cueIn" wrapText="true" VBox.vgrow="ALWAYS"/>
-                        <Button fx:id="cueInColorButton" focusTraversable="false" mnemonicParsing="false"
-                                onAction="#cueInColorButtonHandler" prefWidth="150.0"/>
+                  <CheckBox fx:id="cueInColorCheckbox" mnemonicParsing="false" text="%padSettings.layout.checkbox.custom" />
+                        <Label alignment="BOTTOM_LEFT" layoutX="243.0" layoutY="8.0" prefWidth="150.0" text="%layout.label.cueIn" wrapText="true" VBox.vgrow="ALWAYS" />
+                        <Button fx:id="cueInColorButton" focusTraversable="false" mnemonicParsing="false" onAction="#cueInColorButtonHandler" prefWidth="150.0" />
                     </children>
                 </VBox>
             </children>
         </HBox>
-        <Button fx:id="resetButton" mnemonicParsing="false" onAction="#resetButtonHandler" text="%layout.button.reset">
+        <Button fx:id="resetButton" alignment="CENTER" mnemonicParsing="false" onAction="#resetButtonHandler" text="%layout.button.reset">
             <VBox.margin>
-                <Insets left="164.0"/>
+                <Insets left="164.0" top="28.0" />
             </VBox.margin>
         </Button>
     </children>
diff --git a/PlayWall/src/main/resources/view/option/pad/LayoutTab.fxml b/PlayWall/src/main/resources/view/option/pad/LayoutTab.fxml
index fa3222571bdfb80064b4638bb51585ef124bc1aa..b1c294e8842611ebf04793fe6815835d8fa8aa9c 100644
--- a/PlayWall/src/main/resources/view/option/pad/LayoutTab.fxml
+++ b/PlayWall/src/main/resources/view/option/pad/LayoutTab.fxml
@@ -1,27 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-
 <?import javafx.geometry.Insets?>
-<?import javafx.scene.control.CheckBox?>
 <?import javafx.scene.control.Label?>
-<?import javafx.scene.layout.*?>
-<VBox spacing="14.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
+<?import javafx.scene.layout.AnchorPane?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.VBox?>
+
+<VBox spacing="14.0" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1">
     <children>
-        <HBox layoutX="14.0" layoutY="13.0" spacing="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0"
-              AnchorPane.topAnchor="14.0">
+        <HBox layoutX="14.0" layoutY="13.0" spacing="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="14.0">
             <children>
-                <Label alignment="CENTER_RIGHT" layoutX="14.0" layoutY="14.0" prefWidth="150.0"
-                       text="%padSettings.layout.label.custom"/>
-                <CheckBox fx:id="enableLayoutCheckBox" layoutX="127.0" layoutY="13.0" mnemonicParsing="false"
-                          text="%padSettings.layout.checkbox.custom"/>
+                <Label alignment="CENTER_RIGHT" layoutX="14.0" layoutY="14.0" prefWidth="150.0" text="%padSettings.layout.label.custom" />
             </children>
             <VBox.margin>
-                <Insets/>
+                <Insets />
             </VBox.margin>
         </HBox>
-        <VBox fx:id="layoutContainer" prefHeight="200.0" prefWidth="100.0"/>
+        <VBox fx:id="layoutContainer" prefHeight="200.0" prefWidth="100.0" />
     </children>
     <padding>
-        <Insets bottom="14.0" left="14.0" right="14.0" top="14.0"/>
+        <Insets bottom="14.0" left="14.0" right="14.0" top="14.0" />
     </padding>
 </VBox>
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 b639f9099419bd956a0b420216f9c01568b2c679..945eddab9b05903d35ceed1e7b0b189be15315fb 100644
--- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala
+++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala
@@ -1,13 +1,10 @@
 package de.tobias.playpad.design
 
 import de.thecodelabs.utils.application.ApplicationUtils
-import de.tobias.playpad.design.modern.model.{ModernCartDesign, ModernGlobalDesign}
+import de.tobias.playpad.design.modern.model.ModernCartDesign
 import de.tobias.playpad.design.modern.{ModernCartDesignHandler, ModernColor}
-import de.tobias.playpad.pad.content.play.Durationable
-import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController
 import de.tobias.playpad.util.Minifier
 import de.tobias.playpad.view.PseudoClasses
-import javafx.util.Duration
 import org.springframework.expression.ExpressionParser
 import org.springframework.expression.common.TemplateParserContext
 import org.springframework.expression.spel.standard.SpelExpressionParser
@@ -18,20 +15,28 @@ import scala.jdk.CollectionConverters._
 class ModernCartDesignHandlerImpl extends ModernCartDesignHandler {
 
 	override def generateCss(design: ModernCartDesign, classSuffix: String, flat: Boolean): String = {
-		String.join(
-			generateCss(design, flat, classSuffix, design.getBackgroundColor),
-			generateCss(design, flat, classSuffix, design.getPlayColor, s":${PseudoClasses.PLAY_CLASS.getPseudoClassName}"),
-			generateCss(design, flat, classSuffix, design.getBackgroundColor, s":${PseudoClasses.WARN_CLASS.getPseudoClassName}")
-		)
-	}
+		var result = ""
 
-	private def generateCss(design: ModernCartDesign, flat: Boolean, padIdentifier: String, color: ModernColor, styleState: String = ""): String = {
-		val expressionParser: ExpressionParser = new SpelExpressionParser()
-		val context = new StandardEvaluationContext()
+		if(design.isEnableCustomBackgroundColor)
+		{
+			result +=	generatePadCss(design, flat, classSuffix, design.getBackgroundColor)
+			result += generatePadCss(design, flat, classSuffix, design.getBackgroundColor, s":${PseudoClasses.WARN_CLASS.getPseudoClassName}")
+		}
 
-		val resource = ApplicationUtils.getApplication.getClasspathResource("style/modern-pad.css")
-		val string = Minifier minify resource.getAsString
+		if(design.isEnableCustomPlayColor)
+		{
+			result += generatePadCss(design, flat, classSuffix, design.getPlayColor, s":${PseudoClasses.PLAY_CLASS.getPseudoClassName}")
+		}
 
+		if(design.isEnableCustomCueInColor)
+		{
+			result += generateCueInCss(design, flat, classSuffix)
+		}
+
+		result
+	}
+
+	private def generatePadCss(design: ModernCartDesign, flat: Boolean, padIdentifier: String, color: ModernColor, styleState: String = ""): String = {
 		val values: Map[String, AnyRef] = Map(
 			"prefix" -> padIdentifier,
 			"class" -> styleState,
@@ -43,33 +48,27 @@ class ModernCartDesignHandlerImpl extends ModernCartDesignHandler {
 			"fontColor" -> color.getFontColor
 		)
 
-		context.setVariables(values.asJava)
-		expressionParser.parseExpression(string, new TemplateParserContext("${", "}")).getValue(context, classOf[String])
+		generateCss("style/modern-pad.css", values)
 	}
 
-	override def handleWarning(design: ModernCartDesign, controller: AbstractPadViewController, warning: Duration, globalDesign: ModernGlobalDesign): Unit = {
-		if (globalDesign.isWarnAnimation) {
-			val playColor = design.getPlayColor
-			val backgroundColor = design.getBackgroundColor
-
-			val fadeStopColor = if (globalDesign.isFlatDesign) backgroundColor.toFlatFadeableColor else backgroundColor.toFadeableColor
-			val fadePlayColor = if (globalDesign.isFlatDesign) playColor.toFlatFadeableColor else playColor.toFadeableColor
+	private def generateCueInCss(design: ModernCartDesign, flat: Boolean, padIdentifier: String): String = {
+		val values: Map[String, AnyRef] = Map(
+			"prefix" -> padIdentifier,
+			"padCueInColor" -> (if (flat) design.getCueInColor.paint() else design.getCueInColor.linearGradient())
+		)
 
-			val pad = controller.getPad
-			val animationDuration = pad.getContent match {
-				case durationable: Durationable =>
-					if (warning greaterThan durationable.getDuration) {
-						durationable.getDuration
-					} else {
-						warning
-					}
-				case _ => warning
-			}
-			ModernDesignAnimator.animateWarn(controller, fadePlayColor, fadeStopColor, animationDuration)
-		} else {
-			ModernDesignAnimator.warnFlash(controller)
-		}
+		generateCss("style/modern-pad-cue-in.css", values)
 	}
 
-	override def stopWarning(design: ModernCartDesign, controller: AbstractPadViewController): Unit = ModernDesignAnimator.stopAnimation(controller)
+	private def generateCss(templatePath: String, values: Map[String, AnyRef]): String =
+	{
+		val expressionParser: ExpressionParser = new SpelExpressionParser()
+		val context = new StandardEvaluationContext()
+
+		val resource = ApplicationUtils.getApplication.getClasspathResource(templatePath)
+		val content = Minifier minify resource.getAsString
+
+		context.setVariables(values.asJava)
+		expressionParser.parseExpression(content, new TemplateParserContext("${", "}")).getValue(context, classOf[String])
+	}
 }
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 3eea45b74878a931b801b72ea341ce13375be7d2..2f36bbb65034d438a9473f72d4036f8b598e6276 100644
--- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala
+++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala
@@ -4,8 +4,6 @@ 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.AbstractPadViewController
 import de.tobias.playpad.project.Project
 import de.tobias.playpad.util.Minifier
 import de.tobias.playpad.view.{ColorPickerView, PseudoClasses}
@@ -13,7 +11,6 @@ import de.tobias.playpad.viewcontroller.main.IMainViewController
 import de.tobias.playpad.{DisplayableColor, PlayPadMain}
 import javafx.scene.paint.Color
 import javafx.stage.Stage
-import javafx.util.Duration
 import org.springframework.expression.ExpressionParser
 import org.springframework.expression.common.TemplateParserContext
 import org.springframework.expression.spel.standard.SpelExpressionParser
@@ -50,10 +47,8 @@ class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with Color
 		project.getPage(controller.getPage).getPads.forEach(pad => {
 			val padSettings = pad.getPadSettings
 
-			if (padSettings.isCustomDesign) {
-				val cartDesign = padSettings.getDesign
-				stringBuilder.append(cartDesignHandler.generateCss(cartDesign, s"${pad.getPadIndex}", design.isFlatDesign))
-			}
+			val cartDesign = padSettings.getDesign
+			stringBuilder.append(cartDesignHandler.generateCss(cartDesign, s"${pad.getPadIndex}", design.isFlatDesign))
 		})
 		Files.write(customCss, stringBuilder.toString().getBytes())
 
@@ -92,33 +87,6 @@ class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with Color
 		expressionParser.parseExpression(string, new TemplateParserContext("${", "}")).getValue(context, classOf[String])
 	}
 
-	override def handleWarning(design: ModernGlobalDesign, controller: AbstractPadViewController, warning: Duration): Unit = {
-		if (design.isWarnAnimation) {
-			warnAnimation(design, controller, warning)
-		} else {
-			ModernDesignAnimator.warnFlash(controller)
-		}
-	}
-
-	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
-
-		val pad = controller.getPad
-		val duration = pad.getContent match {
-			case durationable: Durationable =>
-				if (warning.greaterThan(durationable.getDuration)) {
-					durationable.getDuration
-				} else {
-					warning
-				}
-			case _ => warning
-		}
-		ModernDesignAnimator.animateWarn(controller, playColor, stopColor, duration)
-	}
-
-	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)
 
 	override def setColor(design: ModernCartDesign, color: DisplayableColor): Unit = {
diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala
new file mode 100644
index 0000000000000000000000000000000000000000..5e288d06813b1e649212c703fc51e60c1afcc4bb
--- /dev/null
+++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala
@@ -0,0 +1,20 @@
+package de.tobias.playpad.design
+
+import de.tobias.playpad.design.modern.ModernWarningDesignHandler
+import de.tobias.playpad.design.modern.model.ModernGlobalDesign
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController
+import de.tobias.playpad.util.FadeableColor
+import javafx.util.Duration
+
+class ModernWarningDesignHandlerImpl extends ModernWarningDesignHandler {
+
+  override def performWarning(design: ModernGlobalDesign, fadeStartColor: FadeableColor, fadeStopColor: FadeableColor, controller: AbstractPadViewController, warningDuration: Duration): Unit = {
+    if (design.isWarnAnimation) {
+      ModernDesignAnimator.animateWarn(controller, fadeStartColor, fadeStopColor, warningDuration)
+    } else {
+      ModernDesignAnimator.warnFlash(controller)
+    }
+  }
+
+  override def stopWarning(controller: AbstractPadViewController): Unit = ModernDesignAnimator.stopAnimation(controller)
+}
diff --git a/PlayWall/src/test/java/de/tobias/playpad/update/VersionUpdaterTest.java b/PlayWall/src/test/java/de/tobias/playpad/update/VersionUpdaterTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..15339be0643a1dc3aa66ae68d6a7735129be8e0a
--- /dev/null
+++ b/PlayWall/src/test/java/de/tobias/playpad/update/VersionUpdaterTest.java
@@ -0,0 +1,45 @@
+package de.tobias.playpad.update;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.junit.Test;
+
+import java.io.InputStream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class VersionUpdaterTest
+{
+	@Test
+	public void testMigrateProject_UpdatePadDesignSettings() throws DocumentException
+	{
+		final InputStream projectInputStream = VersionUpdaterTest.class.getClassLoader().getResourceAsStream("de/tobias/playpad/update/ProjectToMigrateToVersion44.xml");
+		final Document migratedProject = VersionUpdater.updateProject(projectInputStream);
+
+		final Element rootElement = migratedProject.getRootElement();
+		final Element pageElement = rootElement.elements().get(0);
+
+		// pad with custom design enabled
+		final Element padElement = pageElement.elements().get(0);
+		final Element designElement = padElement.element("Settings").element("Design");
+
+		assertThat(designElement.attribute("custom")).isNull();
+
+		assertThat(designElement.element("EnableCustomBackgroundColor").getStringValue()).isEqualTo("true");
+		assertThat(designElement.element("BackgroundColor").getStringValue()).isEqualTo("RED2");
+
+		assertThat(designElement.element("EnableCustomPlayColor").getStringValue()).isEqualTo("true");
+		assertThat(designElement.element("PlayColor").getStringValue()).isEqualTo("YELLOW2");
+
+		assertThat(designElement.element("EnableCustomCueInColor").getStringValue()).isEqualTo("true");
+		assertThat(designElement.element("CueInColor").getStringValue()).isEqualTo("LIGHT_GREEN2");
+
+
+		// pad without custom design
+		final Element padElement2 = pageElement.elements().get(1);
+		final Element designElement2 = padElement2.element("Settings").element("Design");
+
+		assertThat(designElement2.attribute("custom")).isNull();
+	}
+}
diff --git a/PlayWall/src/test/resources/de/tobias/playpad/update/ProjectToMigrateToVersion44.xml b/PlayWall/src/test/resources/de/tobias/playpad/update/ProjectToMigrateToVersion44.xml
new file mode 100644
index 0000000000000000000000000000000000000000..86a23a31d6079ae067eb9329594ba46cc50d65d9
--- /dev/null
+++ b/PlayWall/src/test/resources/de/tobias/playpad/update/ProjectToMigrateToVersion44.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<Project>
+    <Page uuid="a40033c7-4a85-49c9-bdfe-00e0e8a35fa2" id="0" name="">
+        <Pad uuid="1028ee71-aebb-4975-8bfd-40d6872bc1b0" index="0" name="" status="EMPTY">
+            <Settings id="cc73d33f-e3dc-4b58-b199-2a77577b1d89">
+                <Volume>1.0</Volume>
+                <Loop>false</Loop>
+                <Design id="5603c0a3-f3e6-4191-857b-978ba3846e28" custom="true">
+                    <BackgroundColor>RED2</BackgroundColor>
+                    <PlayColor>YELLOW2</PlayColor>
+                    <CueInColor>LIGHT_GREEN2</CueInColor>
+                </Design>
+                <CustomSettings/>
+                <Triggers>
+                    <Trigger point="START"/>
+                    <Trigger point="EOF_STOP"/>
+                </Triggers>
+            </Settings>
+        </Pad>
+        <Pad uuid="bde56734-a606-4c19-a19b-7ef20aa7b827" index="1" name="" status="EMPTY">
+            <Settings id="0be18dbe-f914-4a11-a470-b4279fe98e0f">
+                <Volume>1.0</Volume>
+                <Loop>false</Loop>
+                <Design custom="false"/>
+                <CustomSettings/>
+                <Triggers>
+                    <Trigger point="START"/>
+                    <Trigger point="EOF_STOP"/>
+                </Triggers>
+            </Settings>
+        </Pad>
+    </Page>
+    <Settings>
+        <Columns>2</Columns>
+        <Rows>1</Rows>
+        <MediaPath active="false"/>
+    </Settings>
+</Project>
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/action/feedback/ColorAdjuster.java b/PlayWallCore/src/main/java/de/tobias/playpad/action/feedback/ColorAdjuster.java
index 43b68616b2f60bfe777cb52cef208acb88f6ea2a..90d9df8f322498968c13d61d962f3898b197fb1b 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/action/feedback/ColorAdjuster.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/action/feedback/ColorAdjuster.java
@@ -12,6 +12,7 @@ import de.thecodelabs.midi.mapping.MidiKey;
 import de.thecodelabs.midi.midi.Midi;
 import de.thecodelabs.midi.midi.feedback.MidiFeedbackTranscript;
 import de.tobias.playpad.design.FeedbackDesignColorSuggester;
+import de.tobias.playpad.design.modern.model.ModernCartDesign;
 import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.profile.Profile;
 import javafx.scene.paint.Color;
@@ -69,19 +70,23 @@ public class ColorAdjuster {
 
 		Pad pad = suggester.getPad(action);
 
-		Color layoutStdColor = null;
-		Color layoutEvColor = null;
+		FeedbackDesignColorSuggester globalDesign = Profile.currentProfile().getProfileSettings().getDesign();
+		Color layoutStdColor = globalDesign.getDesignDefaultColor();
+		Color layoutEvColor = globalDesign.getDesignEventColor();
 
-		FeedbackDesignColorSuggester design;
-		if (pad != null && pad.getPadSettings().isCustomDesign()) {
-			design = pad.getPadSettings().getDesign();
-		} else {
-			design = Profile.currentProfile().getProfileSettings().getDesign();
-		}
+		if(pad != null)
+		{
+			final ModernCartDesign padDesign = pad.getPadSettings().getDesign();
+
+			if(padDesign.isEnableCustomBackgroundColor())
+			{
+				layoutStdColor = padDesign.getDesignDefaultColor();
+			}
 
-		if (design != null) {
-			layoutStdColor = design.getDesignDefaultColor();
-			layoutEvColor = design.getDesignEventColor();
+			if(padDesign.isEnableCustomPlayColor())
+			{
+				layoutEvColor = padDesign.getDesignEventColor();
+			}
 		}
 
 		if (layoutStdColor != null) {
@@ -96,9 +101,7 @@ public class ColorAdjuster {
 				final byte channel = suggester.suggestFeedbackChannel(FeedbackType.EVENT);
 				key.setEventFeedback(new Feedback(channel, matchedColor.getValue()));
 			});
-		}
 
-		if (layoutEvColor != null) {
 			searchColor(transcript, layoutEvColor).ifPresent(matchedColor -> {
 				final byte channel = suggester.suggestFeedbackChannel(FeedbackType.WARNING);
 				key.setWarningFeedback(new Feedback(channel, matchedColor.getValue()));
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/ModernDesignHandler.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/ModernDesignProvider.java
similarity index 61%
rename from PlayWallCore/src/main/java/de/tobias/playpad/design/ModernDesignHandler.java
rename to PlayWallCore/src/main/java/de/tobias/playpad/design/ModernDesignProvider.java
index a96e7a9bf1223c41a82a522f03f0a2ebc1769f04..08c41f82f6ebaf0f30c044fede65d5d616f877e4 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/design/ModernDesignHandler.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/ModernDesignProvider.java
@@ -2,8 +2,12 @@ package de.tobias.playpad.design;
 
 import de.tobias.playpad.design.modern.ModernCartDesignHandler;
 import de.tobias.playpad.design.modern.ModernGlobalDesignHandler;
+import de.tobias.playpad.design.modern.ModernWarningDesignHandler;
+
+public interface ModernDesignProvider
+{
+	ModernWarningDesignHandler warning();
 
-public interface ModernDesignHandler {
 	ModernGlobalDesignHandler global();
 
 	ModernCartDesignHandler cart();
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 200ead1fd6e412137370b6393167bb1092adc90d..7f7afe2d3b7fcf1e2ab6687e2539ea71200949e0 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
@@ -1,20 +1,8 @@
 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.AbstractPadViewController;
-import javafx.util.Duration;
-
-public interface ModernCartDesignHandler {
 
+public interface ModernCartDesignHandler
+{
 	String generateCss(ModernCartDesign design, String classSuffix, boolean flat);
-
-	/*
-	 * Wird in einem neuen Thread aufgerufen
-	 */
-	void handleWarning(ModernCartDesign design, AbstractPadViewController controller, Duration warning, ModernGlobalDesign globalDesign);
-
-	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 bca1e4aa9cee672852326f41dffe582e115f10e4..826e3409a7e0ea7170b9598f563e995d4ac4f158 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,23 +1,14 @@
 package de.tobias.playpad.design.modern;
 
 import de.tobias.playpad.design.modern.model.ModernGlobalDesign;
-import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
 import de.tobias.playpad.project.Project;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
 import javafx.stage.Stage;
-import javafx.util.Duration;
 
-public interface ModernGlobalDesignHandler {
+public interface ModernGlobalDesignHandler
+{
 
 	void applyStyleSheet(Stage stage);
 
 	void applyStyleSheetToMainViewController(ModernGlobalDesign design, IMainViewController controller, Stage stage, Project project);
-
-	/*
-	 * Wird in einem neuen Thread aufgerufen
-	 */
-	void handleWarning(ModernGlobalDesign design, AbstractPadViewController controller, Duration warning);
-
-	default void stopWarning(ModernGlobalDesign design, AbstractPadViewController controller) {
-	}
 }
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernWarningDesignHandler.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernWarningDesignHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..f365d2311a6f0cc8c09cf6d8d18391e8fc09f0c8
--- /dev/null
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernWarningDesignHandler.java
@@ -0,0 +1,57 @@
+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.Pad;
+import de.tobias.playpad.pad.content.play.Durationable;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
+import de.tobias.playpad.util.FadeableColor;
+import javafx.util.Duration;
+
+public interface ModernWarningDesignHandler
+{
+	default void handleWarning(ModernGlobalDesign globalDesign, ModernCartDesign cartDesign, AbstractPadViewController controller, Duration warningDuration)
+	{
+		ModernColor backgroundColor = globalDesign.getBackgroundColor();
+		ModernColor playColor = globalDesign.getPlayColor();
+
+		if(cartDesign.isEnableCustomBackgroundColor())
+		{
+			backgroundColor = cartDesign.getBackgroundColor();
+		}
+
+		if(cartDesign.isEnableCustomPlayColor())
+		{
+			playColor = cartDesign.getPlayColor();
+		}
+
+		final FadeableColor fadeStartColor = globalDesign.isFlatDesign() ? playColor.toFlatFadeableColor() : playColor.toFadeableColor();
+		final FadeableColor fadeStopColor = globalDesign.isFlatDesign() ? backgroundColor.toFlatFadeableColor() : backgroundColor.toFadeableColor();
+		final Duration duration = determineDuration(controller.getPad(), warningDuration);
+
+		performWarning(globalDesign, fadeStartColor, fadeStopColor, controller, duration);
+	}
+
+	default Duration determineDuration(Pad pad, Duration warningDuration)
+	{
+		if(pad.getContent() instanceof Durationable)
+		{
+			final Durationable durationable = (Durationable) pad.getContent();
+			if(warningDuration.greaterThan(durationable.getDuration()))
+			{
+				return durationable.getDuration();
+			}
+		}
+
+		return warningDuration;
+	}
+
+	/*
+	 * Wird in einem neuen Thread aufgerufen
+	 */
+	void performWarning(ModernGlobalDesign design, FadeableColor fadeStartColor, FadeableColor fadeStopColor, AbstractPadViewController controller, Duration duration);
+
+	default void stopWarning(AbstractPadViewController controller)
+	{
+	}
+}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/model/ModernCartDesign.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/model/ModernCartDesign.java
index 0d79598ab08bdc44c125ee494909fe9925942abc..d69ac256e6bf02208c0d151a48b68d6cbb69720d 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/model/ModernCartDesign.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/model/ModernCartDesign.java
@@ -6,36 +6,96 @@ import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.server.sync.command.CommandManager;
 import de.tobias.playpad.server.sync.command.Commands;
 import de.tobias.playpad.server.sync.listener.upstream.DesignUpdateListener;
+import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.SimpleBooleanProperty;
 import javafx.beans.property.SimpleObjectProperty;
 import javafx.scene.paint.Color;
 
 import java.util.UUID;
 
 public class ModernCartDesign implements FeedbackDesignColorSuggester {
+	public static class ModernCartDesignBuilder {
+		private final Pad pad;
+		private	final UUID id;
+
+		private ModernColor backgroundColor = DEFAULT_COLOR_BACKGROUND;
+		private Boolean enableCustomBackgroundColor = false;
+
+		private ModernColor playColor = DEFAULT_COLOR_PLAY;
+		private Boolean enableCustomPlayColor = false;
+
+		private ModernColor cueInColor = DEFAULT_COLOR_CUE_IN;
+		private Boolean enableCustomCueInColor = false;
+
+		public ModernCartDesignBuilder(Pad pad) {
+			this.pad = pad;
+			this.id =UUID.randomUUID();
+		}
+
+		public ModernCartDesignBuilder(Pad pad, UUID id) {
+			this.pad = pad;
+			this.id = id;
+		}
+
+		public ModernCartDesignBuilder withBackgroundColor(ModernColor backgroundColor, Boolean enable) {
+			this.backgroundColor = backgroundColor;
+			this.enableCustomBackgroundColor = enable;
+			return this;
+		}
+
+		public ModernCartDesignBuilder withPlayColor(ModernColor playColor, Boolean enable) {
+			this.playColor = playColor;
+			this.enableCustomPlayColor = enable;
+			return this;
+		}
+
+		public ModernCartDesignBuilder withCueInColor(ModernColor cueInColor, Boolean enable) {
+			this.cueInColor = cueInColor;
+			this.enableCustomCueInColor = enable;
+			return this;
+		}
+
+		public ModernCartDesign build() {
+			return new ModernCartDesign(pad, id,
+					backgroundColor, enableCustomBackgroundColor,
+					playColor, enableCustomPlayColor,
+					cueInColor, enableCustomCueInColor);
+		}
+	}
+
+	public static final ModernColor DEFAULT_COLOR_BACKGROUND = ModernColor.GRAY1;
+	public static final ModernColor DEFAULT_COLOR_PLAY = ModernColor.RED3;
+	public static final ModernColor DEFAULT_COLOR_CUE_IN = ModernColor.RED2;
 
 	private UUID uuid;
+
+	private BooleanProperty enableCustomBackgroundColor;
 	private ObjectProperty<ModernColor> backgroundColor;
+
+	private BooleanProperty enableCustomPlayColor;
 	private ObjectProperty<ModernColor> playColor;
+
+	private BooleanProperty enableCustomCueInColor;
 	private ObjectProperty<ModernColor> cueInColor;
 
 	private Pad pad;
 	private DesignUpdateListener syncListener;
 
-	public ModernCartDesign(Pad pad) {
-		this(pad, UUID.randomUUID());
-	}
-
-	public ModernCartDesign(Pad pad, UUID uuid) {
-		this(pad, uuid, ModernColor.GRAY1, ModernColor.RED3, ModernColor.RED2);
-	}
-
-	public ModernCartDesign(Pad pad, UUID id, ModernColor backgroundColor, ModernColor playColor, ModernColor cueInColor) {
+	private ModernCartDesign(Pad pad, UUID id,
+							ModernColor backgroundColor, Boolean enableCustomBackgroundColor,
+							ModernColor playColor, Boolean enableCustomPlayColor,
+							ModernColor cueInColor, Boolean enableCustomCueInColor) {
 		this.uuid = id;
 		this.pad = pad;
 
+		this.enableCustomBackgroundColor = new SimpleBooleanProperty(enableCustomBackgroundColor);
 		this.backgroundColor = new SimpleObjectProperty<>(backgroundColor);
+
+		this.enableCustomPlayColor = new SimpleBooleanProperty(enableCustomPlayColor);
 		this.playColor = new SimpleObjectProperty<>(playColor);
+
+		this.enableCustomCueInColor = new SimpleBooleanProperty(enableCustomCueInColor);
 		this.cueInColor = new SimpleObjectProperty<>(cueInColor);
 
 		syncListener = new DesignUpdateListener(this);
@@ -49,6 +109,21 @@ public class ModernCartDesign implements FeedbackDesignColorSuggester {
 		return pad;
 	}
 
+	public boolean isEnableCustomBackgroundColor()
+	{
+		return enableCustomBackgroundColor.get();
+	}
+
+	public void setEnableCustomBackgroundColor(Boolean enableCustomBackgroundColor)
+	{
+		this.enableCustomBackgroundColor.set(enableCustomBackgroundColor);
+	}
+
+	public BooleanProperty enableCustomBackgroundColorProperty()
+	{
+		return enableCustomBackgroundColor;
+	}
+
 	public ModernColor getBackgroundColor() {
 		return backgroundColor.get();
 	}
@@ -61,6 +136,21 @@ public class ModernCartDesign implements FeedbackDesignColorSuggester {
 		return backgroundColor;
 	}
 
+	public boolean isEnableCustomPlayColor()
+	{
+		return enableCustomPlayColor.get();
+	}
+
+	public void setEnableCustomPlayColor(boolean enableCustomPlayColor)
+	{
+		this.enableCustomPlayColor.set(enableCustomPlayColor);
+	}
+
+	public BooleanProperty enableCustomPlayColorProperty()
+	{
+		return enableCustomPlayColor;
+	}
+
 	public ModernColor getPlayColor() {
 		return playColor.get();
 	}
@@ -73,6 +163,21 @@ public class ModernCartDesign implements FeedbackDesignColorSuggester {
 		return playColor;
 	}
 
+	public boolean isEnableCustomCueInColor()
+	{
+		return enableCustomCueInColor.get();
+	}
+
+	public void setEnableCustomCueInColor(boolean enableCustomCueInColor)
+	{
+		this.enableCustomCueInColor.set(enableCustomCueInColor);
+	}
+
+	public BooleanProperty enableCustomCueInColorProperty()
+	{
+		return enableCustomCueInColor;
+	}
+
 	public ModernColor getCueInColor() {
 		return cueInColor.get();
 	}
@@ -94,12 +199,11 @@ public class ModernCartDesign implements FeedbackDesignColorSuggester {
 	}
 
 	public void reset() {
-		backgroundColor.set(ModernColor.GRAY1);
-		playColor.set(ModernColor.RED3);
-		cueInColor.set(ModernColor.RED2);
+		backgroundColor.set(DEFAULT_COLOR_BACKGROUND);
+		playColor.set(DEFAULT_COLOR_PLAY);
+		cueInColor.set(DEFAULT_COLOR_CUE_IN);
 	}
 
-
 	// Color Associator
 	@Override
 	public Color getDesignEventColor() {
@@ -112,14 +216,16 @@ public class ModernCartDesign implements FeedbackDesignColorSuggester {
 	}
 
 	public ModernCartDesign copy(Pad pad) {
-		ModernCartDesign clone = new ModernCartDesign(pad);
+		ModernCartDesign clone = new ModernCartDesignBuilder(pad).build();
 
+		clone.enableCustomBackgroundColor = new SimpleBooleanProperty(isEnableCustomBackgroundColor());
 		clone.backgroundColor = new SimpleObjectProperty<>(getBackgroundColor());
+
+		clone.enableCustomPlayColor = new SimpleBooleanProperty(isEnableCustomPlayColor());
 		clone.playColor = new SimpleObjectProperty<>(getPlayColor());
-		clone.cueInColor = new SimpleObjectProperty<>(getCueInColor());
 
-		clone.pad = pad;
-		clone.uuid = UUID.randomUUID();
+		clone.enableCustomCueInColor = new SimpleBooleanProperty(isEnableCustomCueInColor());
+		clone.cueInColor = new SimpleObjectProperty<>(getCueInColor());
 
 		syncListener = new DesignUpdateListener(clone);
 		if (pad.getProject().getProjectReference().isSync()) {
@@ -129,10 +235,4 @@ public class ModernCartDesign implements FeedbackDesignColorSuggester {
 
 		return clone;
 	}
-
-	public void copyGlobalLayout(ModernGlobalDesign globalDesign) {
-		setBackgroundColor(globalDesign.getBackgroundColor());
-		setPlayColor(globalDesign.getPlayColor());
-		setCueInColor(globalDesign.getCueInColor());
-	}
 }
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/serializer/ModernCartDesignSerializer.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/serializer/ModernCartDesignSerializer.java
index ce67905eb387db419410d0598eb04264f937b270..279347a6b281505606cf61770ce7cc3ca192acfd 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/serializer/ModernCartDesignSerializer.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/serializer/ModernCartDesignSerializer.java
@@ -14,9 +14,18 @@ public class ModernCartDesignSerializer {
 		ModernCartDesign design;
 		String uuidValue = rootElement.attributeValue("id");
 		if (uuidValue != null) {
-			design = new ModernCartDesign(pad, UUID.fromString(uuidValue));
+			design = new ModernCartDesign.ModernCartDesignBuilder(pad, UUID.fromString(uuidValue)).build();
 		} else {
-			design = new ModernCartDesign(pad);
+			design = new ModernCartDesign.ModernCartDesignBuilder(pad).build();
+		}
+
+		Element enableCustomBackgroundColorElement = rootElement.element("EnableCustomBackgroundColor");
+		if (enableCustomBackgroundColorElement != null) {
+			try {
+				design.setEnableCustomBackgroundColor(Boolean.parseBoolean(enableCustomBackgroundColorElement.getStringValue()));
+			} catch (IllegalArgumentException e) {
+				Logger.error(e);
+			}
 		}
 
 		Element backgroundElement = rootElement.element("BackgroundColor");
@@ -28,6 +37,15 @@ public class ModernCartDesignSerializer {
 			}
 		}
 
+		Element enableCustomPlayColorElement = rootElement.element("EnableCustomPlayColor");
+		if (enableCustomPlayColorElement != null) {
+			try {
+				design.setEnableCustomPlayColor(Boolean.parseBoolean(enableCustomPlayColorElement.getStringValue()));
+			} catch (IllegalArgumentException e) {
+				Logger.error(e);
+			}
+		}
+
 		Element playElement = rootElement.element("PlayColor");
 		if (playElement != null) {
 			try {
@@ -36,6 +54,16 @@ public class ModernCartDesignSerializer {
 				Logger.error(e);
 			}
 		}
+
+		Element enableCustomCueInColorElement = rootElement.element("EnableCustomCueInColor");
+		if (enableCustomCueInColorElement != null) {
+			try {
+				design.setEnableCustomCueInColor(Boolean.parseBoolean(enableCustomCueInColorElement.getStringValue()));
+			} catch (IllegalArgumentException e) {
+				Logger.error(e);
+			}
+		}
+
 		Element cueInElement = rootElement.element("CueInColor");
 		if (cueInElement != null) {
 			try {
@@ -49,8 +77,14 @@ public class ModernCartDesignSerializer {
 
 	public void save(Element rootElement, ModernCartDesign design) {
 		rootElement.addAttribute("id", design.getId().toString());
+
+		rootElement.addElement("EnableCustomBackgroundColor").addText(String.valueOf(design.isEnableCustomBackgroundColor()));
 		rootElement.addElement("BackgroundColor").addText(design.getBackgroundColor().name());
+
+		rootElement.addElement("EnableCustomPlayColor").addText(String.valueOf(design.isEnableCustomPlayColor()));
 		rootElement.addElement("PlayColor").addText(design.getPlayColor().name());
+
+		rootElement.addElement("EnableCustomCueInColor").addText(String.valueOf(design.isEnableCustomCueInColor()));
 		rootElement.addElement("CueInColor").addText(design.getCueInColor().name());
 	}
 }
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java
index a935edd4808ae2d9f1c92c99286591e429334cd8..8e8e3faf88ad68c8f82dfddfb11c7b1b32ac1454 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java
@@ -35,7 +35,6 @@ public class PadSettings {
 	private ObjectProperty<Duration> warningProperty = new SimpleObjectProperty<>();
 	private ObjectProperty<Duration> cueInProperty = new SimpleObjectProperty<>();
 
-	private BooleanProperty customDesignProperty = new SimpleBooleanProperty(false);
 	private ModernCartDesign design;
 
 	private Map<TriggerPoint, Trigger> triggers = new EnumMap<>(TriggerPoint.class);
@@ -187,21 +186,9 @@ public class PadSettings {
 		return cueInProperty.get();
 	}
 
-	public boolean isCustomDesign() {
-		return customDesignProperty.get();
-	}
-
-	public void setCustomDesign(boolean customLayout) {
-		this.customDesignProperty.set(customLayout);
-	}
-
-	public BooleanProperty customDesignProperty() {
-		return customDesignProperty;
-	}
-
 	public ModernCartDesign getDesign() {
 		if (design == null) {
-			ModernCartDesign newDesign = new ModernCartDesign(pad);
+			ModernCartDesign newDesign = new ModernCartDesign.ModernCartDesignBuilder(pad).build();
 
 			if (pad.getProject().getProjectReference().isSync()) {
 				CommandManager.execute(Commands.DESIGN_ADD, pad.getProject().getProjectReference(), newDesign);
@@ -271,10 +258,7 @@ public class PadSettings {
 		else
 			clone.warningProperty = new SimpleObjectProperty<>();
 
-		clone.customDesignProperty = new SimpleBooleanProperty(isCustomDesign());
-		if (design != null) {
-			clone.design = design.copy(pad);
-		}
+		clone.design = design.copy(pad);
 
 		clone.triggers = new EnumMap<>(TriggerPoint.class);
 		triggers.forEach((key, value) -> clone.triggers.put(key, value.copy()));
@@ -307,10 +291,11 @@ public class PadSettings {
 	//// Computed
 
 	public ModernColor getBackgroundColor() {
-		if (isCustomDesign()) {
+		if(design.isEnableCustomBackgroundColor())
+		{
 			return design.getBackgroundColor();
-		} else {
-			return Profile.currentProfile().getProfileSettings().getDesign().getBackgroundColor();
 		}
+
+		return Profile.currentProfile().getProfileSettings().getDesign().getBackgroundColor();
 	}
 }
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java
index 82e70e61fcdcf7c06ccc037ad6296898528be82b..f0854591d54fe67f2ea5f9a1a835e5627a4a7a5b 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java
@@ -72,9 +72,6 @@ public class PadSettingsSerializer {
 		// Layout
 		Element designElement = settingsElement.element(DESIGN_ELEMENT);
 		if (designElement != null) {
-			if (designElement.attributeValue(CUSTOM_DESIGN_ELEMENT) != null) {
-				padSettings.setCustomDesign(Boolean.parseBoolean(designElement.attributeValue(CUSTOM_DESIGN_ELEMENT)));
-			}
 			ModernCartDesignSerializer serializer = new ModernCartDesignSerializer();
 			ModernCartDesign design = serializer.load(designElement, pad);
 			padSettings.setDesign(design);
@@ -124,11 +121,8 @@ public class PadSettingsSerializer {
 
 		// Layout
 		Element designElement = settingsElement.addElement(DESIGN_ELEMENT);
-		if (padSettings.isCustomDesign()) {
-			ModernCartDesignSerializer serializer = new ModernCartDesignSerializer();
-			serializer.save(designElement, padSettings.getDesign());
-		}
-		designElement.addAttribute(CUSTOM_DESIGN_ELEMENT, String.valueOf(padSettings.isCustomDesign()));
+		ModernCartDesignSerializer serializer = new ModernCartDesignSerializer();
+		serializer.save(designElement, padSettings.getDesign());
 
 		Element userInfoElement = settingsElement.addElement(CUSTOM_SETTINGS_ELEMENT);
 		for (String key : padSettings.getCustomSettings().keySet()) {
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 34c065494f144ce1e3321292514e2b14a5f87c90..5681a250bc37d717584a425ab31cb9920ad6b811 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java
@@ -1,5 +1,6 @@
 package de.tobias.playpad.project;
 
+import de.thecodelabs.storage.settings.UserDefaults;
 import de.thecodelabs.storage.settings.annotation.Key;
 import de.thecodelabs.utils.application.ApplicationUtils;
 import de.tobias.playpad.project.api.IProjectSettings;
@@ -8,14 +9,17 @@ import java.nio.file.Path;
 
 public class ProjectSettings implements IProjectSettings {
 
-	public static final int MAX_PAGES;
+	public static int MAX_PAGES = 10;
 
 	static {
-		Object maxPages = ApplicationUtils.getApplication().getUserDefaults().getData("MAX_PAGES");
-		if (maxPages != null) {
-			MAX_PAGES = Integer.parseInt(maxPages.toString());
-		} else {
-			MAX_PAGES = 10;
+		final UserDefaults userDefaults = ApplicationUtils.getApplication().getUserDefaults();
+		if(userDefaults != null)
+		{
+			Object maxPages = userDefaults.getData("MAX_PAGES");
+			if(maxPages != null)
+			{
+				MAX_PAGES = Integer.parseInt(maxPages.toString());
+			}
 		}
 	}
 
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignAddListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignAddListener.java
index d4c9f6a550021f0a992569f8e7ab2baf36c7d286..9a395331ee727d6e45dba8468b68fcc50770653f 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignAddListener.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignAddListener.java
@@ -31,9 +31,11 @@ public class DesignAddListener implements ServerListener {
 			if (project != null) {
 				Pad pad = project.getPad(padId);
 				if (pad != null) {
-					ModernCartDesign modernCartDesign = new ModernCartDesign(pad, uuid);
-					modernCartDesign.setBackgroundColor(backgroundColor);
-					modernCartDesign.setPlayColor(playColor);
+					ModernCartDesign modernCartDesign = new ModernCartDesign.ModernCartDesignBuilder(pad, uuid)
+							.withBackgroundColor(backgroundColor, true)
+							.withPlayColor(playColor, true)
+							.build();
+
 					pad.getPadSettings().setDesign(modernCartDesign);
 				}
 			}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignUpdateListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignUpdateListener.java
index fd06d289d49901d970a3dcf8e980e9fe2822af26..47914b9c414aa7020c013b219bb35854dc4e6db4 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignUpdateListener.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignUpdateListener.java
@@ -41,13 +41,11 @@ public class DesignUpdateListener implements ServerListener {
 						if (field.equals(PropertyDef.DESIGN_BACKGROUND_COLOR)) {
 							Platform.runLater(() -> {
 								design.setBackgroundColor(color);
-								pad.getPadSettings().setCustomDesign(true);
 								mainViewController.loadUserCss();
 							});
 						} else if (field.equals(PropertyDef.DESIGN_PLAY_COLOR)) {
 							Platform.runLater(() -> {
 								design.setPlayColor(color);
-								pad.getPadSettings().setCustomDesign(true);
 								mainViewController.loadUserCss();
 							});
 						}
diff --git a/PlayWallCore/src/test/java/de/tobias/playpad/pad/PadSettingsSerializerTest.java b/PlayWallCore/src/test/java/de/tobias/playpad/pad/PadSettingsSerializerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..c4c7191c307cb2af2fdedbcfc887c990561713ae
--- /dev/null
+++ b/PlayWallCore/src/test/java/de/tobias/playpad/pad/PadSettingsSerializerTest.java
@@ -0,0 +1,60 @@
+package de.tobias.playpad.pad;
+
+import de.tobias.playpad.design.modern.model.ModernCartDesign;
+import de.tobias.playpad.project.Project;
+import de.tobias.playpad.project.ref.ProjectReference;
+import de.tobias.playpad.settings.FadeSettings;
+import de.tobias.playpad.tigger.Trigger;
+import de.tobias.playpad.tigger.TriggerPoint;
+import javafx.util.Duration;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.junit.Test;
+
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import static de.tobias.playpad.pad.PadSerializer.SETTINGS_ELEMENT;
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class PadSettingsSerializerTest
+{
+	@Test
+	public void testSave_General()
+	{
+		// arrange
+		final Document document = DocumentHelper.createDocument();
+		final Element rootElement = document.addElement(SETTINGS_ELEMENT);
+
+		final Project project = new Project(new ProjectReference(UUID.randomUUID(), "TestProject", false));
+		final Pad pad = new Pad(project, 1, null);
+
+		final UUID padUUID = UUID.randomUUID();
+		final PadSettings padSettings = new PadSettings(pad, padUUID);
+		padSettings.setVolume(0.5);
+		padSettings.setLoop(true);
+		padSettings.setTimeMode(TimeMode.REST);
+		padSettings.setFade(new FadeSettings(Duration.seconds(1), Duration.seconds(2)));
+
+		final Duration expectedWarningDuration = Duration.seconds(3);
+		padSettings.setWarning(expectedWarningDuration);
+		final Duration expectedCueInDuration = Duration.seconds(4);
+		padSettings.setCueIn(expectedCueInDuration);
+
+		// act
+		final PadSettingsSerializer serializer = new PadSettingsSerializer();
+		serializer.saveElement(rootElement, padSettings);
+
+		// assert
+		assertThat(rootElement.attribute("id").getStringValue()).isEqualTo(padUUID.toString());
+		assertThat(rootElement.element("Volume").getStringValue()).isEqualTo("0.5");
+		assertThat(rootElement.element("Loop").getStringValue()).isEqualTo("true");
+		assertThat(rootElement.element("TimeMode").getStringValue()).isEqualTo(TimeMode.REST.toString());
+		assertThat(rootElement.element("Fade").getStringValue()).isNotNull();
+		assertThat(rootElement.element("Warning").getStringValue()).isEqualTo(expectedWarningDuration.toString());
+		assertThat(rootElement.element("CueIn").getStringValue()).isEqualTo(expectedCueInDuration.toString());
+	}
+}
diff --git a/PlayWallCore/src/test/resources/colors/ModernColor.json b/PlayWallCore/src/test/resources/colors/ModernColor.json
new file mode 100644
index 0000000000000000000000000000000000000000..eae7057a68a2decc1663d87c5c93690720c835ac
--- /dev/null
+++ b/PlayWallCore/src/test/resources/colors/ModernColor.json
@@ -0,0 +1,470 @@
+[
+    {
+        "name": "RED1",
+        "colors": {
+            "hi": "#ef9a9a",
+            "low": "#ef5350",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "RED2",
+        "colors": {
+            "hi": "#ef5350",
+            "low": "#e53935",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "RED3",
+        "colors": {
+            "hi": "#e53935",
+            "low": "#c62828",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "DARK_RED1",
+        "colors": {
+            "hi": "#D92349",
+            "low": "#AD2039",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "DARK_RED2",
+        "colors": {
+            "hi": "#C92349",
+            "low": "#8D2039",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "DARK_RED3",
+        "colors": {
+            "hi": "#A90329",
+            "low": "#6D0019",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "PINK1",
+        "colors": {
+            "hi": "#f48fb1",
+            "low": "#ec407a",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "PINK2",
+        "colors": {
+            "hi": "#ec407a",
+            "low": "#d81b60",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "PINK3",
+        "colors": {
+            "hi": "#d81b60",
+            "low": "#ad1457",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "PURPLE1",
+        "colors": {
+            "hi": "#ce93d8",
+            "low": "#ab47bc",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "PURPLE2",
+        "colors": {
+            "hi": "#ab47bc",
+            "low": "#8e24aa",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "PURPLE3",
+        "colors": {
+            "hi": "#8e24aa",
+            "low": "#6a1b9a",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "LIGHT_BLUE1",
+        "colors": {
+            "hi": "#80deea",
+            "low": "#26c6da",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "LIGHT_BLUE2",
+        "colors": {
+            "hi": "#26c6da",
+            "low": "#00acc1",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "LIGHT_BLUE3",
+        "colors": {
+            "hi": "#00acc1",
+            "low": "#00838f",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "BLUE1",
+        "colors": {
+            "hi": "#90caf9",
+            "low": "#42a5f5",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "BLUE2",
+        "colors": {
+            "hi": "#42a5f5",
+            "low": "#1e88e5",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "BLUE3",
+        "colors": {
+            "hi": "#1e88e5",
+            "low": "#1565c0",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "LIGHT_GREEN1",
+        "colors": {
+            "hi": "#c5e1a5",
+            "low": "#9ccc65",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "LIGHT_GREEN2",
+        "colors": {
+            "hi": "#9ccc65",
+            "low": "#7cb342",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "LIGHT_GREEN3",
+        "colors": {
+            "hi": "#7cb342",
+            "low": "#558b2f",
+            "font": "#ffffff",
+            "button": "#ffffff",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "LIME1",
+        "colors": {
+            "hi": "#e6ee9c",
+            "low": "#d4e157",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "LIME2",
+        "colors": {
+            "hi": "#d4e157",
+            "low": "#c0ca33",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "LIME3",
+        "colors": {
+            "hi": "#c0ca33",
+            "low": "#9e9d24",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "YELLOW1",
+        "colors": {
+            "hi": "#fff59d",
+            "low": "#ffee58",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#333333",
+                "track": "#FFFFFF"
+            }
+        }
+    },
+    {
+        "name": "YELLOW2",
+        "colors": {
+            "hi": "#ffee58",
+            "low": "#fdd835",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#333333",
+                "track": "#FFFFFF"
+            }
+        }
+    },
+    {
+        "name": "YELLOW3",
+        "colors": {
+            "hi": "#fdd835",
+            "low": "#f9a825",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "ORANGE1",
+        "colors": {
+            "hi": "#ffcc80",
+            "low": "#ffa726",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "ORANGE2",
+        "colors": {
+            "hi": "#ffa726",
+            "low": "#fb8c00",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "ORANGE3",
+        "colors": {
+            "hi": "#fb8c00",
+            "low": "#ef6c00",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "GRAY1",
+        "colors": {
+            "hi": "#eeeeee",
+            "low": "#cccccc",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#333333",
+                "track": "#FFFFFF"
+            }
+        }
+    },
+    {
+        "name": "GRAY2",
+        "colors": {
+            "hi": "#cccccc",
+            "low": "#aaaaaa",
+            "font": "#000000",
+            "button": "#000000",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "GRAY3",
+        "colors": {
+            "hi": "#aaaaaa",
+            "low": "#888888",
+            "font": "#FFFFFF",
+            "button": "#FFFFFF",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "GRAY4",
+        "colors": {
+            "hi": "#888888",
+            "low": "#666666",
+            "font": "#FFFFFF",
+            "button": "#FFFFFF",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "GRAY5",
+        "colors": {
+            "hi": "#666666",
+            "low": "#444444",
+            "font": "#FFFFFF",
+            "button": "#FFFFFF",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    },
+    {
+        "name": "GRAY6",
+        "colors": {
+            "hi": "#444444",
+            "low": "#222222",
+            "font": "#FFFFFF",
+            "button": "#FFFFFF",
+            "playbar": {
+                "background": "#ffffff",
+                "track": "#333333"
+            }
+        }
+    }
+]
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 4e735ed3fdaf7d8165254248ab14d39fffd7fba2..c55300adc97f3a64a49997d54a7e54c79cd20602 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
     <packaging>pom</packaging>
 
     <properties>
-        <project.build.code>43</project.build.code>
+        <project.build.code>44</project.build.code>
         <project.versionDate>${maven.build.timestamp}</project.versionDate>
         <maven.build.timestamp.format>yyyy-MM-dd</maven.build.timestamp.format>