Index: /applications/editors/josm/plugins/indoorhelper/.classpath
===================================================================
--- /applications/editors/josm/plugins/indoorhelper/.classpath	(revision 33973)
+++ /applications/editors/josm/plugins/indoorhelper/.classpath	(revision 33974)
@@ -7,4 +7,6 @@
 	<classpathentry combineaccessrules="false" kind="src" path="/JOSM-piclayer"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+	<classpathentry kind="lib" path="/afs/tu-chemnitz.de/home/urz/r/rebsc/projects/josm/dist/PicLayer.jar"/>
+	<classpathentry kind="lib" path="/afs/tu-chemnitz.de/home/urz/r/rebsc/projects/josm/core/dist/josm-custom.jar" sourcepath="/JOSM/src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
Index: /applications/editors/josm/plugins/indoorhelper/README
===================================================================
--- /applications/editors/josm/plugins/indoorhelper/README	(revision 33973)
+++ /applications/editors/josm/plugins/indoorhelper/README	(revision 33974)
@@ -23,4 +23,5 @@
 
 Erik Gruschka
+Rebecca Schmidt
 
 
Index: /applications/editors/josm/plugins/indoorhelper/build.xml
===================================================================
--- /applications/editors/josm/plugins/indoorhelper/build.xml	(revision 33973)
+++ /applications/editors/josm/plugins/indoorhelper/build.xml	(revision 33974)
@@ -5,5 +5,5 @@
     <property name="commit.message" value="Inital commit"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
-    <property name="plugin.main.version" value="12856"/>
+    <property name="plugin.main.version" value="13265"/>
 
     <!-- Configure these properties (replace "..." accordingly).
@@ -11,4 +11,5 @@
     -->
     <property name="plugin.author" value="Erik Gruschka"/>
+    <property name="plugin.author" value="Rebecca Schmidt"/>
     <property name="plugin.class" value="org.openstreetmap.josm.plugins.indoorhelper.IndoorHelperPlugin"/>
     <property name="plugin.description" value="Gives assistance for the mapping process of indoor OSM building data. Includes a validator and a mappaint style for indoor-data."/>
Index: /applications/editors/josm/plugins/indoorhelper/data/indoorhelper.validator.mapcss
===================================================================
--- /applications/editors/josm/plugins/indoorhelper/data/indoorhelper.validator.mapcss	(revision 33973)
+++ /applications/editors/josm/plugins/indoorhelper/data/indoorhelper.validator.mapcss	(revision 33974)
@@ -2,28 +2,20 @@
 
 /* rule which checks if every way and every POI has a level-tag */
