diff --git a/pox/openflow/nicira.py b/pox/openflow/nicira.py
index cb235a3..0cebe37 100644
--- a/pox/openflow/nicira.py
+++ b/pox/openflow/nicira.py
@@ -523,8 +523,14 @@ class nx_reg_load (of.ofp_action_vendor_base):
     self.offset = ofs_nbits >> 6
     self.nbits = (ofs_nbits & 0x3f) + 1
 
-    _,dst = nxm_entry.unpack_new(dst, 0)
-    self.dst = dst.__class__
+    t = nxm_entry.unpack_header(dst, 0)[0]
+    t = _nxm_type_to_class.get(t)
+    if t is None:
+      # This is relatively bad news.  For now, we'll stick a GENERIC in here,
+      # but this is lossy.  We really need to generate a new class (or have an
+      # alternate tuple-form of specifying an nxm_header?).
+      t = NXM_GENERIC
+    self.dst = t
 
     return offset
 
@@ -783,12 +789,23 @@ class nxm_entry (object):
     return self._nxm_type & 0x7f
 
   @staticmethod
-  def unpack_new (raw, offset):
+  def unpack_header (raw, offset):
+    """
+    Parses the NXM_HEADER
+
+    Returns (type,has_mask,length)
+    """
     h, = struct.unpack_from("!L", raw, offset)
     offset += 4
     t = h >> 9
     has_mask = (h & (1<<8)) != 0
     length = h & 0x7f
+    return t,has_mask,length
+
+  @staticmethod
+  def unpack_new (raw, offset):
+    t,has_mask,length = nxm_entry.unpack_header(raw, offset)
+    offset += 4
     offset,data = of._read(raw, offset, length)
     mask = None
     if has_mask:
