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);
 
     }
 
diff --git a/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanelService.java b/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanelService.java
index 64754c0..f37df1d 100644
--- a/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanelService.java
+++ b/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanelService.java
@@ -18,17 +18,15 @@
 import org.onosproject.net.ConnectPoint;
 
 /**
- * A service for the patch panel application to
- * export and use with the cli .
+ * A service for the patch panel application to export and use with the cli.
  */
 public interface PatchPanelService {
 
     /**
-     * Get the connectPoints that need to be patched.
+     * Adds a new patch between two connect points.
+     *
      * @param cp    the first connect point
      * @param cp2   the second connect point
-     * @return void
      */
-    public boolean addPatch(ConnectPoint cp, ConnectPoint cp2);
-
-}
\ No newline at end of file
+    boolean addPatch(ConnectPoint cp, ConnectPoint cp2);
+}
diff --git a/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/AppUiComponent.java b/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanelUiComponent.java
similarity index 95%
rename from apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/AppUiComponent.java
rename to apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanelUiComponent.java
index 8402cb1..ea2f085 100644
--- a/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/AppUiComponent.java
+++ b/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanelUiComponent.java
@@ -34,7 +34,7 @@
  *  ONOS UI Custom-View application component for the Patch Panel Application.
  */
 @Component(immediate = true)
-public class AppUiComponent {
+public class PatchPanelUiComponent {
 
     private static final String VIEW_ID = "sampleCustom";
     private static final String VIEW_TEXT = "Patch Panel Application";
@@ -51,7 +51,7 @@
 
     // Factory for UI message handlers
     private final UiMessageHandlerFactory messageHandlerFactory =
-            () -> ImmutableList.of(new AppUiMessageHandler());
+            () -> ImmutableList.of(new PatchPanelUiMessageHandler());
 
     // Application UI extension
     protected UiExtension extension =
diff --git a/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/AppUiMessageHandler.java b/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanelUiMessageHandler.java
similarity index 98%
rename from apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/AppUiMessageHandler.java
rename to apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanelUiMessageHandler.java
index 431f4d0..b03bb02 100644
--- a/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/AppUiMessageHandler.java
+++ b/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/PatchPanelUiMessageHandler.java
@@ -40,7 +40,7 @@
  *  to each event. In this particular implementation the second message
  *  handler creates the patch and the first message handler loads the data
  */
-public class AppUiMessageHandler extends UiMessageHandler {
+public class PatchPanelUiMessageHandler extends UiMessageHandler {
 
     private static final String SAMPLE_CUSTOM_DATA_REQ = "sampleCustomDataRequest";
     private static final String SAMPLE_CUSTOM_DATA_RESP = "sampleCustomDataResponse";
@@ -136,4 +136,4 @@
             sendMessage(SAMPLE_CUSTOM_DATA_RESP3, sid, payload);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/package-info.java b/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/package-info.java
index 6bee0e2..7c109d2 100644
--- a/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/package-info.java
+++ b/apps/patchpanel/src/main/java/org/onosproject/patchpanel/impl/package-info.java
@@ -16,6 +16,6 @@
  */
 
 /**
- * patch panel-related CLI commands(in implementation folder).
+ * Patch panel-related CLI commands(in implementation folder).
  */
 package org.onosproject.patchpanel.impl;
