diff --git a/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPNotificationMsg.java b/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPNotificationMsg.java
index 56540dd..a1d9d57 100644
--- a/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPNotificationMsg.java
+++ b/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPNotificationMsg.java
@@ -16,36 +16,34 @@
 package org.onosproject.bgpio.protocol;
 
 import org.onosproject.bgpio.exceptions.BGPParseException;
-import org.onosproject.bgpio.types.BGPHeader;
 
 /**
- * Abstraction of an entity providing BGP Notification Message.
+ * Abstraction of an entity providing BGP notification message.
  */
 public interface BGPNotificationMsg extends BGPMessage {
     /**
-     * Returns errorCode in Notification message.
+     * Returns errorCode in notification message.
      *
-     * @return errorCode in Notification message
+     * @return errorCode in notification message
      */
     byte getErrorCode();
 
     /**
-     * Returns error SubCode in Notification message.
+     * Returns error subCode in notification message.
      *
-     * @return error SubCode in Notification message
+     * @return error subCode in notification message
      */
     byte getErrorSubCode();
 
     /**
-     * Returns error data in Notification message.
+     * Returns error data in notification message.
      *
-     * @return error data in Notification message
+     * @return error data in notification message
      */
     byte[] getData();
 
     /**
-     * Builder interface with get and set functions to build Notification
-     * message.
+     * Builder interface with get and set functions to build notification message.
      */
     public interface Builder extends BGPMessage.Builder {
 
@@ -53,26 +51,18 @@
         BGPNotificationMsg build() throws BGPParseException;
 
         /**
-         * Sets notification message header and returns its builder.
-         *
-         * @param header of notification message
-         * @return Builder by setting notification message header
-         */
-        Builder setNotificationMsgHeader(BGPHeader header);
-
-        /**
          * Sets errorCode in notification message and return its builder.
          *
          * @param errorCode in notification message
-         * @return builder by setting ErrorCode in notification message
+         * @return builder by setting errorCode in notification message
          */
         Builder setErrorCode(byte errorCode);
 
         /**
-         * Sets error SubCode in notification message and return its builder.
+         * Sets error subCode in notification message and return its builder.
          *
-         * @param errorSubCode in notification Message
-         * @return builder by setting ErrorSubCode in notification Message
+         * @param errorSubCode in notification message
+         * @return builder by setting error subCode in notification message
          */
         Builder setErrorSubCode(byte errorSubCode);
 
diff --git a/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BGPNotificationMsgVer4.java b/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BGPNotificationMsgVer4.java
index 064dead..3bddd37 100644
--- a/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BGPNotificationMsgVer4.java
+++ b/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BGPNotificationMsgVer4.java
@@ -44,7 +44,7 @@
               REFERENCE : RFC 4271
     */
 
-    protected static final Logger log = LoggerFactory.getLogger(BGPNotificationMsgVer4.class);
+    private static final Logger log = LoggerFactory.getLogger(BGPNotificationMsgVer4.class);
 
     static final byte PACKET_VERSION = 4;
     //BGPHeader(19) + Error code(1) + Error subcode(1)
@@ -52,8 +52,10 @@
     static final int PACKET_MINIMUM_LENGTH = 2;
     static final BGPType MSG_TYPE = BGPType.NOTIFICATION;
     static final byte DEFAULT_ERRORSUBCODE = 0;
-    static final byte[] MARKER = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-            0x01, 0x01};
+    static final byte[] MARKER = {(byte) 0xff, (byte) 0xff, (byte) 0xff,
+            (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
+            (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
+            (byte) 0xff, (byte) 0xff, (byte) 0xff };
     static final byte MESSAGE_TYPE = 3;
     static final BGPHeader DEFAULT_MESSAGE_HEADER = new BGPHeader(MARKER, BGPHeader.DEFAULT_HEADER_LENGTH,
                                                                   MESSAGE_TYPE);
@@ -65,7 +67,7 @@
     public static final BGPNotificationMsgVer4.Reader READER = new Reader();
 
     /**
-     * Resets fields.
+     * Initialize fields.
      */
     public BGPNotificationMsgVer4() {
         this.bgpHeader = null;
@@ -154,13 +156,6 @@
         }
 
         @Override
-        public Builder setNotificationMsgHeader(BGPHeader header) {
-            this.bgpHeader = header;
-            this.isBGPHeaderSet = true;
-            return this;
-        }
-
-        @Override
         public Builder setHeader(BGPHeader bgpMsgHeader) {
             this.bgpHeader = bgpMsgHeader;
             return this;
