diff --git a/utils/misc/src/main/java/org/onlab/util/Bandwidth.java b/utils/misc/src/main/java/org/onlab/util/Bandwidth.java
index 6a6d6c1..0586ed0 100644
--- a/utils/misc/src/main/java/org/onlab/util/Bandwidth.java
+++ b/utils/misc/src/main/java/org/onlab/util/Bandwidth.java
@@ -15,13 +15,15 @@
  */
 package org.onlab.util;
 
+import com.google.common.collect.ComparisonChain;
+
 import java.util.Objects;
 
 /**
  * Representation of bandwidth.
  * Use the static factory method corresponding to the unit (like Kbps) you desire on instantiation.
  */
-public final class Bandwidth {
+public final class Bandwidth implements RichComparable<Bandwidth> {
 
     private final double bps;
 
@@ -89,6 +91,13 @@
     }
 
     @Override
+    public int compareTo(Bandwidth other) {
+        return ComparisonChain.start()
+                .compare(this.bps, other.bps)
+                .result();
+    }
+
+    @Override
     public boolean equals(Object obj) {
         if (obj instanceof Bandwidth) {
             Bandwidth that = (Bandwidth) obj;
diff --git a/utils/misc/src/main/java/org/onlab/util/Frequency.java b/utils/misc/src/main/java/org/onlab/util/Frequency.java
index c6e262f..93de680 100644
--- a/utils/misc/src/main/java/org/onlab/util/Frequency.java
+++ b/utils/misc/src/main/java/org/onlab/util/Frequency.java
@@ -16,6 +16,7 @@
 package org.onlab.util;
 
 import com.google.common.base.MoreObjects;
+import com.google.common.collect.ComparisonChain;
 
 import java.util.Objects;
 
@@ -30,7 +31,7 @@
  * sub-Hz accuracy.
  * </p>
  */
-public final class Frequency {
+public final class Frequency implements RichComparable<Frequency> {
 
     private static final long KHZ = 1_000L;
     private static final long MHZ = 1_000_000L;
@@ -138,6 +139,13 @@
     }
 
     @Override
+    public int compareTo(Frequency other) {
+        return ComparisonChain.start()
+                .compare(this.frequency, other.frequency)
+                .result();
+    }
+
+    @Override
     public int hashCode() {
         return Objects.hash(frequency);
     }
diff --git a/utils/misc/src/main/java/org/onlab/util/RichComparable.java b/utils/misc/src/main/java/org/onlab/util/RichComparable.java
new file mode 100644
index 0000000..8a49bba
--- /dev/null
+++ b/utils/misc/src/main/java/org/onlab/util/RichComparable.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onlab.util;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Extends useful methods for comparison to {@link Comparable} interface.
+ *
+ * @param <T> type of instance to be compared
+ */
+public interface RichComparable<T> extends Comparable<T> {
+    /**
+     * Compares if this object is less than the specified object.
+     *
+     * @param other the object to be compared
+     * @return true if this object is less than the specified object
+     */
+    default boolean isLessThan(T other) {
+        return compareTo(checkNotNull(other)) < 0;
+    }
+
+    /**
+     * Compares if this object is greater than the specified object.
+     *
+     * @param other the object to be compared
+     * @return true if this object is less thant the specified object
+     */
+    default boolean isGreaterThan(T other) {
+        return compareTo(checkNotNull(other)) > 0;
+    }
+}
