Index: /applications/editors/josm/plugins/smed/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- /applications/editors/josm/plugins/smed/.settings/org.eclipse.jdt.core.prefs	(revision 34463)
+++ /applications/editors/josm/plugins/smed/.settings/org.eclipse.jdt.core.prefs	(revision 34464)
@@ -3,10 +3,14 @@
 org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
 org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
 org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
 org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
@@ -40,5 +44,5 @@
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
@@ -46,4 +50,5 @@
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
 org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
 org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=warning
@@ -52,4 +57,5 @@
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
@@ -68,4 +74,5 @@
 org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
@@ -74,4 +81,7 @@
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
@@ -81,4 +91,5 @@
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
Index: /applications/editors/josm/plugins/smed/build.xml
===================================================================
--- /applications/editors/josm/plugins/smed/build.xml	(revision 34463)
+++ /applications/editors/josm/plugins/smed/build.xml	(revision 34464)
@@ -4,5 +4,5 @@
     <property name="commit.message" value="New release"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
-    <property name="plugin.main.version" value="12643"/>
+    <property name="plugin.main.version" value="14153"/>
 
     <!-- Configure these properties (replace "..." accordingly).
Index: /applications/editors/josm/plugins/smed/src/seamarks/SeaMark.java
===================================================================
--- /applications/editors/josm/plugins/smed/src/seamarks/SeaMark.java	(revision 34463)
+++ /applications/editors/josm/plugins/smed/src/seamarks/SeaMark.java	(revision 34464)
@@ -17,7 +17,8 @@
 import javax.swing.JPanel;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
+import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 import messages.Messages;
@@ -1463,5 +1464,5 @@
     public void parseMark(OsmPrimitive node) {
         PanelMain.messageBar.setText("");
-        String str = Main.pref.get("smedplugin.IALA");
+        String str = Config.getPref().get("smedplugin.IALA");
         if (str.equals("C")) {
             setRegion(Reg.C);
@@ -2020,5 +2021,5 @@
         }
 
-        dlg.panelMain.syncPanel();
+        SmedAction.panelMain.syncPanel();
     }
 
@@ -2703,27 +2704,28 @@
         if (getObject() != Obj.UNKOBJ) {
 
-            Main.pref.put("smedplugin.IALA", getRegion() == Reg.C ? "C" : (getRegion() == Reg.B ? "B" : "A"));
-
+            Config.getPref().put("smedplugin.IALA", getRegion() == Reg.C ? "C" : (getRegion() == Reg.B ? "B" : "A"));
+
+            UndoRedoHandler undoRedo = UndoRedoHandler.getInstance();
             for (String str : node.getKeys().keySet()) {
                 if (str.trim().matches("^seamark:\\S+")) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, str, null));
+                    undoRedo.add(new ChangePropertyCommand(node, str, null));
                 }
             }
 
             if (!getName().isEmpty()) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:name", getName()));
+                undoRedo.add(new ChangePropertyCommand(node, "seamark:name", getName()));
             }
 
             String objStr = ObjSTR.get(object);
             if (objStr != null) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:type", objStr));
+                undoRedo.add(new ChangePropertyCommand(node, "seamark:type", objStr));
 
                 if (getShape() != Shp.FLOAT) {
                     String str = CatSTR.get(getCategory());
                     if (str != null) {
-                        Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":category", str));
+                        undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":category", str));
                     }
                     if ((getShape() != Shp.BUOY) && (getShape() != Shp.BEACON)) {
-                        Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":shape", ShpSTR.get(getShape())));
+                        undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":shape", ShpSTR.get(getShape())));
                     }
                 }
@@ -2734,14 +2736,14 @@
                         str += (";" + ColSTR.get(getObjColour(i)));
                     }
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":colour", str));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":colour", str));
                 }
 
                 if (getObjPattern() != Pat.NOPAT) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":colour_pattern",
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":colour_pattern",
                             PatSTR.get(getObjPattern())));
                 }
 
                 if (getFunc() != Fnc.UNKFNC) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":function", FncSTR.get(getFunc())));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":function", FncSTR.get(getFunc())));
                 }
 
