Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java	(revision 9586)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java	(revision 9588)
@@ -36,5 +36,5 @@
      * and associates an interaction with (matching) presets via {@code presetHandler}.
      * @param types collection of tagging presets types
-     * @param tags colelction of tags
+     * @param tags collection of tags
      * @param presetHandler tagging preset handler
      */
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 9586)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 9588)
@@ -165,5 +165,5 @@
         // init the various models
         //
-        memberTableModel = new MemberTableModel(getLayer(), presetHandler);
+        memberTableModel = new MemberTableModel(relation, getLayer(), presetHandler);
         memberTableModel.register();
         selectionTableModel = new SelectionTableModel(getLayer());
@@ -171,5 +171,5 @@
         referrerModel = new ReferringRelationsBrowserModel(relation);
 
-        tagEditorPanel = new TagEditorPanel(presetHandler);
+        tagEditorPanel = new TagEditorPanel(relation, presetHandler);
 
         // populate the models
@@ -805,5 +805,5 @@
         try {
             final Collection<TaggingPreset> presets = TaggingPresets.getMatchingPresets(
-                    EnumSet.of(TaggingPresetType.RELATION), orig.getKeys(), false);
+                    EnumSet.of(TaggingPresetType.forPrimitive(orig)), orig.getKeys(), false);
             Relation relation = new Relation(orig);
             boolean modified = false;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 9586)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 9588)
@@ -54,4 +54,5 @@
     private final transient List<RelationMember> members;
     private transient List<WayConnectionType> connectionType;
+    private final Relation relation;
 
     private DefaultListSelectionModel listSelectionModel;
@@ -65,10 +66,12 @@
     /**
      * constructor
+     * @param relation relation
      * @param layer data layer
      * @param presetHandler tagging preset handler
      */