-way[!indoor:level], node:unconnected[!indoor:level]{
+way[!level], node:unconnected[!level]{
 	throwWarning: tr("This object has no level tag.");
-	fixAdd: "indoor:level=*";
+	fixAdd: tr("level=*");
 	suggestAlternative: "Delete the object or use the plug-in to add a POI tag!";
 }
 
 /* rules for wrong assigned ways or nodes */
-node:unconnected[indoor:area], node:unconnected[indoor:highway]{
+node:unconnected[area], node:unconnected[highway]{
 	throwWarning: tr("You assigned properties to a node which should only be assigned to ways!");
-	fixRemove: "indoor:area";
-	fixRemove: "indoor:highway";
+	fixRemove: "area";
+	fixRemove: "highway";
 }
 
-way[indoor:door], way[indoor:entrance]{
+way[door], way[entrance]{
 	throwWarning: tr("You assigned properties to a way which should only be assigned to nodes!");
-	fixRemove: "indoor:door";
-	fixRemove: "indoor:entrance";
+	fixRemove: "door";
+	fixRemove: "entrance";
 }
-
-
-
-
-
-
-
-
Index: /applications/editors/josm/plugins/indoorhelper/src/controller/IndoorHelperController.java
===================================================================
--- /applications/editors/josm/plugins/indoorhelper/src/controller/IndoorHelperController.java	(revision 33973)
+++ /applications/editors/josm/plugins/indoorhelper/src/controller/IndoorHelperController.java	(revision 33974)
@@ -19,8 +19,13 @@
 package controller;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -29,55 +34,101 @@
 import java.util.List;
 import java.util.Map;
-
+import java.util.Optional;
+
+import javax.swing.AbstractAction;
 import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ValidateAction;
+import org.openstreetmap.josm.actions.mapmode.DrawAction;
+import org.openstreetmap.josm.actions.mapmode.SelectAction;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.validation.OsmValidator;
 import org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker;
 import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.dialogs.FilterDialog;
-import org.openstreetmap.josm.gui.dialogs.FilterTableModel;
+import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.help.HelpBrowser;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
+import org.openstreetmap.josm.spi.preferences.MapListSetting;
+import org.openstreetmap.josm.spi.preferences.Setting;
+import org.openstreetmap.josm.tools.Shortcut;
 
 import model.IndoorHelperModel;
 import model.TagCatalog.IndoorObject;
-import views.FittingView;
 import views.LevelSelectorView;
 import views.ToolBoxView;
 
 /**
- *
- * Class for the Controller which provides the communication between
- * the IndoorHelperModel and the different views.
- *
- * @author egru
- *
- */
+*
+* Class for the Controller which provides the communication between
+* the IndoorHelperModel and the different views.
+*
+* @author egru
+* @author rebsc
+*
+*/
 public class IndoorHelperController {
 
-    private IndoorHelperModel model;
-    private ToolBoxView toolboxView;
-    private FittingView fittingView;
-    private LevelSelectorView selectorView;
-    private String sep = System.getProperty("file.separator");
-
-
-    private int lastLevelIndex;
-
-    /**
-     * Constructor for the {@link IndoorHelperController} which initiates model and views.
-     *
-     */
-    public IndoorHelperController() {
-        this.model = new IndoorHelperModel();
-        this.toolboxView = new ToolBoxView();
-
-        this.lastLevelIndex = 0;
-
-        addToolboxListeners();
-        MainApplication.getMap().addToggleDialog(toolboxView);
-    }
+   private IndoorHelperModel model;
+   private ToolBoxView toolboxView;
+   private String sep;
+   private String levelValue, levelNum;
+   private MapFrame map;
+   private DrawAction drawAction;
+   private SelectAction selectAction;
+   private SpaceAction SpaceAction;
+   private transient Shortcut SpaceShortcut;
+   private EnterAction EnterAction;
+   private transient Shortcut EnterShortcut;
+   private boolean OuterHelp,InnerHelp,LevelHelp;
+   private Collection<OsmPrimitive> innerRelation;
+   private LevelSelectorView selectorView;
+
+   /**
+    * Constructor for the {@link IndoorHelperController} which initiates model and views.
+    *
+    */
+   public IndoorHelperController() {
+
+	   this.model = new IndoorHelperModel();
+       this.toolboxView = new ToolBoxView();
+
+       this.sep = System.getProperty("file.separator");
+       setPluginPreferences(true);
+
+       // Multipolygon actions
+       this.drawAction = new DrawAction();
+       this.map = MainApplication.getMap();
+       this.selectAction = new SelectAction(map);
+
+       // Ui elements
+       toolboxView.setAllUiElementsEnabled(true);
+       toolboxView.setROUiElementsEnabled(false);
+
+       addToolboxListeners();
+       MainApplication.getMap().addToggleDialog(toolboxView);
+
+       // Shortcuts
+       SpaceShortcut = Shortcut.registerShortcut("mapmode:space",
+               tr(""), KeyEvent.VK_SPACE, Shortcut.DIRECT);
+       this.SpaceAction = new SpaceAction();
+       MainApplication.registerActionShortcut(SpaceAction,SpaceShortcut);
+
+       EnterShortcut = Shortcut.registerShortcut("mapmode:ALT",
+               tr(""), KeyEvent.VK_ENTER, Shortcut.DIRECT);
+       this.EnterAction = new EnterAction();
+       MainApplication.registerActionShortcut(EnterAction,EnterShortcut);
+
+       // Helper
+       OuterHelp = false;
+       InnerHelp = false;
+       LevelHelp = false;
+	   innerRelation = null;
+	   levelValue = new String();
+	   levelNum = new String();
+
+   }
+
 
     /**
@@ -87,8 +138,12 @@
 
         if (this.toolboxView != null) {
-            this.toolboxView.setPowerButtonListener(new ToolPowerButtonListener());
             this.toolboxView.setApplyButtonListener(new ToolApplyButtonListener());
-            this.toolboxView.setLevelItemListener(new ToolLevelItemListener());
+            this.toolboxView.setLevelCheckBoxListener(new ToolLevelCheckBoxListener());
+            this.toolboxView.setHelpButtonListener(new ToolHelpButtonListener());
+            this.toolboxView.setAddLevelButtonListener(new ToolAddLevelButtonListener());
             this.toolboxView.setObjectItemListener(new ToolObjectItemListener());
+            this.toolboxView.setOuterButtonListener(new ToolOuterButtonListener());
+            this.toolboxView.setInnerButtonListener(new ToolInnerButtonListener());
+            this.toolboxView.setMultiCheckBoxListener(new ToolMultiCheckBoxListener());
             this.toolboxView.setPreset1Listener(new Preset1Listener());
             this.toolboxView.setPreset2Listener(new Preset2Listener());
@@ -103,399 +158,516 @@
     private void addLevelSelectorListeners() {
         if (this.selectorView != null) {
-            this.selectorView.setOkButtonListener(new LevelOkButtonListener());
-            this.selectorView.setCancelButtonListener(new LevelCancelButtonListener());
+            this.selectorView.setOkButtonListener(new ToolLevelOkButtonListener());
+            this.selectorView.setCancelButtonListener(new ToolLevelCancelButtonListener());
+            this.selectorView.setSelectorWindowListener(new ToolSelectorWindowSListener());
         }
+
     }
 
-    /**
-     * Adds the button-listeners to the {@link FittingView}.
-     */
-    private void addFittingListeners() {
-        if (this.fittingView != null) {
-            this.fittingView.setOkButtonListener(new FittingOkButtonListener());
-        }
+/*************************************************
+* TOOLBOX LISTENER
+*
+*/
+
+   /**
+    * The listener which provides the handling of the apply button.
+    * Gets the texts which were written by the user and writes them to the OSM-data.
+    * After that it checks the tagged data  with the built-in validator file.
+    *
+    * @author egru
+    * @author rebsc
+    */
+   class ToolApplyButtonListener implements ActionListener {
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+
+           IndoorObject indoorObject = toolboxView.getSelectedObject();
+
+        	   // collecting all tags
+               List<Tag> tags = new ArrayList<>();
+               if (toolboxView.getLevelCheckBoxStatus() == false && !levelValue.equals("")) {
+            	   tags.add(new Tag(tr("level"),levelValue));
+               }
+           	   if (!toolboxView.getLevelNameText().isEmpty() && !toolboxView.getLevelCheckBoxStatus()) {
+           		   tags.add(new Tag(tr("level_name"),toolboxView.getLevelNameText()));
+           	   }
+               if (!toolboxView.getNameText().isEmpty()) {
+                   tags.add(new Tag(tr("name"), toolboxView.getNameText()));
+               }
+               if (!toolboxView.getRefText().isEmpty()) {
+                   tags.add(new Tag(tr("ref"), toolboxView.getRefText()));
+               }
+               if (!toolboxView.getRepeatOnText().isEmpty()){
+           			tags.add(new Tag(tr("repeat_on"),toolboxView.getRepeatOnText()));
+           	   }
+           	   if (!toolboxView.getLevelNameText().isEmpty() && !toolboxView.getLevelCheckBoxStatus()) {
+           		   tags.add(new Tag(tr("level_name"),toolboxView.getLevelNameText()));
+           	   }
+
+           // Tagging to OSM Data
+           model.addTagsToOSM(indoorObject, tags);
+
+           // Reset ui elements
+           toolboxView.resetUiElements();
+
+           //Do the validation process
+           ValidateAction validateAction = new ValidateAction();
+           validateAction.doValidate(true);
+
+           refreshPresets();
+
+       }
+   }
+
+   /**
+    * The listener which is called when a new item in the object list is selected.
+    *
+    * @author egru
+    * @author rebsc
+    *
+    */
+   class ToolObjectItemListener implements ItemListener {
+
+       @Override
+       public void itemStateChanged(ItemEvent e) {
+           if (toolboxView.getSelectedObject().equals(IndoorObject.ROOM)) {
+               toolboxView.setNRUiElementsEnabled(true);
+               toolboxView.setROUiElementsEnabled(false);
+           }
+           else if (toolboxView.getSelectedObject().equals(IndoorObject.STEPS) ||
+           		toolboxView.getSelectedObject().equals(IndoorObject.ELEVATOR)) {
+       	 		toolboxView.setROUiElementsEnabled(true);
+       	 		toolboxView.setNRUiElementsEnabled(true);
+        	}
+           else {
+               toolboxView.setROUiElementsEnabled(false);
+           }
+       }
+   }
+
+   /**
+    * The listener which is called when the LevelCheckBox is selected.
+    *
+    * @author rebsc
+    */
+   class ToolLevelCheckBoxListener implements ItemListener{
+       @Override
+       public void itemStateChanged(ItemEvent e) {
+    	   if(e.getStateChange() == ItemEvent.SELECTED) {
+    		   toolboxView.setLVLUiElementsEnabled(false);
+    	   }
+    	   else {
+    		   toolboxView.setLVLUiElementsEnabled(true);
+    	   }
+       }
+   }
+
+   /**
+    * The listener which is called when the helpbutton got pushed.
+    *
+    * @author rebsc
+    */
+   static class ToolHelpButtonListener implements ActionListener{
+
+	   @Override
+	   public void actionPerformed(ActionEvent e) {
+		   String topic = tr("ToolB");
+		   HelpBrowser.setUrlForHelpTopic(Optional.ofNullable(topic).orElse(tr("/")));
+	   }
+   }
+
+   /**
+    * The listener which is called when the addlevelbutton got pushed.
+    *
+    * @author rebsc
+    */
+   class ToolAddLevelButtonListener implements ActionListener{
+
+	   @Override
+	   public void actionPerformed(ActionEvent e) {
+
+		   if(selectorView == null) {
+			   selectorView = new LevelSelectorView();
+			   addLevelSelectorListeners();
+
+			   //Show LevelSelectorView
+			   selectorView.setVisible(true);
+		   } else {
+			   //Put focus back on LevelSelectorView
+			   selectorView.toFront();
+		   }
+
+	   }
+   }
+
+   /**
+    * The listener which is called when the MultiCheckBox is selected.
+    *
+    * @author rebsc
+    */
+   class ToolMultiCheckBoxListener implements ItemListener{
+       @Override
+       public void itemStateChanged(ItemEvent e) {
+    	   if(e.getStateChange() == ItemEvent.SELECTED) {
+    		   toolboxView.setMultiUiElementsEnabled(false);
+    	   }
+    	   else {
+    		   toolboxView.setMultiUiElementsEnabled(true);
+    	   }
+       }
+   }
+
+   /**
+    * The listener which is called when the OUTER Button got pushed.
+    *
+    * @author rebsc
+    */
+   class ToolOuterButtonListener implements ActionListener{
+
+	   @Override
+	   public void actionPerformed(ActionEvent e) {
+		   // Select drawing action
+		   map.selectMapMode(drawAction);
+
+		   // For space shortcut to add the relation after spacebar got pushed {@link SpaceAction}
+		   OuterHelp = true;
+		   InnerHelp = false;
+	   }
+   }
+
+   /**
+    * The listener which is called when the INNER Button got pushed.
+    *
+    * @author rebsc
+    */
+   class ToolInnerButtonListener implements ActionListener {
+	   @Override
+	   public void actionPerformed(ActionEvent e) {
+		   // Select drawing action
+		   map.selectMapMode(drawAction);
+
+		   // For space shortcut to edit the relation after enter got pushed {@link SpaceAction}{@link EnterAction}
+		   InnerHelp = true;
+		   OuterHelp = false;
+
+	   }
+   }
+
+   /**
+    * Listener for preset button 1.
+    * @author egru
+    *
+    */
+   class Preset1Listener implements ActionListener {
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+           model.addTagsToOSM(toolboxView.getPreset1());
+       }
+   }
+
+   /**
+    * Listener for preset button 2.
+    * @author egru
+    *
+    */
+   class Preset2Listener implements ActionListener {
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+           model.addTagsToOSM(toolboxView.getPreset2());
+       }
+   }
+
+   /**
+    * Listener for preset button 3.
+    * @author egru
+    *
+    */
+   class Preset3Listener implements ActionListener {
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+           model.addTagsToOSM(toolboxView.getPreset3());
+       }
+   }
+
+   /**
+    * Listener for preset button 4.
+    * @author egru
+    *
+    */
+   class Preset4Listener implements ActionListener {
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+           model.addTagsToOSM(toolboxView.getPreset4());
+       }
+   }
+
+   /**
+    * Updates the preset button from the current ranking.
+    */
+   private void refreshPresets() {
+       toolboxView.setPresetButtons(model.getPresetRanking());
+   }
+
+/*************************************************
+* LEVEL SELCTOR VIEW LISTENER
+*
+*/
+   /**
+    * Specific listener for the applyButton
+    * @author rebsc
+    *
+    */
+   class ToolLevelOkButtonListener implements ActionListener {
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+    	   LevelHelp = true;
+
+    	   //Get insert level number out of SelectorView
+    	   if(!selectorView.getLevelNumber().equals("")) {
+    		   levelNum = selectorView.getLevelNumber();
+
+    		   //Unset visibility
+    		   selectorView.dispose();
+    		   //Select draw-action
+    		   map.selectMapMode(drawAction);
+
+    	   }else {
+    		   JOptionPane.showMessageDialog(null, tr("Please insert a value."), tr("Error"), JOptionPane.ERROR_MESSAGE);
+    	   }
+
+    	   selectorView = null;
+       }
+   }
+
+   /**
+    * Specific listener for the cancelButton
+    * @author rebsc
+    *
+    */
+   class ToolLevelCancelButtonListener implements ActionListener {
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+           selectorView.dispose();
+           selectorView = null;
+       }
+   }
+
+   /**
+    * General listener for LevelSelectorView window
+    * @author rebsc
+    *
+    */
+   class ToolSelectorWindowSListener implements WindowListener{
+
+	@Override
+	public void windowClosed(WindowEvent e) {
+		selectorView = null;
+	}
+
+	@Override
+	public void windowClosing(WindowEvent e) {
+		selectorView = null;
+	}
+
+	@Override
+	public void windowActivated(WindowEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void windowDeactivated(WindowEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void windowDeiconified(WindowEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void windowIconified(WindowEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void windowOpened(WindowEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+   }
+
+
+/*************************************************
+* SHORTCUT METHODS
+*
+*/
+   /**
+    * Shortcut for Spacebar
+    * @author rebsc
+    */
+   private class SpaceAction extends AbstractAction {
+
+	private static final long serialVersionUID = 1L;
+
+	@Override
+       public void actionPerformed(ActionEvent e) {
+           if(OuterHelp) {
+
+        	   //Create new relation and add the currently drawn object to it
+        	   model.addRelation("outer");
+        	   map.selectMapMode(selectAction);
+        	   OuterHelp = false;
+
+        	   //Clear currently selection
+        	   MainApplication.getLayerManager().getEditDataSet().clearSelection();
+           }
+           else if(InnerHelp) {
+
+        	   //Save new drawn relation for adding
+        	   innerRelation = MainApplication.getLayerManager().getEditDataSet().getAllSelected();
+   		   	   map.selectMapMode(selectAction);
+
+        	   //Clear currently selection
+        	   MainApplication.getLayerManager().getEditDataSet().clearSelection();
+           }
+           else if(LevelHelp) {
+
+               List<Tag> tags = new ArrayList<>();
+        	   tags.add(new Tag(tr("level"),levelNum));
+
+        	   //Add level tag
+        	   model.addTagsToOSM(tags);
+
+        	   //Change action
+        	   map.selectMapMode(selectAction);
+        	   LevelHelp = false;
+           }
+       }
+   }
+
+   /**
+    * Shortcut for Enter
+    * @author rebsc
+    */
+   private class EnterAction extends AbstractAction {
+
+	private static final long serialVersionUID = 1L;
+
+	@Override
+       public void actionPerformed(ActionEvent e) {
+
+    	   if(InnerHelp && !OuterHelp) {
+
+    		   // Edit the new drawn relation member to selected relation
+    		   model.editRelation("inner", innerRelation);
+    		   InnerHelp = false;
+
+    	   }else if((InnerHelp && OuterHelp) || (OuterHelp && !InnerHelp)){
+    		   JOptionPane.showMessageDialog(null, tr("Please press spacebar first to add \"outer\" object to relation."), tr("Relation-Error"), JOptionPane.ERROR_MESSAGE);
+    		   resetHelper();
+    	   }
+       }
+   }
+
+/*************************************************
+* FILTER METHODS
+*
+*/
+   /**
+    * Function which unset the disabled state of currently hidden and/or disabled objects which have a
+    * specific tag (key). Just unsets the disabled state if object has a tag-value which is part of the
+    * current working level.
+    * Specific example: key: repeat_on ; value: 1-4;
+    * 					If current selected workinglevel is "3" all objects with the leveltag "level=3" are hidden but the
+    * 					objects with the key "repeat_on" and the value which includes "3" or is (minValue+1) - maxValue (4-...),
+    * 					because repeat_on tag starts on the current workinglevel+1.
+    * @param key sepcific key to unset hidden objects which contains it
+    * @author rebsc
+    */
+   public void unsetSpecificKeyFilter(String key) {
+
+	 Collection<OsmPrimitive> p = Main.main.getEditDataSet().allPrimitives();
+	 Map<String, String> tags = new HashMap<>();
+	 Integer level = Integer.parseInt(levelValue);
+	 Integer firstVal, secVal;
+
+	 //Find all primitives with the specific tag and check if value is part of the current
+	 //workinglevel. After that unset the disabled status.
+	 for(OsmPrimitive osm: p) {
+		 if((osm.isDisabledAndHidden() || osm.isDisabled()) && osm.hasKey(key)) {
+
+			 tags = osm.getInterestingTags();
+
+			 for(Map.Entry<String, String> e: tags.entrySet()) {
+				if(e.getKey().equals(key)) {
+					String val = e.getValue();
+
+					//Extract values
+					if(val.indexOf("-") == 0) {
+						firstVal = (Integer.parseInt(val.split("-",2)[1].split("-",2)[0]))*-1;
+						secVal = Integer.parseInt(val.split("-",2)[1].split("-",2)[1]);
+					}else {
+						firstVal = Integer.parseInt(val.split("-")[0]);
+						secVal = Integer.parseInt(val.split("-")[1]);
+					}
+
+					//Compare values to current working level
+					if(level >= ((firstVal)-1) && level <= secVal) {
+						osm.unsetDisabledState();
+					}else {
+						osm.setDisabledState(true);
+					}
+				}
+
+			 }
+
+		 }
+	 }
+
+   }
+
+  /**
+   * Function which updates the current working level tag
+   *
+   * @param indoorLevel: current working level
+   */
+   public void setIndoorLevel(String indoorLevel) {
+	   this.toolboxView.setLevelLabel(indoorLevel);
+   }
+
+   /**
+    * Function which gets the current working level tag
+    *
+    * @param indoorLevel: current working level
+    */
+    public void getIndoorLevel(String indoorLevel) {
+    	levelValue = indoorLevel;
+
     }
 
-    //********************************************************************
-    //*********************   TOOLBOX LISTENERS   ************************
-    //********************************************************************
-
-    /**
-     * The listener which handles the power button.
-     *
-     * @author egru
-     *
-     */
-    class ToolPowerButtonListener implements ActionListener {
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            if (toolboxView.getPowerButtonState()) {
-                selectorView = new LevelSelectorView();
-                addLevelSelectorListeners();
-                selectorView.setVisible(true);
-                setPluginPreferences(true);
-            } else if (!toolboxView.getPowerButtonState()) {
-                model = new IndoorHelperModel();
-                selectorView.dispose();
-                toolboxView.reset();
-                setPluginPreferences(false);
-
-                // Delete the indoor filters
-                FilterDialog filterDialog = MainApplication.getMap().getToggleDialog(FilterDialog.class);
-
-                if (filterDialog != null) {
-                    FilterTableModel filterTableModel = filterDialog.getFilterModel();
-
-                    for (int i = filterTableModel.getRowCount()-1; i > -1; i--) {
-                        if (filterTableModel.getFilter(i).text.startsWith("\"indoor:level\"=\"")) {
-                            filterTableModel.removeFilter(i);
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * The listener which provides the handling of the apply button.
-     * Gets the texts which were written by the user and writes them to the OSM-data.
-     * After that it checks the tagged data  with the built-in validator file.
-     *
-     * @author egru
-     */
-    class ToolApplyButtonListener implements ActionListener {
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            IndoorObject indoorObject = toolboxView.getSelectedObject();
-            if (toolboxView.getNameText().isEmpty() && toolboxView.getRefText().isEmpty() && toolboxView.getLevelName().isEmpty()) {
-                model.addTagsToOSM(indoorObject);
-            } else {
-                List<Tag> tags = new ArrayList<>();
-                if (!toolboxView.getLevelName().isEmpty()) {
-                    model.getLevelList().get(toolboxView.getSelectedLevelIndex()).setNameTag(toolboxView.getLevelName());
-                }
-                if (!toolboxView.getNameText().isEmpty()) {
-                    tags.add(new Tag("name", toolboxView.getNameText()));
-                }
-                if (!toolboxView.getRefText().isEmpty()) {
-                    tags.add(new Tag("ref", toolboxView.getRefText()));
-                }
-                model.addTagsToOSM(indoorObject, tags);
-            }
-            //Do the validation process
-            ValidateAction validateAction = new ValidateAction();
-            validateAction.doValidate(true);
-
-            refreshPresets();
-        }
-    }
-
-    /**
-     * <pre>The listener which is called when a new item in the level list is selected.
-     *It also sets the name-tag for a level, if the user has done an input in the textbox.
-     * </pre>
-     * @author egru
-     *
-     */
-    class ToolLevelItemListener implements ItemListener {
-
-        @Override
-        public void itemStateChanged(ItemEvent e) {
-            if (!toolboxView.levelListIsEmpty()) {
-
-                if (!toolboxView.getLevelName().isEmpty()) {
-                    model.getLevelList().get(lastLevelIndex).setNameTag(toolboxView.getLevelName());
-                }
-
-                if (!model.getLevelList().get(toolboxView.getSelectedLevelIndex()).hasEmptyName()) {
-                    toolboxView.setLevelName(model.getLevelList().get(toolboxView.getSelectedLevelIndex()).getName());
-                } else {
-                    toolboxView.setLevelName("");
-                }
-                model.setWorkingLevel(toolboxView.getSelectedLevelIndex());
-
-                lastLevelIndex = toolboxView.getSelectedLevelIndex();
-            }
-        }
-    }
-
-
-
-    /**
-     * The listener which is called when a new item in the object list is selected.
-     *
-     * @author egru
-     *
-     */
-    class ToolObjectItemListener implements ItemListener {
-
-        @Override
-        public void itemStateChanged(ItemEvent e) {
-            if (toolboxView.getSelectedObject().equals(IndoorObject.ROOM)) {
-                toolboxView.setTagUiElementsEnabled(true);
-            } else {
-                toolboxView.setTagUiElementsEnabled(false);
-            }
-        }
-    }
-
-    /**
-     * Listener for preset button 1.
-     * @author egru
-     *
-     */
-    class Preset1Listener implements ActionListener {
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            model.addTagsToOSM(toolboxView.getPreset1());
-
-        }
-    }
-
-    /**
-     * Listener for preset button 2.
-     * @author egru
-     *
-     */
-    class Preset2Listener implements ActionListener {
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            model.addTagsToOSM(toolboxView.getPreset2());
-
-        }
-
-    }
-
-    /**
-     * Listener for preset button 3.
-     * @author egru
-     *
-     */
-    class Preset3Listener implements ActionListener {
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            model.addTagsToOSM(toolboxView.getPreset3());
-
-        }
-
-    }
-
-    /**
-     * Listener for preset button 4.
-     * @author egru
-     *
-     */
-    class Preset4Listener implements ActionListener {
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            model.addTagsToOSM(toolboxView.getPreset4());
-
-        }
-
-    }
-
-    /**
-     * Updates the preset button from the current ranking.
-     */
-    private void refreshPresets() {
-        toolboxView.setPresetButtons(model.getPresetRanking());
-    }
-
-
-    //*******************
-    // SELECTOR LISTENERS
-    //*******************
-
-    /**
-     * <pre>
-     * The listener which handles the click on the OK-button of the {@link LevelSelectorView}.
-     * It sends the data of the view to the model and displays an error message,
-     * if the level-list couldn't be created.
-     * </pre>
-     * @author egru
-     *
-     */
-    class LevelOkButtonListener implements ActionListener {
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            boolean levelSuccess = model.setBuildingLevels(selectorView.getMin(), selectorView.getMax());
-
-            if (levelSuccess) {
-                toolboxView.setLevelList(model.getLevelList());                //set the levels to the ComboBox and
-                model.setWorkingLevel(toolboxView.getSelectedLevelIndex());        //sets the working level in the model
-
-                selectorView.dispose();
-
-                fittingView = new FittingView();
-                addFittingListeners();
-                fittingView.setVisible(true);
-            } else {
-
-                JOptionPane.showMessageDialog(null, "Lowest Level has to be lower than the highest level",
-                        "Error", JOptionPane.ERROR_MESSAGE);
-            }
-        }
-    }
-
-    /**
-     * Closes the level selection view if the user hits the cancel button.
-     *
-     * @author egru
-     *
-     */
-    class LevelCancelButtonListener implements ActionListener {
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            selectorView.dispose();
-            toolboxView.setPowerButtonDisabled();
-            setPluginPreferences(false);
-        }
-
-    }
-
-
-
-    //*******************
-    // FITTING LISTENERS
-    //*******************
-    /**
-     * Closes the {@link FittingView} if the OK-Button is clicked.
-     * Enables the UI elements of the toolbox
-     *
-     * @author egru
-     *
-     */
-    class FittingOkButtonListener implements ActionListener {
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            fittingView.dispose();
-            toolboxView.setAllUiElementsEnabled(true);
-            toolboxView.setTagUiElementsEnabled(false);
-        }
-
-    }
-
-    /*
-    HELPER METHODS
-    */
-
-    /**
-     * Enables or disables the preferences for the mapcss-style and the validator.
-     *
-     * @param enabled Activates or disables the settings.
-     */
-    private void setPluginPreferences(boolean enabled) {
-        Collection<Map<String, String>> validatorMaps =
-                Main.pref.getListOfMaps("validator.org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.entries",
-                new ArrayList<>());
-        Collection<Map<String, String>> styleMaps =
-                Main.pref.getListOfMaps("mappaint.style.entries", new ArrayList<>());
-
-        if (enabled) {
-            //set the validator active
-
-            List<Map<String, String>> validatorMapsNew = new ArrayList<>();
-            if (!validatorMaps.isEmpty()) {
-                validatorMapsNew.addAll(validatorMaps);
-            }
-
-            for (Map<String, String> map : validatorMapsNew) {
-                if (map.containsValue("Indoor")) {
-                    validatorMapsNew.remove(map);
-                    break;
-                }
-            }
-
-            Map<String, String> indoorValidator = new HashMap<>();
-            indoorValidator.put("title", "Indoor");
-            indoorValidator.put("active", "true");
-            indoorValidator.put("url", Main.pref.getDirs().getUserDataDirectory(false)+ sep +"validator" +
-                    sep + "indoorhelper.validator.mapcss");
-
-            validatorMapsNew.add(indoorValidator);
-            Main.pref.putListOfMaps("validator.org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.entries",
-                    validatorMapsNew);
-
-            //set mappaint active
-
-            List<Map<String, String>> styleMapsNew = new ArrayList<>();
-            if (!styleMaps.isEmpty()) {
-                styleMapsNew.addAll(styleMaps);
-            }
-
-            for (Map<String, String> map : styleMapsNew) {
-                if (map.containsValue("Indoor")) {
-                    styleMapsNew.remove(map);
-                    break;
-                }
-            }
-            Map<String, String> indoorMapPaint = new HashMap<>();
-            indoorMapPaint.put("title", "Indoor");
-            indoorMapPaint.put("active", "true");
-            indoorMapPaint.put("url", Main.pref.getDirs().getUserDataDirectory(false) + sep + "styles"
-                    + sep + "indoor.mapcss");
-            styleMapsNew.add(indoorMapPaint);
-            Main.pref.putListOfMaps("mappaint.style.entries", styleMapsNew);
-
-            updateSettings();
-        } else {
-            //set the validator inactive
-
-
-            List<Map<String, String>> validatorMapsNew = new ArrayList<>();
-            if (!validatorMaps.isEmpty()) {
-                validatorMapsNew.addAll(validatorMaps);
-            }
-
-            for (Map<String, String> map : validatorMapsNew) {
-                if (map.containsValue("Indoor")) {
-                    validatorMapsNew.remove(map);
-                    break;
-                }
-            }
-            Map<String, String> indoorValidator = new HashMap<>();
-            indoorValidator.put("title", "Indoor");
-            indoorValidator.put("active", "false");
-            indoorValidator.put("url", Main.pref.getDirs().getUserDataDirectory(false)+ sep +"validator" +
-                    sep + "indoorhelper.validator.mapcss");
-
-            validatorMapsNew.add(indoorValidator);
-            Main.pref.putListOfMaps("validator.org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.entries",
-                    validatorMapsNew);
-
-
-            //set mappaint inactive
-
-
-            List<Map<String, String>> styleMapsNew = new ArrayList<>();
-            if (!styleMaps.isEmpty()) {
-                styleMapsNew.addAll(styleMaps);
-            }
-            for (Map<String, String> map : styleMapsNew) {
-                if (map.containsValue("Indoor")) {
-                    styleMapsNew.remove(map);
-                    break;
-                }
-            }
-            Map<String, String> indoorMapPaint = new HashMap<>();
-            indoorMapPaint.put("title", "Indoor");
-            indoorMapPaint.put("active", "false");
-            indoorMapPaint.put("url", Main.pref.getDirs().getUserDataDirectory(false) + sep + "styles"
-                    + sep + "indoor.mapcss");
-            styleMapsNew.add(indoorMapPaint);
-            Main.pref.putListOfMaps("mappaint.style.entries", styleMapsNew);
-
-            updateSettings();
-        }
-    }
+
+/*************************************************
+* HELPER METHODS
+*
+*/
+
+   /**
+    * Function which resets the helper for relation adding
+    */
+   private void resetHelper() {
+	   InnerHelp = false;
+	   OuterHelp = false;
+   }
 
     /**
@@ -511,5 +683,140 @@
             MapPaintStyles.readFromPreferences();
     }
+
+   /**
+    * Enables or disables the preferences for the mapcss-style and the validator.
+    *
+    * @param enabled Activates or disables the settings.
+    */
+	@SuppressWarnings("deprecation")
+	private void setPluginPreferences(boolean enabled) {
+       Map<String, Setting<?>> settings = Main.pref.getAllSettings();
+
+       MapListSetting validatorMapListSetting = (MapListSetting) settings.
+               get("validator.org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.entries");
+       List<Map<String, String>> validatorMaps = new ArrayList<>();
+       if (validatorMapListSetting != null) {
+           validatorMaps = validatorMapListSetting.getValue();
+       }
+
+       MapListSetting styleMapListSetting = (MapListSetting) settings.
+               get("mappaint.style.entries");
+       List<Map<String, String>> styleMaps = new ArrayList<>();
+       if (styleMapListSetting != null) {
+           styleMaps = styleMapListSetting.getValue();
+       }
+
+       if (enabled) {
+           //set the validator active
+
+           List<Map<String, String>> validatorMapsNew = new ArrayList<>();
+           if (!validatorMaps.isEmpty()) {
+               validatorMapsNew.addAll(validatorMaps);
+           }
+
+           for (Map<String, String> map : validatorMapsNew) {
+               if (map.containsValue(tr("Indoor"))) {
+                   validatorMapsNew.remove(map);
+                   break;
+               }
+           }
+
+           Map<String, String> indoorValidator = new HashMap<>();
+           indoorValidator.put("title", "Indoor");
+           indoorValidator.put("active", "true");
+           indoorValidator.put("url", Main.pref.getUserDataDirectory()+ sep +"validator" +
+                   sep + "indoorhelper.validator.mapcss");
+
+           validatorMapsNew.add(indoorValidator);
+           Main.pref.putListOfMaps("validator.org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.entries",
+                   validatorMapsNew);
+
+           //set mappaint active
+
+           List<Map<String, String>> styleMapsNew = new ArrayList<>();
+           if (!styleMaps.isEmpty()) {
+               styleMapsNew.addAll(styleMaps);
+           }
+
+           for (Map<String, String> map : styleMapsNew) {
+               if (map.containsValue(tr("Indoor"))) {
+                   styleMapsNew.remove(map);
+                   break;
+               }
+           }
+           Map<String, String> indoorMapPaint = new HashMap<>();
+           indoorMapPaint.put("title", tr("Indoor"));
+           indoorMapPaint.put("active", "true");
+           indoorMapPaint.put("url", Main.pref.getUserDataDirectory() + sep + "styles"
+                   + sep + "sit.mapcss");
+           styleMapsNew.add(indoorMapPaint);
+           Main.pref.putListOfMaps("mappaint.style.entries", styleMapsNew);
+
+           updateSettings();
+       } else {
+           //set the validator inactive
+
+
+           List<Map<String, String>> validatorMapsNew = new ArrayList<>();
+           if (!validatorMaps.isEmpty()) {
+               validatorMapsNew.addAll(validatorMaps);
+           }
+
+           for (Map<String, String> map : validatorMapsNew) {
+               if (map.containsValue(tr("Indoor"))) {
+                   validatorMapsNew.remove(map);
+                   break;
+               }
+           }
+           Map<String, String> indoorValidator = new HashMap<>();
+           indoorValidator.put("title", tr("Indoor"));
+           indoorValidator.put("active", "false");
+           indoorValidator.put("url", Main.pref.getUserDataDirectory()+ sep +"validator" +
+                   sep + "indoorhelper.validator.mapcss");
+
+           validatorMapsNew.add(indoorValidator);
+           Main.pref.putListOfMaps("validator.org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.entries",
+                   validatorMapsNew);
+
+
+           //set mappaint inactive
+
+
+           List<Map<String, String>> styleMapsNew = new ArrayList<>();
+           if (!styleMaps.isEmpty()) {
+               styleMapsNew.addAll(styleMaps);
+           }
+           for (Map<String, String> map : styleMapsNew) {
+               if (map.containsValue(tr("Indoor"))) {
+                   styleMapsNew.remove(map);
+                   break;
+               }
+           }
+           Map<String, String> indoorMapPaint = new HashMap<>();
+           indoorMapPaint.put("title", tr("Indoor"));
+           indoorMapPaint.put("active", "false");
+           indoorMapPaint.put("url", Main.pref.getUserDataDirectory() + sep + "styles"
+                   + sep + "sit.mapcss");
+           styleMapsNew.add(indoorMapPaint);
+           Main.pref.putListOfMaps("mappaint.style.entries", styleMapsNew);
+
+           updateSettings();
+       }
+   }
+
+
+
+
+
+/**
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ */
 }
-
-
Index: /applications/editors/josm/plugins/indoorhelper/src/model/IndoorHelperModel.java
===================================================================
--- /applications/editors/josm/plugins/indoorhelper/src/model/IndoorHelperModel.java	(revision 33973)
+++ /applications/editors/josm/plugins/indoorhelper/src/model/IndoorHelperModel.java	(revision 33974)
@@ -19,5 +19,7 @@
 package model;
 
-import java.util.ArrayList;
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.util.Collection;
 import java.util.List;
 
@@ -25,11 +27,12 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
-import org.openstreetmap.josm.data.osm.Filter;
-import org.openstreetmap.josm.data.osm.Filter.FilterPreferenceEntry;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.dialogs.FilterDialog;
-import org.openstreetmap.josm.gui.dialogs.FilterTableModel;
 
 import model.TagCatalog.IndoorObject;
@@ -40,20 +43,16 @@
  *
  * @author egru
+ * @author rebsc
  */
-public class IndoorHelperModel {
-
-    private java.util.List<IndoorLevel> levelList;
-    private int workingLevel;
-    private int workingIndex;
+public class IndoorHelperModel{
+
     private TagCatalog tags;
     private PresetCounter counter;
 
     /**
-     * Constructor for the {@link IndoorHelperModel} which sets the current
-     * workingLevel to 0 and creates the {@link TagCatalog}.
+     * Constructor for the {@link IndoorHelperModel} which creates the {@link TagCatalog}
+     * and {@link PresetCounter}.
      */
     public IndoorHelperModel() {
-        this.workingLevel = 0;
-        this.levelList = new ArrayList<>();
         this.tags = new TagCatalog();
         this.counter = new PresetCounter();
@@ -61,186 +60,6 @@
 
     /**
-     * Method to create a list of levels for the current building.
-     * It also creates the filters which are needed to execute the indoor mapping.
-     * minLevel should be lower than maxLevel or the same.
-     *
-     * @param minLevel the lowest level of the building
-     * @param maxLevel the highest level of the building
-     * @return boolean which indicates if the creation of the levelList was successful
-     */
-    public boolean setBuildingLevels(int minLevel, int maxLevel) {
-
-        if (minLevel < maxLevel) {
-
-            for (int i = minLevel; i <= maxLevel; i++) {
-
-                IndoorLevel level = new IndoorLevel(i);
-                levelList.add(level);
-
-                // Get the filter dialog
-                FilterDialog filterDialog = MainApplication.getMap().getToggleDialog(FilterDialog.class);
-
-                if (filterDialog != null) {
-                    // Create a new filter
-                    //Filter filter = new Filter("\"indoor:level\"=\""+i+"\"", SearchMode.add, false, false, false);
-                    FilterPreferenceEntry entry = new FilterPreferenceEntry();
-                    entry.case_sensitive = false;
-                    entry.enable = false;
-                    entry.hiding = false;
-                    entry.inverted = false;
-                    entry.mapCSS_search = false;
-                    entry.mode = "add";
-                    entry.text = "\"indoor:level\"=\""+i+"\"";
-                    Filter filter = new Filter(entry);
-
-                    FilterTableModel filterTableModel = filterDialog.getFilterModel();
-
-                    boolean exists = false;
-
-                    // Search if the filter exists already.
-                    for (Filter listFilter : filterTableModel.getFilters()) {
-                        if (listFilter.equals(filter)) {
-                            exists = true;
-                        }
-                    }
-
-                    // Only add the filter if it is not already in the filter dialog.
-                    if (exists == false) {
-                        filterTableModel.addFilter(filter);
-                    }
-
-                } else {
-                    //Show error message if filter dialog is null.
-                    JOptionPane.showMessageDialog(null, "Filter Dialog is null.", "Error", JOptionPane.ERROR_MESSAGE);
-                }
-            }
-
-            return true;
-
-        } else if (minLevel == maxLevel) {
-
-            IndoorLevel level = new IndoorLevel(minLevel);
-            levelList.add(level);
-
-            // Get the filter dialog
-            FilterDialog filterDialog = MainApplication.getMap().getToggleDialog(FilterDialog.class);
-
-            if (filterDialog != null) {
-                // Create a new filter
-                //Filter filter = new Filter("\"indoor:level\"=\""+minLevel+"\"", SearchMode.add, false, false, false);
-
-                FilterPreferenceEntry entry = new FilterPreferenceEntry();
-                entry.case_sensitive = false;
-                entry.enable = false;
-                entry.hiding = false;
-                entry.inverted = false;
-                entry.mapCSS_search = false;
-                entry.mode = "add";
-                entry.text = "\"indoor:level\"=\""+minLevel+"\"";
-                Filter filter = new Filter(entry);
-
-                FilterTableModel filterTableModel = filterDialog.getFilterModel();
-
-                boolean exists = false;
-
-                // Search if the filter exists already.
-                for (Filter listFilter : filterTableModel.getFilters()) {
-                    if (listFilter.equals(filter)) {
-                        exists = true;
-                    }
-                }
-
-                // Only add the filter if it is not already in the filter dialog.
-                if (exists == false) {
-                    filterTableModel.addFilter(filter);
-                }
-            } else {
-                JOptionPane.showMessageDialog(null, "Filter Dialog is null.", "Error", JOptionPane.ERROR_MESSAGE);
-            }
-
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Getter for the levelList of the model.
-     *
-     * @return the levelList, or null if no levelList was created yet
-     */
-    public java.util.List<IndoorLevel> getLevelList() {
-        return this.levelList;
-    }
-
-    /**
-     * Function to set the level the user wants to work on (with the level index) and activates the corresponding filter.
-     *
-     * @param index the index of the level the user wants to work on
-     */
-    public void setWorkingLevel(int index) {
-        this.workingIndex = index;
-        this.workingLevel = this.getLevelNumberFromIndex(index);
-
-        FilterDialog filterDialog = MainApplication.getMap().getToggleDialog(FilterDialog.class);
-        FilterTableModel filterTableModel = filterDialog.getFilterModel();
-
-
-        for (Filter filter : filterTableModel.getFilters()) {
-            // disable the filter for the current level
-            if (filter.text.equals("\"indoor:level\"=\""+workingLevel+"\"")) {
-                filterTableModel.setValueAt(false, filterTableModel.getFilters().indexOf(filter), FilterTableModel.COL_ENABLED);
-                filterTableModel.setValueAt(false, filterTableModel.getFilters().indexOf(filter), FilterTableModel.COL_HIDING);
-            } else if (filter.text.startsWith("\"indoor:level\"=\"")) {
-                filterTableModel.setValueAt(true, filterTableModel.getFilters().indexOf(filter), FilterTableModel.COL_ENABLED);
-                filterTableModel.setValueAt(true, filterTableModel.getFilters().indexOf(filter), FilterTableModel.COL_HIDING);
-            }
-        }
-    }
-
-    /**
-     * Function to get the current working level of the plug-in
-     *
-     * @return {@link Integer} which represents the current working level
-     */
-    public int getWorkingLevel() {
-        return this.workingLevel;
-    }
-
-    /**
-     * Method to get the index of the current working level of the plug-in.
-     *
-     * @return {@link Integer} which represents the index
-     */
-    public int getWorkingIndex() {
-        return this.workingIndex;
-    }
-
-    /**
-     * Returns the level number which is corresponding to a specific index.
-     *
-     * @param index index of the level
-     * @return a level number as an {@link Integer}
-     */
-    public int getLevelNumberFromIndex(int index) {
-        return levelList.get(index).getLevelNumber();
-    }
-
-    /**
-     * Function to set the nameTag of a specific level.
-     *
-     * @param levelNumber number of the level
-     * @param levelName tag which the user wants to set
-     * @return boolean which indicates if the level was found in the levelList
-     */
-    public void setLevelName(int levelIndex, String levelName) {
-        if ((levelName.length() > 0) && (levelName != null)) {
-            levelList.get(levelIndex).setNameTag(levelName);
-        }
-    }
-
-    /**
      * Function to get a tag-set out of the {@link TagCatalog}.
-     *
+     * ClipboardUtils.copy(Main.getLayerManager().getEditDataSet(),Main.getLayerManager().getEditDataSet().getKey());
      * @param object the {@link IndoorObject} from which you want to get the tag-set
      * @return a {@link List} of {@link Tag}s
@@ -250,24 +69,57 @@
     }
 
-
-    /**
-     * Method which adds the selected tag-set to the currently selected OSM data.
-     * It also adds the level tag corresponding to the current working level.
+    /**
+     * Method which adds the selected tag-set to the currently selected OSM data. If OSM data is a relation add tag-set
+     * directly to the relation otherwise add it to nodes and/or ways.
      *
      * @param object the object which defines the tag-set you want to add
      * @param userTags the tags which are given by the user input
-     */
-    public void addTagsToOSM(IndoorObject object, List<Tag> userTags) {
+     * @author rebsc
+     */
+	public void addTagsToOSM(IndoorObject object, List<Tag> userTags) {
         if (!MainApplication.getLayerManager().getEditDataSet().selectionEmpty() && !Main.main.getInProgressSelection().isEmpty()) {
 
+        	DataSet ds = Main.main.getEditDataSet();
             List<Tag> tags = this.getObjectTags(object);
+            Collection<Relation> relations = ds.getRelations();
+            Relation relationToAdd = null;
+
             tags.addAll(userTags);
-            tags.add(new Tag("indoor:level", Integer.toString(workingLevel)));
-
-            if (!this.getLevelList().get(workingIndex).hasEmptyName()) {
-                tags.add(this.getLevelList().get(workingIndex).getNameTag());
+
+            // Increment the counter for the presets
+            this.counter.count(object);
+
+            // Put value on {@link relationToAdd} if selected object is a relation.
+            relationToAdd = getRelationFromDataSet(ds,relations);
+
+            if(relationToAdd != null) {
+            	//Add tags to relation
+            	for (Tag t : tags) {
+            			Main.main.undoRedo.add(new ChangePropertyCommand(relationToAdd, t.getKey(), t.getValue()));
+            	}
+            }else{
+            	//Add tags to ways or nodes
+	            for (Tag t : tags) {
+	            	Main.main.undoRedo.add(new ChangePropertyCommand(Main.main.getInProgressSelection(), t.getKey(), t.getValue()));
+	            }
             }
-
-            // Increment the counter for the presets
+        //If the selected dataset is empty
+        } else if (MainApplication.getLayerManager().getEditDataSet().selectionEmpty()) {
+
+        	JOptionPane.showMessageDialog(null, tr("No data selected."), tr("Error"), JOptionPane.ERROR_MESSAGE);
+        }
+    }
+
+    /**
+     * Method which adds a object {@link IndoorObject} to the currently selected OSM data (to nodes and/or ways).
+     *
+     * @param object the object which defines the tag-set you want to add
+     */
+	public void addTagsToOSM(IndoorObject object) {
+
+        if (!MainApplication.getLayerManager().getEditDataSet().selectionEmpty() && !Main.main.getInProgressSelection().isEmpty()) {
+            List<Tag> tags = this.getObjectTags(object);
+
+            //Increment the counter for the presets
             this.counter.count(object);
 
@@ -276,36 +128,87 @@
                 Main.main.undoRedo.add(new ChangePropertyCommand(Main.main.getInProgressSelection(), t.getKey(), t.getValue()));
             }
-
+        //If the selected dataset ist empty
         } else if (MainApplication.getLayerManager().getEditDataSet().selectionEmpty()) {
-
-            JOptionPane.showMessageDialog(null, "No data selected.", "Error", JOptionPane.ERROR_MESSAGE);
-        }
-    }
-
-    /**
-     * Method which adds the selected tag-set to the currently selected OSM data.
-     * It also adds the level tag corresponding to the current working level.
-     *
-     * @param object the object which defines the tag-set you want to add
-     */
-    public void addTagsToOSM(IndoorObject object) {
+            JOptionPane.showMessageDialog(null, tr("No data selected."), tr("Error"), JOptionPane.ERROR_MESSAGE);
+        }
+    }
+
+    /**
+     * Method which adds a list of tag-sets to the currently selected OSM data. Tags directly to ways and/or nodes.
+     *
+     * @param userTags the tags which are given by the user input
+     * @author rebsc
+     */
+	public void addTagsToOSM(List<Tag> userTags) {
 
         if (!MainApplication.getLayerManager().getEditDataSet().selectionEmpty() && !Main.main.getInProgressSelection().isEmpty()) {
-            List<Tag> tags = this.getObjectTags(object);
-            tags.add(new Tag("indoor:level", Integer.toString(workingLevel)));
-
-            // Increment the counter for the presets
-            this.counter.count(object);
 
             //Add the tags to the current selection
-            for (Tag t : tags) {
+            for (Tag t : userTags) {
                 Main.main.undoRedo.add(new ChangePropertyCommand(Main.main.getInProgressSelection(), t.getKey(), t.getValue()));
             }
-        } else if (MainApplication.getLayerManager().getEditDataSet().selectionEmpty()) {
-            JOptionPane.showMessageDialog(null, "No data selected.", "Error", JOptionPane.ERROR_MESSAGE);
-        }
-    }
-
-    /**
+        }
+        else if (MainApplication.getLayerManager().getEditDataSet().selectionEmpty()) {
+            JOptionPane.showMessageDialog(null, tr("No data selected."), tr("Error"), JOptionPane.ERROR_MESSAGE);
+        }
+    }
+
+    /**
+     * Method which adds the relation to OSM data. Also adds the selected tag-set to relation object.
+     *
+     * @param String the Multipolygon Role as String
+     * @author rebsc
+     */
+	public void addRelation(String role){
+    	Relation newRelation = new Relation();
+    	RelationMember newMember;
+    	DataSet ds = Main.main.getEditDataSet();
+
+        // Create new relation and add a new member with specific role
+    	if(!MainApplication.getLayerManager().getEditDataSet().selectionEmpty()) {
+    		for (OsmPrimitive osm : ds.getSelected()) {
+                 newMember = new RelationMember(role == null ? "" : role, osm);
+                 newRelation.addMember(newMember);
+            }
+    	}
+    	// Add relation to OSM data
+        MainApplication.undoRedo.add(new AddCommand(MainApplication.getLayerManager().getEditDataSet(), newRelation));
+    }
+
+    /**
+     * Method which edits the selected object to the currently selected OSM data (relations).
+     *
+     * @param role The Multipolygon Role as String
+     * @param relation
+     * @author rebsc
+     */
+	public void editRelation(String role, Collection<OsmPrimitive> innerRelation){
+
+    	RelationMember newMember;
+    	DataSet ds = Main.main.getEditDataSet();
+    	Collection<Relation> relations = ds.getRelations();
+    	Relation relation = getRelationFromDataSet(ds,relations);
+
+        if (!MainApplication.getLayerManager().getEditDataSet().selectionEmpty() && !Main.main.getInProgressSelection().isEmpty() &&
+        		!innerRelation.isEmpty() && getRole(ds,relations).equals("outer")) {
+
+        	//Add new relation member to selected relation
+            for (OsmPrimitive osm : innerRelation) {
+                 newMember = new RelationMember(role == null ? "" : role, osm);
+                 relation.addMember(newMember);
+            };
+
+        //Check if dataset is not empty or if {@link innerRelation} has no value
+        }else if (MainApplication.getLayerManager().getEditDataSet().selectionEmpty() || innerRelation.isEmpty()) {
+            JOptionPane.showMessageDialog(null, tr("No data selected."), tr("Error"), JOptionPane.ERROR_MESSAGE);
+
+        //If selected object is not a relation member or not a relation member with role "outer"
+        }else if(!getRole(ds,relations).equals("outer")) {
+        	JOptionPane.showMessageDialog(null, tr("No relation or no relation member with role \"outer\" selected."), tr("Error"), JOptionPane.ERROR_MESSAGE);
+        }
+
+    }
+
+  /**
      * Returns the current ranking of the preset counter, which includes the 4 most used items.
      *
@@ -315,3 +218,87 @@
         return counter.getRanking();
     }
+
+
+
+/*************************************************
+* HELPER METHODS
+*
+*/
+
+    /**
+     * Function which returns the the relation (if any) of the currently selected object.
+     * If not returns null.
+     * @param ds actual working dataset
+     * @param relations collection of relations in the dataset
+     * @return relation of currently selected dataset
+     * @author rebsc
+     */
+    private Relation getRelationFromDataSet(DataSet ds, Collection<Relation> relations) {
+    	for(Relation r: relations) {
+    		for(RelationMember rm: r.getMembers()) {
+    			for(OsmPrimitive osm: ds.getSelected()) {
+    				if(rm.refersTo(osm)) {
+    					return r;
+    				}
+    			}
+    		}
+    	}
+    	return null;
+    }
+
+    /**
+     * Function which returns the relation role (if any) of the currently selected object.
+     * If object is not a relation returns empty string.
+     * @param ds active dataset
+     * @param relations collection of relations in the dataset
+     * @return role of currently selected relation member if any
+     * @author rebsc
+     */
+    private String getRole(DataSet ds, Collection<Relation> relations) {
+
+    	if(isRelationMember(ds,relations)) {
+    		for(Relation r: relations) {
+    			for(RelationMember rm: r.getMembers()) {
+    				for(OsmPrimitive osm: ds.getSelected()) {
+    					if(rm.refersTo(osm)) {
+    						return rm.getRole();
+    					}
+    				}
+    			}
+    		}
+    	}
+    	return "";
+    }
+
+    /**
+     * Function which returns true if the currently selected object is a relation
+     * @param ds active dataset
+     * @return true if selected object is a relation
+     * @author rebsc
+     */
+    private boolean isRelationMember(DataSet ds, Collection<Relation> relations) {
+    	for(Relation r: relations) {
+    		for(RelationMember rm: r.getMembers()) {
+    			for(OsmPrimitive osm: ds.getSelected()) {
+    				if(rm.refersTo(osm)) {
+    					return true;
+    				}
+    			}
+    		}
+    	}
+    	return false;
+    }
+
+
+/**
+*
+*
+*
+*
+*
+*
+*
+*
+*
+*/
 }
Index: /applications/editors/josm/plugins/indoorhelper/src/model/PresetCounter.java
===================================================================
--- /applications/editors/josm/plugins/indoorhelper/src/model/PresetCounter.java	(revision 33973)
+++ /applications/editors/josm/plugins/indoorhelper/src/model/PresetCounter.java	(revision 33974)
@@ -30,5 +30,5 @@
  *
  * @author egru
- *
+ * @author rebsc
  */
 public class PresetCounter {
@@ -49,14 +49,19 @@
 
         counterList.add(new ObjectCounter(IndoorObject.CONCRETE_WALL, 0));
-        counterList.add(new ObjectCounter(IndoorObject.DOOR, 0));
+        counterList.add(new ObjectCounter(IndoorObject.DOOR_PRIVATE, 0));
+        counterList.add(new ObjectCounter(IndoorObject.DOOR_PUBLIC, 0));
         counterList.add(new ObjectCounter(IndoorObject.ELEVATOR, 0));
         counterList.add(new ObjectCounter(IndoorObject.ENTRANCE, 0));
+        counterList.add(new ObjectCounter(IndoorObject.ENTRANCE_EXIT_ONLY, 0));
+        counterList.add(new ObjectCounter(IndoorObject.ACCESS_PRIVATE, 0));
+        counterList.add(new ObjectCounter(IndoorObject.ACCESS_PUBLIC, 0));
         counterList.add(new ObjectCounter(IndoorObject.GLASS_WALL, 0));
         counterList.add(new ObjectCounter(IndoorObject.ROOM, 0));
-        counterList.add(new ObjectCounter(IndoorObject.SHELL, 0));
-        counterList.add(new ObjectCounter(IndoorObject.STAIRWAYS, 0));
         counterList.add(new ObjectCounter(IndoorObject.STEPS, 0));
+        counterList.add(new ObjectCounter(IndoorObject.CORRIDOR, 0));
         counterList.add(new ObjectCounter(IndoorObject.TOILET_FEMALE, 0));
         counterList.add(new ObjectCounter(IndoorObject.TOILET_MALE, 0));
+        counterList.add(new ObjectCounter(IndoorObject.ZONE, 0));
+        counterList.add(new ObjectCounter(IndoorObject.BENCH, 0));
     }
 
@@ -134,3 +139,16 @@
     }
 
+
+
+/**
+*
+*
+*
+*
+*
+*
+*
+*
+*
+*/
 }
Index: /applications/editors/josm/plugins/indoorhelper/src/model/TagCatalog.java
===================================================================
--- /applications/editors/josm/plugins/indoorhelper/src/model/TagCatalog.java	(revision 33973)
+++ /applications/editors/josm/plugins/indoorhelper/src/model/TagCatalog.java	(revision 33974)
@@ -19,4 +19,21 @@
 package model;
 
+/**
+ * Class to provide the indoor tagging catalog.
+ *
+ * @author egru
+ * @author rebsc
+ *
+ */
+
+/**
+ * Class to provide the indoor tagging catalog.
+ *
+ * @author egru
+ * @author rebsc
+ *
+ */
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.util.ArrayList;
 import java.util.List;
@@ -24,63 +41,75 @@
 import org.openstreetmap.josm.data.osm.Tag;
 
-/**
- * Class to provide the indoor tagging catalog.
- * 
- * @author egru
- *
- */
+public final class TagCatalog {
 
-public final class TagCatalog {
-    
     /**
-     * Function to get a specific tag-set out of the {@link TagCatalog}. 
-     * 
+     * Function to get a specific tag-set out of the {@link TagCatalog}.
+     *
      * @param o the object for which you want the tag-set
      * @return a list of tags for the specified object
-     */    
+     */
     public List<Tag> getTags(IndoorObject o) {
-        
-        List<Tag> tagList = new ArrayList<Tag>();
-        
+
+        List<Tag> tagList = new ArrayList<>();
+
         switch(o) {
         case CONCRETE_WALL:
-            tagList.add(new Tag("indoor:area", "wall"));
-            tagList.add(new Tag("indoor:wall:material", "concrete"));
+            tagList.add(new Tag(tr("indoor"), tr("wall")));
+            tagList.add(new Tag(tr("material"), tr("concrete")));
             return tagList;
-        case DOOR:
-            tagList.add(new Tag("indoor:door", "yes"));
+        case DOOR_PRIVATE:
+            tagList.add(new Tag(tr("door"), tr("yes")));
+            tagList.add(new Tag ("access","private"));
+            return tagList;
+        case DOOR_PUBLIC:
+            tagList.add(new Tag(tr("door"), tr("yes")));
+            tagList.add(new Tag (tr("access"),tr("public")));
             return tagList;
         case ELEVATOR:
-            tagList.add(new Tag("indoor:area", "elevator"));
+            tagList.add(new Tag(tr("highway"), tr("elevator")));
             return tagList;
         case ENTRANCE:
-            tagList.add(new Tag("indoor:entrance", "yes"));
+            tagList.add(new Tag(tr("entrance"), tr("yes")));
             return tagList;
+        case ENTRANCE_EXIT_ONLY:
+            tagList.add(new Tag(tr("entrance"), tr("exit")));
+            return tagList;
+        case ACCESS_PRIVATE:
+        	tagList.add(new Tag(tr("access"),tr("private")));
+        	return tagList;
+        case ACCESS_PUBLIC:
+        	tagList.add(new Tag(tr("access"),tr("public")));
+        	return tagList;
         case TOILET_FEMALE:
-            tagList.add(new Tag("indoor:area", "room"));
-            tagList.add(new Tag("amenity", "toilets"));
-            tagList.add(new Tag("female", "yes"));
+            tagList.add(new Tag(tr("indoor"), tr("room")));
+            tagList.add(new Tag(tr("amenity"), tr("toilets")));
+            tagList.add(new Tag(tr("female"), tr("yes")));
             return tagList;
         case GLASS_WALL:
-            tagList.add(new Tag("indoor:area", "wall"));
-            tagList.add(new Tag("indoor:wall:material", "glass"));
+            tagList.add(new Tag(tr("indoor"), tr("wall")));
+            tagList.add(new Tag(tr("material"), tr("glass")));
             return tagList;
         case TOILET_MALE:
-            tagList.add(new Tag("indoor:area", "room"));
-            tagList.add(new Tag("amenity", "toilets"));
-            tagList.add(new Tag("male", "yes"));
+            tagList.add(new Tag(tr("indoor"), tr("room")));
+            tagList.add(new Tag(tr("amenity"), tr("toilets")));
+            tagList.add(new Tag(tr("male"), tr("yes")));
             return tagList;
         case ROOM:
-            tagList.add(new Tag("indoor:area", "room"));
-            return tagList;
-        case SHELL:
-            tagList.add(new Tag("indoor:area", "shell"));
-            return tagList;
-        case STAIRWAYS:
-            tagList.add(new Tag("indoor:area", "stairways"));
+            tagList.add(new Tag(tr("indoor"), tr("room")));
             return tagList;
         case STEPS:
-            tagList.add(new Tag("indoor:highway", "steps"));
+            tagList.add(new Tag(tr("highway"), tr("steps")));
             return tagList;
+        case CORRIDOR:
+        	tagList.add(new Tag(tr("indoor"), tr("corridor")));
+        	return tagList;
+        case BENCH:
+        	tagList.add(new Tag(tr("amenity"),tr("bench")));
+        	return tagList;
+        case ZONE:
+        	tagList.add(new Tag(tr("area"),tr("zone")));
+        	return tagList;
+        case NONE:
+        	return tagList;
         default:
             tagList = null;
@@ -88,14 +117,28 @@
         }
     }
-    
+
     /**
      * {@link Enum} class for an easier access of elements in the {@link TagCatalog}
-     * 
+     *
      * @author egru
+     * @author rebsc
      *
      */
     public enum IndoorObject {
-        SHELL, CONCRETE_WALL, GLASS_WALL, ROOM, TOILET_MALE, TOILET_FEMALE, ELEVATOR, STAIRWAYS, STEPS, DOOR, ENTRANCE;
+        CONCRETE_WALL, GLASS_WALL, ROOM, TOILET_MALE, TOILET_FEMALE, ELEVATOR, DOOR_PRIVATE, DOOR_PUBLIC, ENTRANCE,
+        ENTRANCE_EXIT_ONLY,ACCESS_PRIVATE,ACCESS_PUBLIC,STEPS,CORRIDOR,BENCH,ZONE,NONE;
     }
 
+
+/**
+*
+*
+*
+*
+*
+*
+*
+*
+*
+*/
 }
Index: /applications/editors/josm/plugins/indoorhelper/src/org/openstreetmap/josm/plugins/indoorhelper/IndoorHelperPlugin.java
===================================================================
--- /applications/editors/josm/plugins/indoorhelper/src/org/openstreetmap/josm/plugins/indoorhelper/IndoorHelperPlugin.java	(revision 33973)
+++ /applications/editors/josm/plugins/indoorhelper/src/org/openstreetmap/josm/plugins/indoorhelper/IndoorHelperPlugin.java	(revision 33974)
@@ -25,5 +25,13 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.autofilter.AutoFilter;
+import org.openstreetmap.josm.gui.autofilter.AutoFilterManager;
+import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
+import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
+import org.openstreetmap.josm.gui.layer.MapViewPaintable.PaintableInvalidationEvent;
+import org.openstreetmap.josm.gui.layer.MapViewPaintable.PaintableInvalidationListener;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.plugins.Plugin;
 import org.openstreetmap.josm.plugins.PluginInformation;
@@ -36,10 +44,11 @@
  *
  * @author egru
+ * @author rebsc
  *
  */
-public class IndoorHelperPlugin extends Plugin {
-
-
-    @SuppressWarnings("unused")
+public class IndoorHelperPlugin extends Plugin implements PaintableInvalidationListener, ActiveLayerChangeListener {
+
+
+	@SuppressWarnings("unused")
     private IndoorHelperController controller;
     String sep = System.getProperty("file.separator");
@@ -54,11 +63,14 @@
     public IndoorHelperPlugin(PluginInformation info) throws Exception {
         super(info);
-
+        MainApplication.getLayerManager().addAndFireActiveLayerChangeListener(this);
         this.exportValidator("/data/indoorhelper.validator.mapcss");
-        this.exportStyleFile("indoor.mapcss");
+        this.exportStyleFile("sit.mapcss");
         this.exportStyleFile("entrance_door_icon.png");
         this.exportStyleFile("entrance_icon.png");
-//        this.setIndoorValidator();
-    }
+        this.exportStyleFile("elevator_icon.png");
+
+        //this.setIndoorValidator();
+    }
+
 
     /**
@@ -74,11 +86,12 @@
     }
 
+
     /**
      * Exports the mapcss validator file to the preferences directory.
      */
-    private void exportValidator(String resourceName) throws Exception {
+    @SuppressWarnings("deprecation")
+	private void exportValidator(String resourceName) throws Exception {
         InputStream stream = null;
         OutputStream resStreamOut = null;
-
 
         try {
@@ -93,5 +106,5 @@
             byte[] buffer = new byte[4096];
 
-            String valDirPath = Main.pref.getDirs().getUserDataDirectory(false) + sep + "validator";
+            String valDirPath = Main.pref.getUserDataDirectory() + sep + "validator";
             File valDir = new File(valDirPath);
             valDir.mkdirs();
@@ -129,5 +142,6 @@
             byte[] buffer = new byte[4096];
 
-            String valDirPath = Main.pref.getDirs().getUserDataDirectory(false) + sep + "styles";
+            @SuppressWarnings("deprecation")
+			String valDirPath = Main.pref.getUserDataDirectory() + sep + "styles";
             File valDir = new File(valDirPath);
             valDir.mkdirs();
@@ -146,4 +160,32 @@
         }
     }
+
+	@Override
+	public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) {
+		OsmDataLayer editLayer = MainApplication.getLayerManager().getEditLayer();
+        if (editLayer != null) {
+            editLayer.addInvalidationListener(this);
+        }
+	}
+
+	@Override
+	public void paintableInvalidated(PaintableInvalidationEvent event){
+		AutoFilter currentAutoFilter = AutoFilterManager.getInstance().getCurrentAutoFilter();
+		String currentFilterValue = new String();
+
+		if(currentAutoFilter != null) {
+			currentFilterValue = currentAutoFilter.getFilter().text.split("=")[1];
+
+			this.controller.setIndoorLevel(currentFilterValue);
+			this.controller.getIndoorLevel(currentFilterValue);
+			this.controller.unsetSpecificKeyFilter("repeat_on");
+
+		}else{
+			currentFilterValue = "";
+			this.controller.setIndoorLevel(currentFilterValue);
+			this.controller.getIndoorLevel(currentFilterValue);
+		};
+
+	}
 
     /**
@@ -189,3 +231,15 @@
 //        }
 //    }
+
+/**
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ */
 }
Index: /applications/editors/josm/plugins/indoorhelper/src/views/LevelSelectorView.java
===================================================================
--- /applications/editors/josm/plugins/indoorhelper/src/views/LevelSelectorView.java	(revision 33973)
+++ /applications/editors/josm/plugins/indoorhelper/src/views/LevelSelectorView.java	(revision 33974)
@@ -1,20 +1,2 @@
-/*
- * Indoorhelper is a JOSM plug-in to support users when creating their own indoor maps.
- *  Copyright (C) 2016  Erik Gruschka
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
 package views;
 
@@ -22,9 +4,11 @@
 
 import java.awt.BorderLayout;
-import java.awt.Container;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.Insets;
 import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.WindowListener;
 
 import javax.swing.JButton;
@@ -32,28 +16,26 @@
 import javax.swing.JLabel;
 import javax.swing.JPanel;
-import javax.swing.JSpinner;
-import javax.swing.JSpinner.DefaultEditor;
 import javax.swing.border.EmptyBorder;
 
+import org.openstreetmap.josm.gui.widgets.DisableShortcutsOnFocusGainedTextField;
+
 /**
- * Class for the pop-up window which provides an level selector to get a user input.
- * In this window the user declares the lowest and the highest level of the building he wants to map.
+ * This is the level selector toolbox of the indoorhelper plug-in.
  *
- * @author egru
+ * @author rebsc
  *
  */
-
-@SuppressWarnings("serial")
 public class LevelSelectorView extends JFrame {
 
-    private JPanel dialogPane;
+	private static final long serialVersionUID = 1L;
+	private JPanel dialogPane;
     private JPanel contentPanel;
-    private JLabel minLabel;
-    private JSpinner minSpinner;
-    private JLabel maxLabel;
-    private JSpinner maxSpinner;
+    private JPanel infoBar;
     private JPanel buttonBar;
     private JButton okButton;
     private JButton cancelButton;
+    private JLabel label1;
+    private JLabel label2;
+    private DisableShortcutsOnFocusGainedTextField field;
 
     public LevelSelectorView() {
@@ -64,15 +46,15 @@
         dialogPane = new JPanel();
         contentPanel = new JPanel();
-        minLabel = new JLabel();
-        minSpinner = new JSpinner();
-        maxLabel = new JLabel();
-        maxSpinner = new JSpinner();
+        infoBar = new JPanel();
         buttonBar = new JPanel();
         okButton = new JButton();
         cancelButton = new JButton();
+        label1 = new JLabel();
+        label2 = new JLabel();
+        field = new DisableShortcutsOnFocusGainedTextField();
 
         //======== this ========
-        setTitle(tr("Level Selection"));
-        Container contentPane = getContentPane();
+        setTitle(tr("Add a new level"));
+        java.awt.Container contentPane = getContentPane();
         contentPane.setLayout(new BorderLayout());
 
@@ -82,7 +64,20 @@
             dialogPane.setLayout(new BorderLayout());
 
+
+          	//======== infoBar ========
+        	{
+
+        		//---- Label1 ----
+        		label1.setText(tr("<html> Please insert the new level number you want to add.<br> "
+        				+ " <i>Info</i>: <br> If the OK button got pressed you will switch to the drawing action.<br>"
+        				+ "To finish the new object please press the spacebar. The new level<br>will be tagged automatically. </html>"));
+        		infoBar.add(label1);
+        	}
+        	dialogPane.add(infoBar,BorderLayout.NORTH);
+
+
             //======== contentPanel ========
             {
-                contentPanel.setLayout(new GridBagLayout());
+            	contentPanel.setLayout(new GridBagLayout());
                 ((GridBagLayout) contentPanel.getLayout()).columnWidths = new int[] {0, 0, 0, 0, 0};
                 ((GridBagLayout) contentPanel.getLayout()).rowHeights = new int[] {0, 0, 0, 0, 0, 0};
@@ -90,27 +85,27 @@
                 ((GridBagLayout) contentPanel.getLayout()).rowWeights = new double[] {0.0, 0.0, 0.0, 0.0, 0.0, 1.0E-4};
 
-                //---- minLabel ----
-                minLabel.setText(tr("Lowest Level"));
-                contentPanel.add(maxLabel, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-                JSpinner.DefaultEditor minEditor = (DefaultEditor) maxSpinner.getEditor();
-                minEditor.getTextField().setColumns(2);
-                maxSpinner.setToolTipText(tr("The lowest level of your building."));
-                contentPanel.add(maxSpinner, new GridBagConstraints(2, 0, 2, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 0), 0, 0));
 
-                //---- maxLabel ----
-                maxLabel.setText(tr("Highest Level"));
-                contentPanel.add(minLabel, new GridBagConstraints(0, 2, 2, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-                JSpinner.DefaultEditor maxEditor = (DefaultEditor) minSpinner.getEditor();
-                maxEditor.getTextField().setColumns(2);
-                minSpinner.setToolTipText(tr("The highest level of your building."));
-                contentPanel.add(minSpinner, new GridBagConstraints(2, 2, 2, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 0), 0, 0));
+                //---- Label2 ----
+                label2.setText(tr("level number:"));
+                contentPanel.add(label2,new GridBagConstraints(0, 0, 3, 1, 0.0, 0.0,
+                        GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                        new Insets(5, 5, 5, 30), 0, 0));
+
+                //---- Field ----
+                field.setToolTipText(tr("Example: '2' or '3'"));
+                field.addFocusListener(new FocusListener() {
+
+                    @Override
+                    public void focusLost(FocusEvent e) {}
+
+                    @Override
+                    public void focusGained(FocusEvent e) {
+                    	field.selectAll();
+                    }
+                });
+                contentPanel.add(field, new GridBagConstraints(3, 0, 2, 1, 0.0, 0.0,
+                        GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                        new Insets(5, 0, 5, 200), 0, 0));
+
             }
             dialogPane.add(contentPanel, BorderLayout.CENTER);
@@ -126,33 +121,12 @@
                 okButton.setText(tr("OK"));
                 buttonBar.add(okButton, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 0, 5), 0, 0));
+                        GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                        new Insets(0, 0, 0, 5), 0, 0));
 
-                //---- cancelButton ----
-                cancelButton.setText(tr("Cancel"));
+                //---- Button ----
+               cancelButton.setText(tr("Cancel"));
                 buttonBar.add(cancelButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 0, 0), 0, 0));
-            }
-            dialogPane.add(contentPanel, BorderLayout.CENTER);
-
-            //======== buttonBar ========
-            {
-                buttonBar.setBorder(new EmptyBorder(12, 0, 0, 0));
-                buttonBar.setLayout(new GridBagLayout());
-                ((GridBagLayout) buttonBar.getLayout()).columnWidths = new int[] {0, 85, 80};
-                ((GridBagLayout) buttonBar.getLayout()).columnWeights = new double[] {1.0, 0.0, 0.0};
-
-                //---- okButton ----
-                okButton.setText(tr("OK"));
-                buttonBar.add(okButton, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 0, 5), 0, 0));
-
-                //---- cancelButton ----
-                cancelButton.setText(tr("Cancel"));
-                buttonBar.add(cancelButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 0, 0), 0, 0));
+                        GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                        new Insets(0, 0, 0, 0), 0, 0));
             }
             dialogPane.add(buttonBar, BorderLayout.SOUTH);
