diff --git a/src/test/java/org/opencord/dhcpl2relay/DhcpL2RelayTest.java b/src/test/java/org/opencord/dhcpl2relay/DhcpL2RelayTest.java
index e6f97a8..66c9b4e 100755
--- a/src/test/java/org/opencord/dhcpl2relay/DhcpL2RelayTest.java
+++ b/src/test/java/org/opencord/dhcpl2relay/DhcpL2RelayTest.java
@@ -15,61 +15,55 @@
  */
 package org.opencord.dhcpl2relay;
 
-import org.easymock.EasyMock;
-
-import com.google.common.collect.Lists;
 import com.google.common.collect.ImmutableSet;
-
+import com.google.common.collect.Lists;
+import org.easymock.EasyMock;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-
 import org.onlab.osgi.ComponentContextAdapter;
 import org.onlab.packet.ChassisId;
 import org.onlab.packet.DHCP;
 import org.onlab.packet.DHCPOption;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.Ip4Address;
+import org.onlab.packet.Ethernet;
 import org.onlab.packet.IPv4;
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.UDP;
 import org.onlab.packet.VlanId;
-
-import org.onosproject.mastership.MastershipServiceAdapter;
-import org.onosproject.net.Annotations;
-import org.onosproject.net.AnnotationKeys;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.PortNumber;
 import org.onosproject.cfg.ComponentConfigService;
 import org.onosproject.core.CoreServiceAdapter;
-import org.onosproject.net.config.Config;
-import org.onosproject.net.config.NetworkConfigRegistryAdapter;
+import org.onosproject.mastership.MastershipServiceAdapter;
+import org.onosproject.net.AnnotationKeys;
+import org.onosproject.net.Annotations;
 import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.device.DeviceServiceAdapter;
+import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.DefaultDevice;
 import org.onosproject.net.DefaultHost;
 import org.onosproject.net.Device;
+import org.onosproject.net.DeviceId;
 import org.onosproject.net.Element;
-import org.onosproject.net.host.HostServiceAdapter;
 import org.onosproject.net.Host;
 import org.onosproject.net.HostId;
 import org.onosproject.net.HostLocation;
-import org.onosproject.net.provider.ProviderId;
 import org.onosproject.net.Port;
