Index: /trunk/test/data/regress/17767/upd-mp.osm
===================================================================
--- /trunk/test/data/regress/17767/upd-mp.osm	(revision 15141)
+++ /trunk/test/data/regress/17767/upd-mp.osm	(revision 15141)
@@ -0,0 +1,29 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<osm version='0.6' generator='JOSM'>
+  <node id='2005535324' timestamp='2012-11-09T23:12:38Z' uid='192181' user='hennie90' visible='true' version='1' changeset='13815605' lat='52.8969453' lon='8.4315703' />
+  <node id='2005535336' timestamp='2012-11-09T23:12:38Z' uid='192181' user='hennie90' visible='true' version='1' changeset='13815605' lat='52.8969794' lon='8.431385' />
+  <node id='2005535480' timestamp='2012-11-09T23:12:41Z' uid='192181' user='hennie90' visible='true' version='1' changeset='13815605' lat='52.8975654' lon='8.431884' />
+  <node id='2005535490' timestamp='2012-11-09T23:12:42Z' uid='192181' user='hennie90' visible='true' version='1' changeset='13815605' lat='52.8975995' lon='8.4316988' />
+  <way id='189944949' timestamp='2012-11-09T23:13:05Z' uid='192181' user='hennie90' visible='true' version='1' changeset='13815605'>
+    <nd ref='2005535490' />
+    <nd ref='2005535480' />
+    <nd ref='2005535324' />
+    <nd ref='2005535336' />
+    <nd ref='2005535490' />
+    <tag k='amenity' v='parking' />
+    <tag k='capacity' v='32' />
+  </way>
+  <relation id='7309419' timestamp='2017-06-04T19:27:59Z' uid='92274' user='adjuva' visible='true' version='1' changeset='49250013'>
+    <member type='node' ref='3710947411' role='stop' />
+    <member type='node' ref='3710947412' role='stop' />
+    <member type='way' ref='233536420' role='platform' />
+    <member type='way' ref='233536421' role='platform' />
+    <member type='way' ref='111752151' role='building' />
+    <member type='node' ref='4566467239' role='' />
+    <member type='node' ref='2005535504' role='' />
+    <member type='way' ref='189944949' role='' />
+    <tag k='name' v='Wildeshausen' />
+    <tag k='public_transport' v='stop_area' />
+    <tag k='type' v='public_transport' />
+  </relation>
+</osm>
Index: /trunk/test/data/regress/17768/dupmem.osm
===================================================================
--- /trunk/test/data/regress/17768/dupmem.osm	(revision 15141)
+++ /trunk/test/data/regress/17768/dupmem.osm	(revision 15141)
@@ -0,0 +1,29 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<osm version='0.6' generator='JOSM' upload='never'>
+  <node id='580080' version='2' visible='true' lat='52.91551495426' lon='7.39168509017' />
+  <node id='580081' version='2' visible='true' lat='52.91535245088' lon='7.42788719612' />
+  <node id='580083' version='2' visible='true' lat='52.90180835975' lon='7.43282793018' />
+  <node id='580085' version='2' visible='true' lat='52.88685076458' lon='7.43426523464' />
+  <node id='580087' version='2' visible='true' lat='52.89357148218' lon='7.38737317681' />
+  <node id='580089' version='2' visible='true' lat='52.90142906425' lon='7.38961896502' />
+  <way id='580082' version='2' visible='true'>
+    <nd ref='580080' />
+    <nd ref='580081' />
+    <nd ref='580083' />
+    <nd ref='580085' />
+    <nd ref='580087' />
+    <tag k='natural' v='wood' />
+  </way>
+  <way id='580090' version='2' visible='true'>
+    <nd ref='580087' />
+    <nd ref='580089' />
+    <nd ref='580080' />
+    <tag k='natural' v='wood' />
+  </way>
+  <relation id='580092' version='2' visible='true'>
+    <member type='way' ref='580090' role='outer' />
+    <member type='way' ref='580090' role='outer' />
+    <member type='way' ref='580082' role='outer' />
+    <tag k='type' v='multipolygon' />
+  </relation>
+</osm>
Index: /trunk/test/unit/org/openstreetmap/josm/actions/CreateMultipolygonActionTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/actions/CreateMultipolygonActionTest.java	(revision 15140)
+++ /trunk/test/unit/org/openstreetmap/josm/actions/CreateMultipolygonActionTest.java	(revision 15141)
@@ -3,4 +3,6 @@
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import java.nio.file.Files;
@@ -10,4 +12,5 @@
 import java.util.TreeMap;
 
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
@@ -15,4 +18,5 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
@@ -21,4 +25,7 @@
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.search.SearchSetting;
+import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.io.OsmReader;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
@@ -38,5 +45,5 @@
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().projection();
+    public JOSMTestRules test = new JOSMTestRules().projection().main().preferences();
 
     private static Map<String, String> getRefToRoleMap(Relation relation) {
@@ -107,3 +114,47 @@
         assertEquals("{1=outer, 1.1=inner, 1.1.1=outer, 1.1.2=outer, 1.2=inner}", getRefToRoleMap(mp2).toString());
     }
+
+    /**
+     * Non-regression test for <a href="https://josm.openstreetmap.de/ticket/17767">Bug #17767</a>.
+     * @throws Exception if an error occurs
+     */
+    @Test
+    public void testTicket17767() throws Exception {
+        DataSet ds = OsmReader.parseDataSet(TestUtils.getRegressionDataStream(17767, "upd-mp.osm"), null);
+        Layer layer = new OsmDataLayer(ds, null, null);
+        MainApplication.getLayerManager().addLayer(layer);
+        try {
+            CreateMultipolygonAction updateAction = new CreateMultipolygonAction(true);
+            CreateMultipolygonAction createAction = new CreateMultipolygonAction(false);
+            assertFalse(updateAction.isEnabled());
+            assertFalse(createAction.isEnabled());
+            ds.setSelected(ds.getPrimitiveById(189944949L, OsmPrimitiveType.WAY));
+            assertFalse(updateAction.isEnabled());
+            assertTrue(createAction.isEnabled());
+        } finally {
+            MainApplication.getLayerManager().removeLayer(layer);
+        }
+    }
+
+    /**
+     * Non-regression test for <a href="https://josm.openstreetmap.de/ticket/17768">Bug #17768</a>.
+     * @throws Exception if an error occurs
+     */
+    @Test
+    @Ignore
+    public void testTicket17768() throws Exception {
+        DataSet ds = OsmReader.parseDataSet(TestUtils.getRegressionDataStream(17768, "dupmem.osm"), null);
+        Layer layer = new OsmDataLayer(ds, null, null);
+        MainApplication.getLayerManager().addLayer(layer);
+        try {
+            Relation old = (Relation) ds.getPrimitiveById(580092, OsmPrimitiveType.RELATION);
+            assertEquals(3, old.getMembersCount());
+            Relation mp = createMultipolygon(ds.getWays(), "type:way", old, true);
+            assertEquals(mp.getPrimitiveId(), old.getPrimitiveId());
+            assertEquals(2, mp.getMembersCount());
+        } finally {
+            MainApplication.getLayerManager().removeLayer(layer);
+        }
+
+    }
 }
