diff --git a/scapy/base_classes.py b/scapy/base_classes.py
index f805c18ba79ba30029cf5759d41ac9fe047a1dd7..0648e9cebad2eb28a6f06a1e95437d35d1cd21a0 100644
--- a/scapy/base_classes.py
+++ b/scapy/base_classes.py
@@ -178,6 +178,8 @@ class Packet_metaclass(type):
 
         if "__slots__" not in dct:
             dct["__slots__"] = []
+        if "name" in dct:
+            dct["_name"] = dct.pop("name")
         newcls = super(Packet_metaclass, cls).__new__(cls, name, bases, dct)
         if hasattr(newcls, "aliastypes"):
             newcls.aliastypes = [newcls] + newcls.aliastypes
diff --git a/scapy/packet.py b/scapy/packet.py
index e4ea22f56327a23de0c5daa5ca02889061ea31e1..2530074952a9c2a321e6938a56cb9553ab208ed7 100644
--- a/scapy/packet.py
+++ b/scapy/packet.py
@@ -40,6 +40,7 @@ class Packet(BasePacket):
         "raw_packet_cache_fields", "_pkt", "post_transforms",
         # then payload and underlayer
         "payload", "underlayer",
+        "name",
     ]
     __metaclass__ = Packet_metaclass
     name = None
@@ -65,6 +66,9 @@ class Packet(BasePacket):
     def __init__(self, _pkt="", post_transform=None, _internal=0, _underlayer=None, **fields):
         self.time  = time.time()
         self.sent_time = None
+        self.name = (self.__class__.__name__
+                     if self._name is None else
+                     self._name)
         self.default_fields = {}
         self.overloaded_fields = {}
         self.fields = {}