diff --git a/scapy/fields.py b/scapy/fields.py
index 2253cd892e2d89813f90bb50f06475b4771ee6dd..a8793d1f628b626747f3fe3dbcc9c9bea47dffa5 100644
--- a/scapy/fields.py
+++ b/scapy/fields.py
@@ -769,6 +769,36 @@ class XShortEnumField(ShortEnumField):
             return self.i2s[x]
         return lhex(x)
 
+class MultiEnumField(EnumField):
+    def __init__(self, name, default, enum, depends_on, fmt = "H"):
+        
+        self.depends_on = depends_on
+        self.i2s_multi = enum
+        self.s2i_multi = {}
+        self.s2i_all = {}
+        for m in enum:
+            self.s2i_multi[m] = s2i = {}
+            for k,v in enum[m].iteritems():
+                s2i[v] = k
+                self.s2i_all[v] = k
+        Field.__init__(self, name, default, fmt)
+    def any2i_one(self, pkt, x):
+        if type (x) is str:
+            v = self.depends_on(pkt)
+            if v in self.s2i_multi:
+                s2i = self.s2i_multi[v]
+                if x in s2i:
+                    return s2i[x]
+            return self.s2i_all[x]
+        return x
+    def i2repr_one(self, pkt, x):
+        v = self.depends_on(pkt)
+        if v in self.i2s_multi:
+            return self.i2s_multi[v].get(x,x)
+        return x
+
+
+
 # Little endian long field
 class LELongField(Field):
     def __init__(self, name, default):