diff --git a/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyCycle.java b/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyCycle.java
index 444995b..0fc761d 100644
--- a/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyCycle.java
+++ b/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyCycle.java
@@ -110,7 +110,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(cycle);
+        return cycle.hashCode();
     }
 
     @Override
diff --git a/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java b/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java
index 206a34c..dfa150e 100644
--- a/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java
+++ b/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java
@@ -30,8 +30,8 @@
  */
 public class DisjointPathPair<V extends Vertex, E extends Edge<V>> implements Path<V, E> {
 
-    private Path<V, E> primary, secondary;
-    boolean primaryActive = true;
+    private final Path<V, E> primary, secondary;
+    private boolean primaryActive = true;
 
     /**
      * Creates a disjoint path pair from two paths.
@@ -88,7 +88,7 @@
      * @return boolean representing whether it has backup
      */
     public boolean hasBackup() {
-        return secondary != null && secondary.edges() != null;
+        return secondary != null;
     }
 
     @Override
@@ -103,7 +103,9 @@
 
     @Override
     public int hashCode() {
-        return hasBackup() ? Objects.hash(primary) + Objects.hash(secondary) :
+        // Note: DisjointPathPair with primary and secondary swapped
+        // must result in same hashCode
+        return hasBackup() ? primary.hashCode() + secondary.hashCode() :
                 Objects.hash(primary);
     }
 
diff --git a/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java.orig b/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java.orig
deleted file mode 100644
index 1cf22b6..0000000
--- a/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java.orig
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * 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.graph;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-
-import static com.google.common.collect.ImmutableSet.of;
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-
-public class DisjointPathPair<V extends Vertex, E extends Edge<V>> implements Path<V, E> {
-    public Path<V, E> path1, path2;
-    boolean usingPath1 = true;
-
-<<<<<<< HEAD
-    /**
-     * Creates a Disjoint Path Pair from two paths.
-     *
-     * @param p1    first path
-     * @param p2    second path
-     */
-=======
->>>>>>> Disjoint Path Pairs (Suurballe) utils
-    public DisjointPathPair(Path<V, E> p1, Path<V, E> p2) {
-        path1 = p1;
-        path2 = p2;
-    }
-<<<<<<< HEAD
-
-    @Override
-=======
->>>>>>> Disjoint Path Pairs (Suurballe) utils
-    public V src() {
-        return path1.src();
-    }
-
-<<<<<<< HEAD
-    @Override
-    public V dst() {
-        return path1.dst();
-    }
-
-    @Override
-=======
-    public V dst() {
-        return path1.dst();
-    }
->>>>>>> Disjoint Path Pairs (Suurballe) utils
-    public double cost() {
-        if (!hasBackup()) {
-            return path1.cost();
-        }
-        return path1.cost() + path2.cost();
-    }
-<<<<<<< HEAD
-
-    @Override
-=======
->>>>>>> Disjoint Path Pairs (Suurballe) utils
-    public List<E> edges() {
-        if (usingPath1 || !hasBackup()) {
-            return path1.edges();
-        } else {
-            return path2.edges();
-        }
-    }
-<<<<<<< HEAD
-
-    /**
-     * Checks if this path pair contains a backup/secondary path.
-     *
-     * @return boolean representing whether it has backup
-     */
-    public boolean hasBackup() {
-        return path2 != null && path2.edges() != null;
-    }
-
-    /**
-     * Switches this disjoint path pair to using its backup path, instead of
-     * using its primary.
-     */
-    public void useBackup() {
-        usingPath1 = !usingPath1;
-    }
-
-    @Override
-=======
-    public boolean hasBackup() {
-        return path2 != null && path2.edges() != null;
-    }
-    public void useBackup() {
-        usingPath1 = !usingPath1;
-    }
->>>>>>> Disjoint Path Pairs (Suurballe) utils
-    public String toString() {
-        return toStringHelper(this)
-                .add("src", src())
-                .add("dst", dst())
-                .add("cost", cost())
-                .add("edges", edges())
-                .toString();
-    }
-<<<<<<< HEAD
-
-    @Override
-=======
->>>>>>> Disjoint Path Pairs (Suurballe) utils
-    public int hashCode() {
-        Set<Path<V, E>> paths;
-        if (!hasBackup()) {
-            paths = of(path1);
-        } else {
-            paths = of(path1, path2);
-        }
-        return Objects.hash(paths);
-    }
-<<<<<<< HEAD
-
-    @Override
-=======
->>>>>>> Disjoint Path Pairs (Suurballe) utils
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj instanceof DisjointPathPair) {
-            final DisjointPathPair other = (DisjointPathPair) obj;
-            return Objects.equals(this.src(), other.src()) &&
-                    Objects.equals(this.dst(), other.dst()) &&
-                    (Objects.equals(this.path1, other.path1) &&
-                            Objects.equals(this.path2, other.path2)) ||
-                    (Objects.equals(this.path1, other.path2) &&
-                            Objects.equals(this.path2, other.path1));
-        }
-        return false;
-    }
-<<<<<<< HEAD
-
-    /**
-     * Returns number of paths inside this path pair object.
-     *
-     * @return number of paths
-     */
-=======
->>>>>>> Disjoint Path Pairs (Suurballe) utils
-    public int size() {
-        if (hasBackup()) {
-            return 2;
-        }
-        return 1;
-    }
-}
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 5669abd..1ef7113 100644
--- a/utils/misc/src/main/java/org/onlab/util/Frequency.java
+++ b/utils/misc/src/main/java/org/onlab/util/Frequency.java
@@ -18,8 +18,6 @@
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.ComparisonChain;
 
