Index: /applications/editors/josm/plugins/relcontext/src/relcontext/ChosenRelationComponent.java
===================================================================
--- /applications/editors/josm/plugins/relcontext/src/relcontext/ChosenRelationComponent.java	(revision 25669)
+++ /applications/editors/josm/plugins/relcontext/src/relcontext/ChosenRelationComponent.java	(revision 25670)
@@ -1,15 +1,6 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
 package relcontext;
 
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
 import javax.swing.JLabel;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.Relation;
-import org.openstreetmap.josm.gui.DefaultNameFormatter;
 
 /**
@@ -28,11 +19,4 @@
         this.chRel = rel;
         rel.addChosenRelationListener(this);
-        addMouseListener(new MouseAdapter() {
-            @Override
-            public void mouseClicked( MouseEvent e ) {
-                if( chRel.get() != null && Main.map.mapView.getEditLayer() != null )
-                    Main.map.mapView.getEditLayer().data.setSelected(chRel.get());
-            }
-        });
     }
 
Index: /applications/editors/josm/plugins/relcontext/src/relcontext/RelContextDialog.java
===================================================================
--- /applications/editors/josm/plugins/relcontext/src/relcontext/RelContextDialog.java	(revision 25669)
+++ /applications/editors/josm/plugins/relcontext/src/relcontext/RelContextDialog.java	(revision 25670)
@@ -26,5 +26,4 @@
 import java.util.*;
 import javax.swing.*;
-import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
 import relcontext.actions.*;
@@ -40,4 +39,5 @@
     private ChosenRelation chosenRelation;
     private JPanel topLine;
+    private ChosenRelationPopupMenu popupMenu;
 
     public RelContextDialog() {
@@ -80,5 +80,7 @@
         topLeftButtons.add(new JButton(new ClearChosenRelationAction(chosenRelation)));
         topLine.add(topLeftButtons, BorderLayout.WEST);
-        topLine.add(new ChosenRelationComponent(chosenRelation), BorderLayout.CENTER);
+        final ChosenRelationComponent chosenRelationComponent = new ChosenRelationComponent(chosenRelation);
+        chosenRelationComponent.addMouseListener(new ChosenRelationMouseAdapter());
+        topLine.add(chosenRelationComponent, BorderLayout.CENTER);
         JPanel topRightButtons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
         final Action downloadChosenRelationAction = new DownloadChosenRelationAction(chosenRelation);
@@ -104,4 +106,6 @@
 
         add(rcPanel, BorderLayout.CENTER);
+
+        popupMenu = new ChosenRelationPopupMenu();
     }
 
@@ -160,3 +164,35 @@
         updateSelection();
     }
+
+    private class ChosenRelationMouseAdapter extends MouseAdapter {
+        @Override
+        public void mouseClicked( MouseEvent e ) {
+            if( SwingUtilities.isLeftMouseButton(e) && chosenRelation.get() != null && Main.map.mapView.getEditLayer() != null ) {
+                Main.map.mapView.getEditLayer().data.setSelected(chosenRelation.get());
+            }
+        }
+
+        @Override
+        public void mousePressed( MouseEvent e ) {
+            checkPopup(e);
+        }
+
+        @Override
+        public void mouseReleased( MouseEvent e ) {
+            checkPopup(e);
+        }
+
+        private void checkPopup( MouseEvent e ) {
+            if( e.isPopupTrigger() && chosenRelation.get() != null ) {
+                popupMenu.show(e.getComponent(), e.getX(), e.getY());
+            }
+        }
+    }
+
+    private class ChosenRelationPopupMenu extends JPopupMenu {
+        public ChosenRelationPopupMenu() {
+            add(new SelectMembersAction(chosenRelation));
+            add(new DeleteChosenRelationAction(chosenRelation));
+        }
+    }
 }
Index: /applications/editors/josm/plugins/relcontext/src/relcontext/actions/CreateMultipolygonAction.java
===================================================================
--- /applications/editors/josm/plugins/relcontext/src/relcontext/actions/CreateMultipolygonAction.java	(revision 25669)
+++ /applications/editors/josm/plugins/relcontext/src/relcontext/actions/CreateMultipolygonAction.java	(revision 25670)
@@ -1,13 +1,16 @@
 package relcontext.actions;
 
-import java.util.Collection;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import static org.openstreetmap.josm.tools.I18n.tr;
 import java.awt.event.ActionEvent;
-import java.util.LinkedList;
+import java.util.*;
+import javax.swing.JOptionPane;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.command.AddCommand;
+import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.data.osm.MultipolygonCreate;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
@@ -36,18 +39,25 @@
 
     public void actionPerformed( ActionEvent e ) {
-        // todo!
-        
+        // for now, just copying standard action
+        MultipolygonCreate mpc = new MultipolygonCreate();
+        String error = mpc.makeFromWays(getCurrentDataSet().getSelectedWays());
+        if( error != null ) {
+            JOptionPane.showMessageDialog(Main.parent, error);
+            return;
+        }
         Relation rel = new Relation();
         rel.put("type", "multipolygon");
-        for( OsmPrimitive selected : getCurrentDataSet().getSelected() ) {
-            rel.addMember(new RelationMember("", selected));
-        }
-
-        Collection<Command> cmds = new LinkedList<Command>();
-        Main.main.undoRedo.add(new AddCommand(rel));
-
-        if( chRel != null ) {
+        for( MultipolygonCreate.JoinedPolygon poly : mpc.outerWays )
+            for( Way w : poly.ways )
+                rel.addMember(new RelationMember("outer", w));
+        for( MultipolygonCreate.JoinedPolygon poly : mpc.innerWays )
+            for( Way w : poly.ways )
+                rel.addMember(new RelationMember("inner", w));
+        List<Command> list = removeTagsFromInnerWays(rel);
+        list.add(new AddCommand(rel));
+        Main.main.undoRedo.add(new SequenceCommand(tr("Create multipolygon"), list));
+        
+        if( chRel != null )
             chRel.set(rel);
-        }
     }
 
@@ -75,3 +85,55 @@
         setEnabled(enabled);
     }
+
+    /**
+     * This method removes tags/value pairs from inner ways that are present in relation or outer ways.
+     * It was copypasted from the standard {@link org.openstreetmap.josm.actions.CreateMultipolygonAction}.
+     * Todo: rewrite it.
+     */
+    private List<Command> removeTagsFromInnerWays(Relation relation) {
+        Map<String, String> values = new HashMap<String, String>();
+
+        if (relation.hasKeys()){
+            for(String key: relation.keySet()) {
+                values.put(key, relation.get(key));
+            }
+        }
+
+        List<Way> innerWays = new ArrayList<Way>();
+
+        for (RelationMember m: relation.getMembers()) {
+
+            if (m.hasRole() && m.getRole() == "inner" && m.isWay() && m.getWay().hasKeys()) {
+                innerWays.add(m.getWay());
+            }
+
+            if (m.hasRole() && m.getRole() == "outer" && m.isWay() && m.getWay().hasKeys()) {
+                Way way = m.getWay();
+                for (String key: way.keySet()) {
+                    if (!values.containsKey(key)) { //relation values take precedence
+                        values.put(key, way.get(key));
+                    }
+                }
+            }
+        }
+
+        List<Command> commands = new ArrayList<Command>();
+
+        for(String key: values.keySet()) {
+            List<OsmPrimitive> affectedWays = new ArrayList<OsmPrimitive>();
+            String value = values.get(key);
+
+            for (Way way: innerWays) {
+                if (value.equals(way.get(key))) {
+                    affectedWays.add(way);
+                }
+            }
+
+            if (affectedWays.size() > 0) {
+                commands.add(new ChangePropertyCommand(affectedWays, key, null));
+            }
+        }
+
+        return commands;
+    }
 }
