diff --git a/scapy/config.py b/scapy/config.py
index 44a73edd8bdd3acc194cef8b489dc12aebc01f4e..5e80beb30793b10471afed2080529d8a9e3b8423 100644
--- a/scapy/config.py
+++ b/scapy/config.py
@@ -60,21 +60,35 @@ class ProgPath(ConfClass):
     tcpreplay = "tcpreplay"
     hexedit = "hexer"
     wireshark = "wireshark"
-    
-class Resolve:
+
+
+class ConfigFieldList:
     def __init__(self):
-        self.fields = {}
+        self.fields = set()
+        self.layers = set()
+    @staticmethod
+    def _is_field(f):
+        return hasattr(f, "owners")
+    def _recalc_layer_list(self):
+        self.layers = set([owner for f in self.fields for owner in f.owners])
     def add(self, *flds):
-        for fld in flds:
-            self.fields[fld]=None
+        self.fields |= set([f for f in flds if self._is_field(f)])
+        self._recalc_layer_list()
     def remove(self, *flds):
-        for fld in flds:
-            if fld in self.fields:
-                del(self.fields[fld])
+        self.fields -= set(flds)
+        self._recalc_layer_list()
     def __contains__(self, elt):
+        if isinstance(elt, base_classes.Packet_metaclass):
+            return elt in self.layers
         return elt in self.fields
     def __repr__(self):
-        return "<Resolve [%s]>" %  " ".join(str(x) for x in self.fields)
+        return "<%s [%s]>" %  (self.__class__.__name__," ".join(str(x) for x in self.fields))
+
+class Emphasize(ConfigFieldList):
+    pass
+
+class Resolve(ConfigFieldList):
+    pass
     
 
 class Num2Layer:
@@ -336,6 +350,7 @@ extensions_paths: path or list of paths where extensions are to be looked for
     prog = ProgPath()
     resolve = Resolve()
     noenum = Resolve()
+    emph = Emphasize()
     use_pcap = False
     use_dnet = False
     ipv6_enabled = socket.has_ipv6