diff --git a/scapy/main.py b/scapy/main.py
index e788a2fcbec3d3704e50d9e59b12812135516929..6ed53826d1542bcb144a1ed0c499de8378926b85 100644
--- a/scapy/main.py
+++ b/scapy/main.py
@@ -166,6 +166,55 @@ def update_session(fname=None):
     scapy_session = __builtin__.__dict__["scapy_session"]
     scapy_session.update(s)
 
+def init_session(mydict=None, session_name="", STARTUP_FILE=DEFAULT_STARTUP_FILE):
+    global session
+    scapy_builtins = __import__("all",globals(),locals(),".").__dict__
+    for name, sym in scapy_builtins.iteritems():
+        if name [0] != '_':
+            __builtin__.__dict__[name] = sym
+    globkeys = scapy_builtins.keys()
+    globkeys.append("scapy_session")
+    scapy_builtins=None # XXX replace with "with" statement
+    if mydict is not None:
+        __builtin__.__dict__.update(mydict)
+        globkeys += mydict.keys()
+    
+
+    conf.color_theme = DefaultTheme()
+    if STARTUP_FILE:
+        _read_config_file(STARTUP_FILE)
+        
+    if session_name:
+        try:
+            os.stat(session_name)
+        except OSError:
+            log_loading.info("New session [%s]" % session_name)
+        else:
+            try:
+                try:
+                    session = cPickle.load(gzip.open(session_name,"rb"))
+                except IOError:
+                    session = cPickle.load(open(session_name,"rb"))
+                log_loading.info("Using session [%s]" % session_name)
+            except EOFError:
+                log_loading.error("Error opening session [%s]" % session_name)
+            except AttributeError:
+                log_loading.error("Error opening session [%s]. Attribute missing" %  session_name)
+
+        if session:
+            if "conf" in session:
+                conf.configure(session["conf"])
+                session["conf"] = conf
+        else:
+            conf.session = session_name
+            session={"conf":conf}
+            
+    else:
+        session={"conf": conf}
+
+    __builtin__.__dict__["scapy_session"] = session
+    
+    return globkeys
 
 ################
 ##### Main #####
@@ -299,52 +348,7 @@ def interact(mydict=None,argv=None,mybanner=None,loglevel=20):
     if PRESTART_FILE:
         _read_config_file(PRESTART_FILE)
 
-    scapy_builtins = __import__("all",globals(),locals(),".").__dict__
-    for name, sym in scapy_builtins.iteritems():
-        if name [0] != '_':
-            __builtin__.__dict__[name] = sym
-    globkeys = scapy_builtins.keys()
-    globkeys.append("scapy_session")
-    scapy_builtins=None # XXX replace with "with" statement
-    if mydict is not None:
-        __builtin__.__dict__.update(mydict)
-        globkeys += mydict.keys()
-    
-
-    conf.color_theme = DefaultTheme()
-    if STARTUP_FILE:
-        _read_config_file(STARTUP_FILE)
-        
-    if session_name:
-        try:
-            os.stat(session_name)
-        except OSError:
-            log_loading.info("New session [%s]" % session_name)
-        else:
-            try:
-                try:
-                    session = cPickle.load(gzip.open(session_name,"rb"))
-                except IOError:
-                    session = cPickle.load(open(session_name,"rb"))
-                log_loading.info("Using session [%s]" % session_name)
-            except EOFError:
-                log_loading.error("Error opening session [%s]" % session_name)
-            except AttributeError:
-                log_loading.error("Error opening session [%s]. Attribute missing" %  session_name)
-
-        if session:
-            if "conf" in session:
-                conf.configure(session["conf"])
-                session["conf"] = conf
-        else:
-            conf.session = session_name
-            session={"conf":conf}
-            
-    else:
-        session={"conf": conf}
-
-    __builtin__.__dict__["scapy_session"] = session
-
+    globkeys = init_session(mydict, session_name, STARTUP_FILE)
 
     if READLINE:
         if conf.histfile:
diff --git a/test/regression.uts b/test/regression.uts
index de4d866a6d52d466fc54b98627891b517772313b..a61447c87ecb9a427c78d25c835ae75fbd4bd8b3 100644
--- a/test/regression.uts
+++ b/test/regression.uts
@@ -75,6 +75,19 @@ else:
 conf.route6.ifchange(LOOPBACK_NAME, "::1/128")
 True
 
+############
+############
++ Main.py tests
+
+= Test save_session
+init_session()
+# TODO: Remove the comments once the pickling bug has been fixed
+#test_value = IP(dst="192.168.0.10")
+#test_value
+save_session(fname="scapySession1")
+
+= Test load_session
+load_session(fname="scapySession1")
 
 ############
 ############