@@ -2750,11 +2752,11 @@
                     switch (region) {
                     case A:
-                        Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":system", "iala-a"));
+                        undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":system", "iala-a"));
                         break;
                     case B:
-                        Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":system", "iala-b"));
+                        undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":system", "iala-b"));
                         break;
                     case C:
-                        Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":system", "other"));
+                        undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":system", "other"));
                         break;
                     default:
@@ -2763,17 +2765,17 @@
                 }
                 if (!getObjectHeight().isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":height", getObjectHeight()));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":height", getObjectHeight()));
                 }
                 if (!getElevation().isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":elevation", getElevation()));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":elevation", getElevation()));
                 }
                 if (!getChannel().isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":channel", getChannel()));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":channel", getChannel()));
                 }
             }
             if (getTopmark() != Top.NOTOP) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:topmark:shape", TopSTR.get(getTopmark())));
+                undoRedo.add(new ChangePropertyCommand(node, "seamark:topmark:shape", TopSTR.get(getTopmark())));
                 if (getTopPattern() != Pat.NOPAT) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:topmark:colour_pattern", PatSTR.get(getTopPattern())));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:topmark:colour_pattern", PatSTR.get(getTopPattern())));
                 }
                 if (getTopColour(0) != Col.UNKCOL) {
@@ -2782,5 +2784,5 @@
                         str += (";" + ColSTR.get(getTopColour(i)));
                     }
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:topmark:colour", str));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:topmark:colour", str));
                 }
             }
@@ -2790,82 +2792,82 @@
                 if (sectors.get(i)[0] != Col.UNKCOL)
                     if ((sectors.get(i)[15] != Col.UNKCOL) && ((String) sectors.get(i)[1]).contains("Al")) {
-                        Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":colour",
+                        undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":colour",
                                 (ColSTR.get(sectors.get(i)[0])) + ";" + ColSTR.get(sectors.get(i)[15])));
                     } else {
-                        Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":colour",
+                        undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":colour",
                                 ColSTR.get(sectors.get(i)[0])));
                     }
                 if (!((String) sectors.get(i)[1]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":character", (String) sectors.get(i)[1]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":character", (String) sectors.get(i)[1]));
                 } else if (!((String) sectors.get(0)[1]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":character", (String) sectors.get(0)[1]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":character", (String) sectors.get(0)[1]));
                 }
                 if (!((String) sectors.get(i)[2]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":group", (String) sectors.get(i)[2]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":group", (String) sectors.get(i)[2]));
                 } else if (!((String) sectors.get(0)[2]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":group", (String) sectors.get(0)[2]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":group", (String) sectors.get(0)[2]));
                 }
                 if (!((String) sectors.get(i)[3]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":sequence", (String) sectors.get(i)[3]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":sequence", (String) sectors.get(i)[3]));
                 } else if (!((String) sectors.get(0)[3]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":sequence", (String) sectors.get(0)[3]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":sequence", (String) sectors.get(0)[3]));
                 }
                 if (!((String) sectors.get(i)[4]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":period", (String) sectors.get(i)[4]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":period", (String) sectors.get(i)[4]));
                 } else if (!((String) sectors.get(0)[4]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":period", (String) sectors.get(0)[4]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":period", (String) sectors.get(0)[4]));
                 }
                 if (sectors.get(i)[5] != Lit.UNKLIT) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":category",
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":category",
                             LitSTR.get(sectors.get(i)[5])));
                 } else if (sectors.get(0)[5] != Lit.UNKLIT) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":category",
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":category",
                             LitSTR.get(sectors.get(0)[5])));
                 }
                 if (!((String) sectors.get(i)[6]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":sector_start",
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":sector_start",
                             (String) sectors.get(i)[6]));
                 }
                 if (!((String) sectors.get(i)[7]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":sector_end",
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":sector_end",
                             (String) sectors.get(i)[7]));
                 }
                 if (!((String) sectors.get(i)[8]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":radius", (String) sectors.get(i)[8]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":radius", (String) sectors.get(i)[8]));
                 } else if (!((String) sectors.get(0)[8]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":radius", (String) sectors.get(0)[8]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":radius", (String) sectors.get(0)[8]));
                 }
                 if (!((String) sectors.get(i)[9]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":height", (String) sectors.get(i)[9]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":height", (String) sectors.get(i)[9]));
                 } else if (!((String) sectors.get(0)[9]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":height", (String) sectors.get(0)[9]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":height", (String) sectors.get(0)[9]));
                 }
                 if (!((String) sectors.get(i)[10]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":range", (String) sectors.get(i)[10]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":range", (String) sectors.get(i)[10]));
                 } else if (!((String) sectors.get(0)[10]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":range", (String) sectors.get(0)[10]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":range", (String) sectors.get(0)[10]));
                 }
                 if (sectors.get(i)[11] != Vis.UNKVIS) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":visibility",
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":visibility",
                             VisSTR.get(sectors.get(i)[11])));
                 } else if (sectors.get(0)[11] != Vis.UNKVIS) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":visibility",
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":visibility",
                             VisSTR.get(sectors.get(0)[11])));
                 }
                 if (sectors.get(i)[12] != Exh.UNKEXH) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":exhibition",
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":exhibition",
                             ExhSTR.get(sectors.get(i)[12])));
                 } else if (sectors.get(0)[12] != Exh.UNKEXH) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":exhibition",
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":exhibition",
                             ExhSTR.get(sectors.get(0)[12])));
                 }
                 if (!((String) sectors.get(i)[13]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":orientation",
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":orientation",
                             (String) sectors.get(i)[13]));
                 }
                 if (!((String) sectors.get(i)[14]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":multiple", (String) sectors.get(i)[14]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":multiple", (String) sectors.get(i)[14]));
                 } else if (!((String) sectors.get(0)[14]).isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":multiple", (String) sectors.get(0)[14]));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":multiple", (String) sectors.get(0)[14]));
                 }
             }