-    public MemberTableModel(OsmDataLayer layer, TaggingPresetHandler presetHandler) {
-        members = new ArrayList<>();
-        listeners = new CopyOnWriteArrayList<>();
+    public MemberTableModel(Relation relation, OsmDataLayer layer, TaggingPresetHandler presetHandler) {
+        this.relation = relation;
+        this.members = new ArrayList<>();
+        this.listeners = new CopyOnWriteArrayList<>();
         this.layer = layer;
         this.presetHandler = presetHandler;
@@ -114,4 +117,5 @@
         Collection<RelationMember> sel = getSelectedMembers();
         GuiHelper.runInEDT(new Runnable() {
+            @Override
             public void run() {
                 fireTableDataChanged();
@@ -437,5 +441,5 @@
 
     RelationMember getRelationMemberForPrimitive(final OsmPrimitive primitive) {
-        final Collection<TaggingPreset> presets = TaggingPresets.getMatchingPresets(EnumSet.of(TaggingPresetType.RELATION),
+        final Collection<TaggingPreset> presets = TaggingPresets.getMatchingPresets(EnumSet.of(TaggingPresetType.forPrimitive(relation)),
                 presetHandler.getSelection().iterator().next().getKeys(), false);
         Collection<String> potentialRoles = new TreeSet<>();
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java	(revision 9586)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java	(revision 9588)
@@ -9,4 +9,5 @@
 import java.util.Collection;
 import java.util.Comparator;
+import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -25,9 +26,10 @@
 import org.openstreetmap.josm.data.osm.TagCollection;
 import org.openstreetmap.josm.data.osm.Tagged;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
- * TagEditorModel is a table model.
- *
+ * TagEditorModel is a table model to use with {@link TagEditorPanel}.
+ * @since 1762
  */
 public class TagEditorModel extends AbstractTableModel {
@@ -43,4 +45,6 @@
     private final DefaultListSelectionModel rowSelectionModel;
     private final DefaultListSelectionModel colSelectionModel;
+
+    private OsmPrimitive primitive;
 
     /**
@@ -58,6 +62,5 @@
      */
     public TagEditorModel() {
-        this.rowSelectionModel = new DefaultListSelectionModel();
-        this.colSelectionModel  = new DefaultListSelectionModel();
+        this(new DefaultListSelectionModel(), new DefaultListSelectionModel());
     }
 
@@ -74,5 +77,5 @@
         CheckParameterUtil.ensureParameterNotNull(colSelectionModel, "colSelectionModel");
         this.rowSelectionModel = rowSelectionModel;
-        this.colSelectionModel  = colSelectionModel;
+        this.colSelectionModel = colSelectionModel;
     }
 
@@ -618,4 +621,27 @@
     }
 
+    /**
+     * Returns the list of tagging presets types to consider when updating the presets list panel.
+     * By default returns type of associated primitive or empty set.
+     * @return the list of tagging presets types to consider when updating the presets list panel
+     * @see #forPrimitive
+     * @see TaggingPresetType#forPrimitive
+     * @since 9588
+     */
+    public Collection<TaggingPresetType> getTaggingPresetTypes() {
+        return primitive == null ? EnumSet.noneOf(TaggingPresetType.class) : EnumSet.of(TaggingPresetType.forPrimitive(primitive));
+    }
+
+    /**
+     * Makes this TagEditorModel specific to a given OSM primitive.
+     * @param primitive primitive to consider
+     * @return {@code this}
+     * @since 9588
+     */
+    public TagEditorModel forPrimitive(OsmPrimitive primitive) {
+        this.primitive = primitive;
+        return this;
+    }
+
     class SelectionStateMemento {
         private final int rowMin;
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java	(revision 9586)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java	(revision 9588)
@@ -9,5 +9,4 @@
 import java.awt.event.FocusAdapter;
 import java.awt.event.FocusEvent;
-import java.util.EnumSet;
 
 import javax.swing.AbstractAction;
@@ -19,4 +18,5 @@
 import javax.swing.event.TableModelListener;
 
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.dialogs.properties.PresetListPanel;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -24,5 +24,4 @@
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetHandler;
-import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
@@ -32,5 +31,5 @@
  * and tag values. Two action buttons are placed on the left, one for adding
  * a new tag and one for deleting the currently selected tags.
- *
+ * @since 2040
  */
 public class TagEditorPanel extends JPanel {
@@ -140,5 +139,6 @@
 
         addFocusListener(new FocusAdapter() {
-            @Override public void focusGained(FocusEvent e) {
+            @Override
+            public void focusGained(FocusEvent e) {
                 tagTable.requestFocusInCell(0, 0);
             }
@@ -149,8 +149,9 @@
      * Creates a new tag editor panel. The editor model is created
      * internally and can be retrieved with {@link #getModel()}.
+     * @param primitive primitive to consider
      * @param presetHandler tagging preset handler
      */
-    public TagEditorPanel(TaggingPresetHandler presetHandler) {
-        this(null, presetHandler, 0);
+    public TagEditorPanel(OsmPrimitive primitive, TaggingPresetHandler presetHandler) {
+        this(new TagEditorModel().forPrimitive(primitive), presetHandler, 0);
     }
 
@@ -198,5 +199,5 @@
         editor.setAutoCompletionManager(autocomplete);
         editor.setAutoCompletionList(acList);
-        editor = ((TagCellEditor) tagTable.getColumnModel().getColumn(1).getCellEditor());
+        editor = (TagCellEditor) tagTable.getColumnModel().getColumn(1).getCellEditor();
         editor.setAutoCompletionManager(autocomplete);
         editor.setAutoCompletionList(acList);
@@ -211,5 +212,5 @@
     private void updatePresets() {
         presetListPanel.updatePresets(
-                EnumSet.of(TaggingPresetType.RELATION),
+                model.getTaggingPresetTypes(),
                 model.getTags(), presetHandler);
         validate();
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetType.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetType.java	(revision 9586)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetType.java	(revision 9588)
@@ -66,5 +66,5 @@
             return CLOSEDWAY;
         if (type == OsmPrimitiveType.MULTIPOLYGON)
-            return TaggingPresetType.MULTIPOLYGON;
+            return MULTIPOLYGON;
         if (type == OsmPrimitiveType.RELATION)
             return RELATION;