Index: /applications/editors/josm/plugins/relcontext/src/relcontext/actions/DeleteChosenRelationAction.java
===================================================================
--- /applications/editors/josm/plugins/relcontext/src/relcontext/actions/DeleteChosenRelationAction.java	(revision 25670)
+++ /applications/editors/josm/plugins/relcontext/src/relcontext/actions/DeleteChosenRelationAction.java	(revision 25670)
@@ -0,0 +1,33 @@
+package relcontext.actions;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.command.DeleteCommand;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.tools.ImageProvider;
+import relcontext.ChosenRelation;
+import relcontext.ChosenRelationListener;
+
+public class DeleteChosenRelationAction extends AbstractAction implements ChosenRelationListener {
+    private ChosenRelation rel;
+
+    public DeleteChosenRelationAction( ChosenRelation rel ) {
+        super(tr("Delete relation"));
+        putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
+        this.rel = rel;
+        rel.addChosenRelationListener(this);
+        setEnabled(false);
+    }
+
+    public void actionPerformed( ActionEvent e ) {
+        Relation r = rel.get();
+        rel.clear();
+        Main.main.undoRedo.add(new DeleteCommand(r));
+    }
+
+    public void chosenRelationChanged( Relation oldRelation, Relation newRelation ) {
+        setEnabled(newRelation != null);
+    }
+}
Index: /applications/editors/josm/plugins/relcontext/src/relcontext/actions/SelectMembersAction.java
===================================================================
--- /applications/editors/josm/plugins/relcontext/src/relcontext/actions/SelectMembersAction.java	(revision 25670)
+++ /applications/editors/josm/plugins/relcontext/src/relcontext/actions/SelectMembersAction.java	(revision 25670)
@@ -0,0 +1,30 @@
+package relcontext.actions;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.tools.ImageProvider;
+import relcontext.ChosenRelation;
+import relcontext.ChosenRelationListener;
+
+public class SelectMembersAction extends AbstractAction implements ChosenRelationListener {
+    private ChosenRelation rel;
+
+    public SelectMembersAction( ChosenRelation rel ) {
+        super(tr("Select members"));
+        putValue(SMALL_ICON, ImageProvider.get("selectall"));
+        this.rel = rel;
+        rel.addChosenRelationListener(this);
+        setEnabled(false);
+    }
+
+    public void actionPerformed( ActionEvent e ) {
+        Main.map.mapView.getEditLayer().data.setSelected(rel.get() == null ? null : rel.get().getMemberPrimitives());
+    }
+
+    public void chosenRelationChanged( Relation oldRelation, Relation newRelation ) {
+        setEnabled(newRelation != null);
+    }
+}