@@ -164,5 +138,23 @@
     }
 
+/*************************************************
+* GETTER
+*
+*/
     /**
+     * Getter for the level number field.
+     *
+     * @return the {@link String}
+     */
+    public String getLevelNumber() {
+        return this.field.getText();
+    }
+
+/*************************************************
+* SELECTOR VIEW LISTENER
+*
+*/
+
+	/**
      * Set the listener for the OK button.
      *
@@ -173,6 +165,6 @@
     }
 
-    /**
-     * Set the listener for the cancel button.
+	/**
+     * Set the listener for the Cancel button.
      *
      * @param l the listener to set
@@ -183,19 +175,21 @@
 
     /**
-     * Getter for the lowest level.
+     * Set the listener for window {@Link LevelSelectorView}
      *
-     * @return Integer which represents the lowest level of the building.
+     * @param l the listener to set
      */
-    public int getMin() {
-        return (int) this.minSpinner.getValue();
+    public void setSelectorWindowListener(WindowListener l) {
+    	this.addWindowListener(l);
     }
 
-    /**
-     * Getter for the highest level.
-     *
-     * @return Integer which represents the highest level of the building.
-     */
-    public int getMax() {
-        return (int) this.maxSpinner.getValue();
-    }
+/**
+*
+*
+*
+*
+*
+*
+*
+*
+*/
 }
