Index: /applications/editors/josm/plugins/reltoolbox/TODO
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/TODO	(revision 26289)
+++ /applications/editors/josm/plugins/reltoolbox/TODO	(revision 26290)
@@ -4,12 +4,6 @@
 - Solve width problem for narrows buttons when "fix" and "download" appear simultaneously
 - "Reverse multipolygon": create a closed area out of outer members, move tags, delete relation and empty ways
-- Fix tags for public_transport relations
-- âûêëþ÷àòü ïîäñâåòêó âûáðàííîãî îòíîøåíèÿ ïðè âûêëþ÷åíèè ñëîÿ ñ äàííûìè
-- èêîíêà â ïàíåëè ñëåâà íå ðàáîòàåò, à ÷åêáîêñ (åñëè íà >> íàæàòü) âêëþ÷àåò ïàíåëü ñî âòîðîãî ðàçà
-- ðåæèì äëÿ ñîçäàíèÿ ìóëüòèïîëèãîíîâ áåç òðåáîâàíèÿ ïðèñóòñòâèÿ òåãîâ íà âñåõ ëèíèÿõ,
-  êîãäà ïëîùàäíûå òýãè ñîáèðàþòñÿ ñ êóñêîâ äàæå åñëè îíè ïðèñóòñòâóþò íå íà âñåõ (íàñòðîéêà)
-- êîãäà ñîçäà¸òñÿ ìóëüòèïîëèãîí è âêëþ÷åíî "ïåðåìåñòèòü òåãè", íî òåãè òîëüêî íà îäíîé ëèíèè, òî fail
-- ïðè ñîçäàíèè ãðàíèö äîáàâëÿåòñÿ òîëüêî admin_level, íî íå boundary
-- ïóíêò â ìåíþ äëÿ äóáëèðîâàíèÿ îòíîøåíèÿ
+? èêîíêà â ïàíåëè ñëåâà íå ðàáîòàåò, à ÷åêáîêñ (åñëè íà >> íàæàòü) âêëþ÷àåò ïàíåëü ñî âòîðîãî ðàçà
+? êîãäà ñîçäà¸òñÿ ìóëüòèïîëèãîí è âêëþ÷åíî "ïåðåìåñòèòü òåãè", íî òåãè òîëüêî íà îäíîé ëèíèè, òî fail
 
 == NEW ALGORITHM ==
Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/ChosenRelation.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/ChosenRelation.java	(revision 26289)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/ChosenRelation.java	(revision 26290)
@@ -101,4 +101,5 @@
         // todo: dim chosen relation when changing layer
         // todo: check this WTF!
+        System.out.println("editLayerChanged() oldLayer=" + oldLayer + ", newLayer=" + newLayer);
         clear();
         if( newLayer != null && oldLayer == null ) {
@@ -114,9 +115,14 @@
         }
 
+        OsmDataLayer dataLayer = Main.map.mapView.getEditLayer();
+        float opacity = dataLayer == null ? 0.0f : !dataLayer.isVisible() ? 0.0f : (float)dataLayer.getOpacity();
+        if( opacity < 0.01 )
+            return;
+
         Stroke oldStroke = g.getStroke();
         Composite oldComposite = g.getComposite();
         g.setColor(Color.yellow);
         g.setStroke(new BasicStroke(9, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
-        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f));
+        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f * opacity));
         for( OsmPrimitive element : chosenRelation.getMemberPrimitives() ) {
             if( element.getType() == OsmPrimitiveType.NODE ) {
Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/RelContextDialog.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/RelContextDialog.java	(revision 26289)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/RelContextDialog.java	(revision 26290)
@@ -453,4 +453,5 @@
             add(new SelectMembersAction(chosenRelation));
             add(new SelectRelationAction(chosenRelation));
+            add(new DuplicateChosenRelationAction(chosenRelation));
             add(new DeleteChosenRelationAction(chosenRelation));
             add(new DownloadParentsAction(chosenRelation));
@@ -514,4 +515,5 @@
             addMenuItem("boundaryways", tr("Add tags boundary and admin_level to boundary relation ways"));
             addMenuItem("tags", tr("Move area tags from contour to relation"));
+            addMenuItem("alltags", tr("When moving tags, consider even non-repeating ones"));
         }
 
Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/CreateMultipolygonAction.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/CreateMultipolygonAction.java	(revision 26289)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/CreateMultipolygonAction.java	(revision 26290)
@@ -44,4 +44,5 @@
         else if( property.equals("boundaryways") ) return true;
         else if( property.equals("tags") ) return true;
+        else if( property.equals("alltags") ) return false;
         else if( property.equals("single") ) return true;
         throw new IllegalArgumentException(property);
@@ -74,4 +75,8 @@
                 rel.addMember(new RelationMember("inner", w));
         List<Command> list = removeTagsFromInnerWays(rel);
+        if( !list.isEmpty() && isBoundary ) {
+            Main.main.undoRedo.add(new SequenceCommand(tr("Move tags from ways to relation"), list));
+            list = new ArrayList<Command>();
+        }
         if( isBoundary ) {
             if( !askForAdminLevelAndName(rel) )
@@ -231,4 +236,6 @@
 
         // filter out empty key conflicts - we need second iteration
+        boolean isBoundary = getPref("boundary");
+        if( isBoundary || !getPref("alltags") )
         for( RelationMember m: relation.getMembers() )
             if( m.hasRole() && m.getRole().equals("outer") && m.isWay() )
@@ -246,7 +253,5 @@
             values.remove("natural");
 
-        boolean isBoundary = getPref("boundary");
         String name = values.get("name");
-        String adminLevel = values.get("admin_level");
         if( isBoundary ) {
             Set<String> keySet = new TreeSet<String>(values.keySet());
Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/DuplicateChosenRelationAction.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/DuplicateChosenRelationAction.java	(revision 26290)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/DuplicateChosenRelationAction.java	(revision 26290)
@@ -0,0 +1,37 @@
+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.AddCommand;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.tools.ImageProvider;
+import relcontext.ChosenRelation;
+import relcontext.ChosenRelationListener;
+
+public class DuplicateChosenRelationAction extends AbstractAction implements ChosenRelationListener {
+    private ChosenRelation rel;
+
+    public DuplicateChosenRelationAction( ChosenRelation rel ) {
+        super(tr("Duplicate relation"));
+        putValue(SMALL_ICON, ImageProvider.get("duplicate"));
+        putValue(SHORT_DESCRIPTION, tr("Create a copy of this relation and open it in another editor window"));
+        this.rel = rel;
+        rel.addChosenRelationListener(this);
+        setEnabled(rel.get() != null);
+    }
+
+    public void actionPerformed( ActionEvent e ) {
+        Relation r = rel.get();
+        Relation copy = new Relation(r, true);
+        Main.main.undoRedo.add(new AddCommand(copy));
+        rel.set(copy);
+        if( Main.main.getCurrentDataSet() != null )
+            Main.main.getCurrentDataSet().setSelected(copy);
+    }
+
+    public void chosenRelationChanged( Relation oldRelation, Relation newRelation ) {
+        setEnabled(newRelation != null);
+    }
+}
