diff --git a/scapy/base_classes.py b/scapy/base_classes.py
index 221ada6b1abbcbc11a3de3ceb9271896aac40a89..42670e0b9d3121e638d050251fcf23e3a42a0a52 100644
--- a/scapy/base_classes.py
+++ b/scapy/base_classes.py
@@ -161,31 +161,25 @@ class Packet_metaclass(type):
         raise AttributeError(attr)
 
 class NewDefaultValues(Packet_metaclass):
-    """NewDefaultValues metaclass. Example usage:
-    class MyPacket(Packet):
-        fields_desc = [ StrField("my_field", "my default value"),  ]
-        
-    class MyPacket_variant(MyPacket):
+    """NewDefaultValues is deprecated (not needed anymore)
+    
+    remove this:
         __metaclass__ = NewDefaultValues
-        my_field = "my new default value"
+    and it should still work.
     """    
     def __new__(cls, name, bases, dct):
-        fields = None
-        for b in bases:
-            if hasattr(b,"fields_desc"):
-                fields = b.fields_desc
-                break
-        if fields is None:
-            raise error.Scapy_Exception("No fields_desc in superclasses")
-
-        new_fields = []
-        for f in fields:
-            if f.name in dct:
-                f = f.copy()
-                f.default = dct[f.name]
-                del(dct[f.name])
-            new_fields.append(f)
-        dct["fields_desc"] = new_fields
+        from error import log_loading
+        import traceback
+        try:
+            for tb in traceback.extract_stack()+[("??",-1,None,"")]:
+                f,l,_,line = tb
+                if line.startswith("class"):
+                    break
+        except:
+            f,l="??",-1
+            raise
+        log_loading.warning("Deprecated use of NewDefaultValues  (%s l. %i)." % (f,l))
+        
         return super(NewDefaultValues, cls).__new__(cls, name, bases, dct)
 
 class BasePacket(Gen):
diff --git a/scapy/layers/dhcp6.py b/scapy/layers/dhcp6.py
index db61c38f9db99755bba07214a9e79c6c216ba153..07eee8afb38e309352e7014d6795ca233b8f3b17 100644
--- a/scapy/layers/dhcp6.py
+++ b/scapy/layers/dhcp6.py
@@ -282,7 +282,6 @@ class DHCP6OptClientId(_DHCP6OptGuessPayload):     # RFC sect 22.2
 
 class DHCP6OptServerId(DHCP6OptClientId):     # RFC sect 22.3
     name = "DHCP6 Server Identifier Option"
-    __metaclass__ = NewDefaultValues
     optcode = 2
 
 # Should be encapsulated in the option field of IA_NA or IA_TA options
@@ -941,7 +940,6 @@ class DHCP6(_DHCP6OptGuessPayload):
 
 class DHCP6_Solicit(DHCP6):
     name = "DHCPv6 Solicit Message"
-    __metaclass__ = NewDefaultValues
     msgtype = 1
     overload_fields = { UDP: {"sport": 546, "dport": 547} }
 
@@ -955,7 +953,6 @@ class DHCP6_Solicit(DHCP6):
 
 class DHCP6_Advertise(DHCP6):
     name = "DHCPv6 Advertise Message"
-    __metaclass__ = NewDefaultValues
     msgtype = 2
     overload_fields = { UDP: {"sport": 547, "dport": 546} }
     
@@ -983,7 +980,6 @@ class DHCP6_Advertise(DHCP6):
 
 class DHCP6_Request(DHCP6):
     name = "DHCPv6 Request Message"
-    __metaclass__ = NewDefaultValues
     msgtype = 3
 
 #####################################################################
@@ -996,7 +992,6 @@ class DHCP6_Request(DHCP6):
 
 class DHCP6_Confirm(DHCP6):
     name = "DHCPv6 Confirm Message"
-    __metaclass__ = NewDefaultValues
     msgtype = 4
     
 #####################################################################
@@ -1018,7 +1013,6 @@ class DHCP6_Confirm(DHCP6):
 
 class DHCP6_Renew(DHCP6):
     name = "DHCPv6 Renew Message"
-    __metaclass__ = NewDefaultValues
     msgtype = 5
     
 #####################################################################
@@ -1029,7 +1023,6 @@ class DHCP6_Renew(DHCP6):
 
 class DHCP6_Rebind(DHCP6):
     name = "DHCPv6 Rebind Message"
-    __metaclass__ = NewDefaultValues
     msgtype = 6
     
 #####################################################################
@@ -1057,7 +1050,6 @@ class DHCP6_Rebind(DHCP6):
 
 class DHCP6_Reply(DHCP6):
     name = "DHCPv6 Reply Message"
-    __metaclass__ = NewDefaultValues
     msgtype = 7
     
     def answers(self, other):
@@ -1072,7 +1064,6 @@ class DHCP6_Reply(DHCP6):
 
 class DHCP6_Release(DHCP6):
     name = "DHCPv6 Release Message"
-    __metaclass__ = NewDefaultValues
     msgtype = 8
     
 #####################################################################
@@ -1087,7 +1078,6 @@ class DHCP6_Release(DHCP6):
 
 class DHCP6_Decline(DHCP6):
     name = "DHCPv6 Decline Message"
-    __metaclass__ = NewDefaultValues
     msgtype = 9
     
 #####################################################################
@@ -1105,7 +1095,6 @@ class DHCP6_Decline(DHCP6):
 
 class DHCP6_Reconf(DHCP6):
     name = "DHCPv6 Reconfigure Message"
-    __metaclass__ = NewDefaultValues
     msgtype = 10
     overload_fields = { UDP: { "sport": 547, "dport": 546 } }
 
@@ -1124,7 +1113,6 @@ class DHCP6_Reconf(DHCP6):
 
 class DHCP6_InfoRequest(DHCP6):
     name = "DHCPv6 Information Request Message"    
-    __metaclass__ = NewDefaultValues
     msgtype = 11 
     
     def hashret(self): 
@@ -1172,7 +1160,6 @@ class DHCP6_RelayForward(_DHCP6GuessPayload,Packet):
 
 class DHCP6_RelayReply(DHCP6_RelayForward):
     name = "DHCPv6 Relay Reply Message (Relay Agent/Server Message)"
-    __metaclass__= NewDefaultValues
     msgtype = 13
     def hashret(self): # We filter on peer address field.
         return inet_pton(socket.AF_INET6, self.peeraddr)
diff --git a/scapy/layers/inet6.py b/scapy/layers/inet6.py
index 87e4f36a7c2c8fdd49b7f38d6d1b0d8f1eba035d..5466e985721c3bae2c465fd2c57beaf0338057f2 100644
--- a/scapy/layers/inet6.py
+++ b/scapy/layers/inet6.py
@@ -1227,7 +1227,6 @@ class ICMPv6EchoRequest(_ICMPv6):
     
 class ICMPv6EchoReply(ICMPv6EchoRequest):
     name = "ICMPv6 Echo Reply"
-    __metaclass__ = NewDefaultValues
     type = 129
     def answers(self, other):
         # We could match data content between request and reply. 
@@ -1262,7 +1261,6 @@ class _ICMPv6ML(_ICMPv6):
 #        Option in a Destination Option Header.
 class ICMPv6MLQuery(_ICMPv6ML): # RFC 2710
     name = "MLD - Multicast Listener Query"
-    __metaclass__ = NewDefaultValues
     type   = 130
     mrd    = 10000
     mladdr = "::" # 10s for mrd
@@ -1278,7 +1276,6 @@ class ICMPv6MLQuery(_ICMPv6ML): # RFC 2710
 #        Option in a Destination Option Header.
 class ICMPv6MLReport(_ICMPv6ML): # RFC 2710
     name = "MLD - Multicast Listener Report"
-    __metaclass__ = NewDefaultValues
     type = 131
     overload_fields = {IPv6: {"hlim": 1}}
     # implementer le hashret et le answers
@@ -1291,7 +1288,6 @@ class ICMPv6MLReport(_ICMPv6ML): # RFC 2710
 #        Option in a Destination Option Header.
 class ICMPv6MLDone(_ICMPv6ML): # RFC 2710
     name = "MLD - Multicast Listener Done"
-    __metaclass__ = NewDefaultValues
     type = 132
     overload_fields = {IPv6: { "dst": "ff02::2", "hlim": 1}}
 
@@ -1430,7 +1426,6 @@ class ICMPv6NDOptSrcLLAddr(_ICMPv6NDGuessPayload, Packet):
 
 class ICMPv6NDOptDstLLAddr(ICMPv6NDOptSrcLLAddr):
     name = "ICMPv6 Neighbor Discovery Option - Destination Link-Layer Address"
-    __metaclass__ = NewDefaultValues
     type = 2
 
 class ICMPv6NDOptPrefixInfo(_ICMPv6NDGuessPayload, Packet):
@@ -1695,7 +1690,6 @@ class ICMPv6ND_NS(_ICMPv6NDGuessPayload, _ICMPv6, Packet):
 
 class ICMPv6ND_NA(ICMPv6ND_NS):
     name = "ICMPv6 Neighbor Discovery - Neighbor Advertisement"
-    __metaclass__ = NewDefaultValues
     type = 136
     R    = 1
     O    = 1
@@ -1729,7 +1723,6 @@ class ICMPv6NDOptSrcAddrList(_ICMPv6NDGuessPayload, Packet):
 
 class ICMPv6NDOptTgtAddrList(ICMPv6NDOptSrcAddrList):
     name = "ICMPv6 Inverse Neighbor Discovery Option - Target Address List"
-    __metaclass__ = NewDefaultValues
     type = 10 
 
 
@@ -2009,19 +2002,16 @@ class ICMPv6NIQueryNOOP(_ICMPv6NIHashret, _ICMPv6):
 
 class ICMPv6NIQueryName(ICMPv6NIQueryNOOP): 
     name = "ICMPv6 Node Information Query - IPv6 Name Query"
-    __metaclass__ = NewDefaultValues
     qtype = 2 
 
 # We ask for the IPv6 address of the peer 
 class ICMPv6NIQueryIPv6(ICMPv6NIQueryNOOP):
     name = "ICMPv6 Node Information Query - IPv6 Address Query"
-    __metaclass__ = NewDefaultValues
     qtype = 3
     flags = 0x3E
 
 class ICMPv6NIQueryIPv4(ICMPv6NIQueryNOOP): 
     name = "ICMPv6 Node Information Query - IPv4 Address Query"
-    __metaclass__ = NewDefaultValues
     qtype = 4
 
 _nireply_code = { 0: "Successful Reply", 
@@ -2176,27 +2166,22 @@ class ICMPv6NIReplyNOOP(_ICMPv6NIAnswers, _ICMPv6NIHashret, _ICMPv6):
 
 class ICMPv6NIReplyName(ICMPv6NIReplyNOOP): 
     name = "ICMPv6 Node Information Reply - Node Names"
-    __metaclass__ = NewDefaultValues
     qtype = 2
 
 class ICMPv6NIReplyIPv6(ICMPv6NIReplyNOOP): 
     name = "ICMPv6 Node Information Reply - IPv6 addresses"
-    __metaclass__ = NewDefaultValues
     qtype = 3
 
 class ICMPv6NIReplyIPv4(ICMPv6NIReplyNOOP): 
     name = "ICMPv6 Node Information Reply - IPv4 addresses"
-    __metaclass__ = NewDefaultValues
     qtype = 4
 
 class ICMPv6NIReplyRefuse(ICMPv6NIReplyNOOP):
     name = "ICMPv6 Node Information Reply - Responder refuses to supply answer"
-    __metaclass__ = NewDefaultValues
     code = 1
 
 class ICMPv6NIReplyUnknown(ICMPv6NIReplyNOOP):
     name = "ICMPv6 Node Information Reply - Qtype unknown to the responder"
-    __metaclass__ = NewDefaultValues
     code = 2
 
 
@@ -2674,7 +2659,6 @@ class MIP6MH_HoTI(_MobilityHeader):
 
 class MIP6MH_CoTI(MIP6MH_HoTI):
     name = "IPv6 Mobility Header - Care-of Test Init"
-    __metaclass__ = NewDefaultValues
     mhtype = 2
     def hashret(self):
         return self.cookie
@@ -2703,7 +2687,6 @@ class MIP6MH_HoT(_MobilityHeader):
 
 class MIP6MH_CoT(MIP6MH_HoT):
     name = "IPv6 Mobility Header - Care-of Test"
-    __metaclass__ = NewDefaultValues
     mhtype = 4
     def hashret(self):
         return self.cookie
diff --git a/scapy/layers/llmnr.py b/scapy/layers/llmnr.py
index 62be5226e7a30a2ef384169daeac9284a3932060..561729c876fa4547d6e91f0102edf4928d976be7 100644
--- a/scapy/layers/llmnr.py
+++ b/scapy/layers/llmnr.py
@@ -36,7 +36,6 @@ class LLMNRQuery(Packet):
 
 class LLMNRResponse(LLMNRQuery):
     name = "Link Local Multicast Node Resolution - Response"
-    __metaclass__ = NewDefaultValues
     qr = 1
     fields_desc = []
 
diff --git a/test/regression.uts b/test/regression.uts
index 49149c9919df5dd03beaedea909254610e462876..333d8a2e348dbfb13707df06fab24ca9357bd848 100644
--- a/test/regression.uts
+++ b/test/regression.uts
@@ -188,11 +188,10 @@ assert( _ == "FOO\x01\x02\x03\x04" )
 
 ############
 ############
-+ Tests on NewDefaultValues metaclass
++ Tests on default value changes mechanism
 
 = Creation of an IPv3 class from IP class with different default values
 class IPv3(IP):
-    __metaclass__ = NewDefaultValues
     version = 3
     ttl = 32