Index: applications/editors/josm/plugins/FastDraw/build.xml
===================================================================
--- applications/editors/josm/plugins/FastDraw/build.xml	(revision 33582)
+++ applications/editors/josm/plugins/FastDraw/build.xml	(revision 33583)
@@ -4,5 +4,5 @@
     <property name="commit.message" value="[josm_fastdraw] Fix incorrect settings saving-2"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
-    <property name="plugin.main.version" value="10657"/>
+    <property name="plugin.main.version" value="12683"/>
     
     <!-- Configure these properties (replace "..." accordingly).
Index: applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawConfigDialog.java
===================================================================
--- applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawConfigDialog.java	(revision 33582)
+++ applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawConfigDialog.java	(revision 33583)
@@ -22,4 +22,5 @@
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
+import org.openstreetmap.josm.gui.datatransfer.importers.TextTagPaster;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
 import org.openstreetmap.josm.tools.GBC;
@@ -58,5 +59,5 @@
             public void actionPerformed(ActionEvent e) {
                 String s = ClipboardUtils.getClipboardStringContent();
-                if (TextTagParser.getValidatedTagsFromText(s) != null) {
+                if (TextTagParser.getValidatedTagsFromText(s, TextTagPaster::warning) != null) {
                     addTags.setText(s);
                 }
Index: applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java
===================================================================
--- applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java	(revision 33582)
+++ applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java	(revision 33583)
@@ -33,4 +33,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapView;
@@ -40,10 +41,10 @@
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.util.KeyPressReleaseListener;
-import org.openstreetmap.josm.gui.util.ModifierListener;
+import org.openstreetmap.josm.gui.util.ModifierExListener;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.TextTagParser;
 
-class FastDrawingMode extends MapMode implements MapViewPaintable, KeyPressReleaseListener, ModifierListener {
+class FastDrawingMode extends MapMode implements MapViewPaintable, KeyPressReleaseListener, ModifierExListener {
     // CHECKSTYLE.OFF: LineLength
     private static final String SIMPLIFYMODE_MESSAGE =
@@ -79,5 +80,5 @@
         super(tr("FastDrawing"), "turbopen.png", tr("Fast drawing mode"),
                 Shortcut.registerShortcut("mapmode:fastdraw", tr("Mode: {0}", tr("Fast drawing mode")), KeyEvent.VK_F, Shortcut.SHIFT),
-                mapFrame, Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+                Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
         line = new DrawnPolyLine();
         cursorDraw = ImageProvider.getCursor("crosshair", null);
@@ -100,16 +101,17 @@
         settings.savePrefs();
 
+        MapFrame map = MainApplication.getMap();
         eps = settings.startingEps;
-        mv = Main.map.mapView;
+        mv = map.mapView;
         line.setMv(mv);
 
         if (getLayerManager().getEditDataSet() == null) return;
 
-        Main.map.mapView.addMouseListener(this);
-        Main.map.mapView.addMouseMotionListener(this);
-        Main.map.mapView.addTemporaryLayer(this);
-
-        Main.map.keyDetector.addKeyListener(this);
-        Main.map.keyDetector.addModifierListener(this);
+        map.mapView.addMouseListener(this);
+        map.mapView.addMouseMotionListener(this);
+        map.mapView.addTemporaryLayer(this);
+
+        map.keyDetector.addKeyListener(this);
+        map.keyDetector.addModifierExListener(this);
     }
 
@@ -118,15 +120,16 @@
         super.exitMode();
         if (line.wasSimplified() && !lineWasSaved) saveAsWay(false);
-
-        Main.map.mapView.removeMouseListener(this);
-        Main.map.mapView.removeMouseMotionListener(this);
-
-        Main.map.mapView.removeTemporaryLayer(this);
-
-        Main.map.keyDetector.removeKeyListener(this);
-        Main.map.keyDetector.removeModifierListener(this);
+        MapFrame map = MainApplication.getMap();
+
+        map.mapView.removeMouseListener(this);
+        map.mapView.removeMouseMotionListener(this);
+
+        map.mapView.removeTemporaryLayer(this);
+
+        map.keyDetector.removeKeyListener(this);
+        map.keyDetector.removeModifierExListener(this);
 
         settings.savePrefs();
-        Main.map.mapView.setCursor(cursorDraw);
+        map.mapView.setCursor(cursorDraw);
         repaint();
     }
@@ -467,5 +470,5 @@
                 }
                 newDrawing(); // stop drawing
-                Main.map.selectSelectTool(false);
+                MainApplication.getMap().selectSelectTool(false);
             }
             break;
@@ -491,5 +494,5 @@
             e.consume();
             if (!drawing) {
-                Point p = Main.map.mapView.getMousePosition();
+                Point p = MainApplication.getMap().mapView.getMousePosition();
                 if (p != null) startDrawing(p, settings.fixedSpacebar);
             }
@@ -506,6 +509,6 @@
 
     @Override
-    public void modifiersChanged(int modifiers) {
-        updateKeyModifiers(modifiers);
+    public void modifiersExChanged(int modifiers) {
+        updateKeyModifiersEx(modifiers);
         updateCursor();
     }
@@ -513,6 +516,6 @@
     @Override
     protected void updateStatusLine() {
-        Main.map.statusLine.setHelpText(statusText);
-        Main.map.statusLine.repaint();
+        MainApplication.getMap().statusLine.setHelpText(statusText);
+        MainApplication.getMap().statusLine.repaint();
     }
     // </editor-fold>
@@ -547,5 +550,5 @@
 
         for (LatLon p : pts) {
-            Node nd = Main.map.mapView.getNearestNode(line.getPoint(p), OsmPrimitive::isSelectable);
+            Node nd = MainApplication.getMap().mapView.getNearestNode(line.getPoint(p), OsmPrimitive::isSelectable);
             // there may be a node with the same coords!
 
@@ -595,5 +598,5 @@
         Command c = new SequenceCommand(tr("Draw the way by mouse"), cmds);
         if (getLayerManager().getEditLayer() == null) return;
-        Main.main.undoRedo.add(c);
+        MainApplication.undoRedo.add(c);
         lineWasSaved = true;
         newDrawing(); // stop drawing
@@ -601,5 +604,5 @@
             // Select this way and switch drawing mode off
             getLayerManager().getEditDataSet().setSelected(w);
-            Main.map.selectSelectTool(false);
+            MainApplication.getMap().selectSelectTool(false);
         }
     }
@@ -676,19 +679,20 @@
 
     private void updateCursor() {
-        if (shift) Main.map.mapView.setCursor(cursorShift); else
-            if (line.isClosed() || (nearestPointIndex == 0)) Main.map.mapView.setCursor(cursorReady); else
-                if (ctrl) Main.map.mapView.setCursor(cursorCtrl); else
-                    if (nearSomeNode && settings.snapNodes) Main.map.mapView.setCursor(cursorCtrl); else
-                        if (drawing) Main.map.mapView.setCursor(cursorDrawing); else
-                            Main.map.mapView.setCursor(cursorDraw);
+        MapView mapView = MainApplication.getMap().mapView;
+        if (shift) mapView.setCursor(cursorShift); else
+            if (line.isClosed() || (nearestPointIndex == 0)) mapView.setCursor(cursorReady); else
+                if (ctrl) mapView.setCursor(cursorCtrl); else
+                    if (nearSomeNode && settings.snapNodes) mapView.setCursor(cursorCtrl); else
+                        if (drawing) mapView.setCursor(cursorDrawing); else
+                            mapView.setCursor(cursorDraw);
     }
 
     private void repaint() {
-        Main.map.mapView.repaint();
+        MainApplication.getMap().mapView.repaint();
     }
 
     private void tryToLoadWay() {
         updateCursor();
-        Collection<Way> selectedWays = Main.getLayerManager().getEditDataSet().getSelectedWays();
+        Collection<Way> selectedWays = MainApplication.getLayerManager().getEditDataSet().getSelectedWays();
         if (selectedWays != null // if there is a selection
                 && selectedWays.size() == 1 // and one way is selected
@@ -711,5 +715,5 @@
 
     private Node getNearestNode(Point point, double maxDist) {
-        Node nd = Main.map.mapView.getNearestNode(point, OsmPrimitive::isSelectable);
+        Node nd = MainApplication.getMap().mapView.getNearestNode(point, OsmPrimitive::isSelectable);
         if (nd != null && line.getPoint(nd.getCoor()).distance(point) <= maxDist) return nd;
         else return null;
Index: applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingPlugin.java
===================================================================
--- applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingPlugin.java	(revision 33582)
+++ applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingPlugin.java	(revision 33583)
@@ -2,6 +2,6 @@
 package org.openstreetmap.josm.plugins.fastdraw;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.IconToggleButton;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.plugins.Plugin;
@@ -17,5 +17,5 @@
     public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
         if (oldFrame == null && newFrame != null) {
-            Main.map.addMapMode(new IconToggleButton(new FastDrawingMode(Main.map)));
+            MainApplication.getMap().addMapMode(new IconToggleButton(new FastDrawingMode(MainApplication.getMap())));
         }
     }
