Index: trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 9715)
+++ trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 9716)
@@ -420,10 +420,21 @@
     @Override
     public OsmPrimitiveType getDisplayType() {
-        return isMultipolygon() ? OsmPrimitiveType.MULTIPOLYGON
-        : OsmPrimitiveType.RELATION;
-    }
-
+        return isMultipolygon() && !isBoundary() ? OsmPrimitiveType.MULTIPOLYGON : OsmPrimitiveType.RELATION;
+    }
+
+    /**
+     * Determines if this relation is a boundary.
+     * @return {@code true} if a boundary relation
+     */
+    public boolean isBoundary() {
+        return "boundary".equals(get("type"));
+    }
+
+    /**
+     * Determines if this relation behaves as a multipolygon.
+     * @return {@code true} if it's a real mutlipolygon or a boundary relation
+     */
     public boolean isMultipolygon() {
-        return "multipolygon".equals(get("type")) || "boundary".equals(get("type"));
+        return "multipolygon".equals(get("type")) || isBoundary();
     }
 
Index: trunk/test/unit/org/openstreetmap/josm/data/osm/RelationTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/osm/RelationTest.java	(revision 9715)
+++ trunk/test/unit/org/openstreetmap/josm/data/osm/RelationTest.java	(revision 9716)
@@ -2,5 +2,7 @@
 package org.openstreetmap.josm.data.osm;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import org.junit.Assert;
@@ -104,3 +106,26 @@
         Assert.assertEquals(new BBox(w1), r1.getBBox());
     }
+
+    /**
+     * Non-regression test for <a href="https://josm.openstreetmap.de/ticket/12467">Bug #12467</a>.
+     * @throws Exception if any error occurs
+     */
+    @Test
+    public void testTicket12467() throws Exception {
+        Relation r = new Relation();
+        r.put("type", "boundary");
+        assertTrue(r.isBoundary());
+        assertTrue(r.isMultipolygon());
+        assertEquals(OsmPrimitiveType.RELATION, r.getDisplayType());
+
+        r.put("type", "multipolygon");
+        assertFalse(r.isBoundary());
+        assertTrue(r.isMultipolygon());
+        assertEquals(OsmPrimitiveType.MULTIPOLYGON, r.getDisplayType());
+
+        r.put("type", "something_else");
+        assertFalse(r.isBoundary());
+        assertFalse(r.isMultipolygon());
+        assertEquals(OsmPrimitiveType.RELATION, r.getDisplayType());
+    }
 }