@@ -2873,46 +2875,46 @@
             if (getFogSound() != Fog.NOFOG) {
                 if (getFogSound() == Fog.FOGSIG) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:fog_signal", "yes"));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:fog_signal", "yes"));
                 } else {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:fog_signal:category", FogSTR.get(getFogSound())));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:fog_signal:category", FogSTR.get(getFogSound())));
                 }
                 if (!getFogGroup().isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:fog_signal:group", getFogGroup()));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:fog_signal:group", getFogGroup()));
                 }
                 if (!getFogPeriod().isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:fog_signal:period", getFogPeriod()));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:fog_signal:period", getFogPeriod()));
                 }
                 if (!getFogSequence().isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:fog_signal:sequence", getFogSequence()));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:fog_signal:sequence", getFogSequence()));
                 }
                 if (!getFogRange().isEmpty()) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:fog_signal:range", getFogRange()));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:fog_signal:range", getFogRange()));
                 }
             }
 
             if (RoType != Cat.NOROS) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:radio_station:category", CatSTR.get(getRadio())));
+                undoRedo.add(new ChangePropertyCommand(node, "seamark:radio_station:category", CatSTR.get(getRadio())));
             }
 
             if (RaType != Rtb.NORTB) {
                 if (getRadar() == Rtb.REFLECTOR) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_reflector", "yes"));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_reflector", "yes"));
                 } else {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:category", RtbSTR.get(getRadar())));
+                    undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:category", RtbSTR.get(getRadar())));
                     if (!getRaconGroup().isEmpty()) {
-                        Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:group", getRaconGroup()));
+                        undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:group", getRaconGroup()));
                     }
                     if (!getRaconPeriod().isEmpty()) {
-                        Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:period", getRaconPeriod()));
+                        undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:period", getRaconPeriod()));
                     }
                     if (!getRaconSequence().isEmpty()) {
-                        Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:sequence", getRaconSequence()));
+                        undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:sequence", getRaconSequence()));
                     }
                     if (!getRaconRange().isEmpty()) {
-                        Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:range", getRaconRange()));
+                        undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:range", getRaconRange()));
                     }
                     if ((!getRaconSector1().isEmpty()) && (!getRaconSector2().isEmpty())) {
-                        Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:sector_start", getRaconSector1()));
-                        Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:sector_end", getRaconSector2()));
+                        undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:sector_start", getRaconSector1()));
+                        undoRedo.add(new ChangePropertyCommand(node, "seamark:radar_transponder:sector_end", getRaconSector2()));
                     }
                 }
