diff --git a/src/main/java/org/onosproject/aaa/packet/EAPEthernet.java b/src/main/java/org/onosproject/aaa/packet/EAPEthernet.java
index be2dae4..f975c15 100644
--- a/src/main/java/org/onosproject/aaa/packet/EAPEthernet.java
+++ b/src/main/java/org/onosproject/aaa/packet/EAPEthernet.java
@@ -16,11 +16,13 @@
 
 package org.onosproject.aaa.packet;
 
-import org.onlab.packet.ARP;
+import org.onlab.packet.Deserializer;
+import org.onlab.packet.EthType;
 import org.onlab.packet.Ethernet;
-import org.onlab.packet.IPv4;
-import org.onlab.packet.IPv6;
-import org.onlab.packet.LLDP;
+import org.onlab.packet.IPacket;
+
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Created by jono on 5/19/15.
@@ -29,17 +31,21 @@
 
     public static final short TYPE_PAE = (short) 0x888e;
 
+    private static final Map<Short, Deserializer<? extends IPacket>> ETHERTYPE_DESERIALIZER_MAP =
+            new HashMap<>();
+
     private EAPEthernet() {
 
     }
 
     static {
-        Ethernet.ETHER_TYPE_CLASS_MAP.put(org.onlab.packet.Ethernet.TYPE_ARP, ARP.class);
-        org.onlab.packet.Ethernet.ETHER_TYPE_CLASS_MAP.put(org.onlab.packet.Ethernet.TYPE_RARP, ARP.class);
-        org.onlab.packet.Ethernet.ETHER_TYPE_CLASS_MAP.put(org.onlab.packet.Ethernet.TYPE_IPV4, IPv4.class);
-        org.onlab.packet.Ethernet.ETHER_TYPE_CLASS_MAP.put(org.onlab.packet.Ethernet.TYPE_IPV6, IPv6.class);
-        org.onlab.packet.Ethernet.ETHER_TYPE_CLASS_MAP.put(org.onlab.packet.Ethernet.TYPE_LLDP, LLDP.class);
-        org.onlab.packet.Ethernet.ETHER_TYPE_CLASS_MAP.put(org.onlab.packet.Ethernet.TYPE_BSN, LLDP.class);
-        org.onlab.packet.Ethernet.ETHER_TYPE_CLASS_MAP.put(TYPE_PAE, EAPOL.class);
+        for (EthType.EtherType ethType : EthType.EtherType.values()) {
+            if (ethType.deserializer() != null) {
+                ETHERTYPE_DESERIALIZER_MAP.put(ethType.ethType().toShort(),
+                                               ethType.deserializer());
+            }
+        }
+        ETHERTYPE_DESERIALIZER_MAP.put((short) 0x888e, EAPOL.deserializer());
     }
+
 }
diff --git a/src/main/java/org/onosproject/aaa/packet/EAPOL.java b/src/main/java/org/onosproject/aaa/packet/EAPOL.java
index 3179e28..ac11dcc 100644
--- a/src/main/java/org/onosproject/aaa/packet/EAPOL.java
+++ b/src/main/java/org/onosproject/aaa/packet/EAPOL.java
@@ -19,12 +19,15 @@
 package org.onosproject.aaa.packet;
 
 import org.onlab.packet.BasePacket;
+import org.onlab.packet.Deserializer;
 import org.onlab.packet.Ethernet;
 import org.onlab.packet.IPacket;
 import org.onlab.packet.MacAddress;
 
 import java.nio.ByteBuffer;
 
+import static org.onlab.packet.PacketUtils.checkInput;
+
 /**
  *
  */
@@ -133,29 +136,8 @@
         return data;
     }
 
-    @Override
-    public IPacket deserialize(final byte[] data, final int offset,
-                               final int length) {
-        final ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
 
 
-        //deserialize the EAPOL header
-        this.version = bb.get();
-        this.eapolType = bb.get();
-        this.packetLength = bb.getShort();
-
-        if (this.packetLength > 0) {
-            //deserialize the EAP Payload
-            this.payload = new EAP();
-
-            this.payload = this.payload.deserialize(data, bb.position(), length - 4);
-            this.payload.setParent(this);
-        }
-
-
-        return this;
-    }
-
     @Override
     public int hashCode() {
         final int prime = 3889;
@@ -196,5 +178,51 @@
         eth.setPad(true);
         return eth;
     }
+
+    public static Deserializer<EAPOL> deserializer() {
+        return (data, offset, length) -> {
+            checkInput(data, offset, length, 0);
+
+            EAPOL eapol = new EAPOL();
+            final ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
+            eapol.setVersion(bb.get());
+            eapol.setEapolType(bb.get());
+            eapol.setPacketLength(bb.getShort());
+
+            if (eapol.packetLength > 0) {
+                //deserialize the EAP Payload
+                eapol.payload = new EAP();
+
+                eapol.payload = eapol.payload.deserialize(data, bb.position(), length - 4);
+                eapol.payload.setParent(eapol);
+            }
+            return eapol;
+        };
+    }
+
+    @Override
+    public IPacket deserialize(final byte[] data, final int offset,
+                               final int length) {
+        final ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
+
+
+        //deserialize the EAPOL header
+        this.version = bb.get();
+        this.eapolType = bb.get();
+        this.packetLength = bb.getShort();
+
+        if (this.packetLength > 0) {
+            //deserialize the EAP Payload
+            this.payload = new EAP();
+
+            this.payload = this.payload.deserialize(data, bb.position(), length - 4);
+            this.payload.setParent(this);
+        }
+
+
+        return this;
+    }
+
+
 }
 
