diff --git a/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/BgpUpdateLinkStateAttrTest.java b/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/BgpUpdateLinkStateAttrTest.java
index eda343f..3195d21 100644
--- a/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/BgpUpdateLinkStateAttrTest.java
+++ b/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/BgpUpdateLinkStateAttrTest.java
@@ -35,7 +35,7 @@
 import org.onosproject.bgpio.types.Med;
 import org.onosproject.bgpio.types.MpReachNlri;
 import org.onosproject.bgpio.types.Origin;
-import org.onosproject.bgpio.types.Origin.ORIGINTYPE;
+import org.onosproject.bgpio.types.Origin.OriginType;
 import org.onosproject.bgpio.types.attr.BgpAttrNodeFlagBitTlv;
 import org.onosproject.bgpio.types.attr.BgpAttrNodeIsIsAreaId;
 import org.onosproject.bgpio.types.attr.BgpAttrNodeMultiTopologyId;
@@ -132,7 +132,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         //compare Origin
         testPathAttribute = listIterator.next();
@@ -250,7 +250,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -363,7 +363,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -477,7 +477,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -594,7 +594,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -713,7 +713,7 @@
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
 
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -827,7 +827,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -945,7 +945,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -1063,7 +1063,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -1175,7 +1175,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -1288,7 +1288,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -1400,7 +1400,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -1513,7 +1513,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -1626,7 +1626,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -1739,7 +1739,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -1840,7 +1840,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -1935,7 +1935,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
diff --git a/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/BgpUpdateMsgTest.java b/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/BgpUpdateMsgTest.java
index bc9fef2..7170947 100644
--- a/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/BgpUpdateMsgTest.java
+++ b/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/BgpUpdateMsgTest.java
@@ -16,10 +16,6 @@
 package org.onosproject.bgpio.protocol;
 
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.core.Is.is;
-
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.buffer.ChannelBuffers;
 import org.junit.Test;
@@ -43,13 +39,13 @@
 import org.onosproject.bgpio.types.IsIsNonPseudonode;
 import org.onosproject.bgpio.types.IsIsPseudonode;
 import org.onosproject.bgpio.types.LinkStateAttributes;
+import org.onosproject.bgpio.types.LocalPref;
 import org.onosproject.bgpio.types.Med;
 import org.onosproject.bgpio.types.MpReachNlri;
 import org.onosproject.bgpio.types.MpUnReachNlri;
-import org.onosproject.bgpio.types.Origin;
 import org.onosproject.bgpio.types.NextHop;
-import org.onosproject.bgpio.types.LocalPref;
-import org.onosproject.bgpio.types.Origin.ORIGINTYPE;
+import org.onosproject.bgpio.types.Origin;
+import org.onosproject.bgpio.types.Origin.OriginType;
 import org.onosproject.bgpio.types.attr.BgpAttrRouterIdV4;
 import org.onosproject.bgpio.types.attr.BgpLinkAttrName;
 import org.onosproject.bgpio.types.attr.BgpPrefixAttrExtRouteTag;
@@ -61,6 +57,10 @@
 import java.util.List;
 import java.util.ListIterator;
 
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.core.Is.is;
+
 /**
  * Test cases for BGP update Message.
  */
@@ -255,7 +255,7 @@
         BgpPathAttributes actualpathAttribute = other.bgpPathAttributes();
         pathAttributes = actualpathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributes.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -639,7 +639,7 @@
         BgpPathAttributes actualpathAttribute = other.bgpPathAttributes();
         pathAttributes = actualpathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributes.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -684,13 +684,13 @@
         assertThat(testAutonomousSystemTlv.getAsNum(), is(2222));
         assertThat(testAutonomousSystemTlv.getType(), is((short) 512));
 
-        BgpLSIdentifierTlv testBGPLSIdentifierTlv = (BgpLSIdentifierTlv) subtlvlist1.next();
-        assertThat(testBGPLSIdentifierTlv.getBgpLsIdentifier(), is(33686018));
-        assertThat(testBGPLSIdentifierTlv.getType(), is((short) 513));
+        BgpLSIdentifierTlv testBgpLsIdentifierTlv = (BgpLSIdentifierTlv) subtlvlist1.next();
+        assertThat(testBgpLsIdentifierTlv.getBgpLsIdentifier(), is(33686018));
+        assertThat(testBgpLsIdentifierTlv.getType(), is((short) 513));
 
         IsIsNonPseudonode testIsIsNonPseudonode = (IsIsNonPseudonode) subtlvlist1.next();
-        byte[] expISONodeID = new byte[] {0x19, 0x00, (byte) 0x95, 0x01, (byte) 0x90, 0x58};
-        assertThat(testIsIsNonPseudonode.getISONodeID(), is(expISONodeID));
+        byte[] expIsoNodeId = new byte[] {0x19, 0x00, (byte) 0x95, 0x01, (byte) 0x90, 0x58};
+        assertThat(testIsIsNonPseudonode.getIsoNodeId(), is(expIsoNodeId));
         assertThat(testIsIsNonPseudonode.getType(), is((short) 515));
 
     }
