diff --git a/scapy.py b/scapy.py
index a39871e99d0d717b5645ae2d88fe44533912c604..1700370ffc40f5a0701a45ec2712fced80114c51 100755
--- a/scapy.py
+++ b/scapy.py
@@ -5040,6 +5040,7 @@ class Packet(Gen):
 
     def __init__(self, _pkt="", post_transform=None, _internal=0, _underlayer=None, **fields):
         self.time  = time.time()
+        self.sent_time = 0
         if self.name is None:
             self.name = self.__class__.__name__
         self.aliastypes = [ self.__class__ ] + self.aliastypes
@@ -9270,7 +9271,9 @@ class SuperSocket:
         self.outs = self.ins
         self.promisc=None
     def send(self, x):
-        return self.outs.send(str(x))
+        sx = str(x)
+        x.sent_time = time.time()
+        return self.outs.send(sx)
     def recv(self, x):
         return Raw(self.ins.recv(x))
     def fileno(self):
@@ -9299,7 +9302,9 @@ class L3RawSocket(SuperSocket):
         return Ether(self.ins.recv(x)).payload
     def send(self, x):
         try:
-            self.outs.sendto(str(x),(x.dst,0))
+            sx = str(x)
+            x.sent_time = time.time()
+            self.outs.sendto(sx,(x.dst,0))
         except socket.error,msg:
             log_runtime.error(msg)
         
@@ -9386,8 +9391,11 @@ class L3PacketSocket(SuperSocket):
         if LLTypes.has_key(sn[3]):
             ll = lambda x:LLTypes[sn[3]]()/x
         try:
-            self.outs.sendto(str(ll(x)), sdto)
+            sx = str(ll(x))
+            x.sent_time = time.time()
+            self.outs.sendto(sx, sdto)
         except socket.error,msg:
+            x.sent_time = time.time()  # bad approximation
             if conf.auto_fragment and msg[0] == 90:
                 for p in fragment(x):
                     self.outs.sendto(str(ll(p)), sdto)
@@ -9542,7 +9550,9 @@ class L3dnetSocket(SuperSocket):
         ifs = self.iflist.get(iff)
         if ifs is None:
             self.iflist[iff] = ifs = dnet.eth(iff)
-        ifs.send(str(Ether()/x))
+        sx = str(Ether()/x)
+        x.sent_time = time.time()
+        ifs.send(sx)
     def recv(self,x=MTU):
         ll = self.ins.datalink()
         if LLTypes.has_key(ll):