diff --git a/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrIGPFlags.java b/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrIgpFlags.java
similarity index 66%
rename from bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrIGPFlags.java
rename to bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrIgpFlags.java
index 035d706..a215e6f 100755
--- a/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrIGPFlags.java
+++ b/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrIgpFlags.java
@@ -30,24 +30,24 @@
 /**
  * Implements BGP prefix IGP Flag attribute.
  */
-public class BgpPrefixAttrIGPFlags implements BGPValueType {
+public final class BgpPrefixAttrIgpFlags implements BGPValueType {
 
     protected static final Logger log = LoggerFactory
-            .getLogger(BgpPrefixAttrIGPFlags.class);
+            .getLogger(BgpPrefixAttrIgpFlags.class);
 
     public static final int ATTR_PREFIX_FLAGBIT = 1152;
     public static final int ATTR_PREFIX_FLAG_LEN = 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;
 
     /* Prefix IGP flag bit TLV */
-    private boolean bisisUpDownBit = false;
-    private boolean bOspfNoUnicastBit = false;
-    private boolean bOspfLclAddrBit = false;
-    private boolean bOspfNSSABit = false;
+    private final boolean bisisUpDownBit;
+    private final boolean bOspfNoUnicastBit;
+    private final boolean bOspfLclAddrBit;
+    private final boolean bOspfNSSABit;
 
     /**
      * Constructor to initialize the value.
@@ -57,7 +57,8 @@
      * @param bOspfLclAddrBit OSPF local address Bit
      * @param bOspfNSSABit OSPF propagate NSSA Bit
      */
-    BgpPrefixAttrIGPFlags(boolean bisisUpDownBit, boolean bOspfNoUnicastBit,
+    BgpPrefixAttrIgpFlags(boolean bisisUpDownBit,
+                          boolean bOspfNoUnicastBit,
                           boolean bOspfLclAddrBit, boolean bOspfNSSABit) {
         this.bisisUpDownBit = bisisUpDownBit;
         this.bOspfNoUnicastBit = bOspfNoUnicastBit;
@@ -66,13 +67,30 @@
     }
 
     /**
+     * Returns object of this class with specified values.
+     *
+     * @param bisisUpDownBit IS-IS Up/Down Bit
+     * @param bOspfNoUnicastBit OSPF no unicast Bit
+     * @param bOspfLclAddrBit OSPF local address Bit
+     * @param bOspfNSSABit OSPF propagate NSSA Bit
+     * @return object of BgpPrefixAttrIGPFlags
+     */
+    public static BgpPrefixAttrIgpFlags of(final boolean bisisUpDownBit,
+                                           final boolean bOspfNoUnicastBit,
+                                           final boolean bOspfLclAddrBit,
+                                           final boolean bOspfNSSABit) {
+        return new BgpPrefixAttrIgpFlags(bisisUpDownBit, bOspfNoUnicastBit,
+                                         bOspfLclAddrBit, bOspfNSSABit);
+    }
+
+    /**
      * Reads the IGP Flags.
      *
      * @param cb ChannelBuffer
      * @return object of BgpPrefixAttrIGPFlags
      * @throws BGPParseException while parsing BgpPrefixAttrIGPFlags
      */
-    public static BgpPrefixAttrIGPFlags read(ChannelBuffer cb)
+    public static BgpPrefixAttrIgpFlags read(ChannelBuffer cb)
             throws BGPParseException {
         boolean bisisUpDownBit = false;
         boolean bOspfNoUnicastBit = false;
@@ -90,13 +108,13 @@
 
         byte nodeFlagBits = cb.readByte();
 
-        bisisUpDownBit = ((nodeFlagBits & (byte) FIRST_BIT) == FIRST_BIT);
-        bOspfNoUnicastBit = ((nodeFlagBits & (byte) SECOND_BIT) == SECOND_BIT);
-        bOspfLclAddrBit = ((nodeFlagBits & (byte) THIRD_BIT) == THIRD_BIT);
-        bOspfNSSABit = ((nodeFlagBits & (byte) FOURTH_BIT) == FOURTH_BIT);
+        bisisUpDownBit = ((nodeFlagBits & FIRST_BIT) == FIRST_BIT);
+        bOspfNoUnicastBit = ((nodeFlagBits & SECOND_BIT) == SECOND_BIT);
+        bOspfLclAddrBit = ((nodeFlagBits & THIRD_BIT) == THIRD_BIT);
+        bOspfNSSABit = ((nodeFlagBits & FOURTH_BIT) == FOURTH_BIT);
 
-        return new BgpPrefixAttrIGPFlags(bisisUpDownBit, bOspfNoUnicastBit,
-                                         bOspfLclAddrBit, bOspfNSSABit);
+        return BgpPrefixAttrIgpFlags.of(bisisUpDownBit, bOspfNoUnicastBit,
+                                        bOspfLclAddrBit, bOspfNSSABit);
     }
 
     /**
@@ -104,7 +122,7 @@
      *
      * @return IS-IS Up/Down Bit set or not
      */
-    boolean getisisUpDownBit() {
+    public boolean isisUpDownBit() {
         return bisisUpDownBit;
     }
 
@@ -113,7 +131,7 @@
      *
      * @return OSPF no unicast Bit set or not
      */
-    boolean getOspfNoUnicastBit() {
+    public boolean ospfNoUnicastBit() {
         return bOspfNoUnicastBit;
     }
 
@@ -122,7 +140,7 @@
      *
      * @return OSPF local address Bit set or not
      */
-    boolean getOspfLclAddrBit() {
+    public boolean ospfLclAddrBit() {
         return bOspfLclAddrBit;
     }
 
@@ -131,7 +149,7 @@
      *
      * @return OSPF propagate NSSA Bit set or not
      */
-    boolean getOspfNSSABit() {
+    public boolean ospfNSSABit() {
         return bOspfNSSABit;
     }
 
@@ -158,13 +176,13 @@
             return true;
         }
 
-        if (obj instanceof BgpPrefixAttrIGPFlags) {
-            BgpPrefixAttrIGPFlags other = (BgpPrefixAttrIGPFlags) obj;
+        if (obj instanceof BgpPrefixAttrIgpFlags) {
+            BgpPrefixAttrIgpFlags other = (BgpPrefixAttrIgpFlags) obj;
             return Objects.equals(bisisUpDownBit, other.bisisUpDownBit)
                     && Objects.equals(bOspfNoUnicastBit,
                                       other.bOspfNoUnicastBit)
-                    && Objects.equals(bOspfLclAddrBit, other.bOspfLclAddrBit)
-                    && Objects.equals(bOspfNSSABit, other.bOspfNSSABit);
+                                      && Objects.equals(bOspfLclAddrBit, other.bOspfLclAddrBit)
+                                      && Objects.equals(bOspfNSSABit, other.bOspfNSSABit);
         }
         return false;
     }
diff --git a/bgp/bgpio/src/test/java/org/onosproject/bgp/BgpPrefixAttrIgpFlagsTest.java b/bgp/bgpio/src/test/java/org/onosproject/bgp/BgpPrefixAttrIgpFlagsTest.java
new file mode 100644
index 0000000..fd718f7
--- /dev/null
+++ b/bgp/bgpio/src/test/java/org/onosproject/bgp/BgpPrefixAttrIgpFlagsTest.java
@@ -0,0 +1,54 @@
+/*
+ * 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.BgpPrefixAttrIgpFlags;
+
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Test for BGP prefix IGP Flag attribute.
+ */
+public class BgpPrefixAttrIgpFlagsTest {
+
+    private final boolean bisisUpDownBit = true;
+    private final boolean bOspfNoUnicastBit = true;
+    private final boolean bOspfLclAddrBit = true;
+    private final boolean bOspfNSSABit = true;
+
+    private final boolean bisisUpDownBit1 = false;
+    private final boolean bOspfNoUnicastBit1 = false;
+    private final boolean bOspfLclAddrBit1 = false;
+    private final boolean bOspfNSSABit1 = false;
+
+    private final BgpPrefixAttrIgpFlags data = BgpPrefixAttrIgpFlags
+            .of(bisisUpDownBit, bOspfNoUnicastBit, bOspfLclAddrBit,
+                bOspfNSSABit);
+    private final BgpPrefixAttrIgpFlags sameAsData = BgpPrefixAttrIgpFlags
+            .of(bisisUpDownBit, bOspfNoUnicastBit, bOspfLclAddrBit,
+                bOspfNSSABit);
+    private final BgpPrefixAttrIgpFlags diffData = BgpPrefixAttrIgpFlags
+            .of(bisisUpDownBit1, bOspfNoUnicastBit1, bOspfLclAddrBit1,
+                bOspfNSSABit1);
+
+    @Test
+    public void basics() {
+
+        new EqualsTester().addEqualityGroup(data, sameAsData)
+        .addEqualityGroup(diffData).testEquals();
+    }
+}
\ No newline at end of file