Index: /applications/editors/josm/plugins/indoorhelper/src/views/PresetButton.java
===================================================================
--- /applications/editors/josm/plugins/indoorhelper/src/views/PresetButton.java	(revision 33973)
+++ /applications/editors/josm/plugins/indoorhelper/src/views/PresetButton.java	(revision 33974)
@@ -45,6 +45,17 @@
         this.indoorObject = object;
         this.setText(indoorObject.toString());
-        this.setToolTipText(indoorObject.toString());
+        this.setToolTipText("Fast Tag: "+indoorObject.toString());
     }
 
+
+/**
+*
+*
+*
+*
+*
+*
+*
+*
+*/
 }
Index: /applications/editors/josm/plugins/indoorhelper/src/views/ToolBoxView.java
===================================================================
--- /applications/editors/josm/plugins/indoorhelper/src/views/ToolBoxView.java	(revision 33973)
+++ /applications/editors/josm/plugins/indoorhelper/src/views/ToolBoxView.java	(revision 33974)
@@ -22,4 +22,5 @@
 
 import java.awt.BorderLayout;
+import java.awt.Color;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
@@ -31,11 +32,10 @@
 import java.awt.event.ItemListener;
 import java.util.List;
-import java.util.ListIterator;
 
 import javax.swing.JButton;
