diff --git a/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanel.java b/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanel.java
index 068ae00..b08be7e 100644
--- a/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanel.java
+++ b/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanel.java
@@ -14,15 +14,6 @@
  * limitations under the License.
  */
 
-/**
- * This class acts as a software patch panel application.
- * The user specifies 2 connectpoint on the same device that he/she would like to patch.
- * Using a flow rule, the 2 connectpoints are patched.
- *
- * @author Parvahti Meyyappan
- * @version %I%, %G%
- */
-
 package org.onosproject.patchpanel.impl;
 
 import org.apache.felix.scr.annotations.Component;
@@ -31,6 +22,7 @@
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Deactivate;
+import org.onosproject.cli.net.ConnectPointCompleter;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.net.PortNumber;
@@ -46,11 +38,19 @@
 import java.util.ArrayList;
 import java.util.List;
 
-
+/**
+ * This class acts as a software patch panel application.
+ * The user specifies 2 connectpoint on the same device that he/she would like to patch.
+ * Using a flow rule, the 2 connectpoints are patched.
+ */
 @Component(immediate = true)
 @Service
 public class PatchPanel implements PatchPanelService {
 
+    // OSGI: help bundle plugin discover runtime package dependency.
+    @SuppressWarnings("unused")
+    private ConnectPointCompleter connectPointCompleter;
+
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected FlowRuleService flowRuleService;
 
@@ -65,12 +65,8 @@
 
     @Activate
     protected void activate() throws NullPointerException {
+        appId = coreService.registerApplication("org.onosproject.patchpanel");
         log.info("Started");
-        try {
-            appId = coreService.getAppId("org.onosproject.patchPanel");
-        } catch (NullPointerException e) {
-            throw new NullPointerException("ERROR:App Id is null");
-        }
     }
 
     @Deactivate
@@ -101,10 +97,18 @@
                 .withSelector(DefaultTrafficSelector.builder().matchInPort(inPort).build())
                 .withTreatment(DefaultTrafficTreatment.builder().setOutput(outPort).build())
                 .withPriority(PacketPriority.REACTIVE.priorityValue())
-                .makeTemporary(5)
+                .makePermanent()
                 .fromApp(appId).build();
 
-        flowRuleService.applyFlowRules(fr);
+        FlowRule fr2 = DefaultFlowRule.builder()
+                .forDevice(cp1.deviceId())
+                .withSelector(DefaultTrafficSelector.builder().matchInPort(outPort).build())
+                .withTreatment(DefaultTrafficTreatment.builder().setOutput(inPort).build())
+                .withPriority(PacketPriority.REACTIVE.priorityValue())
+                .makePermanent()
+                .fromApp(appId).build();
+
+        flowRuleService.applyFlowRules(fr, fr2);
 
     }
 
