diff --git a/core/api/src/main/java/org/onosproject/net/intent/Key.java b/core/api/src/main/java/org/onosproject/net/intent/Key.java
index fadf8b9..ef109f2 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/Key.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/Key.java
@@ -130,8 +130,12 @@
 
         @Override
         public int compareTo(Key o) {
-            StringKey sk = (StringKey) o;
-            return this.key.compareTo(sk.key);
+            if (o instanceof StringKey) {
+                StringKey sk = (StringKey) o;
+                return this.key.compareTo(sk.key);
+            } else {
+                return this.key.compareTo(o.toString());
+            }
         }
     }
 
@@ -176,9 +180,13 @@
 
         @Override
         public int compareTo(Key o) {
-            Long myKey = key;
-            Long otherKey = ((LongKey) o).key;
-            return myKey.compareTo(otherKey);
+            if (o instanceof LongKey) {
+                Long myKey = key;
+                Long otherKey = ((LongKey) o).key;
+                return myKey.compareTo(otherKey);
+            } else {
+                return this.toString().compareTo(o.toString());
+            }
         }
     }
 }
diff --git a/core/api/src/test/java/org/onosproject/net/intent/KeyTest.java b/core/api/src/test/java/org/onosproject/net/intent/KeyTest.java
index b383afe..1de9fbb 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/KeyTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/KeyTest.java
@@ -21,7 +21,10 @@
 import com.google.common.testing.EqualsTester;
 
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.comparesEqualTo;
+import static org.hamcrest.Matchers.greaterThan;
 import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.lessThan;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutableBaseClass;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
@@ -118,4 +121,74 @@
                 .addEqualityGroup(longKey3)
                 .testEquals();
     }
+
+    /**
+     * Tests compareTo for string based keys.
+     */
+    @Test
+    public void stringKeyCompare() {
+        Key stringKey1 = Key.of(KEY_1, NetTestTools.APP_ID);
+        Key copyOfStringKey1 = Key.of(KEY_1, NetTestTools.APP_ID);
+        Key stringKey2 = Key.of(KEY_2, NetTestTools.APP_ID);
+        Key copyOfStringKey2 = Key.of(KEY_2, NetTestTools.APP_ID);
+        Key stringKey3 = Key.of(KEY_3, NetTestTools.APP_ID);
+        Key copyOfStringKey3 = Key.of(KEY_3, NetTestTools.APP_ID);
+
+        assertThat(stringKey1, comparesEqualTo(copyOfStringKey1));
+        assertThat(stringKey1, lessThan(stringKey2));
+        assertThat(stringKey1, lessThan(stringKey3));
+
+        assertThat(stringKey2, greaterThan(stringKey1));
+        assertThat(stringKey2, comparesEqualTo(copyOfStringKey2));
+        assertThat(stringKey2, lessThan(stringKey3));
+
+        assertThat(stringKey3, greaterThan(stringKey1));
+        assertThat(stringKey3, greaterThan(stringKey2));
+        assertThat(stringKey3, comparesEqualTo(copyOfStringKey3));
+    }
+
+    /**
+     * Tests compareTo for long based keys.
+     */
+    @Test
+    public void longKeyCompare() {
+        Key longKey1 = Key.of(LONG_KEY_1, NetTestTools.APP_ID);
+        Key copyOfLongKey1 = Key.of(LONG_KEY_1, NetTestTools.APP_ID);
+        Key longKey2 = Key.of(LONG_KEY_2, NetTestTools.APP_ID);
+        Key copyOfLongKey2 = Key.of(LONG_KEY_2, NetTestTools.APP_ID);
+        Key longKey3 = Key.of(LONG_KEY_3, NetTestTools.APP_ID);
+        Key copyOfLongKey3 = Key.of(LONG_KEY_3, NetTestTools.APP_ID);
+
+        assertThat(longKey1, comparesEqualTo(copyOfLongKey1));
+        assertThat(longKey1, lessThan(longKey2));
+        assertThat(longKey1, lessThan(longKey3));
+
+        assertThat(longKey2, greaterThan(longKey1));
+        assertThat(longKey2, comparesEqualTo(copyOfLongKey2));
+        assertThat(longKey2, lessThan(longKey3));
+
+        assertThat(longKey3, greaterThan(longKey1));
+        assertThat(longKey3, greaterThan(longKey2));
+        assertThat(longKey3, comparesEqualTo(copyOfLongKey3));
+    }
+
+    /**
+     * Tests compareTo for string and long based keys.
+     */
+    @Test
+    public void stringAndLongKeyCompare() {
+        Key stringKey0 = Key.of("0" + KEY_1, NetTestTools.APP_ID);
+        Key longKey1 = Key.of(LONG_KEY_1, NetTestTools.APP_ID);
+        Key stringKey2 = Key.of(KEY_2, NetTestTools.APP_ID);
+
+
+        assertThat(stringKey0, lessThan(longKey1));
+        assertThat(stringKey0, lessThan(stringKey2));
+
+        assertThat(longKey1, greaterThan(stringKey0));
+        assertThat(longKey1, lessThan(stringKey2));
+
+        assertThat(stringKey2, greaterThan(stringKey0));
+        assertThat(stringKey2, greaterThan(longKey1));
+    }
 }
