Index: trunk/src/org/openstreetmap/josm/data/osm/INode.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/INode.java	(revision 13664)
+++ trunk/src/org/openstreetmap/josm/data/osm/INode.java	(revision 13665)
@@ -31,4 +31,9 @@
 
     @Override
+    default int compareTo(IPrimitive o) {
+        return o instanceof INode ? Long.compare(getUniqueId(), o.getUniqueId()) : 1;
+    }
+
+    @Override
     default String getDisplayName(NameFormatter formatter) {
         return formatter.format(this);
Index: trunk/src/org/openstreetmap/josm/data/osm/IPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/IPrimitive.java	(revision 13664)
+++ trunk/src/org/openstreetmap/josm/data/osm/IPrimitive.java	(revision 13665)
@@ -11,5 +11,5 @@
  * @since 4098
  */
-public interface IPrimitive extends Tagged, PrimitiveId, Stylable {
+public interface IPrimitive extends Tagged, PrimitiveId, Stylable, Comparable<IPrimitive> {
 
     /**
@@ -147,5 +147,5 @@
      * </ul>
      * @return {@code true} if this object is drawable
-     * @since xxx
+     * @since 13664
      */
     default boolean isDrawable() {
@@ -156,5 +156,5 @@
      * Determines whether the primitive is selected
      * @return whether the primitive is selected
-     * @since xxx
+     * @since 13664
      */
     default boolean isSelected() {
@@ -165,5 +165,5 @@
      * Determines if this primitive is a member of a selected relation.
      * @return {@code true} if this primitive is a member of a selected relation, {@code false} otherwise
-     * @since xxx
+     * @since 13664
      */
     default boolean isMemberOfSelected() {
@@ -174,5 +174,5 @@
      * Determines if this primitive is an outer member of a selected multipolygon relation.
      * @return {@code true} if this primitive is an outer member of a selected multipolygon relation, {@code false} otherwise
-     * @since xxx
+     * @since 13664
      */
     default boolean isOuterMemberOfSelected() {
Index: trunk/src/org/openstreetmap/josm/data/osm/IRelation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/IRelation.java	(revision 13664)
+++ trunk/src/org/openstreetmap/josm/data/osm/IRelation.java	(revision 13665)
@@ -46,4 +46,9 @@
 
     @Override
+    default int compareTo(IPrimitive o) {
+        return o instanceof IRelation ? Long.compare(getUniqueId(), o.getUniqueId()) : -1;
+    }
+
+    @Override
     default String getDisplayName(NameFormatter formatter) {
         return formatter.format(this);
Index: trunk/src/org/openstreetmap/josm/data/osm/IWay.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/IWay.java	(revision 13664)
+++ trunk/src/org/openstreetmap/josm/data/osm/IWay.java	(revision 13665)
@@ -44,4 +44,11 @@
 
     @Override
+    default int compareTo(IPrimitive o) {
+        if (o instanceof IRelation)
+            return 1;
+        return o instanceof IWay ? Long.compare(getUniqueId(), o.getUniqueId()) : -1;
+    }
+
+    @Override
     default String getDisplayName(NameFormatter formatter) {
         return formatter.format(this);
Index: trunk/src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 13664)
+++ trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 13665)
@@ -312,9 +312,4 @@
 
     @Override
-    public int compareTo(OsmPrimitive o) {
-        return o instanceof Node ? Long.compare(getUniqueId(), o.getUniqueId()) : 1;
-    }
-
-    @Override
     public OsmPrimitiveType getType() {
         return OsmPrimitiveType.NODE;
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 13664)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 13665)
@@ -42,5 +42,5 @@
  * @author imi
  */
-public abstract class OsmPrimitive extends AbstractPrimitive implements Comparable<OsmPrimitive>, TemplateEngineDataProvider {
+public abstract class OsmPrimitive extends AbstractPrimitive implements TemplateEngineDataProvider {
     private static final String SPECIAL_VALUE_ID = "id";
     private static final String SPECIAL_VALUE_LOCAL_NAME = "localname";
Index: trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 13664)
+++ trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 13665)
@@ -318,9 +318,4 @@
     }
 
-    @Override
-    public int compareTo(OsmPrimitive o) {
-        return o instanceof Relation ? Long.compare(getUniqueId(), o.getUniqueId()) : -1;
-    }
-
     /**
      * Returns the first member.
Index: trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 13664)
+++ trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 13665)
@@ -333,11 +333,4 @@
         }
         return true;
-    }
-
-    @Override
-    public int compareTo(OsmPrimitive o) {
-        if (o instanceof Relation)
-            return 1;
-        return o instanceof Way ? Long.compare(getUniqueId(), o.getUniqueId()) : -1;
     }
 
