From 9500da4c25dc631cd73a10ae8ff96007720e7bbf Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Sun, 1 Jan 2017 19:27:09 +0100
Subject: [PATCH] Removed MapperRegistry, Refractor code, Rename Device to
 MidiDeviceImpl

---
 .../assets/dialog/newProfileDialog.fxml       |  2 +-
 .../playpad/assets/lang/ui_de.properties      |  2 +-
 .../assets/view/option/profile/midiTab.fxml   |  2 +-
 .../src/de/tobias/playpad/PlayPadImpl.java    | 12 ++--
 .../playpad/action/mapper/MidiMapper.java     | 56 +++++++++----------
 .../action/mapper/MidiMapperFactory.java      | 11 ++--
 .../action/mapper/listener/MidiHandler.java   |  6 +-
 .../de/tobias/playpad/midi/device/PD12.java   |  4 +-
 .../view/MapperOverviewViewController.java    | 12 ++--
 .../actions/CartActionViewController.java     | 13 ++---
 .../main/MainViewController.java              |  6 +-
 .../mapper/MidiMapperViewController.java      | 12 ++--
 .../DoubleFeedbackViewController.java         | 24 ++++----
 .../SingleFeedbackViewController.java         | 18 +++---
 .../profile/MappingTabViewController.java     | 13 ++---
 .../option/profile/MidiTabViewController.java |  2 +-
 .../action/mapper/MapperFeedbackable.java     |  9 ++-
 .../playpad/action/mapper/MapperRegistry.java | 18 ------
 .../{Device.java => MidiDeviceImpl.java}      |  6 +-
 .../src/de/tobias/playpad/midi/Midi.java      | 14 ++---
 ...Device.java => DefaultMidiDeviceImpl.java} |  4 +-
 .../playpad/midi/device/DeviceRegistry.java   | 18 +++---
 .../BaseMapperOverviewViewController.java     | 41 ++++++++++++++
 .../IMapperOverviewViewController.java        | 29 ----------
 .../midi/device/mk2/LaunchPadMK2.java         |  4 +-
 .../midi/device/s/LaunchPadS.java             |  4 +-
 26 files changed, 163 insertions(+), 179 deletions(-)
 delete mode 100644 PlayWallCore/src/de/tobias/playpad/action/mapper/MapperRegistry.java
 rename PlayWallCore/src/de/tobias/playpad/action/mididevice/{Device.java => MidiDeviceImpl.java} (89%)
 rename PlayWallCore/src/de/tobias/playpad/midi/device/{DefaultDevice.java => DefaultMidiDeviceImpl.java} (85%)
 create mode 100644 PlayWallCore/src/de/tobias/playpad/viewcontroller/BaseMapperOverviewViewController.java
 delete mode 100644 PlayWallCore/src/de/tobias/playpad/viewcontroller/IMapperOverviewViewController.java

diff --git a/PlayWall/assets/de/tobias/playpad/assets/dialog/newProfileDialog.fxml b/PlayWall/assets/de/tobias/playpad/assets/dialog/newProfileDialog.fxml
index 4825083a..bdb58ade 100644
--- a/PlayWall/assets/de/tobias/playpad/assets/dialog/newProfileDialog.fxml
+++ b/PlayWall/assets/de/tobias/playpad/assets/dialog/newProfileDialog.fxml
@@ -32,7 +32,7 @@
                                     </HBox>
                                     <HBox alignment="CENTER_LEFT" spacing="14.0">
                                        <children>
-                                          <Label alignment="CENTER_RIGHT" prefWidth="100.0" text="%settings.midi.label.device" />
+                                          <Label alignment="CENTER_RIGHT" prefWidth="100.0" text="%settings.midi.label.midiDeviceImpl" />
                                           <ComboBox fx:id="midiDeviceComboBox" maxWidth="1.7976931348623157E308" HBox.hgrow="ALWAYS" />
                                        </children>
                                     </HBox>
diff --git a/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties b/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties
index 119bd5e4..43587b86 100644
--- a/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties
+++ b/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties
@@ -54,7 +54,7 @@ settings.gen.cache.label.info=Wenn Sie als Audioausgabetyp "Java Audiostream" ge
 settings.mapping.label.mapping=Mapping:
 settings.mapping.button.edit=Bearbeiten...
 
-settings.midi.label.device=Midi-Ger\u00E4te:
+settings.midi.label.midiDeviceImpl=Midi-Ger\u00E4te:
 
 settings.layout.label.type=Layout Type:
 
diff --git a/PlayWall/assets/de/tobias/playpad/assets/view/option/profile/midiTab.fxml b/PlayWall/assets/de/tobias/playpad/assets/view/option/profile/midiTab.fxml
index c65c10d5..8816e719 100644
--- a/PlayWall/assets/de/tobias/playpad/assets/view/option/profile/midiTab.fxml
+++ b/PlayWall/assets/de/tobias/playpad/assets/view/option/profile/midiTab.fxml
@@ -10,7 +10,7 @@
    <children>
       <HBox spacing="14.0">
          <children>
-            <Label alignment="CENTER_RIGHT" prefWidth="150.0" text="%settings.midi.label.device">
+            <Label alignment="CENTER_RIGHT" prefWidth="150.0" text="%settings.midi.label.midiDeviceImpl">
                <HBox.margin>
                   <Insets top="4.0" />
                </HBox.margin>
diff --git a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java
index a9f22a3e..0e787f8e 100644
--- a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java
+++ b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java
@@ -18,11 +18,7 @@ import java.util.Set;
 
 import de.tobias.playpad.audio.JavaFXHandlerFactory;
 import de.tobias.playpad.design.modern.ModernDesignFactory;