@@ -763,7 +763,7 @@
         BgpPathAttributes actualpathAttribute = other.bgpPathAttributes();
         pathAttributes = actualpathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributes.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -807,13 +807,13 @@
         assertThat(testAutonomousSystemTlv.getAsNum(), is(2222));
         assertThat(testAutonomousSystemTlv.getType(), is((short) 512));
 
-        BgpLSIdentifierTlv testBGPLSIdentifierTlv = (BgpLSIdentifierTlv) subtlvlist1.next();
-        assertThat(testBGPLSIdentifierTlv.getBgpLsIdentifier(), is(33686018));
-        assertThat(testBGPLSIdentifierTlv.getType(), is((short) 513));
+        BgpLSIdentifierTlv testBgpLsIdentifierTlv = (BgpLSIdentifierTlv) subtlvlist1.next();
+        assertThat(testBgpLsIdentifierTlv.getBgpLsIdentifier(), is(33686018));
+        assertThat(testBgpLsIdentifierTlv.getType(), is((short) 513));
 
         IsIsNonPseudonode testIsIsNonPseudonode = (IsIsNonPseudonode) subtlvlist1.next();
-        byte[] expISONodeID = new byte[] {0x19, 0x21, 0x68, 0x07, 0x70, 0x01};
-        assertThat(testIsIsNonPseudonode.getISONodeID(), is(expISONodeID));
+        byte[] expIsoNodeId = new byte[] {0x19, 0x21, 0x68, 0x07, 0x70, 0x01};
+        assertThat(testIsIsNonPseudonode.getIsoNodeId(), is(expIsoNodeId));
         assertThat(testIsIsNonPseudonode.getType(), is((short) 515));
 
         List<BgpValueType> testPrefixDescriptors =  new LinkedList<>();
@@ -885,7 +885,7 @@
         BgpPathAttributes actualpathAttribute = other.bgpPathAttributes();
         pathAttributes = actualpathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributes.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -930,12 +930,12 @@
         assertThat(testAutonomousSystemTlv.getAsNum(), is(2222));
         assertThat(testAutonomousSystemTlv.getType(), is((short) 512));
 
-        BgpLSIdentifierTlv testBGPLSIdentifierTlv = (BgpLSIdentifierTlv) subtlvlist1.next();
-        assertThat(testBGPLSIdentifierTlv.getBgpLsIdentifier(), is(33686018));
-        assertThat(testBGPLSIdentifierTlv.getType(), is((short) 513));
+        BgpLSIdentifierTlv testBgpLsIdentifierTlv = (BgpLSIdentifierTlv) subtlvlist1.next();
+        assertThat(testBgpLsIdentifierTlv.getBgpLsIdentifier(), is(33686018));
+        assertThat(testBgpLsIdentifierTlv.getType(), is((short) 513));
 
         IsIsPseudonode testIsIsPseudonode = (IsIsPseudonode) subtlvlist1.next();
-        assertThat(testIsIsPseudonode.getPSNIdentifier(), is((byte) 3));
+        assertThat(testIsIsPseudonode.getPsnIdentifier(), is((byte) 3));
         assertThat(testIsIsPseudonode.getType(), is((short) 515));
 
         NodeDescriptors testRemoteNodeDescriptors = testlinknlri.remoteNodeDescriptors();
@@ -947,13 +947,13 @@
         assertThat(testAutonomousSystemTlv.getAsNum(), is(2222));
         assertThat(testAutonomousSystemTlv.getType(), is((short) 512));
 
-        testBGPLSIdentifierTlv = (BgpLSIdentifierTlv) subtlvlist2.next();
-        assertThat(testBGPLSIdentifierTlv.getBgpLsIdentifier(), is(33686018));
-        assertThat(testBGPLSIdentifierTlv.getType(), is((short) 513));
+        testBgpLsIdentifierTlv = (BgpLSIdentifierTlv) subtlvlist2.next();
+        assertThat(testBgpLsIdentifierTlv.getBgpLsIdentifier(), is(33686018));
+        assertThat(testBgpLsIdentifierTlv.getType(), is((short) 513));
 
         IsIsNonPseudonode testIsIsNonPseudonode = (IsIsNonPseudonode) subtlvlist2.next();
-        byte[] expISONodeID = new byte[] {0x19, 0x00, (byte) 0x95, 0x02, 0x50, 0x21};
-        assertThat(testIsIsNonPseudonode.getISONodeID(), is(expISONodeID));
+        byte[] expIsoNodeId = new byte[] {0x19, 0x00, (byte) 0x95, 0x02, 0x50, 0x21};
+        assertThat(testIsIsNonPseudonode.getIsoNodeId(), is(expIsoNodeId));
         assertThat(testIsIsNonPseudonode.getType(), is((short) 515));
     }
 
@@ -1231,7 +1231,7 @@
         BgpPathAttributes actualpathAttribute = other.bgpPathAttributes();
         pathAttributes = actualpathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributes.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -1239,7 +1239,7 @@
 
         testPathAttribute = listIterator.next();
         as4Path = (As4Path) testPathAttribute;