+import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JSeparator;
-import javax.swing.JToggleButton;
 import javax.swing.border.EmptyBorder;
 
@@ -44,481 +44,630 @@
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 
-import model.IndoorLevel;
 import model.TagCatalog;
 import model.TagCatalog.IndoorObject;
 
 /**
- *
- * This is the main toolbox of the indoorhelper plug-in.
- *
- * @author egru
- *
- */
+*
+* This is the main toolbox of the indoorhelper plug-in.
+*
+* @author egru
+* @author rebsc
+*
+*/
 @SuppressWarnings("serial")
 public class ToolBoxView extends ToggleDialog {
-    private JPanel dialogPane;
-    private JPanel contentPanel;
-    private JToggleButton powerButton;
-    private JLabel levelLabel;
-    private JosmComboBox<String> levelBox;
-    private JLabel levelTagLabel;
-    private DisableShortcutsOnFocusGainedTextField levelTagField;
-    private JLabel objectLabel;
-    private JosmComboBox<TagCatalog.IndoorObject> objectBox;
-    private JLabel nameLabel;
-    private DisableShortcutsOnFocusGainedTextField nameField;
-    private JLabel refLabel;
-    private DisableShortcutsOnFocusGainedTextField refField;
-    private JPanel buttonBar;
-    private JButton applyButton;
-    private JSeparator separator1;
-    private JSeparator separator2;
-    private PresetButton preset1;
-    private PresetButton preset2;
-    private PresetButton preset3;
-    private PresetButton preset4;
-
-    public ToolBoxView() {
-        super(tr("Indoor Mapping Helper"), "indoorhelper",
-                tr("Toolbox for indoor mapping assistance"), null, 300, true);
-
-        initComponents();
-    }
-
-    /**
-     * Creates the layout of the plug-in.
-     */
-    private void initComponents() {
-        dialogPane = new JPanel();
-        contentPanel = new JPanel();
-        powerButton = new JToggleButton();
-        levelLabel = new JLabel();
-        levelBox = new JosmComboBox<String>();
-        levelTagLabel = new JLabel();
-        levelTagField = new DisableShortcutsOnFocusGainedTextField();
-        objectLabel = new JLabel();
-        objectBox = new JosmComboBox<>(TagCatalog.IndoorObject.values());
-        nameLabel = new JLabel();
-        nameField = new DisableShortcutsOnFocusGainedTextField();
-        refLabel = new JLabel();
-        refField = new DisableShortcutsOnFocusGainedTextField();
-        buttonBar = new JPanel();
-        applyButton = new JButton();
-        separator1 = new JSeparator();
-        separator2 = new JSeparator();
-        preset1 = new PresetButton(IndoorObject.ROOM);
-        preset2 = new PresetButton(IndoorObject.SHELL);
-        preset3 = new PresetButton(IndoorObject.CONCRETE_WALL);
-        preset4 = new PresetButton(IndoorObject.GLASS_WALL);
-
-        //======== this ========
-        //Container contentPane = this.get;
-        //contentPane.setLayout(new BorderLayout());
-
-        //======== dialogPane ========
-        {
-            dialogPane.setBorder(new EmptyBorder(12, 12, 12, 12));
-            dialogPane.setLayout(new BorderLayout());
-
-            //======== contentPanel ========
-            {
-                contentPanel.setLayout(new GridBagLayout());
-                ((GridBagLayout) contentPanel.getLayout()).columnWidths = new int[] {
-                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-                ((GridBagLayout) contentPanel.getLayout()).rowHeights = new int[] {0, 0, 0, 0, 0, 0, 0, 0};
-                ((GridBagLayout) contentPanel.getLayout()).columnWeights = new double[] {
-                        0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0E-4};
-                ((GridBagLayout) contentPanel.getLayout()).rowWeights = new double[] {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0E-4};
-
-                //---- powerButton ----
-                powerButton.setText(tr("POWER"));
-                powerButton.setToolTipText(tr("Activates the plug-in"));
-                contentPanel.add(powerButton, new GridBagConstraints(8, 0, 4, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-                contentPanel.add(separator1, new GridBagConstraints(1, 1, 12, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-
-                //---- levelLabel ----
-                levelLabel.setText(tr("Working Level"));
-                contentPanel.add(levelLabel, new GridBagConstraints(1, 2, 2, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-
-                //---- levelBox ----
-                levelBox.setEnabled(false);
-                levelBox.setEditable(false);
-                levelBox.setToolTipText(tr("Selects the working level."));
-                contentPanel.add(levelBox, new GridBagConstraints(3, 2, 3, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-
-                //---- levelTagLabel ----
-                levelTagLabel.setText(tr("Level Name"));
-                contentPanel.add(levelTagLabel, new GridBagConstraints(7, 2, 1, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-
-                //---- levelTagField ----
-                levelTagField.setEnabled(false);
-                levelTagField.setColumns(6);
-                levelTagField.setToolTipText(tr("Optional name-tag for a level."));
-                contentPanel.add(levelTagField, new GridBagConstraints(8, 2, 5, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-                contentPanel.add(separator2, new GridBagConstraints(1, 3, 12, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-
-                //---- objectLabel ----
-                objectLabel.setText(tr("Object"));
-                contentPanel.add(objectLabel, new GridBagConstraints(0, 4, 3, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-
-                //---- objectBox ----
-                objectBox.setEnabled(false);
-                objectBox.setPrototypeDisplayValue(IndoorObject.CONCRETE_WALL);
-                objectBox.setToolTipText(tr("The object preset you want to tag."));
-                contentPanel.add(objectBox, new GridBagConstraints(3, 4, 3, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-
-                //---- nameLabel ----
-                nameLabel.setText(tr("Name"));
-                contentPanel.add(nameLabel, new GridBagConstraints(0, 5, 3, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-
-                //---- nameField ----
-                nameField.setEnabled(false);
-                nameField.addFocusListener(new FocusListener() {
-
-                    @Override
-                    public void focusLost(FocusEvent e) {}
-
-                    @Override
-                    public void focusGained(FocusEvent e) {
-                        nameField.selectAll();
-                    }
-                });
-                nameField.setToolTipText(tr("Sets the name tag when the room-object is selected."));
-                contentPanel.add(nameField, new GridBagConstraints(3, 5, 3, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-
-                //---- refLabel ----
-                refLabel.setText(tr("Reference"));
-                contentPanel.add(refLabel, new GridBagConstraints(0, 6, 3, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 0, 5), 0, 0));
-
-                //---- refField ----
-                refField.setEnabled(false);
-                refField.addFocusListener(new FocusListener() {
-
-                    @Override
-                    public void focusLost(FocusEvent e) {}
-
-                    @Override
-                    public void focusGained(FocusEvent e) {
-                        refField.selectAll();
-                    }
-                });
-                refField.setToolTipText(tr("Sets the ref tag when the room-object is selected."));
-                contentPanel.add(refField, new GridBagConstraints(3, 6, 3, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 0, 5), 0, 0));
-
-                //---- preset1 ----
-                preset1.setEnabled(false);
-                contentPanel.add(preset1, new GridBagConstraints(16, 2, 1, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-                contentPanel.add(separator2, new GridBagConstraints(1, 3, 13, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-
-                //---- preset2 ----
-                preset2.setEnabled(false);
-                contentPanel.add(preset2, new GridBagConstraints(16, 3, 1, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-
-                //---- preset3 ----
-                preset3.setEnabled(false);
-                contentPanel.add(preset3, new GridBagConstraints(16, 4, 1, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-
-                //---- preset4 ----
-                preset4.setEnabled(false);
-                contentPanel.add(preset4, new GridBagConstraints(16, 5, 1, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 5, 5), 0, 0));
-            }
-            dialogPane.add(contentPanel, BorderLayout.CENTER);
-
-            //======== buttonBar ========
-            {
-                buttonBar.setBorder(new EmptyBorder(12, 0, 0, 0));
-                buttonBar.setLayout(new GridBagLayout());
-                ((GridBagLayout) buttonBar.getLayout()).columnWidths = new int[] {0, 80};
-                ((GridBagLayout) buttonBar.getLayout()).columnWeights = new double[] {1.0, 0.0};
-
-                //---- applyButton ----
-                applyButton.setText(tr("Apply Tags"));
-                applyButton.setEnabled(false);
-                buttonBar.add(applyButton, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0,
-                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-                    new Insets(0, 0, 0, 0), 0, 0));
-            }
-            dialogPane.add(buttonBar, BorderLayout.SOUTH);
-        }
-        //contentPane.add(dialogPane, BorderLayout.CENTER);
-
-
-        this.createLayout(dialogPane, false, null);
-    }
-
-    /**
-     * Returns the state of the power button.
-     *
-     * @return boolean which is true when the button is selected
-     */
-    public boolean getPowerButtonState() {
-        return this.powerButton.isSelected();
-    }
-
-    /**
-     * Enables or disables the interactive UI elements of the toolbox.
-     *
-     * @param enabled set this true for enabled elements
-     */
-    public void setAllUiElementsEnabled(boolean enabled) {
-        this.applyButton.setEnabled(enabled);
-        this.levelBox.setEnabled(enabled);
-        this.objectBox.setEnabled(enabled);
-        this.nameField.setEnabled(enabled);
-        this.refField.setEnabled(enabled);
-        this.levelTagField.setEnabled(enabled);
-        this.preset1.setEnabled(enabled);
-        this.preset2.setEnabled(enabled);
-        this.preset3.setEnabled(enabled);
-        this.preset4.setEnabled(enabled);
-
-
-        if (enabled == false) {
-            resetUiElements();
-            this.levelTagField.setText("");
-        }
-    }
-
-    /**
-     * Enables or disables the interactive text box elements name and ref.
-     *
-     * @param enabled set this true for enabled elements
-     */
-    public void setTagUiElementsEnabled(boolean enabled) {
-        this.nameField.setEnabled(enabled);
-        this.refField.setEnabled(enabled);
-
-        if (enabled == false) resetUiElements();
-    }
-
-    /**
-     * Disables the power-button of the plug-in.
-     */
-    public void setPowerButtonDisabled() {
-        this.powerButton.setSelected(false);
-    }
-
-    /**
-     * Getter for the selected {@link IndoorObject} in the objectBox.
-     *
-     * @return the selected indoor object in the object ComboBox.
-     */
-    public IndoorObject getSelectedObject() {
-        return (IndoorObject) this.objectBox.getSelectedItem();
-    }
-
-
-    /**
-     * Sets the level list for the level selection comboBox.
-     *
-     * @param levelList the list of levels which you want to set
-     */
-    public void setLevelList(List<IndoorLevel> levelList) {
-        this.levelBox.removeAllItems();
-
-        ListIterator<IndoorLevel> listIterator = levelList.listIterator();
-
-        while (listIterator.hasNext()) {
-            IndoorLevel level = listIterator.next();
-            if (level.hasEmptyName()) {
-                this.levelBox.addItem(Integer.toString(level.getLevelNumber()));
-            } else {
-                this.levelBox.addItem(level.getName());
-            }
-        }
-    }
-
-    /**
-     * Getter for the selected working level.
-     *
-     * @return the index of the selected item in the level-box
-     */
-    public int getSelectedLevelIndex() {
-        return this.levelBox.getSelectedIndex();
-    }
-
-    /**
-     * Checks if the level list is empty.
-     *
-     * @return boolean which is true if the level-list is empty
-     */
-    public boolean levelListIsEmpty() {
-        if (this.levelBox.getItemCount() == 0) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Getter for the level-name-field.
-     *
-     * @return the {@link String} of the levelTagField
-     */
-    public String getLevelName() {
-        return this.levelTagField.getText();
-    }
-
-    /**
-     * Setter for the level name field.
-     *
-     * @param name the String for the levelTagField
-     */
-    public void setLevelName(String name) {
-        this.levelTagField.setText(name);
-    }
-
-    /**
-     * Getter for the name {@link TextField}.
-     *
-     * @return {@link String} of the name text field
-     */
-    public String getNameText() {
-        return this.nameField.getText();
-    }
-
-    /**
-     * Getter for the ref {@link TextField}.
-     *
-     * @return {@link String} of the ref text field
-     */
-    public String getRefText() {
-        return this.refField.getText();
-    }
-
-    /**
-     * Resets the view by making the UI elements disabled and deleting the level list.
-     */
-    public void reset() {
-        this.setAllUiElementsEnabled(false);
-        this.levelBox.removeAllItems();
-    }
-
-    /**
-     * Clears the text boxes and sets an empty {@link String}.
-     */
-    public void resetUiElements() {
-        this.nameField.setText("");
-        this.refField.setText("");
-    }
-
-    /*
-     * ********************************
-     * SETTERS FOR THE BUTTON LISTENERS
-     * ********************************
-     */
-
-    /**
-     * Set the listener for the power button.
-     *
-     * @param l the listener to set
-     */
-    public void setPowerButtonListener(ActionListener l) {
-        this.powerButton.addActionListener(l);
-    }
-
-    /**
-     * Set the listener for the apply button.
-     *
-     * @param l the listener to set
-     */
-    public void setApplyButtonListener(ActionListener l) {
-        this.applyButton.addActionListener(l);
-    }
-
-    /**
-     * Set the listener which is called when a new item in the level list is selected.
-     *
-     * @param l the listener to set
-     */
-    public void setLevelItemListener(ItemListener l) {
-        this.levelBox.addItemListener(l);
-    }
-
-
-    /**
-     * Set the listener which is called when a new item in the object list is selected.
-     *
-     * @param l the listener to set
-     */
-    public void setObjectItemListener(ItemListener l) {
-        this.objectBox.addItemListener(l);
-    }
-
-    // Preset Button Functions
-
-    public void setPresetButtons(List<IndoorObject> objects) {
-        this.preset1.setIndoorObject(objects.get(0));
-        this.preset2.setIndoorObject(objects.get(1));
-        this.preset3.setIndoorObject(objects.get(2));
-        this.preset4.setIndoorObject(objects.get(3));
-    }
-
-    public void setPreset1Listener(ActionListener l) {
-        this.preset1.addActionListener(l);
-    }
-
-    public void setPreset2Listener(ActionListener l) {
-        this.preset2.addActionListener(l);
-    }
-
-    public void setPreset3Listener(ActionListener l) {
-        this.preset3.addActionListener(l);
-    }
-
-    public void setPreset4Listener(ActionListener l) {
-        this.preset4.addActionListener(l);
-    }
-
-    public IndoorObject getPreset1() {
-        return preset1.getIndoorObject();
-    }
-
-    public IndoorObject getPreset2() {
-        return preset2.getIndoorObject();
-    }
-
-    public IndoorObject getPreset3() {
-        return preset3.getIndoorObject();
-    }
-
-    public IndoorObject getPreset4() {
-        return preset4.getIndoorObject();
-    }
+	private JPanel dialogPanel;
+	private JPanel contentPanel;
+	private JLabel levelLabel;
+	private JCheckBox levelCheckBox;
+	private JLabel levelNameLabel;
+	private DisableShortcutsOnFocusGainedTextField levelNameField;
+	private JLabel repeatOnLabel;
+	private DisableShortcutsOnFocusGainedTextField repeatOnField;
+	private JLabel objectLabel;
+	private JosmComboBox<TagCatalog.IndoorObject> objectBox;
+	private JLabel nameLabel;
+	private DisableShortcutsOnFocusGainedTextField nameField;
+	private JLabel refLabel;
+	private DisableShortcutsOnFocusGainedTextField refField;
+	private JLabel multiLabel;
+	private JButton multiOuterButton;
+	private JButton multiInnerButton;
+	private JCheckBox multiCheckBox;
+	private JPanel buttonBar;
+	private JButton applyButton;
+	private JSeparator separator1;
+	private JSeparator separator2;
+	private PresetButton preset1;
+	private PresetButton preset2;
+	private PresetButton preset3;
+	private PresetButton preset4;
+	private JButton addLevelButton;
+	private JButton helpButton;
+
+
+   public ToolBoxView() {
+       super(tr("Indoor Mapping Helper"), "indoorhelper",
+               tr("Toolbox for indoor mapping assistance"), null, 300, true);
+
+       initComponents();
+   }
+
+/*************************************************
+* CREATES THE LAYOUT OF THE PLUG-IN.
+*
+*/
+   private void initComponents() {
+       dialogPanel = new JPanel();
+       contentPanel = new JPanel();
+       levelLabel = new JLabel();
+       levelCheckBox = new JCheckBox();
+       levelNameLabel = new JLabel();
+       levelNameField = new DisableShortcutsOnFocusGainedTextField();
+       repeatOnLabel = new JLabel();
+       repeatOnField = new DisableShortcutsOnFocusGainedTextField();
+       objectLabel = new JLabel();
+       objectBox = new JosmComboBox<>(TagCatalog.IndoorObject.values());
+       nameLabel = new JLabel();
+       nameField = new DisableShortcutsOnFocusGainedTextField();
+       refLabel = new JLabel();
+       refField = new DisableShortcutsOnFocusGainedTextField();
+       multiLabel = new JLabel();
+       multiOuterButton = new JButton();
+       multiInnerButton = new JButton();
+       multiCheckBox = new JCheckBox();
+       buttonBar = new JPanel();
+       applyButton = new JButton();
+       separator1 = new JSeparator();
+       separator2 = new JSeparator();
+       preset1 = new PresetButton(IndoorObject.ROOM);
+       preset2 = new PresetButton(IndoorObject.STEPS);
+       preset3 = new PresetButton(IndoorObject.CONCRETE_WALL);
+       preset4 = new PresetButton(IndoorObject.GLASS_WALL);
+       addLevelButton = new JButton();
+       helpButton = new JButton();
+
+       //======== this ========
+       //Container contentPane = this.get;
+       //contentPane.setLayout(new BorderLayout());
+
+       //======== dialogPane ========
+       {
+           dialogPanel.setBorder(new EmptyBorder(12, 12, 12, 12));
+           dialogPanel.setLayout(new BorderLayout());
+
+           //======== contentPanel ========
+           {
+               contentPanel.setLayout(new GridBagLayout());
+               ((GridBagLayout) contentPanel.getLayout()).columnWidths = new int[] {
+                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+               ((GridBagLayout) contentPanel.getLayout()).rowHeights = new int[] {0, 0, 0, 0, 0, 0, 0, 0};
+               ((GridBagLayout) contentPanel.getLayout()).columnWeights = new double[] {
+                       0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0E-4};
+               ((GridBagLayout) contentPanel.getLayout()).rowWeights = new double[] {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0E-4};
+
+
+               //---- addLevelButton ----
+               addLevelButton.setText(tr("Insert level"));
+               addLevelButton.setToolTipText(tr("Add a new level to layer."));
+               addLevelButton.setEnabled(false);
+               contentPanel.add(addLevelButton, new GridBagConstraints(12, 1, 3, 1, 0.0, 1.0,
+                       GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                       new Insets(0, 0, 5, 30), 0, 0));
+
+               //---- helpButton ----
+               helpButton.setText(tr("<html><b>?</strong></b>"));
+               helpButton.setToolTipText(tr("Show Help-Browser."));
+               helpButton.setBackground(Color.LIGHT_GRAY);
+               helpButton.setEnabled(false);
+               contentPanel.add(helpButton, new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 0), 0, 0));
+
+               //---- levelNameLabel ----
+               levelNameLabel.setText(tr("Level name"));
+               contentPanel.add(levelNameLabel, new GridBagConstraints(0, 1, 3, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+
+               //---- levelNameField ----
+               levelNameField.setEnabled(false);
+               levelNameField.setToolTipText(tr("Sets optional name tag for a level."));
+               contentPanel.add(levelNameField, new GridBagConstraints(3, 1, 3, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 30), 0, 0));
+
+               //---- levelLabel ----
+              levelLabel.setText(tr("Working level: NONE"));
+              levelLabel.setToolTipText(tr("Shows the current working level."));
+               contentPanel.add(levelLabel, new GridBagConstraints(6, 1, 3, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+
+               //---- levelCheckBox ----
+               levelCheckBox.setToolTipText(tr("Deactivate automatic level tagging."));
+               contentPanel.add(levelCheckBox, new GridBagConstraints(9, 1, 1, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+               contentPanel.add(separator1, new GridBagConstraints(0, 2, 0, 1, 0.0, 0.0,
+                       GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                       new Insets(0, 0, 5, 5), 0, 0));
+
+               //---- objectLabel ----
+               objectLabel.setText(tr("Object"));
+               contentPanel.add(objectLabel, new GridBagConstraints(0, 3, 3, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+
+               //---- objectBox ----
+               objectBox.setEnabled(false);
+               objectBox.setPrototypeDisplayValue(IndoorObject.CONCRETE_WALL);
+               objectBox.setToolTipText(tr("The object preset you want to tag."));
+               contentPanel.add(objectBox, new GridBagConstraints(3, 3, 3, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 30), 0, 0));
+
+               //---- nameLabel ----
+               nameLabel.setText(tr("Name"));
+               contentPanel.add(nameLabel, new GridBagConstraints(0, 4, 3, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+
+               //---- nameField ----
+               nameField.setEnabled(false);
+               nameField.addFocusListener(new FocusListener() {
+
+                   @Override
+                   public void focusLost(FocusEvent e) {}
+
+                   @Override
+                   public void focusGained(FocusEvent e) {
+                       nameField.selectAll();
+                   }
+               });
+               nameField.setToolTipText(tr("Sets the name tag."));
+               contentPanel.add(nameField, new GridBagConstraints(3, 4, 3, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 30), 0, 0));
+
+               //---- refLabel ----
+               refLabel.setText(tr("Reference"));
+               contentPanel.add(refLabel, new GridBagConstraints(0, 5, 3, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+
+               //---- refField ----
+               refField.setEnabled(false);
+               refField.addFocusListener(new FocusListener() {
+
+                   @Override
+                   public void focusLost(FocusEvent e) {}
+
+                   @Override
+                   public void focusGained(FocusEvent e) {
+                       refField.selectAll();
+                   }
+               });
+               refField.setToolTipText(tr("Sets the referance tag."));
+               contentPanel.add(refField, new GridBagConstraints(3, 5, 3, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 30), 0, 0));
+
+               //---- repeatOnLabel ----
+               repeatOnLabel.setText(tr("Repeat on"));
+               contentPanel.add(repeatOnLabel, new GridBagConstraints(0, 6, 3, 1, 0.0, 1.0,
+               	GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+
+               //---- repeatOnField ----
+               repeatOnField.setEnabled(false);
+               repeatOnField.addFocusListener(new FocusListener() {
+
+               	@Override
+               	public void focusLost(FocusEvent e) {}
+
+               	@Override
+               	public void focusGained(FocusEvent e) {
+               		repeatOnField.selectAll();
+               	}
+               });
+               repeatOnField.setToolTipText(tr("Sets the repeat on tag when highway objects are selected. Please tag like this: -3-4 or -2--3 or 5-6 ."));
+               contentPanel.add(repeatOnField, new GridBagConstraints(3, 6, 3, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 30), 0, 0));
+               contentPanel.add(separator2, new GridBagConstraints(0, 7, 0, 1, 0.0, 1.0,
+                       GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                       new Insets(0, 0, 5, 5), 0, 0));
+
+               //---- preset1 ----
+               preset1.setEnabled(false);
+               contentPanel.add(preset1, new GridBagConstraints(6, 3, 1, 1, 0.0, 0.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+               //---- preset2 ----
+               preset2.setEnabled(false);
+               contentPanel.add(preset2, new GridBagConstraints(6, 4, 1, 1, 0.0, 0.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+
+               //---- preset3 ----
+               preset3.setEnabled(false);
+               contentPanel.add(preset3, new GridBagConstraints(6, 5, 1, 1, 0.0, 0.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+
+               //---- preset4 ----
+               preset4.setEnabled(false);
+               contentPanel.add(preset4, new GridBagConstraints(6, 6, 1, 1, 0.0, 0.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+
+               //---- multiLabel ----
+               multiLabel.setText(tr("Multipolygon"));
+               contentPanel.add(multiLabel, new GridBagConstraints(0, 8, 3, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+
+               //---- multiOuterButton ----
+               multiOuterButton.setText(tr("OUTER"));
+               multiOuterButton.setToolTipText(tr("Creation-Tool for multipolygon with role: outer. To finish press the spacebar."));
+               multiOuterButton.setEnabled(false);
+               contentPanel.add(multiOuterButton, new GridBagConstraints(3, 8, 3, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 30), 0, 0));
+
+               //---- multiInnerButton ----
+               multiInnerButton.setText(tr("INNER"));
+               multiInnerButton.setToolTipText(tr("Creation-Tool for multipolygons with role: inner. To finish press spacebar. To add to relation select \"outer\" and press enter."));
+               multiInnerButton.setEnabled(false);
+               contentPanel.add(multiInnerButton, new GridBagConstraints(6, 8, 1, 1, 0.0, 0.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+
+             //---- multiCheckBox ----
+               multiCheckBox.setToolTipText(tr("Deactivate multipolygon function."));
+               contentPanel.add(multiCheckBox, new GridBagConstraints(9, 8, 1, 1, 0.0, 1.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 5, 5), 0, 0));
+           }
+           dialogPanel.add(contentPanel, BorderLayout.CENTER);
+
+           //======== buttonBar ========
+           {
+               buttonBar.setBorder(new EmptyBorder(12, 0, 0, 0));
+               buttonBar.setLayout(new GridBagLayout());
+               ((GridBagLayout) buttonBar.getLayout()).columnWidths = new int[] {0, 80};
+               ((GridBagLayout) buttonBar.getLayout()).columnWeights = new double[] {1.0, 0.0};
+
+               //---- applyButton ----
+               applyButton.setText(tr("Apply"));
+               applyButton.setToolTipText(tr("Add selected tags and/or relations to obeject."));
+               applyButton.setEnabled(false);
+               buttonBar.add(applyButton, new GridBagConstraints(0, 1, 2, 1, 0.0, 0.0,
+                   GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                   new Insets(0, 0, 0, 0), 0, 0));
+           }
+           dialogPanel.add(buttonBar, BorderLayout.SOUTH);
+       }
+       this.createLayout(dialogPanel, true, null);
+
+   }
+
+/*************************************************
+* ENABLES OR DISABLES UI ELEMENTS
+*
+*/
+   /**
+    * Enables or disables the interactive UI elements of the toolbox.
+    *
+    * @param enabled set this true for enabled elements
+    */
+   public void setAllUiElementsEnabled(boolean enabled) {
+	   this.applyButton.setEnabled(enabled);
+	   this.levelCheckBox.setEnabled(enabled);
+	   this.helpButton.setEnabled(enabled);
+       this.objectBox.setEnabled(enabled);
+       this.levelNameField.setEnabled(enabled);
+       this.nameField.setEnabled(enabled);
+       this.refField.setEnabled(enabled);
+       this.levelNameField.setEnabled(enabled);
+       this.repeatOnField.setEnabled(enabled);
+       this.multiOuterButton.setEnabled(enabled);
+       this.multiInnerButton.setEnabled(enabled);
+       this.multiCheckBox.setEnabled(enabled);
+       this.helpButton.setEnabled(enabled);
+       this.addLevelButton.setEnabled(enabled);
+       this.preset1.setEnabled(enabled);
+       this.preset2.setEnabled(enabled);
+       this.preset3.setEnabled(enabled);
+       this.preset4.setEnabled(enabled);
+
+       if (enabled == false) {
+           resetUiElements();
+       }
+   }
+
+   /**
+    * Enables or disables the interactive text box elements {@link #name} and {@link #ref}.
+    *
+    * @param enabled set this true for enabled elements
+    */
+   public void setNRUiElementsEnabled(boolean enabled) {
+       this.nameField.setEnabled(enabled);
+       this.refField.setEnabled(enabled);
+
+   }
+
+   /**
+    * Enables or disables the interactive text box element {@link #repeatOn}.
+    * @param enabled set this true for enabled elements
+	*/
+   public void setROUiElementsEnabled(boolean enabled){
+   		this.repeatOnField.setEnabled(enabled);
+
+   }
+
+   /**
+    * Enables or disables the interactive text box element {@link #levelName}.
+    * @param enabled set this true for enabled elements
+	*/
+   public void setLVLUiElementsEnabled(boolean enabled) {
+	   this.levelNameField.setEnabled(enabled);
+	   this.addLevelButton.setEnabled(enabled);
+
+   }
+
+   /**
+    * Enables or disables the interactive ComboBoxes {@link #multiRoleBox} and {@link #multiEditBox }.
+    * @param enabled set this true for enabled elements
+	*/
+   public void setMultiUiElementsEnabled(boolean enabled) {
+	   this.multiOuterButton.setEnabled(enabled);
+	   this.multiInnerButton.setEnabled(enabled);
+
+	   if (enabled == false) resetUiElements();
+   }
+
+   /**
+    * Resets the view by making the UI elements disabled and deleting the level list.
+    */
+   public void reset() {
+       this.setAllUiElementsEnabled(false);
+   }
+
+
+/*************************************************
+* GETTER and SETTER FOR THE INTERACTIVE UI BOXES
+*
+*/
+   /**
+    * Getter for the selected {@link IndoorObject} in the objectBox.
+    *
+    * @return the selected indoor object in the object ComboBox.
+    */
+   public IndoorObject getSelectedObject() {
+       return (IndoorObject) this.objectBox.getSelectedItem();
+   }
+
+   /**
+    * Getter for the level name field.
+    *
+    * @return the {@link String} of the {@link #levelNameField}
+    */
+   public String getLevelNameText() {
+       return this.levelNameField.getText();
+   }
+
+   /**
+    * Setter for the level name field.
+    *
+    * @param name the String for the {@link #levelNameField}
+    */
+   public void setLevelNameText(String name) {
+       this.levelNameField.setText(name);
+   }
+
+   /**
+    * Getter for the  name tag {@link TextField}.
+    *
+    * @return {@link String} of the name text field
+    */
+   public String getNameText() {
+       return this.nameField.getText();
+   }
+
+   /**
+    * Setter for the current level value tag
+    *
+    * @param current level value as String
+    * @author rebsc
+    */
+   public void setLevelLabel(String levelTag) {
+	   if (getLevelCheckBoxStatus() == false) {
+		  if(!levelTag.equals("")) {
+			  this.levelLabel.setText((tr("Working level: {0}",levelTag)));
+		  }
+		  else {
+			  this.levelLabel.setText((tr("Working level: NONE")));
+		  }
+	   }
+	   else {
+		   this.levelLabel.setText((tr("Working level: NONE")));
+	   }
+   }
+
+   /**
+    * Getter for the CheckBox Status
+    *
+    * @return boolean which tells if box is selected or not.
+    */
+   public boolean getLevelCheckBoxStatus() {
+	   return this.levelCheckBox.isSelected();
+   }
+
+   /**
+    * Getter for the ref {@link TextField}.
+    *
+    * @return {@link String} of the ref text field
+    */
+   public String getRefText() {
+       return this.refField.getText();
+   }
+
+   /**
+    * Getter for the repeat on {@link TextField}.
+    * @return {@link String} of the repeat on text field
+    */
+   public String getRepeatOnText() {
+       return this.repeatOnField.getText();
+   }
+
+
+/*************************************************
+* RESETER FOR THE INTERACTIVE UI BOXES
+*
+*/
+
+   /**
+    * Clears the text boxes and sets an empty {@link String}.
+    */
+   public void resetUiElements() {
+       this.nameField.setText(tr(""));
+       this.levelNameField.setText(tr(""));
+       this.refField.setText(tr(""));
+       this.repeatOnField.setText(tr(""));
+       this.levelNameField.setText(tr(""));
+   }
+
+
+/*************************************************
+* SETTERS FOR THE BUTTON LISTENER
+*
+*/
+
+   /**
+    * Set the listener for the apply button.
+    *
+    * @param l the listener to set
+    */
+   public void setApplyButtonListener(ActionListener l) {
+       this.applyButton.addActionListener(l);
+   }
+
+   /**
+    * Set the listener for CheckBox.
+    * @param l the listener to set
+    */
+   public void setLevelCheckBoxListener(ItemListener l) {
+	   this.levelCheckBox.addItemListener(l);
+   }
+
+   /**
+    * Set the listener for helpButton.
+    * @param l the listener to set
+    */
+   public void setHelpButtonListener(ActionListener l) {
+	   this.helpButton.addActionListener(l);
+   }
+
+   /**
+    * Set the listener for addLevelButton.
+    * @param l the listener to set
+    */
+   public void setAddLevelButtonListener(ActionListener l) {
+	   this.addLevelButton.addActionListener(l);
+   }
+
+
+   /**
+    * Set the listener for object box.
+    *
+    * @param l the listener to set
+    */
+   public void setObjectItemListener(ItemListener l) {
+       this.objectBox.addItemListener(l);
+   }
+
+   /**
+    * Set the listener for the OUTTER button.
+    *
+    * @param l the listener to set
+    */
+   public void setOuterButtonListener(ActionListener l) {
+       this.multiOuterButton.addActionListener(l);
+   }
+
+   /**
+    * Set the listener for the INNER button.
+    *
+    * @param l the listener to set
+    */
+   public void setInnerButtonListener(ActionListener l) {
+       this.multiInnerButton.addActionListener(l);
+   }
+
+   /**
+    * Set the listener for the multi checkbox.
+    *
+    * @param l the listener to set
+    */
+   public void setMultiCheckBoxListener(ItemListener l) {
+       this.multiCheckBox.addItemListener(l);
+   }
+
+/*************************************************
+* PRESET BUTTON FUNCTION
+*
+*/
+   public void setPresetButtons(List<IndoorObject> objects) {
+       this.preset1.setIndoorObject(objects.get(0));
+       this.preset2.setIndoorObject(objects.get(1));
+       this.preset3.setIndoorObject(objects.get(2));
+       this.preset4.setIndoorObject(objects.get(3));
+   }
+
+   public void setPreset1Listener(ActionListener l) {
+       this.preset1.addActionListener(l);
+   }
+
+   public void setPreset2Listener(ActionListener l) {
+       this.preset2.addActionListener(l);
+   }
+
+   public void setPreset3Listener(ActionListener l) {
+       this.preset3.addActionListener(l);
+   }
+
+   public void setPreset4Listener(ActionListener l) {
+       this.preset4.addActionListener(l);
+   }
+
+   public IndoorObject getPreset1() {
+       return preset1.getIndoorObject();
+   }
+
+   public IndoorObject getPreset2() {
+       return preset2.getIndoorObject();
+   }
+
+   public IndoorObject getPreset3() {
+       return preset3.getIndoorObject();
+   }
+
+   public IndoorObject getPreset4() {
+       return preset4.getIndoorObject();
+   }
+
+
+/**
+*
+*
+*
+*
+*
+*
+*
+*
+*
+*/
 }
