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 e0ff0e7..96397ea 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
@@ -1,69 +1,78 @@
-/*
- * 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.onosproject.net.behaviour;
-
-import java.util.Collection;
-
-import org.onosproject.net.device.PortDescription;
-import org.onosproject.net.driver.HandlerBehaviour;
-
-/**
- * Behaviour for handling various drivers for bridge configurations.
- */
-public interface BridgeConfig extends HandlerBehaviour {
-
-    /**
-     * Add a bridge.
-     *
-     * @param bridgeName bridge name
-     */
-    void addBridge(BridgeName bridgeName);
-
-    /**
-     * Remove a bridge.
-     *
-     * @param bridgeName bridge name
-     */
-    void deleteBridge(BridgeName bridgeName);
-
-    /**
-     * Remove a bridge.
-     *
-     * @return bridge collection
-     */
-    Collection<BridgeDescription> getBridges();
-
-    /**
-     * Add a logical/virtual port.
-     *
-     * @param port port number
-     */
-    void addPort(PortDescription port);
-
-    /**
-     * Delete a logical/virtual port.
-     *
-     * @param port port number
-     */
-    void deletePort(PortDescription port);
-
-    /**
-     * Delete a logical/virtual port.
-     *
-     * @return collection of port
-     */
-    Collection<PortDescription> getPorts();
-}
+/*
+ * 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.onosproject.net.behaviour;
+
+import java.util.Collection;
+import java.util.Set;
+
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.device.PortDescription;
+import org.onosproject.net.driver.HandlerBehaviour;
+
+/**
+ * Behaviour for handling various drivers for bridge configurations.
+ */
+public interface BridgeConfig extends HandlerBehaviour {
+
+    /**
+     * Add a bridge.
+     *
+     * @param bridgeName bridge name
+     */
+    void addBridge(BridgeName bridgeName);
+
+    /**
+     * Remove a bridge.
+     *
+     * @param bridgeName bridge name
+     */
+    void deleteBridge(BridgeName bridgeName);
+
+    /**
+     * Remove a bridge.
+     *
+     * @return bridge collection
+     */
+    Collection<BridgeDescription> getBridges();
+
+    /**
+     * Add a logical/virtual port.
+     *
+     * @param port port number
+     */
+    void addPort(PortDescription port);
+
+    /**
+     * Delete a logical/virtual port.
+     *
+     * @param port port number
+     */
+    void deletePort(PortDescription port);
+
+    /**
+     * Delete a logical/virtual port.
+     *
+     * @return collection of port
+     */
+    Collection<PortDescription> getPorts();
+
+    /**
+     * Get a collection of port.
+     *
+     * @return portNumbers set of PortNumber
+     */
+    Set<PortNumber> getPortNumbers();
+}
