diff --git a/scapy/sendrecv.py b/scapy/sendrecv.py
index 16574f332965c9ce1d170a09211ef31b1294a0c7..b8d5bb5a33c07219d926aa3b4441e5d10fb90798 100644
--- a/scapy/sendrecv.py
+++ b/scapy/sendrecv.py
@@ -207,7 +207,7 @@ def sndrcv(pks, pkt, timeout = None, inter = 0, verbose=None, chainCC=0, retry=0
     return plist.SndRcvList(ans),plist.PacketList(remain,"Unanswered")
 
 
-def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, *args, **kargs):
+def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, return_packets=False, *args, **kargs):
     if type(x) is str:
         x = conf.raw_layer(load=x)
     if not isinstance(x, Gen):
@@ -219,7 +219,8 @@ def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, *
         loop = -count
     elif not loop:
         loop = -1
-    sent_packets = []
+    if return_packets:
+        sent_packets = plist.PacketList()
     try:
         while loop:
             dt0 = None
@@ -233,7 +234,8 @@ def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, *
                     else:
                         dt0 = ct-p.time
                 s.send(p)
-                sent_packets.append(p)
+                if return_packets:
+                    sent_packets.append(p)
                 n += 1
                 if verbose:
                     os.write(1,".")
@@ -245,21 +247,25 @@ def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, *
     s.close()
     if verbose:
         print "\nSent %i packets." % n
-    return sent_packets
+    if return_packets:
+        return sent_packets
         
 @conf.commands.register
-def send(x, inter=0, loop=0, count=None, verbose=None, realtime=None, *args, **kargs):
+def send(x, inter=0, loop=0, count=None, verbose=None, realtime=None, return_packets=False, *args, **kargs):
     """Send packets at layer 3
 send(packets, [inter=0], [loop=0], [verbose=conf.verb]) -> None"""
-    return __gen_send(conf.L3socket(*args, **kargs), x, inter=inter, loop=loop, count=count,verbose=verbose, realtime=realtime)
+    return __gen_send(conf.L3socket(*args, **kargs), x, inter=inter, loop=loop, count=count,verbose=verbose,
+                      realtime=realtime, return_packets=return_packets)
 
 @conf.commands.register
-def sendp(x, inter=0, loop=0, iface=None, iface_hint=None, count=None, verbose=None, realtime=None, *args, **kargs):
+def sendp(x, inter=0, loop=0, iface=None, iface_hint=None, count=None, verbose=None, realtime=None,
+          return_packets=False, *args, **kargs):
     """Send packets at layer 2
 sendp(packets, [inter=0], [loop=0], [verbose=conf.verb]) -> None"""
     if iface is None and iface_hint is not None:
         iface = conf.route.route(iface_hint)[0]
-    return __gen_send(conf.L2socket(iface=iface, *args, **kargs), x, inter=inter, loop=loop, count=count, verbose=verbose, realtime=realtime)
+    return __gen_send(conf.L2socket(iface=iface, *args, **kargs), x, inter=inter, loop=loop, count=count,
+                      verbose=verbose, realtime=realtime, return_packets=return_packets)
 
 @conf.commands.register
 def sendpfast(x, pps=None, mbps=None, realtime=None, loop=0, file_cache=False, iface=None):