Index: applications/editors/josm/plugins/roadsigns/build.xml
===================================================================
--- applications/editors/josm/plugins/roadsigns/build.xml	(revision 34552)
+++ applications/editors/josm/plugins/roadsigns/build.xml	(revision 34553)
@@ -4,5 +4,5 @@
     <property name="commit.message" value=""/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
-    <property name="plugin.main.version" value="13007"/>
+    <property name="plugin.main.version" value="14153"/>
 
     <!--
Index: applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignInputDialog.java
===================================================================
--- applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignInputDialog.java	(revision 34552)
+++ applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignInputDialog.java	(revision 34553)
@@ -62,8 +62,8 @@
 import javax.swing.table.AbstractTableModel;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.ExtendedDialog;
@@ -78,4 +78,5 @@
 import org.openstreetmap.josm.plugins.roadsigns.Sign.SignParameter;
 import org.openstreetmap.josm.plugins.roadsigns.Sign.Tag;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
@@ -112,7 +113,7 @@
 
     RoadSignInputDialog() {
-        super(Main.parent, tr("Road Sign Plugin"), new String[] {tr("OK"), tr("Cancel")}, false /* modal */);
+        super(MainApplication.getMainFrame(), tr("Road Sign Plugin"), new String[] {tr("OK"), tr("Cancel")}, false /* modal */);
         setRememberWindowGeometry(getClass().getName() + ".geometry",
-            WindowGeometry.centerInWindow(Main.parent, new Dimension(750, 550)));
+            WindowGeometry.centerInWindow(MainApplication.getMainFrame(), new Dimension(750, 550)));
 
         this.signs = RoadSignsPlugin.signs;
@@ -138,9 +139,9 @@
             Collection<OsmPrimitive> selPrim = MainApplication.getLayerManager().getEditDataSet().getSelected();
             if (!selPrim.isEmpty()) {
-                Main.pref.putBoolean("plugin.roadsigns.addTrafficSignTag", addTrafficSignTag.isSelected());
+                Config.getPref().putBoolean("plugin.roadsigns.addTrafficSignTag", addTrafficSignTag.isSelected());
 
                 Command cmd = createCommand(selPrim);
                 if (cmd != null) {
-                    MainApplication.undoRedo.add(cmd);
+                    UndoRedoHandler.getInstance().add(cmd);
                 }
             }
@@ -592,5 +593,5 @@
 
         addTrafficSignTag = new JCheckBox(tr("{0} tag", "traffic_sign"));
