diff --git a/core/api/src/main/java/org/onosproject/net/DefaultDisjointPath.java b/core/api/src/main/java/org/onosproject/net/DefaultDisjointPath.java
index b68110d..b133de0 100644
--- a/core/api/src/main/java/org/onosproject/net/DefaultDisjointPath.java
+++ b/core/api/src/main/java/org/onosproject/net/DefaultDisjointPath.java
@@ -30,8 +30,6 @@
     private final DefaultPath path1;
     private final DefaultPath path2;
 
-    boolean usingPath1 = true;
-
     /**
      * Creates a disjoint path pair from two default paths.
      *
@@ -58,21 +56,17 @@
 
     @Override
     public List<Link> links() {
-        if (usingPath1) {
-            return path1.links();
-        } else {
-            return path2.links();
-        }
+        return path1.links();
     }
 
     @Override
     public double cost() {
-        return usingPath1 ? path1.cost() : path2.cost();
+        return path1.cost();
     }
 
     @Override
     public Weight weight() {
-        return usingPath1 ? path1.weight() : path2.weight();
+        return path1.weight();
     }
 
     @Override
@@ -105,12 +99,9 @@
         return false;
     }
 
+    @Deprecated
     @Override
     public boolean useBackup() {
-        if (path2 == null || path2.links() == null) {
-            return false;
-        }
-        usingPath1 = !usingPath1;
-        return true;
+        return false;
     }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/DisjointPath.java b/core/api/src/main/java/org/onosproject/net/DisjointPath.java
index 39237ea..8367067 100644
--- a/core/api/src/main/java/org/onosproject/net/DisjointPath.java
+++ b/core/api/src/main/java/org/onosproject/net/DisjointPath.java
@@ -30,7 +30,10 @@
      *
      * @return boolean corresponding to whether request to use
      *          backup was successful.
+     *
+     * @deprecated in 1.11.0
      */
+    @Deprecated
     boolean useBackup();
 
     /**
diff --git a/core/api/src/test/java/org/onosproject/net/DefaultDisjointPathTest.java b/core/api/src/test/java/org/onosproject/net/DefaultDisjointPathTest.java
index 2a287a3..d160809 100644
--- a/core/api/src/test/java/org/onosproject/net/DefaultDisjointPathTest.java
+++ b/core/api/src/test/java/org/onosproject/net/DefaultDisjointPathTest.java
@@ -87,28 +87,6 @@
     }
 
     /**
-     * Tests switching to the backup path.
-     */
-    @Test
-    public void testUseBackup() {
-        disjointPath1.useBackup();
-        assertThat(disjointPath1.primary(), is(path1));
-        assertThat(disjointPath1.backup(), is(path2));
-        assertThat(disjointPath1.links(), is(links2));
-        assertThat(disjointPath1.cost(), is(2.0));
-
-        disjointPath1.useBackup();
-        assertThat(disjointPath1.links(), is(links1));
-        assertThat(disjointPath1.cost(), is(1.0));
-
-        assertThat(disjointPath4.primary(), is(path1));
-        assertThat(disjointPath4.backup(), is((DefaultDisjointPath) null));
-        disjointPath4.useBackup();
-        assertThat(disjointPath4.primary(), is(path1));
-        assertThat(disjointPath4.backup(), is((DefaultDisjointPath) null));
-    }
-
-    /**
      * Tests equals(), hashCode(), and toString() methods.
      */
     @Test
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 6436ad4..1d6768d 100644
--- a/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java
+++ b/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java
@@ -31,7 +31,6 @@
 public class DisjointPathPair<V extends Vertex, E extends Edge<V>> implements Path<V, E> {
 
     private final Path<V, E> primary, secondary;
-    private boolean primaryActive = true;
 
     /**
      * Creates a disjoint path pair from two paths.
@@ -79,7 +78,7 @@
 
     @Override
     public List<E> edges() {
-        return primaryActive || !hasBackup() ? primary.edges() : secondary.edges();
+        return primary.edges();
     }
 
     /**
