diff --git a/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpFrameDecoder.java b/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpFrameDecoder.java
index a85e08d..781403d 100644
--- a/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpFrameDecoder.java
+++ b/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpFrameDecoder.java
@@ -93,7 +93,7 @@
                     bgpSession.prepareBgpNotification(errorCode, errorSubcode,
                                                       null);
                 ctx.getChannel().write(txMessage);
-                bgpSession.closeChannel(ctx);
+                bgpSession.closeSession(ctx);
                 return null;
             }
         }
@@ -116,7 +116,7 @@
             ChannelBuffer txMessage =
                 bgpSession.prepareBgpNotificationBadMessageLength(length);
             ctx.getChannel().write(txMessage);
-            bgpSession.closeChannel(ctx);
+            bgpSession.closeSession(ctx);
             return null;
         }
 
@@ -169,7 +169,7 @@
                 bgpSession.prepareBgpNotification(errorCode, errorSubcode,
                                                   data);
             ctx.getChannel().write(txMessage);
-            bgpSession.closeChannel(ctx);
+            bgpSession.closeSession(ctx);
             return null;
         }
         return null;
diff --git a/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpSession.java b/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpSession.java
index 0c77461..7a3fe45 100644
--- a/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpSession.java
+++ b/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpSession.java
@@ -226,13 +226,22 @@
     }
 
     /**
-     * Closes the channel.
+     * Closes the session.
+     *
+     * @param ctx the Channel Handler Context
+     */
+    void closeSession(ChannelHandlerContext ctx) {
+        timer.stop();
+        closeChannel(ctx);
+    }
+
+    /**
+     * Closes the netty channel.
      *
      * @param ctx the Channel Handler Context
      */
     void closeChannel(ChannelHandlerContext ctx) {
         isClosed = true;
-        timer.stop();
         ctx.getChannel().close();
     }
 
@@ -320,7 +329,7 @@
             ChannelBuffer txMessage = prepareBgpNotificationBadMessageLength(
                 message.readableBytes() + BgpConstants.BGP_HEADER_LENGTH);
             ctx.getChannel().write(txMessage);
-            closeChannel(ctx);
+            closeSession(ctx);
             return;
         }
 
@@ -345,7 +354,7 @@
             ChannelBuffer txMessage =
                 prepareBgpNotification(errorCode, errorSubcode, data);
             ctx.getChannel().write(txMessage);
-            closeChannel(ctx);
+            closeSession(ctx);
             return;
         }
 
@@ -370,7 +379,7 @@
                 ChannelBuffer txMessage =
                     prepareBgpNotification(errorCode, errorSubcode, null);
                 ctx.getChannel().write(txMessage);
-                closeChannel(ctx);
+                closeSession(ctx);
                 return;
             }
         }
@@ -393,7 +402,7 @@
             ChannelBuffer txMessage =
                 prepareBgpNotification(errorCode, errorSubcode, null);
             ctx.getChannel().write(txMessage);
-            closeChannel(ctx);
+            closeSession(ctx);
             return;
         }
 
@@ -416,7 +425,7 @@
             ChannelBuffer txMessage =
                 prepareBgpNotification(errorCode, errorSubcode, null);
             ctx.getChannel().write(txMessage);
-            closeChannel(ctx);
+            closeSession(ctx);
             return;
         }
         // TODO: Parse the optional parameters (if needed)
@@ -485,7 +494,7 @@
             ChannelBuffer txMessage = prepareBgpNotificationBadMessageLength(
                 message.readableBytes() + BgpConstants.BGP_HEADER_LENGTH);
             ctx.getChannel().write(txMessage);
-            closeChannel(ctx);
+            closeSession(ctx);
             return;
         }
 
@@ -1284,7 +1293,7 @@
         ChannelBuffer txMessage =
             prepareBgpNotification(errorCode, errorSubcode, null);
         ctx.getChannel().write(txMessage);
-        closeChannel(ctx);
+        closeSession(ctx);
     }
 
     /**
@@ -1307,7 +1316,7 @@
         ChannelBuffer txMessage =
             prepareBgpNotification(errorCode, errorSubcode, null);
         ctx.getChannel().write(txMessage);
-        closeChannel(ctx);
+        closeSession(ctx);
     }
 
     /**
@@ -1335,7 +1344,7 @@
         ChannelBuffer txMessage =
             prepareBgpNotification(errorCode, errorSubcode, data);
         ctx.getChannel().write(txMessage);
-        closeChannel(ctx);
+        closeSession(ctx);
     }
 
     /**
@@ -1371,7 +1380,7 @@
         ChannelBuffer txMessage =
             prepareBgpNotification(errorCode, errorSubcode, data);
         ctx.getChannel().write(txMessage);
-        closeChannel(ctx);
+        closeSession(ctx);
     }
 
     /**
@@ -1405,7 +1414,7 @@
         ChannelBuffer txMessage =
             prepareBgpNotification(errorCode, errorSubcode, data);
         ctx.getChannel().write(txMessage);
-        closeChannel(ctx);
+        closeSession(ctx);
     }
 
     /**
@@ -1442,7 +1451,7 @@
         ChannelBuffer txMessage =
             prepareBgpNotification(errorCode, errorSubcode, data);
         ctx.getChannel().write(txMessage);
-        closeChannel(ctx);
+        closeSession(ctx);
     }
 
     /**
@@ -1479,7 +1488,7 @@
         ChannelBuffer txMessage =
             prepareBgpNotification(errorCode, errorSubcode, data);
         ctx.getChannel().write(txMessage);
-        closeChannel(ctx);
+        closeSession(ctx);
     }
 
     /**
@@ -1513,7 +1522,7 @@
         ChannelBuffer txMessage =
             prepareBgpNotification(errorCode, errorSubcode, data);
         ctx.getChannel().write(txMessage);
-        closeChannel(ctx);
+        closeSession(ctx);
     }
 
     /**
@@ -1536,7 +1545,7 @@
         ChannelBuffer txMessage =
             prepareBgpNotification(errorCode, errorSubcode, null);
         ctx.getChannel().write(txMessage);
-        closeChannel(ctx);
+        closeSession(ctx);
     }
 
     /**
@@ -1602,7 +1611,7 @@
             ChannelBuffer txMessage = prepareBgpNotificationBadMessageLength(
                 message.readableBytes() + BgpConstants.BGP_HEADER_LENGTH);
             ctx.getChannel().write(txMessage);
-            closeChannel(ctx);
+            closeSession(ctx);
             return;
         }
 