-
-import org.opencord.dhcpl2relay.packet.DhcpEthernet;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.config.Config;
+import org.onosproject.net.config.NetworkConfigRegistryAdapter;
+import org.onosproject.net.device.DeviceServiceAdapter;
+import org.onosproject.net.host.HostServiceAdapter;
+import org.onosproject.net.provider.ProviderId;
 import org.opencord.dhcpl2relay.packet.DhcpOption82;
 import org.opencord.sadis.SubscriberAndDeviceInformation;
 import org.opencord.sadis.SubscriberAndDeviceInformationService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.nio.ByteBuffer;
 import java.util.List;
 import java.util.Set;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import static org.junit.Assert.assertEquals;
 
 public class DhcpL2RelayTest extends DhcpL2RelayTestBase {
@@ -132,11 +126,11 @@
     public void testDhcpDiscover()  throws Exception {
         //  (1) Sending DHCP discover packet
         System.out.println("Sending pakcet");
-        DhcpEthernet discoverPacket = constructDhcpDiscoverPacket(CLIENT_MAC);
+        Ethernet discoverPacket = constructDhcpDiscoverPacket(CLIENT_MAC);
 
         sendPacket(discoverPacket, ConnectPoint.deviceConnectPoint(OLT_DEV_ID + "/" + 1));
 
-        DhcpEthernet discoverRelayed = (DhcpEthernet) getPacket();
+        Ethernet discoverRelayed = (Ethernet) getPacket();
         compareClientPackets(discoverPacket, discoverRelayed);
     }
 
@@ -149,11 +143,11 @@
     public void testDhcpRequest()  throws Exception {
         //  (1) Sending DHCP discover packet
         System.out.println("Sending pakcet");
-        DhcpEthernet requestPacket = constructDhcpRequestPacket(CLIENT_MAC);
+        Ethernet requestPacket = constructDhcpRequestPacket(CLIENT_MAC);
 
         sendPacket(requestPacket, ConnectPoint.deviceConnectPoint(OLT_DEV_ID + "/" + 1));
 
-        DhcpEthernet requestRelayed = (DhcpEthernet) getPacket();
+        Ethernet requestRelayed = (Ethernet) getPacket();
         compareClientPackets(requestPacket, requestRelayed);
     }
 
@@ -166,12 +160,12 @@
     public void testDhcpOffer() {
         //  (1) Sending DHCP discover packet
         System.out.println("Sending pakcet");
-        DhcpEthernet offerPacket = constructDhcpOfferPacket(MacAddress.valueOf("bb:bb:bb:bb:bb:bb"),
+        Ethernet offerPacket = constructDhcpOfferPacket(MacAddress.valueOf("bb:bb:bb:bb:bb:bb"),
                 CLIENT_MAC, "1.1.1.1", "2.2.2.2");
 
         sendPacket(offerPacket, ConnectPoint.deviceConnectPoint(OLT_DEV_ID + "/" + 1));
 
-        DhcpEthernet offerRelayed = (DhcpEthernet) getPacket();
+        Ethernet offerRelayed = (Ethernet) getPacket();
         compareServerPackets(offerPacket, offerRelayed);
     }
 
@@ -183,18 +177,18 @@
     @Test
     public void testDhcpAck() {
 
-        DhcpEthernet ackPacket = constructDhcpAckPacket(MacAddress.valueOf("bb:bb:bb:bb:bb:bb"),
+        Ethernet ackPacket = constructDhcpAckPacket(MacAddress.valueOf("bb:bb:bb:bb:bb:bb"),
                 CLIENT_MAC, "1.1.1.1", "2.2.2.2");
 
         sendPacket(ackPacket, ConnectPoint.deviceConnectPoint(OLT_DEV_ID + "/" + 1));
 
-        DhcpEthernet ackRelayed = (DhcpEthernet) getPacket();
+        Ethernet ackRelayed = (Ethernet) getPacket();
         compareServerPackets(ackPacket, ackRelayed);
     }
 
-    public void compareClientPackets(DhcpEthernet sent, DhcpEthernet relayed) {
-        sent.setSourceMacAddress(OLT_MAC_ADDRESS);
-        sent.setQinQVid(CLIENT_S_TAG.toShort());
+    public void compareClientPackets(Ethernet sent, Ethernet relayed) {
+        sent.setSourceMACAddress(OLT_MAC_ADDRESS);
+        sent.setQinQVID(CLIENT_S_TAG.toShort());
         sent.setVlanID(CLIENT_C_TAG.toShort());
 
         IPv4 ipv4Packet = (IPv4) sent.getPayload();
@@ -212,27 +206,19 @@
 
         options.add(options.size() - 1, option);
         dhcpPacket.setOptions(options);
-
-        final ByteBuffer byteBuffer = ByteBuffer.wrap(sent.serialize());
-        DhcpEthernet expectedPacket = null;
-        try {
-            expectedPacket = DhcpEthernet.deserializer().deserialize(byteBuffer.array(),
-                    0, byteBuffer.array().length);
-        } catch (Exception e) {
-        }
-        assertEquals(expectedPacket, relayed);
+        assertEquals(sent, relayed);
 
     }
 
-    public void compareServerPackets(DhcpEthernet sent, DhcpEthernet relayed) {
-        sent.setDestinationMacAddress(CLIENT_MAC);
-        sent.setQinQVid(CLIENT_S_TAG.toShort());
+    public void compareServerPackets(Ethernet sent, Ethernet relayed) {
+        sent.setDestinationMACAddress(CLIENT_MAC);
+        sent.setQinQVID(CLIENT_S_TAG.toShort());
         sent.setVlanID(CLIENT_C_TAG.toShort());
 
         final ByteBuffer byteBuffer = ByteBuffer.wrap(sent.serialize());
-        DhcpEthernet expectedPacket = null;
+        Ethernet expectedPacket = null;
         try {
-            expectedPacket = DhcpEthernet.deserializer().deserialize(byteBuffer.array(),
+            expectedPacket = Ethernet.deserializer().deserialize(byteBuffer.array(),
                     0, byteBuffer.array().length);
         } catch (Exception e) {
         }
