Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 7412)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 7413)
@@ -13,4 +13,5 @@
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.EnumSet;
 import java.util.HashSet;
@@ -33,10 +34,9 @@
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
-import org.openstreetmap.josm.data.osm.Node;
+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.data.osm.Way;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MapView;
@@ -45,4 +45,5 @@
 import org.openstreetmap.josm.gui.preferences.ToolbarPreferences;
 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Link;
+import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.PresetLink;
 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Role;
 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Roles;
@@ -207,9 +208,9 @@
             return null;
         PresetPanel p = new PresetPanel();
-        LinkedList<TaggingPresetItem> l = new LinkedList<>();
-        LinkedList<TaggingPresetItem> presetLink = new LinkedList<>();
-        if(types != null){
+        List<Link> l = new LinkedList<>();
+        List<PresetLink> presetLink = new LinkedList<>();
+        if (types != null){
             JPanel pp = new JPanel();
-            for(TaggingPresetType t : types){
+            for (TaggingPresetType t : types) {
                 JLabel la = new JLabel(ImageProvider.get(t.getIconName()));
                 la.setToolTipText(tr("Elements of type {0} are supported.", tr(t.getName())));
@@ -224,11 +225,11 @@
         boolean presetInitiallyMatches = !selected.isEmpty() && Utils.forAll(selected, this);
         JPanel items = new JPanel(new GridBagLayout());
-        for (TaggingPresetItem i : data){
-            if(i instanceof Link) {
-                l.add(i);
-            } else if (i instanceof TaggingPresetItems.PresetLink) {
-                presetLink.add(i);
+        for (TaggingPresetItem i : data) {
+            if (i instanceof Link) {
+                l.add((Link) i);
+            } else if (i instanceof PresetLink) {
+                presetLink.add((PresetLink) i);
             } else {
-                if(i.addToPanel(items, selected, presetInitiallyMatches)) {
+                if (i.addToPanel(items, selected, presetInitiallyMatches)) {
                     p.hasElements = true;
                 }
@@ -243,5 +244,5 @@
         if (!presetLink.isEmpty()) {
             p.add(new JLabel(tr("Edit also …")), GBC.eol().insets(0, 8, 0, 0));
-            for(TaggingPresetItem link : presetLink) {
+            for (PresetLink link : presetLink) {
                 link.addToPanel(p, selected, presetInitiallyMatches);
             }
@@ -249,5 +250,5 @@
 
         // add Link
-        for(TaggingPresetItem link : l) {
+        for (Link link : l) {
             link.addToPanel(p, selected, presetInitiallyMatches);
         }
@@ -261,6 +262,6 @@
 
     public boolean isShowable() {
-        for(TaggingPresetItem i : data) {
-            if(!(i instanceof TaggingPresetItems.Optional || i instanceof TaggingPresetItems.Space || i instanceof TaggingPresetItems.Key))
+        for (TaggingPresetItem i : data) {
+            if (!(i instanceof TaggingPresetItems.Optional || i instanceof TaggingPresetItems.Space || i instanceof TaggingPresetItems.Key))
                 return true;
         }
@@ -282,9 +283,20 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (Main.main == null) return;
-        if (Main.main.getCurrentDataSet() == null) return;
-
-        Collection<OsmPrimitive> sel = createSelection(Main.main.getCurrentDataSet().getSelected());
+        if (Main.main == null) {
+            return;
+        }
+        DataSet ds = Main.main.getCurrentDataSet();
+        Collection<OsmPrimitive> participants = Collections.emptyList();
+        if (Main.main != null && ds != null) {
+            participants = ds.getSelected();
+        }
+
+        // Display dialog even if no data layer (used by preset-tagging-tester plugin)
+        Collection<OsmPrimitive> sel = createSelection(participants);
         int answer = showDialog(sel, supportsRelation());
+
+        if (ds == null) {
+            return;
+        }
 
         if (!sel.isEmpty() && answer == DIALOG_ANSWER_APPLY) {
@@ -299,5 +311,5 @@
                 r.put(t.getKey(), t.getValue());
             }
-            for (OsmPrimitive osm : Main.main.getCurrentDataSet().getSelected()) {
+            for (OsmPrimitive osm : ds.getSelected()) {
                 String role = suggestRoleForOsmPrimitive(osm);
                 RelationMember rm = new RelationMember(role == null ? "" : role, osm);
@@ -312,6 +324,5 @@
             });
         }
-        Main.main.getCurrentDataSet().setSelected(Main.main.getCurrentDataSet().getSelected()); // force update
-
+        ds.setSelected(ds.getSelected()); // force update
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java	(revision 7412)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java	(revision 7413)
@@ -16,5 +16,4 @@
 import java.awt.event.MouseEvent;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -343,5 +342,4 @@
         if (!Objects.equals(oldPreset, newPreset)) {
             int[] indices = lsResult.getSelectedIndices();
-            System.out.println(newPreset + " / "+Arrays.toString(indices));
             for (ListSelectionListener listener : listSelectionListeners) {
                 listener.valueChanged(new ListSelectionEvent(lsResult, lsResult.getSelectedIndex(),
