diff --git a/scapy/contrib/gtp.uts b/scapy/contrib/gtp.uts
index 9d4da9df4698d895babc1ad15555feb7bc1e679c..661f03f32b61aed13b9310100154be0adf9152af 100644
--- a/scapy/contrib/gtp.uts
+++ b/scapy/contrib/gtp.uts
@@ -10,8 +10,8 @@ gtp = IP()/UDP(dport=2123)/GTPHeader(teid=2807)/GTPCreatePDPContextRequest()
 gtp.dport == 2123 and gtp.teid == 2807 and len(gtp.IE_list) == 5
 
 = GTPCreatePDPContextRequest(), basic dissection
-random.seed(2807)
-str(gtp) == "E\x00\x00O\x00\x01\x00\x00@\x11|\x9b\x7f\x00\x00\x01\x7f\x00\x00\x01\x08K\x08K\x00;\xb9{2\x10\x00+\x00\x00\n\xf7\x8d\x9e\x00\x00\x10\xa6\xb2\xdc.\x14\t\x85\x00\x04\x83~:N\x85\x00\x04\xe0^\x96\xe7\x87\x00\x0fRmhqmG3QvzvsT3G"
+random.seed(0x2807)
+str(gtp) == "E\x00\x00O\x00\x01\x00\x00@\x11|\x9b\x7f\x00\x00\x01\x7f\x00\x00\x01\x08K\x08K\x00;{N2\x10\x00+\x00\x00\n\xf7\xd2y\x00\x00\x10\xf8>\x14\x05\x14\t\x85\x00\x04\xa6A\xd8+\x85\x00\x04z\xafnt\x87\x00\x0fxKbPaePK9oq0pb5"
 
 = GTPV1UpdatePDPContextRequest(), dissect
 h = "3333333333332222222222228100a38408004588006800000000fd1134820a2a00010a2a00024aa5084b005408bb32120044ed99aea9386f0000100000530514058500040a2a00018500040a2a000187000c0213921f739680fe74f2ffff94000130970001019800080112f41004d204d29900024000b6000101"
diff --git a/scapy/main.py b/scapy/main.py
index ef99e6db8f3292c17404198cc4bf1cfc273671f8..1b857f140450a85ed67c26b6fecc0f3ced0bee25 100644
--- a/scapy/main.py
+++ b/scapy/main.py
@@ -321,7 +321,7 @@ def interact(mydict=None,argv=None,mybanner=None,loglevel=20):
     STARTUP_FILE = DEFAULT_STARTUP_FILE
     PRESTART_FILE = DEFAULT_PRESTART_FILE
 
-    session_name = ""
+    session_name = None
 
     try:
         opts=getopt.getopt(argv[1:], "hs:Cc:Pp:d")
@@ -356,7 +356,7 @@ def interact(mydict=None,argv=None,mybanner=None,loglevel=20):
     if PRESTART_FILE:
         _read_config_file(PRESTART_FILE)
 
-    init_session(None, mydict)
+    init_session(session_name, mydict)
 
     if READLINE:
         if conf.histfile:
diff --git a/scapy/packet.py b/scapy/packet.py
index 90f238eee4b6dcef4d3f31169e210ae78a3aaf31..eb8e265e3f0831477b74f301d39cb37148f53fcb 100644
--- a/scapy/packet.py
+++ b/scapy/packet.py
@@ -73,6 +73,31 @@ class Packet(BasePacket):
         for lower,fval in self._overload_fields.iteritems():
             print "%-20s  %s" % (lower.__name__, ", ".join("%-12s" % ("%s=%r"%i) for i in fval.iteritems()))
 
+    def _unpickle(self, dlist):
+        """Used to unpack pickling"""
+        self.__init__("".join(dlist))
+        return self
+
+    def __reduce__(self):
+        """Used by pickling methods"""
+        return (self.__class__, (), (self.build(),))
+
+    def __reduce_ex__(self, proto):
+        """Used by pickling methods"""
+        return self.__reduce__()
+
+    def __getstate__(self):
+        """Mark object as pickable"""
+        return self.__reduce__()[2]
+
+    def __setstate__(self, state):
+        """Rebuild state using pickable methods"""
+        return self._unpickle(state)
+
+    def __deepcopy__(self, memo):
+        """Used by copy.deepcopy"""
+        return self.copy()
+
     def __init__(self, _pkt="", post_transform=None, _internal=0, _underlayer=None, **fields):
         self.time  = time.time()
         self.sent_time = None
diff --git a/test/regression.uts b/test/regression.uts
index bd13bbefe2dedc8940d2c4a31081785df9b32697..0da39aa3a932165e569956f68573df5247d23b77 100644
--- a/test/regression.uts
+++ b/test/regression.uts
@@ -154,6 +154,27 @@ data = ["init_session(\"scapySession2\")",\
 
 emulate_main_input(data)
 
+= Test pickling with packets
+
+data = ["init_session(\"scapySession1\")",\
+"test_value = IP(src=\"127.0.0.1\", dst=\"8.8.8.8\")",\
+"test_value2 = ICMPv6EchoReply(data=\"testData@%!\")",\
+"save_session()",\
+"del test_value",\
+"load_session()",\
+"assert test_value.src == \"127.0.0.1\"",\
+"assert test_value.dst == \"8.8.8.8\"",\
+"assert test_value2.data == \"testData@%!\""]
+
+emulate_main_input(data)
+
+= Clean up session files
+
+try:
+    os.remove("scapySaveSession.dat")
+except OSError:
+    pass
+
 = Test utility functions
 
 tmpfile =  get_temp_file(autoext=".ut")