-        ListIterator<Integer> listIterator2 = as4Path.as4PathSEQ().listIterator();
+        ListIterator<Integer> listIterator2 = as4Path.as4PathSeq().listIterator();
         assertThat(listIterator2.next(), is(655361));
 
         testPathAttribute = listIterator.next();
@@ -1309,7 +1309,7 @@
         BgpPathAttributes actualpathAttribute = other.bgpPathAttributes();
         pathAttributes = actualpathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributes.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -1355,13 +1355,13 @@
         assertThat(testAutonomousSystemTlv.getAsNum(), is(2222));
         assertThat(testAutonomousSystemTlv.getType(), is((short) 512));
 
-        BgpLSIdentifierTlv testBGPLSIdentifierTlv = (BgpLSIdentifierTlv) subtlvlist1.next();
-        assertThat(testBGPLSIdentifierTlv.getBgpLsIdentifier(), is(33686018));
-        assertThat(testBGPLSIdentifierTlv.getType(), is((short) 513));
+        BgpLSIdentifierTlv testBgpLsIdentifierTlv = (BgpLSIdentifierTlv) subtlvlist1.next();
+        assertThat(testBgpLsIdentifierTlv.getBgpLsIdentifier(), is(33686018));
+        assertThat(testBgpLsIdentifierTlv.getType(), is((short) 513));
 
         IsIsNonPseudonode testIsIsNonPseudonode = (IsIsNonPseudonode) subtlvlist1.next();
-        byte[] expISONodeID = new byte[] {0x19, 0x00, (byte) 0x95, 0x01, (byte) 0x90, 0x58};
-        assertThat(testIsIsNonPseudonode.getISONodeID(), is(expISONodeID));
+        byte[] expIsoNodeId = new byte[] {0x19, 0x00, (byte) 0x95, 0x01, (byte) 0x90, 0x58};
+        assertThat(testIsIsNonPseudonode.getIsoNodeId(), is(expIsoNodeId));
         assertThat(testIsIsNonPseudonode.getType(), is((short) 515));
     }
 
@@ -1753,7 +1753,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -1857,7 +1857,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
@@ -1954,7 +1954,7 @@
         BgpPathAttributes pathAttribute = other.bgpPathAttributes();
         pathAttributeList = pathAttribute.pathAttributes();
         ListIterator<BgpValueType> listIterator = pathAttributeList.listIterator();
-        ORIGINTYPE originValue = org.onosproject.bgpio.types.Origin.ORIGINTYPE.IGP;
+        OriginType originValue = OriginType.IGP;
 
         testPathAttribute = listIterator.next();
         origin = (Origin) testPathAttribute;
diff --git a/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/OspfPseudonodeTest.java b/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/OspfPseudonodeTest.java
index a800231..042447c 100644
--- a/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/OspfPseudonodeTest.java
+++ b/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/OspfPseudonodeTest.java
@@ -28,9 +28,9 @@
     private final int value2 = 0xc3223406;
     private final Ip4Address drInterface1 = Ip4Address.valueOf(0xaf91e01);
     private final Ip4Address drInterface2 = Ip4Address.valueOf(0xaf91e02);
-    private final OSPFPseudonode tlv1 = OSPFPseudonode.of(value1, drInterface1);
-    private final OSPFPseudonode sameAsTlv1 = OSPFPseudonode.of(value1, drInterface1);
-    private final OSPFPseudonode tlv2 = OSPFPseudonode.of(value2, drInterface2);
+    private final OspfPseudonode tlv1 = OspfPseudonode.of(value1, drInterface1);
+    private final OspfPseudonode sameAsTlv1 = OspfPseudonode.of(value1, drInterface1);
+    private final OspfPseudonode tlv2 = OspfPseudonode.of(value2, drInterface2);
 
     @Test
     public void testEquality() {
diff --git a/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/OspfRouteTypeTest.java b/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/OspfRouteTypeTest.java
index 859bdbe..6ea31ea 100644
--- a/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/OspfRouteTypeTest.java
+++ b/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/OspfRouteTypeTest.java
@@ -25,9 +25,9 @@
 public class OspfRouteTypeTest {
     private final byte value1 = 5;
     private final byte value2 = 4;
-    private final OSPFRouteTypeTlv tlv1 = OSPFRouteTypeTlv.of(value1);
-    private final OSPFRouteTypeTlv sameAsTlv1 = OSPFRouteTypeTlv.of(value1);
-    private final OSPFRouteTypeTlv tlv2 = OSPFRouteTypeTlv.of(value2);
+    private final OspfRouteTypeTlv tlv1 = OspfRouteTypeTlv.of(value1);
+    private final OspfRouteTypeTlv sameAsTlv1 = OspfRouteTypeTlv.of(value1);
+    private final OspfRouteTypeTlv tlv2 = OspfRouteTypeTlv.of(value2);
 
     @Test
     public void testEquality() {
