diff --git a/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties b/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties
index 9d1ef416099bc0f14fe5a98243cfd5bf81b02e33..6959ecc55af805f3d562f0a6dda7a8a754fd2eef 100644
--- a/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties
+++ b/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties
@@ -64,11 +64,11 @@ UI.Window.Settings.Layout.Title=Layout
 UI.Window.Settings.Player.Title=Player
 UI.Window.Settings.Audio.Title=Audio
 UI.Window.Settings.Updates.Title=Updates
+UI.Window.Settings.Keys.Title=Tastaturbefehle
 
-# UI - Dialog - DragAndDrop
-UI.Dialog.DragAndDrop.Header=Hinweis
-UI.Dialog.DragAndDrop.Content=F�r das Verschieben von Kacheln gibt es zwei M�glichkeiten: Vertauschen oder Ersetzen.\nUm die gw�hlte Kachel mit der Zielkachel zu vertauschen, muss der obere Teil der Zielkachel gew�hlt werden. Es erscheint eine blaue Umrandung. \nUm die ausgew�hlte Kachel mit der Zielkachel zu ersetzen, muss der untere Teil der Zielkachel gew�hlt werden. Es erscheint eine rote Umrandung.
-UI.Dialog.DragAndDrop.Button=OK
+# UI - Settings - Keys
+UI.Settings.Keys.Conflict.Header=Konflikt
+UI.Settings.Keys.Conflict.Content=Es gibt bereits Aktionen, bei denen diese Tastenkombination verwendet wird: \n{}
 
 # UI - Dialog - NewProfile
 UI.Dialog.NewProfile.Content=Geben Sie einen Namen f�r das neue Profil ein:
@@ -239,4 +239,13 @@ TriggerPoint.EOF_STOP=Ende/Stop
 
 # Drag and Drop Mode
 DnDMode.Replace=Ersetzen
-DnDMode.Move=Tauschen
\ No newline at end of file
+DnDMode.Move=Tauschen
+
+# Main Layout
+MainLayout.Desktop=Desktop Modus
+MainLayout.Touch=Touch Modus
+
+# Suche
+Search.Button=Suchen
+Search.Placeholder=Suche
+Search.Alert.NoMatches=Keine Treffer gefunden.
\ No newline at end of file
diff --git a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java
index 122153c953b38061ea660d50a7ef86286e0d95e3..404fc9252092805c6fd6909cd176d420c921f9a1 100644
--- a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java
+++ b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java
@@ -12,13 +12,23 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
+import java.util.ResourceBundle;
 import java.util.Set;
 
+import org.dom4j.DocumentException;
+
+import de.tobias.playpad.action.mapper.MapperRegistry;
+import de.tobias.playpad.audio.JavaFXAudioHandler;
+import de.tobias.playpad.design.modern.ModernGlobalDesign;
+import de.tobias.playpad.midi.device.DeviceRegistry;
+import de.tobias.playpad.midi.device.PD12;
 import de.tobias.playpad.plugin.PadListener;
 import de.tobias.playpad.plugin.SettingsListener;
 import de.tobias.playpad.plugin.WindowListener;
 import de.tobias.playpad.project.Project;
+import de.tobias.playpad.registry.NoSuchComponentException;
 import de.tobias.playpad.settings.GlobalSettings;
+import de.tobias.playpad.view.MapperOverviewViewController;
 import de.tobias.playpad.viewcontroller.IPadSettingsViewController;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
 import de.tobias.playpad.viewcontroller.main.MainViewControllerV2;
