Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 4535)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 4536)
@@ -30,4 +30,5 @@
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
+import javax.swing.event.PopupMenuListener;
 
 import org.openstreetmap.josm.Main;
@@ -808,4 +809,16 @@
     }
 
+    public void addPopupMenuListener(PopupMenuListener l) {
+        popupMenu.addPopupMenuListener(l);
+    }
+
+    public void removePopupMenuListener(PopupMenuListener l) {
+        popupMenu.addPopupMenuListener(l);
+    }
+    
+    public Collection<Relation> getSelectedRelations() {
+        return model.getSelectedRelations();
+    }
+
     /* ---------------------------------------------------------------------------------- */
     /* DataSetListener                                                                    */
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 4535)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 4536)
@@ -35,4 +35,5 @@
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
+import javax.swing.event.PopupMenuListener;
 
 import org.openstreetmap.josm.Main;
@@ -224,5 +225,17 @@
         return popupMenu.add(a);
     }
-
+    
+    public void addPopupMenuListener(PopupMenuListener l) {
+        popupMenu.addPopupMenuListener(l);
+    }
+
+    public void removePopupMenuListener(PopupMenuListener l) {
+        popupMenu.addPopupMenuListener(l);
+    }
+    
+    public Collection<OsmPrimitive> getSelectedPrimitives() {
+        return model.getSelected();
+    }
+    
     /**
      * Updates the dialog title with a summary of the current JOSM selection
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 4535)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 4536)
@@ -58,4 +58,5 @@
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
+import javax.swing.event.PopupMenuListener;
 import javax.swing.table.DefaultTableCellRenderer;
 import javax.swing.table.DefaultTableModel;
@@ -71,4 +72,5 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.SelectionChangedListener;
+import org.openstreetmap.josm.data.osm.IRelation;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -1256,12 +1258,43 @@
     }
     
+    public void addPropertyPopupMenuListener(PopupMenuListener l) {
+        propertyMenu.addPopupMenuListener(l);
+    }
+
+    public void removePropertyPopupMenuListener(PopupMenuListener l) {
+        propertyMenu.addPopupMenuListener(l);
+    }
+    
+    @SuppressWarnings("unchecked")
+    public Tag getSelectedProperty() {
+        int row = propertyTable.getSelectedRow();
+        if (row == -1) return null;
+        TreeMap<String, Integer> map = (TreeMap<String, Integer>) propertyData.getValueAt(row, 1);
+        return new Tag(
+                propertyData.getValueAt(row, 0).toString(), 
+                map.size() > 1 ? "" : map.keySet().iterator().next());
+    }
+    
     public void addMembershipPopupMenuSeparator() {
         membershipMenu.addSeparator();
     }
-
+    
     public JMenuItem addMembershipPopupMenuAction(Action a) {
         return membershipMenu.add(a);
     }
     
+    public void addMembershipPopupMenuListener(PopupMenuListener l) {
+        membershipMenu.addPopupMenuListener(l);
+    }
+
+    public void removeMembershipPopupMenuListener(PopupMenuListener l) {
+        membershipMenu.addPopupMenuListener(l);
+    }
+    
+    public IRelation getSelectedMembershipRelation() {
+        int row = membershipTable.getSelectedRow();
+        return row > -1 ? (IRelation) membershipData.getValueAt(row, 0) : null;
+    }
+
     public static interface RelationRelated {
         public Relation getRelation();
