diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/protection/ProtectionConfigBehaviour.java b/core/api/src/main/java/org/onosproject/net/behaviour/protection/ProtectionConfigBehaviour.java
index d56a969..5464201 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/protection/ProtectionConfigBehaviour.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/protection/ProtectionConfigBehaviour.java
@@ -161,7 +161,48 @@
      * @return Completes if request was accepted, fails exceptionally on error.
      *         Note: completion does not always assure working path has switched.
      */
+    @Deprecated
     CompletableFuture<Void> switchWorkingPath(ConnectPoint identifier, int index);
 
+    /**
+     * Attempts to forcibly switch to the one specified path by {@code index}.
+     *
+     * @param identifier {@link ConnectPoint} for the virtual Port representing
+     *                     protected path endpoint
+     * @param index path index to switch to
+     * @return Completes if request was accepted, fails exceptionally on error.
+     *         Note: completion does not always assure working path has switched.
+     */
+    default CompletableFuture<Void> switchToForce(ConnectPoint identifier, int index) {
+        return CompletableFuture.completedFuture(null);
+    }
+
+    /**
+     * Attempts to manually switch to the one specified path by {@code index}.
+     * This operation would be rejected if the specified path is a fault path.
+     *
+     * @param identifier {@link ConnectPoint} for the virtual Port representing
+     *                     protected path endpoint
+     * @param index path index to switch to
+     * @return Completes if request was accepted, fails exceptionally on error.
+     *         Note: completion does not always assure working path has switched.
+     */
+    default CompletableFuture<Void> switchToManual(ConnectPoint identifier, int index) {
+        return switchWorkingPath(identifier, index);
+    }
+
+    /**
+     * Attempts to set the device to automatic protection mode.
+     *
+     * @param identifier {@link ConnectPoint} for the virtual Port representing
+     *                     protected path endpoint
+     * @return Completes if request was accepted, fails exceptionally on error.
+     */
+    default CompletableFuture<Void> switchToAutomatic(ConnectPoint identifier) {
+        CompletableFuture<Void> future = new CompletableFuture<>();
+        future.completeExceptionally(new UnsupportedOperationException());
+        return future;
+    }
+
     // TODO How to let one listen to async events? e.g., working path changed event
 }