@@ -50,7 +60,7 @@ public class PlayPadImpl implements PlayPad {
 	public PlayPadImpl(GlobalSettings globalSettings) {
 		pluginManager = PluginManagerFactory.createPluginManager();
 		deletedPlugins = new HashSet<>();
-		
+
 		this.globalSettings = globalSettings;
 	}
 
@@ -141,6 +151,19 @@ public class PlayPadImpl implements PlayPad {
 
 	@Override
 	public void shutdown() {
+		// Shutdown components
+		PlayPadPlugin.getRegistryCollection().getAudioHandlers().getComponents().forEach(i ->
+		{
+			if (i instanceof AutoCloseable) {
+				try {
+					((AutoCloseable) i).close();
+				} catch (Exception e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+		});
+
 		// Delete Plugins Info Textfile --> Löschen dann beim Start.
 		Path pluginInfoPath = ApplicationUtils.getApplication().getPath(PathType.LIBRARY, PLUGIN_INFO_TXT);
 		try {
@@ -181,4 +204,41 @@ public class PlayPadImpl implements PlayPad {
 	public Project getCurrentProject() {
 		return currentProject;
 	}
+	
+	public void startup(ResourceBundle resourceBundle) {
+		registerComponents(resourceBundle);
+	}
+	
+	private void registerComponents(ResourceBundle resourceBundle) {
+		// Midi
+		DeviceRegistry.getFactoryInstance().registerDevice(PD12.NAME, PD12.class);
+
+		try {
+			// Load Components
+			RegistryCollection registryCollection = PlayPadPlugin.getRegistryCollection();
+
+			registryCollection.getActions().loadComponentsFromFile("de/tobias/playpad/components/Actions.xml");
+			registryCollection.getAudioHandlers().loadComponentsFromFile("de/tobias/playpad/components/AudioHandler.xml");
+			registryCollection.getDragModes().loadComponentsFromFile("de/tobias/playpad/components/DragMode.xml");
+			registryCollection.getDesigns().loadComponentsFromFile("de/tobias/playpad/components/Design.xml");
+			registryCollection.getMappers().loadComponentsFromFile("de/tobias/playpad/components/Mapper.xml");
+			registryCollection.getPadContents().loadComponentsFromFile("de/tobias/playpad/components/PadContent.xml");
+			registryCollection.getTriggerItems().loadComponentsFromFile("de/tobias/playpad/components/Trigger.xml");
+			registryCollection.getMainLayouts().loadComponentsFromFile("de/tobias/playpad/components/Layout.xml");
+
+			// Set Default
+			registryCollection.getAudioHandlers().setDefaultID(JavaFXAudioHandler.NAME);
+			registryCollection.getDesigns().setDefaultID(ModernGlobalDesign.TYPE);
+		} catch (IllegalAccessException | ClassNotFoundException | InstantiationException | IOException | DocumentException
+				| NoSuchComponentException e) {
+			e.printStackTrace();
+		}
+
+		// Key Bindings
+		GlobalSettings globalSettings = PlayPadPlugin.getImplementation().getGlobalSettings();
+		globalSettings.getKeyCollection().loadDefaultFromFile("de/tobias/playpad/components/Keys.xml", resourceBundle);
+
+		// Mapper
+		MapperRegistry.setOverviewViewController(new MapperOverviewViewController());
+	}
 }
diff --git a/PlayWall/src/de/tobias/playpad/PlayPadMain.java b/PlayWall/src/de/tobias/playpad/PlayPadMain.java
index cdec5baf549e2c510843e47d536acc7d54a639bf..1deaee5ee10d09486f3f4f9ce678b6e395af50f2 100644
--- a/PlayWall/src/de/tobias/playpad/PlayPadMain.java
+++ b/PlayWall/src/de/tobias/playpad/PlayPadMain.java
@@ -12,9 +12,7 @@ import java.util.UUID;
 import org.dom4j.DocumentException;
 
 import de.tobias.playpad.action.mapper.MapperRegistry;
-import de.tobias.playpad.audio.ClipAudioHandler;
 import de.tobias.playpad.audio.JavaFXAudioHandler;
-import de.tobias.playpad.audio.TinyAudioHandler;
 import de.tobias.playpad.design.modern.ModernGlobalDesign;
 import de.tobias.playpad.midi.device.DeviceRegistry;
 import de.tobias.playpad.midi.device.PD12;
@@ -135,14 +133,16 @@ public class PlayPadMain extends Application implements LocalizationDelegate {
 			try {
 				Image stageIcon = new Image(iconPath);
 				PlayPadMain.stageIcon = Optional.of(stageIcon);
-			} catch (Exception e) {}
+			} catch (Exception e) {
+			}
 
 			/*
 			 * Setup
 			 */
 			updater = new PlayPadUpdater();
 			UpdateRegistery.registerUpdateable(updater);
-			registerComponents();
+
+			impl.startup(uiResourceBundle);
 
 			// Load Plugin Path
 			Path pluginFolder;
@@ -216,50 +216,12 @@ public class PlayPadMain extends Application implements LocalizationDelegate {
 			e.printStackTrace(); // Speichern Fehler
 		}
 
-		// Shutdown components
-		// TODO use AutoCloseable
-		TinyAudioHandler.shutdown();
-		ClipAudioHandler.shutdown();
-
 		impl.shutdown();
 
 		Platform.exit();
 		System.exit(0);
 	}
 
-	private void registerComponents() {
-		// Midi
-		DeviceRegistry.getFactoryInstance().registerDevice(PD12.NAME, PD12.class);
-
-		try {
-			// Load Components
-			RegistryCollection registryCollection = PlayPadPlugin.getRegistryCollection();
-
-			registryCollection.getActions().loadComponentsFromFile("de/tobias/playpad/components/Actions.xml");
-			registryCollection.getAudioHandlers().loadComponentsFromFile("de/tobias/playpad/components/AudioHandler.xml");
-			registryCollection.getDragModes().loadComponentsFromFile("de/tobias/playpad/components/DragMode.xml");
-			registryCollection.getDesigns().loadComponentsFromFile("de/tobias/playpad/components/Design.xml");
-			registryCollection.getMappers().loadComponentsFromFile("de/tobias/playpad/components/Mapper.xml");
-			registryCollection.getPadContents().loadComponentsFromFile("de/tobias/playpad/components/PadContent.xml");
-			registryCollection.getTriggerItems().loadComponentsFromFile("de/tobias/playpad/components/Trigger.xml");
-			registryCollection.getMainLayouts().loadComponentsFromFile("de/tobias/playpad/components/Layout.xml");
-
-			// Set Default
-			registryCollection.getAudioHandlers().setDefaultID(JavaFXAudioHandler.NAME);
-			registryCollection.getDesigns().setDefaultID(ModernGlobalDesign.TYPE);
-		} catch (IllegalAccessException | ClassNotFoundException | InstantiationException | IOException | DocumentException
-				| NoSuchComponentException e) {
-			e.printStackTrace();
-		}
-
-		// Key Bindings
-		GlobalSettings globalSettings = PlayPadPlugin.getImplementation().getGlobalSettings();
-		globalSettings.getKeyCollection().loadDefaultFromFile("de/tobias/playpad/components/Keys.xml", uiResourceBundle);
-
-		// Mapper
-		MapperRegistry.setOverviewViewController(new MapperOverviewViewController());
-	}
-
 	private void setupPlugins(Path pluginPath) throws IOException, MalformedURLException {
 		// Delete old plugins
 		impl.deletePlugins();
diff --git a/PlayWall/src/de/tobias/playpad/Strings.java b/PlayWall/src/de/tobias/playpad/Strings.java
index 7234c38e9af7f4ac4488865c2033ee586f12a52b..1aa77636498762172134499ff04d107865de737e 100644
--- a/PlayWall/src/de/tobias/playpad/Strings.java
+++ b/PlayWall/src/de/tobias/playpad/Strings.java
@@ -61,11 +61,11 @@ public class Strings {
 	public static final String UI_Window_Settings_Player_Title = "UI.Window.Settings.Player.Title";
 	public static final String UI_Window_Settings_Audio_Title = "UI.Window.Settings.Audio.Title";
 	public static final String UI_Window_Settings_Updates_Title = "UI.Window.Settings.Updates.Title";
+	public static final String UI_Window_Settings_Keys_Title = "UI.Window.Settings.Keys.Title";
 
-	// UI - Dialogs - DragAndDrop
-	public static final String UI_Dialog_DragAndDrop_Header = "UI.Dialog.DragAndDrop.Header";
-	public static final String UI_Dialog_DragAndDrop_Content = "UI.Dialog.DragAndDrop.Content";
-	public static final String UI_Dialog_DragAndDrop_Button = "UI.Dialog.DragAndDrop.Button";
+	// UI - Settings - Keys
+	public static final String UI_Settings_Keys_Conflict_Header = "UI.Settings.Keys.Conflict.Header";
+	public static final String UI_Settings_Keys_Conflict_Content = "UI.Settings.Keys.Conflict.Content";
 
 	// UI - Dialog - NewProfile
 	public static final String UI_Dialog_NewProfile_Content = "UI.Dialog.NewProfile.Content";
@@ -169,9 +169,9 @@ public class Strings {
 	public static final String Info_Mapper_PressKey = "Info.Mapper.PressKey";
 
 	// UI - Settings - Aler
-	
+
 	public static final String UI_Settings_Alert_NewKeyShortcut_Text = "UI.Settings.Alert.NewKeyShortcut.Text";
-	
+
 	// UI - Window - PadSettings
 	public static final String UI_Window_PadSettings_General_Title = "UI.Window.PadSettings.General.Title";
 	public static final String UI_Window_PadSettings_Player_Title = "UI.Window.PadSettings.Player.Title";
@@ -228,4 +228,13 @@ public class Strings {
 	// Drag and Drop Mode
 	public static final String DnDMode_Move = "DnDMode.Move";
 	public static final String DnDMode_Replace = "DnDMode.Replace";
+	
+	// Main Layout
+	public static final String MainLayout_Desktop = "MainLayout.Desktop";
+	public static final String MainLayout_Touch = "MainLayout.Touch";
+	
+	// Search
+	public static final String Search_Button="Search.Button";
+	public static final String Search_Placeholder="Search.Placeholder";
+	public static final String Search_Alert_NoMatches = "Search.Alert.NoMatches"; 
 }
diff --git a/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandler.java b/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandler.java
index 64b3de3e6334da309219d164af8d7470afe84c0e..2da8971e4a32ea91006b39fdc13c0afd2a77d4e7 100644
--- a/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandler.java
+++ b/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandler.java
@@ -34,7 +34,7 @@ import javazoom.jl.decoder.JavaLayerException;
 
 public class ClipAudioHandler extends AudioHandler {
 
-	// TODO Change names
+	public static final String TYPE = "clip";
 	public static final String NAME = "Clip (Experimental)";
 	private static final String MP3 = "mp3";
 
@@ -84,7 +84,9 @@ public class ClipAudioHandler extends AudioHandler {
 					}
 
 					Thread.sleep(SLEEP_TIME_POSITION);
-				} catch (InterruptedException e) {} catch (ConcurrentModificationException e) {} catch (Exception e) {
+				} catch (InterruptedException e) {
+				} catch (ConcurrentModificationException e) {
+				} catch (Exception e) {
 					e.printStackTrace();
 				}
 			}
diff --git a/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandlerConnect.java b/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandlerConnect.java
index e78e6895cc3a546dba104369f15f6e4ae96e80ee..bb004a440ff00caa12fc400a3ab4fb9f44cdb2eb 100644
--- a/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandlerConnect.java
+++ b/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandlerConnect.java
@@ -1,7 +1,7 @@
 package de.tobias.playpad.audio;
 
 import de.tobias.playpad.pad.conntent.PadContent;
-import de.tobias.playpad.viewcontroller.AudioTypeViewController;
+import de.tobias.playpad.viewcontroller.AudioHandlerViewController;
 import de.tobias.playpad.viewcontroller.audio.ClipSettingsViewController;
 
 public class ClipAudioHandlerConnect extends AudioHandlerConnect implements AutoCloseable {
@@ -12,10 +12,15 @@ public class ClipAudioHandlerConnect extends AudioHandlerConnect implements Auto
 	}
 
 	@Override
-	public AudioTypeViewController getAudioViewController() {
+	public AudioHandlerViewController getAudioHandlerSettingsViewController() {
 		return new ClipSettingsViewController();
 	}
-	
+
+	@Override
+	public String getType() {
+		return ClipAudioHandler.TYPE;
+	}
+
 	@Override
 	public void close() throws Exception {
 		TinyAudioHandler.shutdown();
diff --git a/PlayWall/src/de/tobias/playpad/audio/JavaFXAudioHandler.java b/PlayWall/src/de/tobias/playpad/audio/JavaFXAudioHandler.java
index 4792e37a92538363d0473e2ffac5a974246d8054..d961972a6eec022d974274e512c2ca2e2ccd6cc4 100644
--- a/PlayWall/src/de/tobias/playpad/audio/JavaFXAudioHandler.java
+++ b/PlayWall/src/de/tobias/playpad/audio/JavaFXAudioHandler.java
@@ -18,6 +18,7 @@ import javafx.util.Duration;
 
 public class JavaFXAudioHandler extends AudioHandler implements Equalizable {
 
+	public static final String TYPE = "JavaFx";
 	public static final String NAME = "Java FX Media";
 
 	private Media media;
diff --git a/PlayWall/src/de/tobias/playpad/audio/JavaFXHandlerConnect.java b/PlayWall/src/de/tobias/playpad/audio/JavaFXHandlerConnect.java
index 9a5e3fb8cfc71d87b064285e4d8057a43472639b..baca001b6e97120e49f96f5bde06800138aded15 100644
--- a/PlayWall/src/de/tobias/playpad/audio/JavaFXHandlerConnect.java
+++ b/PlayWall/src/de/tobias/playpad/audio/JavaFXHandlerConnect.java
@@ -1,7 +1,7 @@
 package de.tobias.playpad.audio;
 
 import de.tobias.playpad.pad.conntent.PadContent;
-import de.tobias.playpad.viewcontroller.AudioTypeViewController;
+import de.tobias.playpad.viewcontroller.AudioHandlerViewController;
 
 public class JavaFXHandlerConnect extends AudioHandlerConnect {
 
@@ -11,7 +11,12 @@ public class JavaFXHandlerConnect extends AudioHandlerConnect {
 	}
 
 	@Override
-	public AudioTypeViewController getAudioViewController() {
+	public AudioHandlerViewController getAudioHandlerSettingsViewController() {
 		return null;
 	}
+	
+	@Override
+	public String getType() {
+		return JavaFXAudioHandler.TYPE;
+	}
 }
diff --git a/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandler.java b/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandler.java
index 7bf652f8fa50e2f7dffd0d9bcec260dd2dba41f5..8c412a0eeb3df7d37e9a6f16497082b1ad4cc916 100644
--- a/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandler.java
+++ b/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandler.java
@@ -40,8 +40,10 @@ public class TinyAudioHandler extends AudioHandler {
 
 	public static final String SOUND_CARD = "SoundCard";
 
+	public static final String TYPE = "TinyAudio"; 
 	public static final String NAME = "Java Audiostream";
 	private static final String MP3 = "mp3";
+	
 	private static final int SLEEP_TIME_POSITION = 50;
 
 	private static ExecutorService executorService;
diff --git a/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandlerConnect.java b/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandlerConnect.java
index c8e8904c0b953c3dfa3e99f7e162bbe5ca7cf6c4..cf8388f1f83557cf8c9ab87b7a84c2faca1de8ee 100644
--- a/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandlerConnect.java
+++ b/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandlerConnect.java
@@ -1,7 +1,7 @@
 package de.tobias.playpad.audio;
 
 import de.tobias.playpad.pad.conntent.PadContent;
-import de.tobias.playpad.viewcontroller.AudioTypeViewController;
+import de.tobias.playpad.viewcontroller.AudioHandlerViewController;
 import de.tobias.playpad.viewcontroller.audio.TinySoundSettingsViewController;
 
 public class TinyAudioHandlerConnect extends AudioHandlerConnect implements AutoCloseable {
@@ -12,10 +12,15 @@ public class TinyAudioHandlerConnect extends AudioHandlerConnect implements Auto
 	}
 
 	@Override
-	public AudioTypeViewController getAudioViewController() {
+	public AudioHandlerViewController getAudioHandlerSettingsViewController() {
 		return new TinySoundSettingsViewController();
 	}
 
+	@Override
+	public String getType() {
+		return TinyAudioHandler.TYPE;
+	}
+
 	@Override
 	public void close() throws Exception {
 		TinyAudioHandler.shutdown();
diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java
index e39b0662a6fded232f1cfed715e10a6432e4fe21..fa69b00d01afe46c5bd318a4b9c764ab05cc9f63 100644
--- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java
+++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java
@@ -2,13 +2,24 @@ package de.tobias.playpad.layout.desktop;
 
 import java.util.Stack;
 
+import de.tobias.playpad.Strings;
 import de.tobias.playpad.pad.view.IPadViewV2;
 import de.tobias.playpad.view.main.MainLayoutConnect;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
 import de.tobias.playpad.viewcontroller.main.MenuToolbarViewController;
+import de.tobias.utils.util.Localization;
 
+/**
+ * Desktop Implmentierung des Main Layouts.
+ * 
+ * @author tobias
+ *
+ * @since 5.1.0
+ */
 public class DesktopMainLayoutConnect implements MainLayoutConnect {
 
+	private static final String TYPE = "Desktop";
+
 	private DesktopMenuToolbarViewController desktopMenuToolbarViewController;
 
 	private Stack<IPadViewV2> recyclingStack;
@@ -19,12 +30,12 @@ public class DesktopMainLayoutConnect implements MainLayoutConnect {
 
 	@Override
 	public String getType() {
-		return "Desktop";
+		return TYPE;
 	}
 
 	@Override
 	public String name() {
-		return "Desktop Modus"; // TODO Localize
+		return Localization.getString(Strings.MainLayout_Desktop);
 	}
 
 	@Override
diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java
index adc1a04d9b370bd22cfa28997bad275ccfba4b13..837bd0198fbabf669de498497e18498ee9bc335c 100644
--- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java
+++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java
@@ -583,9 +583,9 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro
 	@FXML
 	void searchPadHandler(ActionEvent event) {
 		TextField field = TextFields.createClearableTextField();
-		field.setPromptText("Suche"); // TODO i18n
+		field.setPromptText(Localization.getString(Strings.Search_Placeholder));
 
-		Button button = new Button("Suchen"); // TODO i18n
+		Button button = new Button(Localization.getString(Strings.Search_Button));
 		button.setOnAction(new DesktopSearchController(field, this));
 
 		HBox box = new HBox(14, field, button);
diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopSearchController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopSearchController.java
index dbe3475f6d5e2b6a56eafb54f4577c7a737fe9a2..ddeb4138d48ceeb95bdbc745018e02049f0884c5 100644
--- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopSearchController.java
+++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopSearchController.java
@@ -2,10 +2,12 @@ package de.tobias.playpad.layout.desktop;
 
 import de.tobias.playpad.PlayPadMain;
 import de.tobias.playpad.PlayPadPlugin;
+import de.tobias.playpad.Strings;
 import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.pad.PadStatus;
 import de.tobias.playpad.project.Project;
 import de.tobias.utils.ui.Alertable;
+import de.tobias.utils.util.Localization;
 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
 import javafx.scene.control.TextField;
@@ -45,7 +47,7 @@ public class DesktopSearchController implements EventHandler<ActionEvent> {
 				}
 			}
 		}
-		alertable.showInfoMessage("Keine weiteren Treffer gefunden.", PlayPadMain.stageIcon.orElse(null)); // TODO i18n
+		alertable.showInfoMessage(Localization.getString(Strings.Search_Alert_NoMatches), PlayPadMain.stageIcon.orElse(null));
 		currentIndex = 0;
 	}
 }
diff --git a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java
index be191f56a28e7532539d29cb62599978eddc4235..a82f250d1e134b8e7ee25222b71f55b6b109a8f3 100644
--- a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java
+++ b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java
@@ -2,13 +2,24 @@ package de.tobias.playpad.layout.touch;
 
 import java.util.Stack;
 
+import de.tobias.playpad.Strings;
 import de.tobias.playpad.pad.view.IPadViewV2;
 import de.tobias.playpad.view.main.MainLayoutConnect;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
 import de.tobias.playpad.viewcontroller.main.MenuToolbarViewController;
+import de.tobias.utils.util.Localization;
 
+/**
+ * Touch Implementierung des Main Layout.
+ * 
+ * @author tobias
+ *
+ * @since 5.1.0
+ */
 public class TouchMainLayoutConnect implements MainLayoutConnect {
 
+	private static final String TYPE = "Touch";
+
 	private TouchMenuToolbarViewController touchMainLayoutConnect;
 
 	private Stack<IPadViewV2> recyclingStack;
@@ -16,15 +27,15 @@ public class TouchMainLayoutConnect implements MainLayoutConnect {
 	public TouchMainLayoutConnect() {
 		recyclingStack = new Stack<>();
 	}
-	
+
 	@Override
 	public String getType() {
-		return "Touch";
+		return TYPE;
 	}
 
 	@Override
 	public String name() {
-		return "Touch Modus"; // TODO Localize
+		return Localization.getString(Strings.MainLayout_Touch);
 	}
 
 	@Override
diff --git a/PlayWall/src/de/tobias/playpad/view/HelpMenuItem.java b/PlayWall/src/de/tobias/playpad/view/HelpMenuItem.java
index bf8e4f9aa04fe6cdad26acecd31e36811ff70774..1059be7fc18a4924b45523fb2ee262ab692b88cc 100644
--- a/PlayWall/src/de/tobias/playpad/view/HelpMenuItem.java
+++ b/PlayWall/src/de/tobias/playpad/view/HelpMenuItem.java
@@ -26,7 +26,7 @@ public class HelpMenuItem extends CustomMenuItem implements ChangeListener<Strin
 
 		setHideOnClick(false);
 
-		Label label = new Label("Suchen nach (Beta): "); // TODO i18n
+		Label label = new Label("Suchen nach (Beta): "); // TODO BETA i18n
 		TextField textfield = new TextField();
 		textfield.textProperty().addListener(this);
 
diff --git a/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java b/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java
index 5b293810c01492b41bc75d75ec3fa3f0d8ca012c..5ae0d9f6a0f9de033b308e52034cb98731109147 100644
--- a/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java
+++ b/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java
@@ -62,7 +62,15 @@ public class MapperOverviewViewController implements IMapperOverviewViewControll
 		Set<String> types = registry.getTypes();
 		types.stream().sorted().forEach(item ->
 		{
-			Button button = new Button(item.toString(), new FontIcon(FontAwesomeType.PLUS_CIRCLE));
+			String name = item;
+			try {
+				MapperConnect connect = registry.getComponent(item);
+				name = connect.toString();
+			} catch (NoSuchComponentException e) {
+				// TODO Error Handling
+				e.printStackTrace();
+			}
+			Button button = new Button(name, new FontIcon(FontAwesomeType.PLUS_CIRCLE));
 			button.setContentDisplay(ContentDisplay.TOP);
 			button.setPrefWidth(150);
 
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/audio/ClipSettingsViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/audio/ClipSettingsViewController.java
index 624d6c557b49d8606a58b71d5af1a82d0c29d919..1cf62dd4e5bc531cced38b433420086db33ab173 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/audio/ClipSettingsViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/audio/ClipSettingsViewController.java
@@ -15,7 +15,7 @@ import javax.sound.sampled.UnsupportedAudioFileException;
 import de.tobias.playpad.PlayPadMain;
 import de.tobias.playpad.audio.TinyAudioHandler;
 import de.tobias.playpad.settings.Profile;
-import de.tobias.playpad.viewcontroller.AudioTypeViewController;
+import de.tobias.playpad.viewcontroller.AudioHandlerViewController;
 import de.tobias.utils.ui.icon.FontAwesomeType;
 import de.tobias.utils.ui.icon.FontIcon;
 import de.tobias.utils.util.Worker;
@@ -27,7 +27,7 @@ import javafx.scene.control.ListCell;
 import javafx.scene.control.ListView;
 import javafx.util.Callback;
 
-public class ClipSettingsViewController extends AudioTypeViewController implements Callback<ListView<Info>, ListCell<Info>> {
+public class ClipSettingsViewController extends AudioHandlerViewController implements Callback<ListView<Info>, ListCell<Info>> {
 
 	@FXML private ComboBox<Info> soundCardComboBox;
 	@FXML private Button testButton;
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/audio/TinySoundSettingsViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/audio/TinySoundSettingsViewController.java
index 4429ba72ad6c5bc5b937e314e491e1248bdb7c19..799ed153cf5d716f4bb78e1ebd71903b2a759e40 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/audio/TinySoundSettingsViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/audio/TinySoundSettingsViewController.java
@@ -15,7 +15,7 @@ import javax.sound.sampled.UnsupportedAudioFileException;
 import de.tobias.playpad.PlayPadMain;
 import de.tobias.playpad.audio.TinyAudioHandler;
 import de.tobias.playpad.settings.Profile;
-import de.tobias.playpad.viewcontroller.AudioTypeViewController;
+import de.tobias.playpad.viewcontroller.AudioHandlerViewController;
 import de.tobias.utils.ui.icon.FontAwesomeType;
 import de.tobias.utils.ui.icon.FontIcon;
 import de.tobias.utils.util.Worker;
@@ -27,7 +27,7 @@ import javafx.scene.control.ListCell;
 import javafx.scene.control.ListView;
 import javafx.util.Callback;
 
-public class TinySoundSettingsViewController extends AudioTypeViewController implements Callback<ListView<Info>, ListCell<Info>> {
+public class TinySoundSettingsViewController extends AudioHandlerViewController implements Callback<ListView<Info>, ListCell<Info>> {
 
 	@FXML private ComboBox<Info> soundCardComboBox;
 	@FXML private Button testButton;
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/dialog/UpdaterDialog.java b/PlayWall/src/de/tobias/playpad/viewcontroller/dialog/UpdaterDialog.java
index 6143bc834cdf0810172eef642d3453118feb3e44..bdb1365e8876705f535af099cac91c846cf7f70a 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/dialog/UpdaterDialog.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/dialog/UpdaterDialog.java
@@ -1,8 +1,6 @@
 package de.tobias.playpad.viewcontroller.dialog;
 
 import de.tobias.playpad.PlayPadMain;
-import de.tobias.playpad.Strings;
-import de.tobias.utils.util.Localization;
 import javafx.scene.control.Dialog;
 import javafx.scene.control.Label;
 import javafx.scene.image.ImageView;
@@ -13,7 +11,6 @@ import javafx.stage.Window;
 public class UpdaterDialog extends Dialog<Void> {
 
 	public UpdaterDialog(Window owner) {
-		setHeaderText(Localization.getString(Strings.UI_Dialog_DragAndDrop_Header));
 		setGraphic(new ImageView("org/controlsfx/dialog/dialog-information.png"));
 
 		Label textLabel = new Label(
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysConflictDialog.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysConflictDialog.java
new file mode 100644
index 0000000000000000000000000000000000000000..c0df4125f1f51dfd7c8215b511526f33b1883254
--- /dev/null
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysConflictDialog.java
@@ -0,0 +1,33 @@
+package de.tobias.playpad.viewcontroller.option.global;
+
+import java.util.List;
+
+import de.tobias.playpad.PlayPadMain;
+import de.tobias.playpad.Strings;
+import de.tobias.playpad.settings.keys.Key;
+import de.tobias.playpad.settings.keys.KeyCollection;
+import de.tobias.utils.util.Localization;
+import javafx.scene.control.Alert;
+import javafx.stage.Modality;
+import javafx.stage.Stage;
+
+public class KeysConflictDialog extends Alert {
+
+	public KeysConflictDialog(List<Key> conflicts, KeyCollection collection) {
+		super(AlertType.ERROR);
+
+		String keys = "";
+		for (int i = 0; i < conflicts.size(); i++) {
+			keys += "- " + collection.getName(conflicts.get(i).getId());
+			if (i + 1 < conflicts.size()) {
+				keys += "\n";
+			}
+		}
+		setHeaderText(Localization.getString(Strings.UI_Settings_Keys_Conflict_Header));
+		setContentText(Localization.getString(Strings.UI_Settings_Keys_Conflict_Content, keys));
+
+		Stage dialogStage = (Stage) getDialogPane().getScene().getWindow();
+		PlayPadMain.stageIcon.ifPresent(dialogStage.getIcons()::add);
+		initModality(Modality.WINDOW_MODAL);
+	}
+}
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysTabViewController.java
index c6132c91e319ce4ea2d54fcbb48d80a0d5fa2db2..db63105828e12ced20b8e68e9e06577c7a3ddecb 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysTabViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/global/KeysTabViewController.java
@@ -6,6 +6,7 @@ import de.tobias.playpad.Strings;
 import de.tobias.playpad.project.Project;
 import de.tobias.playpad.settings.GlobalSettings;
 import de.tobias.playpad.settings.keys.Key;
+import de.tobias.playpad.settings.keys.KeyCollection;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
 import de.tobias.playpad.viewcontroller.option.GlobalSettingsTabViewController;
 import de.tobias.utils.util.Localization;
@@ -28,6 +29,7 @@ import javafx.scene.control.TableRow;
 import javafx.scene.control.TableView;
 import javafx.scene.control.TextField;
 import javafx.scene.input.KeyCode;
+import javafx.stage.Modality;
 import javafx.stage.Stage;
 
 public class KeysTabViewController extends GlobalSettingsTabViewController {
@@ -134,20 +136,27 @@ public class KeysTabViewController extends GlobalSettingsTabViewController {
 				Key newKey = new Key(currentKey.getId(), key, ev.isControlDown(), ev.isAltDown(), ev.isMetaDown(), ev.isShiftDown());
 
 				GlobalSettings globalSettings = PlayPadPlugin.getImplementation().getGlobalSettings();
-				boolean conflict = globalSettings.getKeyCollection().keysConflict(newKey);
+				KeyCollection keyCollection = globalSettings.getKeyCollection();
+
+				boolean conflict = keyCollection.keysConflict(newKey);
 				if (!conflict) {
-					globalSettings.getKeyCollection().editKey(newKey);
+					keyCollection.editKey(newKey);
 
 					shortcutLabel.setText(currentKey.toString());
 					Platform.runLater(() -> ((Stage) scene.getWindow()).close());
 				} else {
-					showErrorMessage("Konflikt"); // TODO Localize
+					KeysConflictDialog dialog = new KeysConflictDialog(keyCollection.getConflicts(newKey), keyCollection);
+					dialog.initOwner(getStage());
+					dialog.showAndWait();
 				}
 			}
 		});
 
 		alert.getButtonTypes().add(ButtonType.CANCEL);
 		alert.initOwner(getWindow());
+		alert.initModality(Modality.WINDOW_MODAL);
+		Stage alertStage = (Stage) alert.getDialogPane().getScene().getWindow();
+		PlayPadMain.stageIcon.ifPresent(alertStage.getIcons()::add);
 		alert.showAndWait();
 	}
 
@@ -179,8 +188,7 @@ public class KeysTabViewController extends GlobalSettingsTabViewController {
 
 	@Override
 	public String name() {
-		// TODO Auto-generated method stub
-		return "Keyboard (I18N)";
+		return Localization.getString(Strings.UI_Window_Settings_Keys_Title);
 	}
 
 	private void search() {
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/AudioTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/AudioTabViewController.java
index 7faa367ac3794cff8f7517b603693eaef7a4803a..1972fd9b8b99293d4375a2a6f854946a16ec656e 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/AudioTabViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/AudioTabViewController.java
@@ -8,7 +8,7 @@ import de.tobias.playpad.project.Project;
 import de.tobias.playpad.registry.NoSuchComponentException;
 import de.tobias.playpad.settings.Profile;
 import de.tobias.playpad.settings.ProfileSettings;
-import de.tobias.playpad.viewcontroller.AudioTypeViewController;
+import de.tobias.playpad.viewcontroller.AudioHandlerViewController;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
 import de.tobias.playpad.viewcontroller.option.ProfileSettingsTabViewController;
 import de.tobias.utils.util.Localization;
@@ -22,7 +22,7 @@ public class AudioTabViewController extends ProfileSettingsTabViewController {
 	// Audio
 	@FXML private ComboBox<String> audioTypeComboBox;
 	@FXML private AnchorPane audioUserInfoSettings;
-	private AudioTypeViewController audioViewController;
+	private AudioHandlerViewController audioViewController;
 	private boolean changeAudioSettings;
 
 	public AudioTabViewController(boolean playerActive) {
@@ -63,7 +63,7 @@ public class AudioTabViewController extends ProfileSettingsTabViewController {
 
 		try {
 			AudioRegistry audioHandlerRegistry = PlayPadPlugin.getRegistryCollection().getAudioHandlers();
-			audioViewController = audioHandlerRegistry.getComponent(classID).getAudioViewController();
+			audioViewController = audioHandlerRegistry.getComponent(classID).getAudioHandlerSettingsViewController();
 
 			if (audioViewController != null) {
 				audioUserInfoSettings.getChildren().add(audioViewController.getParent());
diff --git a/PlayWallCore/src/de/tobias/playpad/audio/AudioHandler.java b/PlayWallCore/src/de/tobias/playpad/audio/AudioHandler.java
index 7b0f8aeb949969c2f0e3cb0bbd04cca3faa5e570..dee8a0e13d6a7268720ec5a9c093099a4c2e4ab9 100644
--- a/PlayWallCore/src/de/tobias/playpad/audio/AudioHandler.java
+++ b/PlayWallCore/src/de/tobias/playpad/audio/AudioHandler.java
@@ -13,7 +13,6 @@ public abstract class AudioHandler {
 	private PadContent content;
 
 	public AudioHandler(PadContent content) {
-		super();
 		this.content = content;
 	}
 
diff --git a/PlayWallCore/src/de/tobias/playpad/audio/AudioHandlerConnect.java b/PlayWallCore/src/de/tobias/playpad/audio/AudioHandlerConnect.java
index 5a35082ebab80875af6b917782db1239ebb861a6..0d280a36ffd3d4af4f52975cd8cf2f4c1c577c85 100644
--- a/PlayWallCore/src/de/tobias/playpad/audio/AudioHandlerConnect.java
+++ b/PlayWallCore/src/de/tobias/playpad/audio/AudioHandlerConnect.java
@@ -1,12 +1,38 @@
 package de.tobias.playpad.audio;
 
 import de.tobias.playpad.pad.conntent.PadContent;
-import de.tobias.playpad.viewcontroller.AudioTypeViewController;
+import de.tobias.playpad.viewcontroller.AudioHandlerViewController;
 
+/**
+ * Audio Handler Interface zur Verwaltung einer AudioHandler Implementierung. Für Aktionen beim schließen des
+ * Programmes, muss der AudioHandler AutoClosable implementieren.
+ * 
+ * @author tobias
+ *
+ * @since 5.0.0
+ */
 public abstract class AudioHandlerConnect {
 
+	/**
+	 * Erstellt für eine Kachel ein neunes AudioInterface
+	 * 
+	 * @param content
+	 *            Content des Pads
+	 * @return AudioHandler
+	 */
 	public abstract AudioHandler createAudioHandler(PadContent content);
 
-	public abstract AudioTypeViewController getAudioViewController();
+	/**
+	 * Gibt den Settings View Controller für die Audio Schnittstelle zurück.s
+	 * 
+	 * @return neuer ViewContoller
+	 */
+	public abstract AudioHandlerViewController getAudioHandlerSettingsViewController();
 
+	/**
+	 * Gibt den Type des AudioHandlers zurück.
+	 * 
+	 * @return Type
+	 */
+	public abstract String getType();
 }
diff --git a/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java b/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java
index f47a1e5ffbbe3a05f32c5f74627e6be5c5c5ba69..85518577e5cff024333007fdca3a82db9d375e76 100644
--- a/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java
+++ b/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java
@@ -1,5 +1,6 @@
 package de.tobias.playpad.settings.keys;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
@@ -73,6 +74,16 @@ public class KeyCollection {
 		}
 		return false;
 	}
+	
+	public List<Key> getConflicts(Key key) {
+		List<Key> conflicts = new ArrayList<>();
+		for (Key k : keys.values()) {
+			if (k.getKeyCode().equals(key.getKeyCode())) {
+				conflicts.add(k);
+			}
+		}
+		return conflicts;
+	}
 
 	private static final String KEY_ELEMENT = "Key";
 
diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioTypeViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioHandlerViewController.java
similarity index 80%
rename from PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioTypeViewController.java
rename to PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioHandlerViewController.java
index ee065a8d8fa59a2b0b69508894b1eea223b718dd..ba5e4d0af5824208ba515155ddd68e2fe7a70397 100644
--- a/PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioTypeViewController.java
+++ b/PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioHandlerViewController.java
@@ -12,7 +12,7 @@ import de.tobias.utils.ui.ContentViewController;
  * 
  * @see AudioHandlerConnect
  */
-public abstract class AudioTypeViewController extends ContentViewController {
+public abstract class AudioHandlerViewController extends ContentViewController {
 
 	/**
 	 * Neuer ViewController.
@@ -24,7 +24,7 @@ public abstract class AudioTypeViewController extends ContentViewController {
 	 * @param localization
 	 *            Localization
 	 */
-	public AudioTypeViewController(String name, String path, ResourceBundle localization) {
+	public AudioHandlerViewController(String name, String path, ResourceBundle localization) {
 		super(name, path, localization);
 	}