-import java.util.Objects;
-
 /**
  * Class representing frequency. This class is intended to be used for a value whose unit is Hz
  * and its family (KHz, MHz, etc.).
@@ -157,7 +155,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(frequency);
+        return Long.hashCode(frequency);
     }
 
     @Override
diff --git a/utils/misc/src/test/java/org/onlab/graph/DisjointPathPairTest.java b/utils/misc/src/test/java/org/onlab/graph/DisjointPathPairTest.java
new file mode 100644
index 0000000..ca6c56c
--- /dev/null
+++ b/utils/misc/src/test/java/org/onlab/graph/DisjointPathPairTest.java
@@ -0,0 +1,43 @@
+package org.onlab.graph;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Test of DisjointPathPair.
+ */
+public class DisjointPathPairTest {
+
+    private static final TestVertex A = new TestVertex("A");
+    private static final TestVertex B = new TestVertex("B");
+    private static final TestVertex C = new TestVertex("C");
+    private static final TestVertex D = new TestVertex("D");
+
+    private static final TestEdge AB = new TestEdge(A, B, 1.0);
+    private static final TestEdge BC = new TestEdge(B, C, 1.0);
+    private static final TestEdge AD = new TestEdge(A, D, 1.0);
+    private static final TestEdge DC = new TestEdge(D, C, 1.0);
+
+    private static final Path<TestVertex, TestEdge> ABC
+                            = new DefaultPath<>(ImmutableList.of(AB, BC), 1.0);
+    private static final Path<TestVertex, TestEdge> ADC
+                            = new DefaultPath<>(ImmutableList.of(AD, DC), 1.0);
+
+    @Test
+    public void testSwappingPrimarySecondaryDoesntImpactHashCode() {
+        assertEquals(new DisjointPathPair<>(ABC, ADC).hashCode(),
+                     new DisjointPathPair<>(ADC, ABC).hashCode());
+    }
+
+    @Test
+    public void testSwappingPrimarySecondaryDoesntImpactEquality() {
+        new EqualsTester()
+            .addEqualityGroup(new DisjointPathPair<>(ABC, ADC),
+                              new DisjointPathPair<>(ADC, ABC));
+    }
+
+}
diff --git a/utils/misc/src/test/java/org/onlab/graph/TestVertex.java b/utils/misc/src/test/java/org/onlab/graph/TestVertex.java
index be92bd2..b0b92a4 100644
--- a/utils/misc/src/test/java/org/onlab/graph/TestVertex.java
+++ b/utils/misc/src/test/java/org/onlab/graph/TestVertex.java
@@ -30,7 +30,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(name);
+        return name.hashCode();
     }
 
     @Override
diff --git a/utils/stc/src/main/java/org/onlab/stc/Step.java b/utils/stc/src/main/java/org/onlab/stc/Step.java
index 3d8ea98..e14addb 100644
--- a/utils/stc/src/main/java/org/onlab/stc/Step.java
+++ b/utils/stc/src/main/java/org/onlab/stc/Step.java
@@ -101,7 +101,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(name);
+        return name.hashCode();
     }
 
     @Override