-        addTrafficSignTag.setSelected(Main.pref.getBoolean("plugin.roadsigns.addTrafficSignTag"));
+        addTrafficSignTag.setSelected(Config.getPref().getBoolean("plugin.roadsigns.addTrafficSignTag"));
         addTrafficSignTag.addActionListener(new ActionListener() {
             @Override
@@ -816,5 +817,5 @@
 
             if (sign.wiki != null || sign.loc_wiki != null) {
-                String wikiPrefix = Main.pref.get("plugin.roadsigns.wikiprefix", "https://wiki.openstreetmap.org/wiki/");
+                String wikiPrefix = Config.getPref().get("plugin.roadsigns.wikiprefix", "https://wiki.openstreetmap.org/wiki/");
                 txt.append("<p>");
                 if (sign.loc_wiki != null) {
@@ -907,5 +908,5 @@
 
             selectionBox = new JComboBox<>(presetsData.toArray(new PresetMetaData[0]));
-            String code = Main.pref.get("plugin.roadsigns.preset.selection", null);
+            String code = Config.getPref().get("plugin.roadsigns.preset.selection", null);
             if (code != null) {
                 for (PresetMetaData data : presetsData) {
@@ -927,5 +928,5 @@
                 grp.add(rbUseful);
 
-                String filterPref = Main.pref.get("plugin.roadsigns.preset.filter");
+                String filterPref = Config.getPref().get("plugin.roadsigns.preset.filter");
                 if (filterPref.equals("useful")) {
                     rbUseful.setSelected(true);
@@ -967,5 +968,5 @@
             }
             if (filter != null) {
-                Main.pref.put("plugin.roadsigns.preset.filter", filter);
+                Config.getPref().put("plugin.roadsigns.preset.filter", filter);
             }
             RoadSignsPlugin.setSelectedPreset(presetsData.get(selectionBox.getSelectedIndex()));
Index: applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsPlugin.java
===================================================================
--- applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsPlugin.java	(revision 34552)
+++ applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsPlugin.java	(revision 34553)
@@ -24,9 +24,9 @@
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.data.StructUtils;
 import org.openstreetmap.josm.data.StructUtils.StructEntry;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.dialogs.properties.PropertiesDialog;
 import org.openstreetmap.josm.io.CachedFile;
@@ -34,4 +34,5 @@
 import org.openstreetmap.josm.plugins.PluginInformation;
 import org.openstreetmap.josm.plugins.roadsigns.RoadSignInputDialog.SettingsPanel;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.Utils;
@@ -90,7 +91,7 @@
         @Override
         public void actionPerformed(ActionEvent e) {
-            String code = Main.pref.get("plugin.roadsigns.preset.selection", null);
+            String code = Config.getPref().get("plugin.roadsigns.preset.selection", null);
             if (code == null) {
-                ExtendedDialog ed = new ExtendedDialog(Main.parent, tr("Settings"), new String[] {tr("Ok"), tr("Cancel")});
+                ExtendedDialog ed = new ExtendedDialog(MainApplication.getMainFrame(), tr("Settings"), new String[] {tr("Ok"), tr("Cancel")});
                 ed.setButtonIcons(new String[] {"ok", "cancel"});
                 SettingsPanel settings = new SettingsPanel(true, null);
@@ -138,5 +139,5 @@
 
     public static void setSelectedPreset(PresetMetaData preset) throws IOException {
-        Main.pref.put("plugin.roadsigns.preset.selection", preset.code);
+        Config.getPref().put("plugin.roadsigns.preset.selection", preset.code);
         loadSignPreset();
     }
@@ -145,10 +146,10 @@
 
         List<PresetMetaData> presetsData = StructUtils.getListOfStructs(
-                Main.pref, "plugin.roadsigns.presets", DEFAULT_PRESETS, PresetMetaData.class);
-
-        String customFile = Main.pref.get("plugin.roadsigns.sources", null);
+                Config.getPref(), "plugin.roadsigns.presets", DEFAULT_PRESETS, PresetMetaData.class);
+
+        String customFile = Config.getPref().get("plugin.roadsigns.sources", null);
         if (customFile == null) {
             // for legacy reasons, try both string and collection preference type
-            List<String> customFiles = Main.pref.getList("plugin.roadsigns.sources", null);
+            List<String> customFiles = Config.getPref().getList("plugin.roadsigns.sources", null);
             if (customFiles != null && !customFiles.isEmpty()) {
                 customFile = customFiles.iterator().next();
@@ -159,16 +160,16 @@
             // first check, if custom file preference has changed. If yes,
             // change the current preset selection to custom directly
-            String lastCustomFile = Main.pref.get("plugin.roadsigns.sources.last", null);
+            String lastCustomFile = Config.getPref().get("plugin.roadsigns.sources.last", null);
             if (!Objects.equals(customFile, lastCustomFile)) {
-                Main.pref.put("plugin.roadsigns.sources.last", customFile);
-                Main.pref.put("plugin.roadsigns.preset.selection", "custom");
-            }
-
-            String customIconDirsStr = Main.pref.get("plugin.roadsigns.icon.sources", null);
+                Config.getPref().put("plugin.roadsigns.sources.last", customFile);
+                Config.getPref().put("plugin.roadsigns.preset.selection", "custom");
+            }
+
+            String customIconDirsStr = Config.getPref().get("plugin.roadsigns.icon.sources", null);
             List<String> customIconDirs = null;
             if (customIconDirsStr != null) {
                 customIconDirs = new ArrayList<>(Arrays.asList(customIconDirsStr.split(",")));
             } else {
-                customIconDirs = Main.pref.getList("plugin.roadsigns.icon.sources", null);
+                customIconDirs = Config.getPref().getList("plugin.roadsigns.icon.sources", null);
             }
             if (customIconDirs != null) {
@@ -191,5 +192,5 @@
                 }
             }
-            if (Main.pref.getBoolean("plugin.roadsigns.use_default_icon_source", true)) {
+            if (Config.getPref().getBoolean("plugin.roadsigns.use_default_icon_source", true)) {
                 customIconDirs.add("resource://images/");
             }
@@ -197,5 +198,5 @@
             presetsData.add(custom);
         } else {
-            Main.pref.put("plugin.roadsigns.sources.last", null);
+            Config.getPref().put("plugin.roadsigns.sources.last", null);
         }
 
@@ -205,5 +206,5 @@
     protected static void loadSignPreset() throws IOException {
         List<PresetMetaData> presetsData = getAvailablePresetsMetaData();
-        String code = Main.pref.get("plugin.roadsigns.preset.selection", null);
+        String code = Config.getPref().get("plugin.roadsigns.preset.selection", null);
 
         for (PresetMetaData data : presetsData) {
@@ -231,5 +232,5 @@
             ex.printStackTrace();
             JOptionPane.showMessageDialog(
-                    Main.parent,
+                    MainApplication.getMainFrame(),
                     tr("Could not read tagging preset source: ''{0}''", source),
                     tr("Error"),
@@ -240,5 +241,5 @@
             ex.printStackTrace();
             JOptionPane.showMessageDialog(
-                    Main.parent,
+                    MainApplication.getMainFrame(),
                     tr("Error parsing tagging preset from ''{0}'':\n", source)+ex.getMessage(),
                     tr("Error"),
Index: applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsReader.java
===================================================================
--- applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsReader.java	(revision 34552)
+++ applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsReader.java	(revision 34553)
@@ -15,9 +15,9 @@
 import javax.xml.parsers.SAXParserFactory;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.plugins.roadsigns.Sign.SignParameter;
 import org.openstreetmap.josm.plugins.roadsigns.Sign.Tag;
 import org.openstreetmap.josm.plugins.roadsigns.javacc.ParseException;
 import org.openstreetmap.josm.plugins.roadsigns.javacc.TokenMgrError;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.XmlParsingException;
@@ -316,5 +316,5 @@
             factory.newSAXParser().parse(inputSource, parser);
             parser.wireSupplements();
-            String filterPref = Main.pref.get("plugin.roadsigns.preset.filter");
+            String filterPref = Config.getPref().get("plugin.roadsigns.preset.filter");
             if (filterPref.equals("useful")) {
                 List<Sign> filtered = new ArrayList<>();