-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.pad.Pad;
@@ -32,9 +28,9 @@ 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.BaseMapperOverviewViewController;
 import de.tobias.playpad.viewcontroller.IPadSettingsViewController;
 import de.tobias.playpad.viewcontroller.main.IMainViewController;
 import de.tobias.playpad.viewcontroller.main.MainViewController;
@@ -76,7 +72,7 @@ public class PlayPadImpl implements PlayPad {
 
 	private Set<Module> modules;
 
-	public PlayPadImpl(GlobalSettings globalSettings) {
+	PlayPadImpl(GlobalSettings globalSettings) {
 		App app = ApplicationUtils.getApplication();
 		module = new Module(app.getInfo().getName(), app.getInfo().getIdentifier());
 
@@ -252,7 +248,7 @@ public class PlayPadImpl implements PlayPad {
 		return currentProject;
 	}
 
-	public void startup(ResourceBundle resourceBundle) {
+	void startup(ResourceBundle resourceBundle) {
 		registerComponents(resourceBundle);
 	}
 
@@ -286,7 +282,7 @@ public class PlayPadImpl implements PlayPad {
 		Pad.getVolumeManager().addFilter(new PadVolume());
 
 		// Mapper
-		MapperRegistry.setOverviewViewController(new MapperOverviewViewController());
+		BaseMapperOverviewViewController.setInstance(new MapperOverviewViewController());
 
 	}
 
diff --git a/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapper.java b/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapper.java
index 2893dd12..8a9c9e24 100644
--- a/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapper.java
+++ b/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapper.java
@@ -1,7 +1,6 @@
 package de.tobias.playpad.action.mapper;
 
-import java.util.Optional;
-
+import de.tobias.playpad.action.mididevice.MidiDeviceImpl;
 import org.dom4j.Element;
 
 import de.tobias.playpad.Strings;
@@ -13,7 +12,6 @@ import de.tobias.playpad.action.feedback.FeedbackMessage;
 import de.tobias.playpad.action.feedback.FeedbackType;
 import de.tobias.playpad.action.mapper.feedback.DoubleMidiFeedback;
 import de.tobias.playpad.action.mapper.feedback.SingleMidiFeedback;
-import de.tobias.playpad.action.mididevice.Device;
 import de.tobias.playpad.action.mididevice.DeviceColorAssociatorConnector;
 import de.tobias.playpad.midi.Midi;
 import de.tobias.playpad.viewcontroller.mapper.MidiMapperViewController;
@@ -33,11 +31,11 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac
 	private Feedback feedback;
 	private FeedbackType feedbackType;
 
-	public MidiMapper(String type) {
+	MidiMapper(String type) {
 		this(type, 0, 0);
 	}
 
-	public MidiMapper(String type, int command, int key) {
+	MidiMapper(String type, int command, int key) {
 		this.type = type;
 		this.command = command;
 		this.key = key;
@@ -84,10 +82,10 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac
 	}
 
 	@Override
-	public void handleFeedback(FeedbackMessage type) {
-		Device device = Midi.getInstance().getMidiDevice();
-		if (device != null) {
-			device.handleFeedback(type, key, feedback);
+	public void handleFeedback(FeedbackMessage message) {
+		MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice();
+		if (midiDeviceImpl != null) {
+			midiDeviceImpl.handleFeedback(message, key, feedback);
 		}
 	}
 
@@ -96,12 +94,12 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac
 		return type;
 	}
 
-	// Feedback, abhängig vom Device
+	// Feedback, depends on MidiDeviceImpl
 	@Override
 	public boolean supportFeedback() {
-		Device midiDevice = Midi.getInstance().getMidiDevice();
-		if (midiDevice != null) {
-			return midiDevice.supportFeedback();
+		MidiDeviceImpl midiMidiDeviceImpl = Midi.getInstance().getMidiDevice();
+		if (midiMidiDeviceImpl != null) {
+			return midiMidiDeviceImpl.supportFeedback();
 		}
 		return false;
 	}
@@ -117,10 +115,10 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac
 
 	@Override
 	public DisplayableFeedbackColor[] getColors() {
-		Device device = Midi.getInstance().getMidiDevice();
-		if (device != null) {
-			if (device instanceof DeviceColorAssociatorConnector) {
-				return ((DeviceColorAssociatorConnector) device).getColors();
+		MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice();
+		if (midiDeviceImpl != null) {
+			if (midiDeviceImpl instanceof DeviceColorAssociatorConnector) {
+				return ((DeviceColorAssociatorConnector) midiDeviceImpl).getColors();
 			}
 		}
 		return null;
@@ -128,10 +126,10 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac
 
 	@Override
 	public DisplayableFeedbackColor getDefaultEventColor() {
-		Device device = Midi.getInstance().getMidiDevice();
-		if (device != null) {
-			if (device instanceof DeviceColorAssociatorConnector) {
-				return ((DeviceColorAssociatorConnector) device).getDefaultEventColor();
+		MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice();
+		if (midiDeviceImpl != null) {
+			if (midiDeviceImpl instanceof DeviceColorAssociatorConnector) {
+				return ((DeviceColorAssociatorConnector) midiDeviceImpl).getDefaultEventColor();
 			}
 		}
 		return null;
@@ -139,10 +137,10 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac
 
 	@Override
 	public DisplayableFeedbackColor getDefaultStandardColor() {
-		Device device = Midi.getInstance().getMidiDevice();
-		if (device != null) {
-			if (device instanceof DeviceColorAssociatorConnector) {
-				return ((DeviceColorAssociatorConnector) device).getDefaultStandardColor();
+		MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice();
+		if (midiDeviceImpl != null) {
+			if (midiDeviceImpl instanceof DeviceColorAssociatorConnector) {
+				return ((DeviceColorAssociatorConnector) midiDeviceImpl).getDefaultStandardColor();
 			}
 		}
 		return null;
@@ -150,10 +148,10 @@ public class MidiMapper extends Mapper implements ColorAssociator, MapperFeedbac
 	
 	@Override
 	public DisplayableFeedbackColor map(Color color) {
-		Device device = Midi.getInstance().getMidiDevice();
-		if (device != null) {
-			if (device instanceof DeviceColorAssociatorConnector) {
-				return ((DeviceColorAssociatorConnector) device).map(color);
+		MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice();
+		if (midiDeviceImpl != null) {
+			if (midiDeviceImpl instanceof DeviceColorAssociatorConnector) {
+				return ((DeviceColorAssociatorConnector) midiDeviceImpl).map(color);
 			}
 		}
 		return null;
diff --git a/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapperFactory.java b/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapperFactory.java
index 27e14b3e..3d616684 100644
--- a/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapperFactory.java
+++ b/PlayWall/src/de/tobias/playpad/action/mapper/MidiMapperFactory.java
@@ -1,9 +1,8 @@
 package de.tobias.playpad.action.mapper;
 
 import de.tobias.playpad.Strings;
-import de.tobias.playpad.action.mididevice.Device;
+import de.tobias.playpad.action.mididevice.MidiDeviceImpl;
 import de.tobias.playpad.midi.Midi;
-import de.tobias.utils.ui.icon.FontIconType;
 import de.tobias.utils.util.Localization;
 
 public class MidiMapperFactory extends MapperFactory implements MapperConnectFeedbackable {
@@ -24,14 +23,14 @@ public class MidiMapperFactory extends MapperFactory implements MapperConnectFee
 
 	@Override
 	public void initFeedbackType() {
-		Device device = Midi.getInstance().getMidiDevice();
-		device.initDevice();
+		MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice();
+		midiDeviceImpl.initDevice();
 	}
 
 	@Override
 	public void clearFeedbackType() {
-		Device device = Midi.getInstance().getMidiDevice();
-		device.clearFeedback();
+		MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice();
+		midiDeviceImpl.clearFeedback();
 	}
 
 	// TODO Remove
diff --git a/PlayWall/src/de/tobias/playpad/action/mapper/listener/MidiHandler.java b/PlayWall/src/de/tobias/playpad/action/mapper/listener/MidiHandler.java
index 85f6ec28..906c204d 100644
--- a/PlayWall/src/de/tobias/playpad/action/mapper/listener/MidiHandler.java
+++ b/PlayWall/src/de/tobias/playpad/action/mapper/listener/MidiHandler.java
@@ -7,7 +7,7 @@ import javax.sound.midi.MidiMessage;
 import de.tobias.playpad.action.Action;
 import de.tobias.playpad.action.InputType;
 import de.tobias.playpad.action.MappingUtils;
-import de.tobias.playpad.action.mididevice.Device;
+import de.tobias.playpad.action.mididevice.MidiDeviceImpl;
 import de.tobias.playpad.midi.Midi;
 import de.tobias.playpad.midi.MidiListener;
 import de.tobias.playpad.project.Project;
@@ -43,8 +43,8 @@ public class MidiHandler implements MidiListener {
 		int key = message.getMessage()[1];
 
 		// Custom Midi Listener
-		Device device = midi.getMidiDevice();
-		device.onMidiMessage(message);
+		MidiDeviceImpl midiDeviceImpl = midi.getMidiDevice();
+		midiDeviceImpl.onMidiMessage(message);
 
 		InputType type;
 		if (message.getMessage()[2] != 0) {
diff --git a/PlayWall/src/de/tobias/playpad/midi/device/PD12.java b/PlayWall/src/de/tobias/playpad/midi/device/PD12.java
index 40c050e4..2a214f22 100644
--- a/PlayWall/src/de/tobias/playpad/midi/device/PD12.java
+++ b/PlayWall/src/de/tobias/playpad/midi/device/PD12.java
@@ -6,11 +6,11 @@ import javax.sound.midi.SysexMessage;
 import de.tobias.playpad.action.feedback.DisplayableFeedbackColor;
 import de.tobias.playpad.action.feedback.Feedback;
 import de.tobias.playpad.action.feedback.FeedbackMessage;
-import de.tobias.playpad.action.mididevice.Device;
+import de.tobias.playpad.action.mididevice.MidiDeviceImpl;
 import de.tobias.playpad.settings.Profile;
 import javafx.application.Platform;
 
-public class PD12 extends Device {
+public class PD12 extends MidiDeviceImpl {
 
 	public static final String NAME = "PD 12";
 
diff --git a/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java b/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java
index 7b86020d..786e7834 100644
--- a/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java
+++ b/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java
@@ -1,9 +1,5 @@
 package de.tobias.playpad.view;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
 import de.tobias.playpad.PlayPadMain;
 import de.tobias.playpad.PlayPadPlugin;
 import de.tobias.playpad.action.Action;
@@ -12,7 +8,7 @@ import de.tobias.playpad.action.mapper.MapperFactory;
 import de.tobias.playpad.action.mapper.MapperViewController;
 import de.tobias.playpad.registry.NoSuchComponentException;
 import de.tobias.playpad.registry.Registry;
-import de.tobias.playpad.viewcontroller.IMapperOverviewViewController;
+import de.tobias.playpad.viewcontroller.BaseMapperOverviewViewController;
 import de.tobias.utils.ui.icon.FontAwesomeType;
 import de.tobias.utils.ui.icon.FontIcon;
 import javafx.scene.Parent;
@@ -24,8 +20,12 @@ import javafx.scene.layout.HBox;
 import javafx.scene.layout.Pane;
 import javafx.scene.layout.VBox;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
 // Diese Klasse zeigt die Mapper zu einer Action an
-public class MapperOverviewViewController implements IMapperOverviewViewController {
+public class MapperOverviewViewController extends BaseMapperOverviewViewController {
 
 	private VBox root;
 	private VBox mappingView;
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java
index 02065612..c53586b9 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java
@@ -4,9 +4,8 @@ import de.tobias.playpad.PlayPadMain;
 import de.tobias.playpad.Strings;
 import de.tobias.playpad.action.cartaction.CartAction;
 import de.tobias.playpad.action.cartaction.CartAction.ControlMode;
-import de.tobias.playpad.action.mapper.MapperRegistry;
 import de.tobias.playpad.action.mapper.MapperViewController;
-import de.tobias.playpad.viewcontroller.IMapperOverviewViewController;
+import de.tobias.playpad.viewcontroller.BaseMapperOverviewViewController;
 import de.tobias.playpad.viewcontroller.cell.EnumCell;
 import de.tobias.utils.ui.ContentViewController;
 import javafx.fxml.FXML;
@@ -21,7 +20,7 @@ public class CartActionViewController extends ContentViewController {
 	@FXML private CheckBox autoColorCheckbox;
 
 	@FXML private VBox rootContainer;
-	private IMapperOverviewViewController mapperOverviewViewController;
+	private BaseMapperOverviewViewController baseMapperOverviewViewController;
 
 	private CartAction action;
 
@@ -43,8 +42,8 @@ public class CartActionViewController extends ContentViewController {
 		{
 			action.setAutoFeedbackColors(c);
 			// Disable Feedback Controls bei Automatischen Feedback für VORHANDENE MAPPER
-			if (mapperOverviewViewController != null) {
-				mapperOverviewViewController.getControllers().forEach(controller ->
+			if (baseMapperOverviewViewController != null) {
+				baseMapperOverviewViewController.getControllers().forEach(controller ->
 				{
 					toggleFeedbackVisablity(action, controller);
 				});
@@ -52,8 +51,8 @@ public class CartActionViewController extends ContentViewController {
 		});
 		VBox.setVgrow(rootContainer, Priority.ALWAYS);
 
-		mapperOverviewViewController = MapperRegistry.getOverviewViewControllerInstance();
-		mapperOverviewViewController.addMapperAddListener((mapper, controller) ->
+		baseMapperOverviewViewController = BaseMapperOverviewViewController.getInstance();
+		baseMapperOverviewViewController.addMapperAddListener((mapper, controller) ->
 		{
 			// Disable Feedback Controls bei Automatischen Feedback für NEUE MAPPER die erstellt werden
 			toggleFeedbackVisablity(action, controller);
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java
index 0381d8ee..a641fcf2 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java
@@ -547,7 +547,7 @@ public class MainViewController extends ViewController implements IMainViewContr
 
 		// MIDI
 		if (profileSettings.isMidiActive() && profileSettings.getMidiDevice() != null) {
-			// Load known MIDI Device
+			// Load known MIDI MidiDeviceImpl
 			Worker.runLater(() ->
 			{
 				loadMidiDevice(profileSettings.getMidiDevice());
@@ -688,10 +688,10 @@ public class MainViewController extends ViewController implements IMainViewContr
 	}
 
 	/**
-	 * Init MIDI Device by using the Midi Class and show some feedback the user.
+	 * Init MIDI MidiDeviceImpl by using the Midi Class and show some feedback the user.
 	 * 
 	 * @param name
-	 *            Device Name
+	 *            MidiDeviceImpl Name
 	 * 
 	 * @see Midi#lookupMidiDevice(String)
 	 */
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/MidiMapperViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/MidiMapperViewController.java
index aabd426b..4dc94293 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/MidiMapperViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/MidiMapperViewController.java
@@ -10,7 +10,7 @@ import de.tobias.playpad.action.mapper.MapperViewController;
 import de.tobias.playpad.action.mapper.MidiMapper;
 import de.tobias.playpad.action.mapper.feedback.DoubleMidiFeedback;
 import de.tobias.playpad.action.mapper.feedback.SingleMidiFeedback;
-import de.tobias.playpad.action.mididevice.Device;
+import de.tobias.playpad.action.mididevice.MidiDeviceImpl;
 import de.tobias.playpad.midi.Midi;
 import de.tobias.playpad.midi.MidiListener;
 import de.tobias.playpad.viewcontroller.option.feedback.DoubleFeedbackViewController;
@@ -133,18 +133,18 @@ public class MidiMapperViewController extends MapperViewController implements Mi
 
 		midiInputKeyLabel.setText(String.valueOf(mapper.getKey()));
 
-		Device device = Midi.getInstance().getMidiDevice();
-		if (device != null) {
-			if (device.supportFeedback()) {
+		MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice();
+		if (midiDeviceImpl != null) {
+			if (midiDeviceImpl.supportFeedback()) {
 				// remove old Elements
 				if (feedbackController != null) {
 					root.getChildren().remove(feedbackController.getParent());
 				}
 				// add new Elements
 				if (mapper.getFeedbackType() == FeedbackType.SINGLE) {
-					feedbackController = new SingleFeedbackViewController((SingleMidiFeedback) mapper.getFeedback(), device.getColors());
+					feedbackController = new SingleFeedbackViewController((SingleMidiFeedback) mapper.getFeedback(), midiDeviceImpl.getColors());
 				} else if (mapper.getFeedbackType() == FeedbackType.DOUBLE) {
-					feedbackController = new DoubleFeedbackViewController((DoubleMidiFeedback) mapper.getFeedback(), device.getColors());
+					feedbackController = new DoubleFeedbackViewController((DoubleMidiFeedback) mapper.getFeedback(), midiDeviceImpl.getColors());
 				}
 				showFeedback();
 			}
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/DoubleFeedbackViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/DoubleFeedbackViewController.java
index a88ef435..04031530 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/DoubleFeedbackViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/DoubleFeedbackViewController.java
@@ -1,7 +1,5 @@
 package de.tobias.playpad.viewcontroller.option.feedback;
 
-import java.util.Optional;
-
 import org.controlsfx.control.PopOver;
 import org.controlsfx.control.PopOver.ArrowLocation;
 
@@ -9,7 +7,7 @@ import de.tobias.playpad.PlayPadMain;
 import de.tobias.playpad.action.feedback.DisplayableFeedbackColor;
 import de.tobias.playpad.action.feedback.FeedbackMessage;
 import de.tobias.playpad.action.mapper.feedback.DoubleMidiFeedback;
-import de.tobias.playpad.action.mididevice.Device;
+import de.tobias.playpad.action.mididevice.MidiDeviceImpl;
 import de.tobias.playpad.midi.Midi;
 import de.tobias.playpad.view.ColorPickerView;
 import de.tobias.utils.ui.ContentViewController;
@@ -42,14 +40,14 @@ public class DoubleFeedbackViewController extends ContentViewController {
 		super("doubleFeedback", "de/tobias/playpad/assets/view/option/feedback/", PlayPadMain.getUiResourceBundle());
 		this.feedback = feedback;
 
-		Device device = Midi.getInstance().getMidiDevice();
-		if (device != null) {
-			DisplayableFeedbackColor colorDefault = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD));
+		MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice();
+		if (midiDeviceImpl != null) {
+			DisplayableFeedbackColor colorDefault = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD));
 			if (colorDefault != null) {
 				colorPreviewDefault.setFill(colorDefault.getPaint());
 				setColorChooseButtonColor(colorDefault.getPaint(), colorChooseDefaultButton);
 			}
-			DisplayableFeedbackColor colorPlay = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.EVENT));
+			DisplayableFeedbackColor colorPlay = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.EVENT));
 			if (colorPlay != null) {
 				colorPreviewEvent.setFill(colorPlay.getPaint());
 				setColorChooseButtonColor(colorPlay.getPaint(), colorChooseEventButton);
@@ -74,16 +72,16 @@ public class DoubleFeedbackViewController extends ContentViewController {
 	private void colorChooseButtonHandler(ActionEvent event) {
 		if (colorChooser == null) {
 			colorChooser = new PopOver();
-			Device device = Midi.getInstance().getMidiDevice();
-			if (device != null) {
-				DisplayableFeedbackColor color = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD));
+			MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice();
+			if (midiDeviceImpl != null) {
+				DisplayableFeedbackColor color = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD));
 				if (event.getSource() == colorChooseDefaultButton) {
-					color = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD));
+					color = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD));
 				} else if (event.getSource() == colorChooseEventButton) {
-					color = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.EVENT));
+					color = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.EVENT));
 				}
 				
-				ColorPickerView colorView = new ColorPickerView(color, device.getColors(), item ->
+				ColorPickerView colorView = new ColorPickerView(color, midiDeviceImpl.getColors(), item ->
 				{
 					colorChooser.hide();
 					if (item instanceof DisplayableFeedbackColor) {
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/SingleFeedbackViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/SingleFeedbackViewController.java
index ab0d0320..11cd760a 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/SingleFeedbackViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/feedback/SingleFeedbackViewController.java
@@ -1,7 +1,6 @@
 package de.tobias.playpad.viewcontroller.option.feedback;
 
-import java.util.Optional;
-
+import de.tobias.playpad.action.mididevice.MidiDeviceImpl;
 import org.controlsfx.control.PopOver;
 import org.controlsfx.control.PopOver.ArrowLocation;
 
@@ -9,7 +8,6 @@ import de.tobias.playpad.PlayPadMain;
 import de.tobias.playpad.action.feedback.DisplayableFeedbackColor;
 import de.tobias.playpad.action.feedback.FeedbackMessage;
 import de.tobias.playpad.action.mapper.feedback.SingleMidiFeedback;
-import de.tobias.playpad.action.mididevice.Device;
 import de.tobias.playpad.midi.Midi;
 import de.tobias.playpad.view.ColorPickerView;
 import de.tobias.utils.ui.ContentViewController;
@@ -38,9 +36,9 @@ public class SingleFeedbackViewController extends ContentViewController {
 		super("singleFeedback", "de/tobias/playpad/assets/view/option/feedback/", PlayPadMain.getUiResourceBundle());
 		this.feedback = feedback;
 
-		Device device = Midi.getInstance().getMidiDevice();
-		if (device != null) {
-			DisplayableFeedbackColor colorDefault = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD));
+		MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice();
+		if (midiDeviceImpl != null) {
+			DisplayableFeedbackColor colorDefault = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD));
 			if (colorDefault != null) {
 				colorPreviewDefault.setFill(colorDefault.getPaint());
 				setColorChooseButtonColor(colorDefault.getPaint(), colorChooseDefaultButton);
@@ -60,11 +58,11 @@ public class SingleFeedbackViewController extends ContentViewController {
 	private void colorChooseButtonHandler(ActionEvent event) {
 		if (colorChooser == null) {
 			colorChooser = new PopOver();
-			Device device = Midi.getInstance().getMidiDevice();
-			if (device != null) {
-				DisplayableFeedbackColor color = device.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD));
+			MidiDeviceImpl midiDeviceImpl = Midi.getInstance().getMidiDevice();
+			if (midiDeviceImpl != null) {
+				DisplayableFeedbackColor color = midiDeviceImpl.getColor(feedback.getValueForFeedbackMessage(FeedbackMessage.STANDARD));
 
-				ColorPickerView colorView = new ColorPickerView(color, device.getColors(), item ->
+				ColorPickerView colorView = new ColorPickerView(color, midiDeviceImpl.getColors(), item ->
 				{
 					colorChooser.hide();
 					if (item instanceof DisplayableFeedbackColor) {
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MappingTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MappingTabViewController.java
index e177b8f6..ba73394a 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MappingTabViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MappingTabViewController.java
@@ -2,7 +2,6 @@ package de.tobias.playpad.viewcontroller.option.profile;
 
 import java.util.Collection;
 import java.util.List;
-import java.util.Set;
 import java.util.stream.Collectors;
 
 import de.tobias.playpad.PlayPadMain;
@@ -13,12 +12,10 @@ import de.tobias.playpad.action.ActionFactory;
 import de.tobias.playpad.action.ActionDisplayable;
 import de.tobias.playpad.action.ActionType;
 import de.tobias.playpad.action.Mapping;
-import de.tobias.playpad.action.mapper.MapperRegistry;
 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.IMapperOverviewViewController;
+import de.tobias.playpad.viewcontroller.BaseMapperOverviewViewController;
 import de.tobias.playpad.viewcontroller.IMappingTabViewController;
 import de.tobias.playpad.viewcontroller.cell.DisplayableCell;
 import de.tobias.playpad.viewcontroller.cell.DisplayableTreeCell;
@@ -49,7 +46,7 @@ public class MappingTabViewController extends ProfileSettingsTabViewController i
 
 	@FXML
 	private VBox detailView;
-	private IMapperOverviewViewController mapperOverviewViewController;
+	private BaseMapperOverviewViewController baseMapperOverviewViewController;
 
 	private Mapping oldMapping;
 	private Mapping mapping;
@@ -136,10 +133,10 @@ public class MappingTabViewController extends ProfileSettingsTabViewController i
 	public void showMapperFor(Action action) {
 		try {
 			if (action != null) {
-				mapperOverviewViewController = MapperRegistry.getOverviewViewControllerInstance();
-				mapperOverviewViewController.showAction(action, detailView);
+				baseMapperOverviewViewController = BaseMapperOverviewViewController.getInstance();
+				baseMapperOverviewViewController.showAction(action, detailView);
 			} else {
-				detailView.getChildren().remove(mapperOverviewViewController.getParent());
+				detailView.getChildren().remove(baseMapperOverviewViewController.getParent());
 			}
 		} catch (Exception e) {
 			e.printStackTrace();
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MidiTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MidiTabViewController.java
index 72c74016..0eb17118 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MidiTabViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/MidiTabViewController.java
@@ -49,7 +49,7 @@ public class MidiTabViewController extends ProfileSettingsTabViewController {
 		});
 	}
 
-	// Midi Device und Presets Choose
+	// Midi MidiDeviceImpl und Presets Choose
 	@FXML
 	private void deviceHandler(ActionEvent event) {
 		ProfileSettings profilSettings = Profile.currentProfile().getProfileSettings();
diff --git a/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperFeedbackable.java b/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperFeedbackable.java
index 9e3a607a..ae78ea90 100644
--- a/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperFeedbackable.java
+++ b/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperFeedbackable.java
@@ -2,10 +2,15 @@ package de.tobias.playpad.action.mapper;
 
 import de.tobias.playpad.action.feedback.FeedbackMessage;
 
+/**
+ * Implement this interface to enable a mapper to receive feedback from an action
+ *
+ * @author tobias
+ */
 public interface MapperFeedbackable {
 
-	public abstract boolean supportFeedback();
+	boolean supportFeedback();
 
-	public abstract void handleFeedback(FeedbackMessage type);
+	void handleFeedback(FeedbackMessage message);
 
 }
\ No newline at end of file
diff --git a/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperRegistry.java b/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperRegistry.java
deleted file mode 100644
index ea795f46..00000000
--- a/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperRegistry.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package de.tobias.playpad.action.mapper;
-
-import de.tobias.playpad.viewcontroller.IMapperOverviewViewController;
-
-@Deprecated
-public class MapperRegistry {
-
-	// TODO New Implementation
-	private static IMapperOverviewViewController controllerInstance;
-
-	public static void setOverviewViewController(IMapperOverviewViewController controller) {
-		MapperRegistry.controllerInstance = controller;
-	}
-
-	public static IMapperOverviewViewController getOverviewViewControllerInstance() {
-		return controllerInstance;
-	}
-}
diff --git a/PlayWallCore/src/de/tobias/playpad/action/mididevice/Device.java b/PlayWallCore/src/de/tobias/playpad/action/mididevice/MidiDeviceImpl.java
similarity index 89%
rename from PlayWallCore/src/de/tobias/playpad/action/mididevice/Device.java
rename to PlayWallCore/src/de/tobias/playpad/action/mididevice/MidiDeviceImpl.java
index 8a55c904..19163d64 100644
--- a/PlayWallCore/src/de/tobias/playpad/action/mididevice/Device.java
+++ b/PlayWallCore/src/de/tobias/playpad/action/mididevice/MidiDeviceImpl.java
@@ -20,9 +20,9 @@ import de.tobias.playpad.midi.device.DeviceRegistry;
  * 
  * @since 5.0.0
  */
-public abstract class Device extends EventDispatcher implements Listener {
+public abstract class MidiDeviceImpl extends EventDispatcher implements Listener {
 
-	public Device() {
+	public MidiDeviceImpl() {
 		registerEventListener(this);
 	}
 
@@ -50,7 +50,7 @@ public abstract class Device extends EventDispatcher implements Listener {
 		if (listeners != null) {
 			for (ListenerHandler handler : listeners) {
 				handler.execute(event);
-				System.out.println("Dispatched Device Event: " + event);
+				System.out.println("Dispatched MidiDeviceImpl Event: " + event);
 			}
 		}
 		DeviceRegistry.getFactoryInstance().dispatchEvent(event);
diff --git a/PlayWallCore/src/de/tobias/playpad/midi/Midi.java b/PlayWallCore/src/de/tobias/playpad/midi/Midi.java
index 2b81812a..470a7d1f 100644
--- a/PlayWallCore/src/de/tobias/playpad/midi/Midi.java
+++ b/PlayWallCore/src/de/tobias/playpad/midi/Midi.java
@@ -1,6 +1,6 @@
 package de.tobias.playpad.midi;
 
-import de.tobias.playpad.action.mididevice.Device;
+import de.tobias.playpad.action.mididevice.MidiDeviceImpl;
 import de.tobias.playpad.midi.device.DeviceRegistry;
 
 import javax.sound.midi.*;
@@ -10,7 +10,7 @@ public class Midi implements AutoCloseable {
 
 	private MidiDevice inputDevice;
 	private MidiDevice outputDevice;
-	private Device midiDeviceImpl;
+	private MidiDeviceImpl midiMidiDeviceImplImpl;
 
 	private MidiListener listener;
 
@@ -46,8 +46,8 @@ public class Midi implements AutoCloseable {
 		return outputDevice;
 	}
 
-	public Device getMidiDevice() {
-		return midiDeviceImpl;
+	public MidiDeviceImpl getMidiDevice() {
+		return midiMidiDeviceImplImpl;
 	}
 
 	public void lookupMidiDevice(String name) throws IllegalArgumentException, MidiUnavailableException, NullPointerException {
@@ -91,7 +91,7 @@ public class Midi implements AutoCloseable {
 
 		// Hier wird die DeviceImpl aufgerufen
 		try {
-			this.midiDeviceImpl = DeviceRegistry.getFactoryInstance().getDevice(input.getName());
+			this.midiMidiDeviceImplImpl = DeviceRegistry.getFactoryInstance().getDevice(input.getName());
 		} catch (InstantiationException | IllegalAccessException e) {
 			e.printStackTrace();
 		}
@@ -159,8 +159,8 @@ public class Midi implements AutoCloseable {
 	}
 
 	public void sendClearCommand() throws InvalidMidiDataException, MidiUnavailableException {
-		if (midiDeviceImpl != null) {
-			midiDeviceImpl.clearFeedback();
+		if (midiMidiDeviceImplImpl != null) {
+			midiMidiDeviceImplImpl.clearFeedback();
 		}
 	}
 }
diff --git a/PlayWallCore/src/de/tobias/playpad/midi/device/DefaultDevice.java b/PlayWallCore/src/de/tobias/playpad/midi/device/DefaultMidiDeviceImpl.java
similarity index 85%
rename from PlayWallCore/src/de/tobias/playpad/midi/device/DefaultDevice.java
rename to PlayWallCore/src/de/tobias/playpad/midi/device/DefaultMidiDeviceImpl.java
index af8a3460..dd0fdbb5 100644
--- a/PlayWallCore/src/de/tobias/playpad/midi/device/DefaultDevice.java
+++ b/PlayWallCore/src/de/tobias/playpad/midi/device/DefaultMidiDeviceImpl.java
@@ -3,9 +3,9 @@ package de.tobias.playpad.midi.device;
 import de.tobias.playpad.action.feedback.DisplayableFeedbackColor;
 import de.tobias.playpad.action.feedback.Feedback;
 import de.tobias.playpad.action.feedback.FeedbackMessage;
-import de.tobias.playpad.action.mididevice.Device;
+import de.tobias.playpad.action.mididevice.MidiDeviceImpl;
 
-public class DefaultDevice extends Device {
+public class DefaultMidiDeviceImpl extends MidiDeviceImpl {
 
 	@Override
 	public String getName() {
diff --git a/PlayWallCore/src/de/tobias/playpad/midi/device/DeviceRegistry.java b/PlayWallCore/src/de/tobias/playpad/midi/device/DeviceRegistry.java
index 67b9b8a7..32c023b3 100644
--- a/PlayWallCore/src/de/tobias/playpad/midi/device/DeviceRegistry.java
+++ b/PlayWallCore/src/de/tobias/playpad/midi/device/DeviceRegistry.java
@@ -3,7 +3,7 @@ package de.tobias.playpad.midi.device;
 import java.util.HashMap;
 import java.util.List;
 
-import de.tobias.playpad.action.mididevice.Device;
+import de.tobias.playpad.action.mididevice.MidiDeviceImpl;
 import de.tobias.playpad.event.Event;
 import de.tobias.playpad.event.EventDispatcher;
 
@@ -25,7 +25,7 @@ public class DeviceRegistry extends EventDispatcher {
 	/**
 	 * Speicher für alle Geräte Implementierungen [Produktname, Implementierung]
 	 */
-	private HashMap<String, Class<? extends Device>> devices = new HashMap<>();
+	private HashMap<String, Class<? extends MidiDeviceImpl>> devices = new HashMap<>();
 
 	/**
 	 * Registriert eine neue Implementierung für ein Midi Gerät
@@ -35,9 +35,9 @@ public class DeviceRegistry extends EventDispatcher {
 	 * @param device
 	 *            Implementierung als Klasse, Instanz erstellt das Programm bei bei bedarf
 	 */
-	public void registerDevice(String id, Class<? extends Device> device) {
+	public void registerDevice(String id, Class<? extends MidiDeviceImpl> device) {
 		devices.put(id, device);
-		System.out.println("Register MIDI Device Impl: " + id);
+		System.out.println("Register MIDI MidiDeviceImpl Impl: " + id);
 	}
 
 	/**
@@ -45,26 +45,26 @@ public class DeviceRegistry extends EventDispatcher {
 	 * 
 	 * @param id
 	 *            Name des Geräts
-	 * @return Implementierung, DefaultDevice wenn keine vorhanden oder registriert über register
+	 * @return Implementierung, DefaultMidiDeviceImpl wenn keine vorhanden oder registriert über register
 	 * @throws InstantiationException
 	 *             Fehler beim instanzieren
 	 * @throws IllegalAccessException
 	 *             Fehler beim instanzieren
 	 * @see DeviceRegistry#registerDevice(String, Class)
-	 * @see DefaultDevice
+	 * @see DefaultMidiDeviceImpl
 	 */
-	public Device getDevice(String id) throws InstantiationException, IllegalAccessException {
+	public MidiDeviceImpl getDevice(String id) throws InstantiationException, IllegalAccessException {
 		if (devices.containsKey(id)) {
 			System.out.println("Recognize known MIDI device: " + id);
 			return devices.get(id).newInstance();
 		} else {
 			System.out.println("Use Default MIDI device");
-			return new DefaultDevice();
+			return new DefaultMidiDeviceImpl();
 		}
 	}
 
 	/**
-	 * Instanz der Device Component
+	 * Instanz der MidiDeviceImpl Component
 	 * 
 	 * @return instance
 	 */
diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/BaseMapperOverviewViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/BaseMapperOverviewViewController.java
new file mode 100644
index 00000000..189bbad0
--- /dev/null
+++ b/PlayWallCore/src/de/tobias/playpad/viewcontroller/BaseMapperOverviewViewController.java
@@ -0,0 +1,41 @@
+package de.tobias.playpad.viewcontroller;
+
+import java.util.List;
+import java.util.ResourceBundle;
+
+import de.tobias.playpad.action.Action;
+import de.tobias.playpad.action.mapper.Mapper;
+import de.tobias.playpad.action.mapper.MapperViewController;
+import de.tobias.utils.ui.ContentViewController;
+import javafx.scene.Parent;
+import javafx.scene.control.ScrollPane;
+import javafx.scene.layout.Pane;
+
+public abstract class BaseMapperOverviewViewController {
+
+	private static BaseMapperOverviewViewController instance;
+
+	public static BaseMapperOverviewViewController getInstance() {
+		return instance;
+	}
+
+	public static void setInstance(BaseMapperOverviewViewController instance) {
+		BaseMapperOverviewViewController.instance = instance;
+	}
+
+	public interface MapperAddListener {
+
+		void onAdd(Mapper mapper, MapperViewController controller);
+	}
+
+	public abstract List<MapperViewController> getControllers();
+
+	public abstract void addMapperAddListener(MapperAddListener addListener);
+
+	public abstract void showAction(Action action, Pane parent);
+
+	public abstract void showAction(Action action, ScrollPane parent);
+
+	public abstract Parent getParent();
+
+}
\ No newline at end of file
diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/IMapperOverviewViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/IMapperOverviewViewController.java
deleted file mode 100644
index b548e8ab..00000000
--- a/PlayWallCore/src/de/tobias/playpad/viewcontroller/IMapperOverviewViewController.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package de.tobias.playpad.viewcontroller;
-
-import java.util.List;
-
-import de.tobias.playpad.action.Action;
-import de.tobias.playpad.action.mapper.Mapper;
-import de.tobias.playpad.action.mapper.MapperViewController;
-import javafx.scene.Parent;
-import javafx.scene.control.ScrollPane;
-import javafx.scene.layout.Pane;
-
-public interface IMapperOverviewViewController {
-
-	public static interface MapperAddListener {
-
-		public void onAdd(Mapper mapper, MapperViewController controller);
-	}
-
-	public List<MapperViewController> getControllers();
-
-	public void addMapperAddListener(MapperAddListener addListener);
-
-	public void showAction(Action action, Pane parent);
-
-	public void showAction(Action action, ScrollPane parent);
-
-	public Parent getParent();
-
-}
\ No newline at end of file
diff --git a/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/mk2/LaunchPadMK2.java b/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/mk2/LaunchPadMK2.java
index 389b2ab7..7d8f920e 100644
--- a/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/mk2/LaunchPadMK2.java
+++ b/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/mk2/LaunchPadMK2.java
@@ -10,13 +10,13 @@ import javax.sound.midi.ShortMessage;
 import de.tobias.playpad.action.feedback.DisplayableFeedbackColor;
 import de.tobias.playpad.action.feedback.Feedback;
 import de.tobias.playpad.action.feedback.FeedbackMessage;
-import de.tobias.playpad.action.mididevice.Device;
+import de.tobias.playpad.action.mididevice.MidiDeviceImpl;
 import de.tobias.playpad.action.mididevice.DeviceColorAssociatorConnector;
 import de.tobias.playpad.launchpadplugin.impl.MapParser;
 import de.tobias.playpad.midi.Midi;
 import javafx.scene.paint.Color;
 
-public class LaunchPadMK2 extends Device implements DeviceColorAssociatorConnector {
+public class LaunchPadMK2 extends MidiDeviceImpl implements DeviceColorAssociatorConnector {
 
 	public static final String NAME = "Launchpad MK2";
 
diff --git a/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/s/LaunchPadS.java b/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/s/LaunchPadS.java
index 693d49e0..fa6ced16 100644
--- a/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/s/LaunchPadS.java
+++ b/PluginLaunchpad/src/de/tobias/playpad/launchpadplugin/midi/device/s/LaunchPadS.java
@@ -6,12 +6,12 @@ import javax.sound.midi.MidiUnavailableException;
 import de.tobias.playpad.action.feedback.DisplayableFeedbackColor;
 import de.tobias.playpad.action.feedback.Feedback;
 import de.tobias.playpad.action.feedback.FeedbackMessage;
-import de.tobias.playpad.action.mididevice.Device;
+import de.tobias.playpad.action.mididevice.MidiDeviceImpl;
 import de.tobias.playpad.action.mididevice.DeviceColorAssociatorConnector;
 import de.tobias.playpad.midi.Midi;
 import javafx.scene.paint.Color;
 
-public class LaunchPadS extends Device implements DeviceColorAssociatorConnector {
+public class LaunchPadS extends MidiDeviceImpl implements DeviceColorAssociatorConnector {
 
 	public static final String NAME = "Launchpad S";
 
-- 
GitLab