diff --git a/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpAttrNodeFlagBitTlv.java b/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpAttrNodeFlagBitTlv.java
index ba02f6d..e7f4a4c 100755
--- a/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpAttrNodeFlagBitTlv.java
+++ b/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpAttrNodeFlagBitTlv.java
@@ -30,7 +30,7 @@
 /**
  * Implements BGP attribute node flag.
  */
-public class BgpAttrNodeFlagBitTlv implements BGPValueType {
+public final class BgpAttrNodeFlagBitTlv implements BGPValueType {
 
     protected static final Logger log = LoggerFactory
             .getLogger(BgpAttrNodeFlagBitTlv.class);
@@ -38,16 +38,15 @@
     public static final int ATTRNODE_FLAGBIT = 1024;
 
     /* Node flag bit TLV */
-    private boolean bOverloadBit;
-    private boolean bAttachedBit;
-    private boolean bExternalBit;
-    private boolean bABRBit;
+    private final boolean bOverloadBit;
+    private final boolean bAttachedBit;
+    private final boolean bExternalBit;
+    private final boolean bAbrBit;
 
-    public static final int BIT_SET = 1;
-    public static final int FIRST_BIT = 0x80;
-    public static final int SECOND_BIT = 0x40;
-    public static final int THIRD_BIT = 0x20;
-    public static final int FOURTH_BIT = 0x01;
+    public static final byte FIRST_BIT = (byte) 0x80;
+    public static final byte SECOND_BIT = 0x40;
+    public static final byte THIRD_BIT = 0x20;
+    public static final byte FOURTH_BIT = 0x01;
 
     /**
      * Constructor to initialize parameters.
@@ -55,14 +54,31 @@
      * @param bOverloadBit Overload bit
      * @param bAttachedBit Attached bit
      * @param bExternalBit External bit
-     * @param bABRBit ABR Bit
+     * @param bAbrBit ABR Bit
      */
-    BgpAttrNodeFlagBitTlv(boolean bOverloadBit, boolean bAttachedBit,
-                          boolean bExternalBit, boolean bABRBit) {
+    private BgpAttrNodeFlagBitTlv(boolean bOverloadBit, boolean bAttachedBit,
+                                  boolean bExternalBit, boolean bAbrBit) {
         this.bOverloadBit = bOverloadBit;
         this.bAttachedBit = bAttachedBit;
         this.bExternalBit = bExternalBit;
-        this.bABRBit = bABRBit;
+        this.bAbrBit = bAbrBit;
+    }
+
+    /**
+     * Returns object of this class with specified values.
+     *
+     * @param bOverloadBit Overload bit
+     * @param bAttachedBit Attached bit
+     * @param bExternalBit External bit
+     * @param bAbrBit ABR Bit
+     * @return object of BgpAttrNodeFlagBitTlv
+     */
+    public static BgpAttrNodeFlagBitTlv of(final boolean bOverloadBit,
+                                           final boolean bAttachedBit,
+                                           final boolean bExternalBit,
+                                           final boolean bAbrBit) {
+        return new BgpAttrNodeFlagBitTlv(bOverloadBit, bAttachedBit,
+                                         bExternalBit, bAbrBit);
     }
 
     /**
@@ -77,11 +93,11 @@
         boolean bOverloadBit = false;
         boolean bAttachedBit = false;
         boolean bExternalBit = false;
-        boolean bABRBit = false;
+        boolean bAbrBit = false;
 
         short lsAttrLength = cb.readShort();
 
-        if (lsAttrLength != 1) {
+        if ((lsAttrLength != 1) || (cb.readableBytes() < lsAttrLength)) {
             Validation.validateLen(BGPErrorType.UPDATE_MESSAGE_ERROR,
                                    BGPErrorType.ATTRIBUTE_LENGTH_ERROR,
                                    lsAttrLength);
@@ -89,13 +105,13 @@
 
         byte nodeFlagBits = cb.readByte();
 
-        bOverloadBit = ((nodeFlagBits & (byte) FIRST_BIT) == FIRST_BIT);
-        bAttachedBit = ((nodeFlagBits & (byte) SECOND_BIT) == SECOND_BIT);
-        bExternalBit = ((nodeFlagBits & (byte) THIRD_BIT) == THIRD_BIT);
-        bABRBit = ((nodeFlagBits & (byte) FOURTH_BIT) == FOURTH_BIT);
+        bOverloadBit = ((nodeFlagBits & FIRST_BIT) == FIRST_BIT);
+        bAttachedBit = ((nodeFlagBits & SECOND_BIT) == SECOND_BIT);
+        bExternalBit = ((nodeFlagBits & THIRD_BIT) == THIRD_BIT);
+        bAbrBit = ((nodeFlagBits & FOURTH_BIT) == FOURTH_BIT);
 
-        return new BgpAttrNodeFlagBitTlv(bOverloadBit, bAttachedBit,
-                                         bExternalBit, bABRBit);
+        return BgpAttrNodeFlagBitTlv.of(bOverloadBit, bAttachedBit,
+                                        bExternalBit, bAbrBit);
     }
 
     /**
@@ -103,7 +119,7 @@
      *
      * @return Overload Bit
      */
-    boolean getOverLoadBit() {
+    public boolean overLoadBit() {
         return bOverloadBit;
     }
 
@@ -112,7 +128,7 @@
      *
      * @return Attached Bit
      */
-    boolean getAttachedBit() {
+    public boolean attachedBit() {
         return bAttachedBit;
     }
 
@@ -121,7 +137,7 @@
      *
      * @return External Bit
      */
-    boolean getExternalBit() {
+    public boolean externalBit() {
         return bExternalBit;
     }
 
@@ -130,8 +146,8 @@
      *
      * @return ABR Bit
      */
-    boolean getABRBit() {
-        return bABRBit;
+    public boolean abrBit() {
+        return bAbrBit;
     }
 
     @Override
@@ -141,13 +157,13 @@
 
     @Override
     public int write(ChannelBuffer cb) {
-        // TODO will be implementing it later
+        // TODO This will be implemented in the next version
         return 0;
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(bOverloadBit, bAttachedBit, bExternalBit, bABRBit);
+        return Objects.hash(bOverloadBit, bAttachedBit, bExternalBit, bAbrBit);
     }
 
     @Override
@@ -161,7 +177,7 @@
             return Objects.equals(bOverloadBit, other.bOverloadBit)
                     && Objects.equals(bAttachedBit, other.bAttachedBit)
                     && Objects.equals(bExternalBit, other.bExternalBit)
-                    && Objects.equals(bABRBit, other.bABRBit);
+                    && Objects.equals(bAbrBit, other.bAbrBit);
         }
         return false;
     }
@@ -171,7 +187,7 @@
         return MoreObjects.toStringHelper(getClass())
                 .add("bOverloadBit", bOverloadBit)
                 .add("bAttachedBit", bAttachedBit)
-                .add("bExternalBit", bExternalBit).add("bABRBit", bABRBit)
+                .add("bExternalBit", bExternalBit).add("bAbrBit", bAbrBit)
                 .toString();
     }
 }
diff --git a/bgp/bgpio/src/test/java/org/onosproject/bgp/BgpAttrNodeFlagBitTlvTest.java b/bgp/bgpio/src/test/java/org/onosproject/bgp/BgpAttrNodeFlagBitTlvTest.java
new file mode 100644
index 0000000..5f1411f
--- /dev/null
+++ b/bgp/bgpio/src/test/java/org/onosproject/bgp/BgpAttrNodeFlagBitTlvTest.java
@@ -0,0 +1,51 @@
+/*
+ * 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.bgp;
+
+import org.junit.Test;
+import org.onosproject.bgpio.types.attr.BgpAttrNodeFlagBitTlv;
+
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Test for BGP attribute node flag.
+ */
+public class BgpAttrNodeFlagBitTlvTest {
+
+    private final boolean bOverloadBit = true;
+    private final boolean bAttachedBit = true;
+    private final boolean bExternalBit = true;
+    private final boolean bABRBit = true;
+
+    private final boolean bOverloadBit1 = false;
+    private final boolean bAttachedBit1 = false;
+    private final boolean bExternalBit1 = false;
+    private final boolean bABRBit1 = false;
+
+    private final BgpAttrNodeFlagBitTlv data = BgpAttrNodeFlagBitTlv
+            .of(bOverloadBit, bAttachedBit, bExternalBit, bABRBit);
+    private final BgpAttrNodeFlagBitTlv sameAsData = BgpAttrNodeFlagBitTlv
+            .of(bOverloadBit, bAttachedBit, bExternalBit, bABRBit);
+    private final BgpAttrNodeFlagBitTlv diffData = BgpAttrNodeFlagBitTlv
+            .of(bOverloadBit1, bAttachedBit1, bExternalBit1, bABRBit1);
+
+    @Test
+    public void basics() {
+
+        new EqualsTester().addEqualityGroup(data, sameAsData)
+        .addEqualityGroup(diffData).testEquals();
+    }
+}
\ No newline at end of file
