diff --git a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java
index b63f6e43ee160ef45923436b5eb61783d01ad4e1..fd2981104a375d373fd739f34e58e8b1633c1901 100644
--- a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java
+++ b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java
@@ -283,10 +283,6 @@ public class PlayPadImpl implements PlayPad {
 		Pad.getVolumeManager().addFilter(new GlobalVolume());
 		Pad.getVolumeManager().addFilter(new PadVolume());
 
-		// 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 a44ad94ced90de062c4f950c1bfe1438cedeba66..ecb8676f91e5d5b8e7c5b53bff54bde7d763e998 100644
--- a/PlayWall/src/de/tobias/playpad/PlayPadMain.java
+++ b/PlayWall/src/de/tobias/playpad/PlayPadMain.java
@@ -84,16 +84,19 @@ public class PlayPadMain extends Application implements LocalizationDelegate {
 	public void init() throws Exception {
 		App app = ApplicationUtils.getApplication();
 
+		// Localization
+		setupLocalization();
+
+		// Setup Global Settings
 		Path globalSettingsPath = app.getPath(PathType.CONFIGURATION, "GlobalSettings.xml");
 		GlobalSettings globalSettings = GlobalSettings.load(globalSettingsPath);
+		globalSettings.getKeyCollection().loadDefaultFromFile("de/tobias/playpad/components/Keys.xml", uiResourceBundle);
+		globalSettings.getKeyCollection().load(globalSettingsPath);
 
 		impl = new PlayPadImpl(globalSettings);
 		PlayPadPlugin.setImplementation(impl);
 		PlayPadPlugin.setRegistryCollection(new RegistryCollectionImpl());
 
-		// Localization
-		setupLocalization();
-
 		// Console
 		if (!app.isDebug()) {
 			System.setOut(ConsoleUtils.streamToFile(app.getPath(PathType.LOG, "out.log")));
@@ -108,8 +111,7 @@ 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
diff --git a/PlayWall/src/de/tobias/playpad/trigger/TriggerUIWrapper.java b/PlayWall/src/de/tobias/playpad/trigger/TriggerDisplayable.java
similarity index 91%
rename from PlayWall/src/de/tobias/playpad/trigger/TriggerUIWrapper.java
rename to PlayWall/src/de/tobias/playpad/trigger/TriggerDisplayable.java
index edd8e29b8be0b2496e93d7e469be775993c4161c..f385b88833e9613e810363b10a3084faaec99c83 100644
--- a/PlayWall/src/de/tobias/playpad/trigger/TriggerUIWrapper.java
+++ b/PlayWall/src/de/tobias/playpad/trigger/TriggerDisplayable.java
@@ -8,11 +8,11 @@ import de.tobias.utils.util.Localization;
 import javafx.beans.property.SimpleStringProperty;
 import javafx.beans.property.StringProperty;
 
-public class TriggerUIWrapper implements Displayable {
+public class TriggerDisplayable implements Displayable {
 
 	private Trigger trigger;
 
-	public TriggerUIWrapper(Trigger trigger) {
+	public TriggerDisplayable(Trigger trigger) {
 		this.trigger = trigger;
 		updateString();
 	}
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/TriggerPadTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/TriggerPadTabViewController.java
index 6b90fd74ff3945095504de6be0e30f78f0c24e71..818e56c64718846bd39a995c08bab1e70191b481 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/TriggerPadTabViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/TriggerPadTabViewController.java
@@ -7,7 +7,7 @@ import de.tobias.playpad.Strings;
 import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.tigger.Trigger;
 import de.tobias.playpad.tigger.TriggerPoint;
-import de.tobias.playpad.trigger.TriggerUIWrapper;
+import de.tobias.playpad.trigger.TriggerDisplayable;
 import de.tobias.playpad.viewcontroller.PadSettingsTabViewController;
 import de.tobias.playpad.viewcontroller.cell.DisplayableTreeCell;
 import de.tobias.playpad.viewcontroller.option.pad.trigger.TriggerPointViewController;
@@ -20,9 +20,9 @@ import javafx.scene.control.TreeView;
 import javafx.scene.layout.Priority;
 import javafx.scene.layout.VBox;
 
-public class TriggerPadTabViewController extends PadSettingsTabViewController implements ChangeListener<TreeItem<TriggerUIWrapper>> {
+public class TriggerPadTabViewController extends PadSettingsTabViewController implements ChangeListener<TreeItem<TriggerDisplayable>> {
 
-	@FXML private TreeView<TriggerUIWrapper> treeView;
+	@FXML private TreeView<TriggerDisplayable> treeView;
 	@FXML private VBox contentView;
 
 	private Pad pad;
@@ -40,13 +40,13 @@ public class TriggerPadTabViewController extends PadSettingsTabViewController im
 
 	private void createTreeView() {
 		HashMap<TriggerPoint, Trigger> triggers = pad.getPadSettings().getTriggers();
-		TreeItem<TriggerUIWrapper> rootItem = new TreeItem<>();
+		TreeItem<TriggerDisplayable> rootItem = new TreeItem<>();
 
 		// Sort the tpyes for the treeview
 		for (TriggerPoint point : TriggerPoint.values()) {
 			Trigger trigger = triggers.get(point);
 
-			TreeItem<TriggerUIWrapper> triggerItem = new TreeItem<>(new TriggerUIWrapper(trigger));
+			TreeItem<TriggerDisplayable> triggerItem = new TreeItem<>(new TriggerDisplayable(trigger));
 			rootItem.getChildren().add(triggerItem);
 		}
 
@@ -54,12 +54,12 @@ public class TriggerPadTabViewController extends PadSettingsTabViewController im
 	}
 
 	@Override
-	public void changed(ObservableValue<? extends TreeItem<TriggerUIWrapper>> observable, TreeItem<TriggerUIWrapper> oldValue,
-			TreeItem<TriggerUIWrapper> newValue) {
+	public void changed(ObservableValue<? extends TreeItem<TriggerDisplayable>> observable, TreeItem<TriggerDisplayable> oldValue,
+			TreeItem<TriggerDisplayable> newValue) {
 		contentView.getChildren().clear();
 
 		if (newValue != null) {
-			TriggerUIWrapper triggerWrapper = newValue.getValue();
+			TriggerDisplayable triggerWrapper = newValue.getValue();
 			TriggerPointViewController controller = new TriggerPointViewController(triggerWrapper);
 			contentView.getChildren().setAll(controller.getParent());
 			VBox.setVgrow(controller.getParent(), Priority.ALWAYS);
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/trigger/TriggerPointViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/trigger/TriggerPointViewController.java
index 04a53006c8bda7d22cb25f7b958cbc8336f0d917..19421ded87abb3bdaeff6515896d94d9c0a9c8af 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/trigger/TriggerPointViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/pad/trigger/TriggerPointViewController.java
@@ -7,7 +7,7 @@ import de.tobias.playpad.PlayPadPlugin;
 import de.tobias.playpad.registry.NoSuchComponentException;
 import de.tobias.playpad.tigger.TriggerItem;
 import de.tobias.playpad.tigger.TriggerItemConnect;
-import de.tobias.playpad.trigger.TriggerUIWrapper;
+import de.tobias.playpad.trigger.TriggerDisplayable;
 import de.tobias.utils.ui.ContentViewController;
 import de.tobias.utils.ui.icon.FontAwesomeType;
 import de.tobias.utils.ui.icon.FontIcon;
@@ -23,9 +23,9 @@ public class TriggerPointViewController extends ContentViewController {
 	@FXML private VBox itemView;
 	@FXML private HBox buttonBox;
 
-	private TriggerUIWrapper triggerWrapper;
+	private TriggerDisplayable triggerWrapper;
 
-	public TriggerPointViewController(TriggerUIWrapper triggerWrapper) {
+	public TriggerPointViewController(TriggerDisplayable triggerWrapper) {
 		super("triggerPoint", "de/tobias/playpad/assets/view/option/pad/trigger/", PlayPadMain.getUiResourceBundle());
 		this.triggerWrapper = triggerWrapper;
 
diff --git a/PlayWallCore/src/de/tobias/playpad/settings/GlobalSettings.java b/PlayWallCore/src/de/tobias/playpad/settings/GlobalSettings.java
index 7dd126156c4cf9287e2ecfaf9dbdc6fb83f2784b..477780f824bea0aa9ca25b59726b283783688ddb 100644
--- a/PlayWallCore/src/de/tobias/playpad/settings/GlobalSettings.java
+++ b/PlayWallCore/src/de/tobias/playpad/settings/GlobalSettings.java
@@ -147,7 +147,7 @@ public class GlobalSettings {
 
 	// Save & Load Data
 
-	private static final String KEYS_ELEMENT = "Keys";
+	public static final String KEYS_ELEMENT = "Keys";
 	private static final String AUTO_UPDATE_ELEMENT = "AutoUpdate";
 	private static final String IGNORE_UPDATE_ELEMENT = "IgnoreUpdate";
 	private static final String UPDATE_CHANNEL_ELEMENT = "UpdateChannel";
@@ -177,9 +177,6 @@ public class GlobalSettings {
 			Document document = reader.read(Files.newInputStream(savePath));
 			Element root = document.getRootElement();
 
-			if (root.element(KEYS_ELEMENT) != null)
-				settings.keyCollection.load(root.element(KEYS_ELEMENT));
-
 			if (root.element(AUTO_UPDATE_ELEMENT) != null) {
 				settings.setAutoUpdate(Boolean.valueOf(root.element(AUTO_UPDATE_ELEMENT).getStringValue()));
 			}
diff --git a/PlayWallCore/src/de/tobias/playpad/settings/keys/Key.java b/PlayWallCore/src/de/tobias/playpad/settings/keys/Key.java
index a281973d495050875b66a05f0039aeb797000a0d..a3d75334e9b5b3b3f4874afc57e820d08d7a6b9d 100644
--- a/PlayWallCore/src/de/tobias/playpad/settings/keys/Key.java
+++ b/PlayWallCore/src/de/tobias/playpad/settings/keys/Key.java
@@ -155,4 +155,8 @@ public class Key implements Displayable {
 		displayProperty.set(toString());
 		return displayProperty;
 	}
+
+	public boolean isEmpty() {
+		return key.isEmpty() && !ctrl && !shift & !meta && !alt;
+	}
 }
diff --git a/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java b/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java
index f68eb96920886c940d6ea24ffd8aa4f17d8e822a..09711f389e8ea95d133820ce7a49cd26b15773e4 100644
--- a/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java
+++ b/PlayWallCore/src/de/tobias/playpad/settings/keys/KeyCollection.java
@@ -1,5 +1,8 @@
 package de.tobias.playpad.settings.keys;
 
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -12,6 +15,7 @@ import org.dom4j.DocumentException;
 import org.dom4j.Element;
 import org.dom4j.io.SAXReader;
 
+import de.tobias.playpad.settings.GlobalSettings;
 import de.tobias.utils.util.OS;
 import de.tobias.utils.xml.XMLHandler;
 
@@ -60,15 +64,27 @@ public class KeyCollection {
 	 * @return Localized Name
 	 */
 	public String getName(String id) {
-		return keys.get(id).getName();
+		KeyCollectionEntry keyCollectionEntry = keys.get(id);
+		if (keyCollectionEntry != null) {
+			return keyCollectionEntry.getName();
+		} else {
+			return null;
+		}
 	}
 
 	public Key getKey(String id) {
-		return keys.get(id).getKey();
+		KeyCollectionEntry keyCollectionEntry = keys.get(id);
+		if (keyCollectionEntry != null) {
+			return keyCollectionEntry.getKey();
+		} else {
+			return null;
+		}
 	}
 
 	private void updateKey(Key key) {
-		keys.get(key.getId()).setKey(key);
+		KeyCollectionEntry keyCollectionEntry = keys.get(key.getId());
+		if (keyCollectionEntry != null)
+			keyCollectionEntry.setKey(key);
 	}
 
 	public Collection<Key> getKeys() {
@@ -98,7 +114,7 @@ public class KeyCollection {
 	 */
 	public boolean keysConflict(Key key) {
 		for (KeyCollectionEntry k : keys.values()) {
-			if (k.getKey().getKeyCode().equals(key.getKeyCode())) {
+			if (k.getKey().getKeyCode().equals(key.getKeyCode()) && !key.isEmpty()) {
 				return true;
 			}
 		}
@@ -128,11 +144,19 @@ public class KeyCollection {
 
 	private static final String KEY_ELEMENT = "Key";
 
-	public void load(Element element) {
-		XMLHandler<Key> handler = new XMLHandler<>(element);
-		List<Key> keys = handler.loadElements(KEY_ELEMENT, new KeySerializer());
-		for (Key key : keys) {
-			updateKey(key);
+	public void load(Path path) throws DocumentException, IOException {
+		if (Files.exists(path)) {
+			SAXReader reader = new SAXReader();
+			Document document = reader.read(Files.newInputStream(path));
+			Element root = document.getRootElement();
+
+			if (root.element(GlobalSettings.KEYS_ELEMENT) != null) {
+				XMLHandler<Key> handler = new XMLHandler<>(root.element(GlobalSettings.KEYS_ELEMENT));
+				List<Key> keys = handler.loadElements(KEY_ELEMENT, new KeySerializer());
+				for (Key key : keys) {
+					updateKey(key);
+				}
+			}
 		}
 	}