diff --git a/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/AreaIdTest.java b/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/AreaIdTest.java
index 6a9e2ec..e11564a 100644
--- a/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/AreaIdTest.java
+++ b/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/AreaIdTest.java
@@ -36,42 +36,4 @@
         .addEqualityGroup(tlv2)
         .testEquals();
     }
-
-    /**
-     * Test for OSPFNonPseudonode Tlv.
-     */
-    public static class OspfNonPseudonodeTest {
-        private final int value1 = 0x12121212;
-        private final int value2 = 0x12121211;
-        private final OSPFNonPseudonode tlv1 = OSPFNonPseudonode.of(value1);
-        private final OSPFNonPseudonode sameAsTlv1 = OSPFNonPseudonode.of(value1);
-        private final OSPFNonPseudonode tlv2 = OSPFNonPseudonode.of(value2);
-
-        @Test
-        public void basics() {
-            new EqualsTester()
-            .addEqualityGroup(tlv1, sameAsTlv1)
-            .addEqualityGroup(tlv2)
-            .testEquals();
-        }
-    }
-
-    /**
-     * Test for IsIsNonPseudonode Tlv.
-     */
-    public static class IsIsNonPseudonodeTest {
-        private final byte[] value1 = new byte[] {0x19, 0x00, (byte) 0x95, 0x01, (byte) 0x90, 0x58};
-        private final byte[] value2 = new byte[] {0x19, 0x00, (byte) 0x95, 0x01, (byte) 0x90, 0x59};
-        private final IsIsNonPseudonode tlv1 = IsIsNonPseudonode.of(value1);
-        private final IsIsNonPseudonode sameAsTlv1 = IsIsNonPseudonode.of(value1);
-        private final IsIsNonPseudonode tlv2 = IsIsNonPseudonode.of(value2);
-
-        @Test
-        public void basics() {
-            new EqualsTester()
-            .addEqualityGroup(tlv1, sameAsTlv1)
-            .addEqualityGroup(tlv2)
-            .testEquals();
-        }
-    }
 }
diff --git a/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/IsIsNonPseudonodeTest.java b/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/IsIsNonPseudonodeTest.java
new file mode 100644
index 0000000..7ce4d5d
--- /dev/null
+++ b/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/IsIsNonPseudonodeTest.java
@@ -0,0 +1,39 @@
+/*
+ * 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.bgpio.types;
+
+import org.junit.Test;
+
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Test for IsIsNonPseudonode Tlv.
+ */
+public class IsIsNonPseudonodeTest {
+    private final byte[] value1 = new byte[] {0x19, 0x00, (byte) 0x95, 0x01, (byte) 0x90, 0x58};
+    private final byte[] value2 = new byte[] {0x19, 0x00, (byte) 0x95, 0x01, (byte) 0x90, 0x59};
+    private final IsIsNonPseudonode tlv1 = IsIsNonPseudonode.of(value1);
+    private final IsIsNonPseudonode sameAsTlv1 = IsIsNonPseudonode.of(value1);
+    private final IsIsNonPseudonode tlv2 = IsIsNonPseudonode.of(value2);
+
+    @Test
+    public void testEquality() {
+        new EqualsTester()
+        .addEqualityGroup(tlv1, sameAsTlv1)
+        .addEqualityGroup(tlv2)
+        .testEquals();
+    }
+}
diff --git a/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/IsIsPseudonodeTest.java b/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/IsIsPseudonodeTest.java
index 00e85dc..a2a7c2b 100644
--- a/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/IsIsPseudonodeTest.java
+++ b/bgp/bgpio/src/test/java/org/onosproject/bgpio/types/IsIsPseudonodeTest.java
@@ -15,11 +15,6 @@
  */
 package org.onosproject.bgpio.types;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import org.jboss.netty.buffer.ChannelBuffer;
-import org.jboss.netty.buffer.ChannelBuffers;
 import org.junit.Test;
 
 import com.google.common.testing.EqualsTester;
@@ -29,28 +24,13 @@
  */
 public class IsIsPseudonodeTest {
     private final byte[] value1 = new byte[] {0x01, 0x02, 0x01, 0x02, 0x01, 0x02};
-    byte value;
-    List<Byte> isoNodeID1 = new ArrayList<Byte>();
-    ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
     private final byte[] value2 = new byte[] {0x01, 0x02, 0x01, 0x02, 0x01, 0x03};
-    List<Byte> isoNodeID2 = new ArrayList<Byte>();
-    ChannelBuffer buffer1 = ChannelBuffers.dynamicBuffer();
-    private final IsIsPseudonode tlv1 = IsIsPseudonode.of(isoNodeID1, (byte) 1);
-    private final IsIsPseudonode sameAsTlv1 = IsIsPseudonode.of(isoNodeID1, (byte) 1);
-    private final IsIsPseudonode tlv2 = IsIsPseudonode.of(isoNodeID2, (byte) 1);
+    private final IsIsPseudonode tlv1 = IsIsPseudonode.of(value1, (byte) 1);
+    private final IsIsPseudonode sameAsTlv1 = IsIsPseudonode.of(value1, (byte) 1);
+    private final IsIsPseudonode tlv2 = IsIsPseudonode.of(value2, (byte) 1);
 
     @Test
     public void testEquality() {
-        buffer.writeBytes(value1);
-        for (int i = 0; i < 6; i++) {
-            value = buffer.readByte();
-            isoNodeID1.add(value);
-        }
-        buffer1.writeBytes(value2);
-        for (int i = 0; i < 6; i++) {
-            value = buffer1.readByte();
-            isoNodeID1.add(value);
-        }
         new EqualsTester()
         .addEqualityGroup(tlv1, sameAsTlv1)
         .addEqualityGroup(tlv2)