@@ -2920,29 +2922,29 @@
 
             if (!getInfo().isEmpty()) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:information", getInfo()));
+                undoRedo.add(new ChangePropertyCommand(node, "seamark:information", getInfo()));
             }
             if (!getSource().isEmpty()) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:source", getSource()));
+                undoRedo.add(new ChangePropertyCommand(node, "seamark:source", getSource()));
             }
             if (getStatus() != Sts.UNKSTS) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:status", StsSTR.get(getStatus())));
+                undoRedo.add(new ChangePropertyCommand(node, "seamark:status", StsSTR.get(getStatus())));
             }
             if (getConstr() != Cns.UNKCNS) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:construction", CnsSTR.get(getConstr())));
+                undoRedo.add(new ChangePropertyCommand(node, "seamark:construction", CnsSTR.get(getConstr())));
             }
             if (getConsp() != Con.UNKCON) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:conspicuity", ConSTR.get(getConsp())));
+                undoRedo.add(new ChangePropertyCommand(node, "seamark:conspicuity", ConSTR.get(getConsp())));
             }
             if (getRefl() != Con.UNKCON) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:reflectivity", ConSTR.get(getRefl())));
+                undoRedo.add(new ChangePropertyCommand(node, "seamark:reflectivity", ConSTR.get(getRefl())));
             }
             if (!getRef().isEmpty()) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:reference", getRef()));
+                undoRedo.add(new ChangePropertyCommand(node, "seamark:reference", getRef()));
             }
             if (!getLightRef().isEmpty()) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light:reference", getLightRef()));
+                undoRedo.add(new ChangePropertyCommand(node, "seamark:light:reference", getLightRef()));
             }
             if (!getFixme().isEmpty()) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:fixme", getFixme()));
+                undoRedo.add(new ChangePropertyCommand(node, "seamark:fixme", getFixme()));
             }
         }
Index: /applications/editors/josm/plugins/smed/src/smed/SmedAction.java
===================================================================
--- /applications/editors/josm/plugins/smed/src/smed/SmedAction.java	(revision 34463)
+++ /applications/editors/josm/plugins/smed/src/smed/SmedAction.java	(revision 34464)
@@ -6,4 +6,6 @@
 import java.awt.Dimension;
 import java.awt.event.ActionEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
 import java.util.Collection;
 
@@ -13,12 +15,12 @@
 
 import org.openstreetmap.josm.actions.JosmAction;
-import org.openstreetmap.josm.data.SelectionChangedListener;
-import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 
 import messages.Messages;
 import panels.PanelMain;
 
-public class SmedAction extends JosmAction implements SelectionChangedListener {
+public class SmedAction extends JosmAction implements DataSelectionListener {
 
     private static final long serialVersionUID = 1L;
@@ -53,7 +55,7 @@
         editFrame = new JFrame(editor);
         editFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-        editFrame.addWindowListener(new java.awt.event.WindowAdapter() {
+        editFrame.addWindowListener(new WindowAdapter() {
             @Override
-            public void windowClosing(java.awt.event.WindowEvent e) {
+            public void windowClosing(WindowEvent e) {
                 closeDialog();
             }
@@ -70,7 +72,5 @@
         panelMain.syncPanel();
         editFrame.add(panelMain);
-        DataSet.addSelectionListener(this);
-
-        // System.out.println("hello");
+        SelectionEventManager.getInstance().addSelectionListener(this);
     }
 
@@ -84,7 +84,7 @@
 
     @Override
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+    public void selectionChanged(SelectionChangeEvent event) {
         OsmPrimitive nextNode = null;
-        selection = newSelection;
+        selection = event.getSelection();
 
         for (OsmPrimitive osm : selection) {
