diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/BridgeConfig.java b/core/api/src/main/java/org/onosproject/net/behaviour/BridgeConfig.java
index 3b47079..d1ff51a 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/BridgeConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/BridgeConfig.java
@@ -84,15 +84,6 @@
     Collection<BridgeDescription> getBridges();
 
     /**
-     * Add a logical/virtual port.
-     * @deprecated version 1.5.0 - Falcon.
-     *
-     * @param port port number
-     */
-    @Deprecated
-    void addPort(PortDescription port);
-
-    /**
      * Adds a port to a given bridge.
      *
      * @param bridgeName bridge name
@@ -101,15 +92,6 @@
     void addPort(BridgeName bridgeName, String portName);
 
     /**
-     * Delete a logical/virtual port.
-     * @deprecated version 1.5.0 - Falcon.
-     *
-     * @param port port number
-     */
-    @Deprecated
-    void deletePort(PortDescription port);
-
-    /**
      * Removes a port from a given bridge.
      *
      * @param bridgeName bridge name
diff --git a/drivers/ovsdb/src/main/java/org/onosproject/drivers/ovsdb/OvsdbBridgeConfig.java b/drivers/ovsdb/src/main/java/org/onosproject/drivers/ovsdb/OvsdbBridgeConfig.java
index 5022799..02402a5 100644
--- a/drivers/ovsdb/src/main/java/org/onosproject/drivers/ovsdb/OvsdbBridgeConfig.java
+++ b/drivers/ovsdb/src/main/java/org/onosproject/drivers/ovsdb/OvsdbBridgeConfig.java
@@ -120,36 +120,12 @@
                 .collect(Collectors.toSet());
     }
 
-    //Deprecated from version 1.5.0 - Falcon
-    @Deprecated
-    @Override
-    public void addPort(PortDescription port) {
-        OvsdbClientService client = getOvsdbClientService(handler());
-        Set<OvsdbBridge> ovsdbSet = client.getBridges();
-        if (ovsdbSet != null && ovsdbSet.size() > 0) {
-            OvsdbBridge bridge = ovsdbSet.iterator().next();
-            client.createPort(bridge.name(), port.portNumber().toString());
-        }
-    }
-
     @Override
     public void addPort(BridgeName bridgeName, String portName) {
         OvsdbClientService client = getOvsdbClientService(handler());
         client.createPort(bridgeName.name(), portName);
     }
 
-    //Deprecated from version 1.5.0 - Falcon
-    @Deprecated
-    @Override
-    public void deletePort(PortDescription port) {
-        OvsdbClientService client = getOvsdbClientService(handler());
-        Set<OvsdbBridge> ovsdbSet = client.getBridges();
-        if (ovsdbSet != null && ovsdbSet.size() > 0) {
-            OvsdbBridge bridge = ovsdbSet.iterator().next();
-            client.dropPort(bridge.name(), port.portNumber().toString());
-        }
-    }
-
     @Override
     public void deletePort(BridgeName bridgeName, String portName) {
         OvsdbClientService client = getOvsdbClientService(handler());
