diff --git a/scapy/layers/all.py b/scapy/layers/all.py
index 18e8e2a1508db0f63122f2461d7413e9736e4f9c..20a991d0778577a117fd26b3dd838c4c7cb4b141 100644
--- a/scapy/layers/all.py
+++ b/scapy/layers/all.py
@@ -10,6 +10,7 @@ All layers. Configurable with conf.load_layers.
 from __future__ import absolute_import
 from scapy.config import conf
 from scapy.error import log_loading
+from scapy.main import load_layer
 import logging, importlib
 import scapy.modules.six as six
 ignored = list(six.moves.builtins.__dict__.keys()) + ["sys"]
@@ -17,36 +18,11 @@ log = logging.getLogger("scapy.loading")
 
 __all__ = []
 
-
-def _validate_local(x):
-    """Returns whether or not a variable should be imported.
-    Will return False for any default modules (sys), or if
-    they are detected as private vars (starting with a _)"""
-    global ignored
-    return x[0] != "_" and not x in ignored
-
-def _import_star(m):
-    mod = importlib.import_module("." + m, "scapy.layers")
-    if '__all__' in mod.__dict__:
-        # only import the exported symbols in __all__
-        for name in mod.__dict__['__all__']:
-            __all__.append(name)
-            globals()[name] = mod.__dict__[name]
-    else:
-        # import all the non-private symbols
-        for name, sym in six.iteritems(mod.__dict__):
-            if _validate_local(name):
-                __all__.append(name)
-                globals()[name] = sym
-
-LAYER_ALIASES = {
-    "tls": "tls.all",
-}
-
 for _l in conf.load_layers:
     log_loading.debug("Loading layer %s" % _l)
     try:
-        _import_star(LAYER_ALIASES.get(_l, _l))
+        load_layer(_l, globals_dict=globals(), symb_list=__all__)
     except Exception as e:
         log.warning("can't import layer %s: %s" % (_l,e))
 
+del _l
diff --git a/scapy/main.py b/scapy/main.py
index 287bcd7d3857169aa135ffe4e68c935b9807485c..4e0ec18abf8da7c312bcf079500209e6e36a0f92 100644
--- a/scapy/main.py
+++ b/scapy/main.py
@@ -18,7 +18,12 @@ import importlib
 ignored = list(six.moves.builtins.__dict__.keys())
 
 from scapy.error import *
-from scapy.layers.all import LAYER_ALIASES
+
+__all__ = []
+
+LAYER_ALIASES = {
+    "tls": "tls.all"
+}
 
 def _probe_config_file(cf):
     cf_path = os.path.join(os.path.expanduser("~"), cf)
@@ -65,26 +70,33 @@ from scapy.themes import DefaultTheme
 ######################
 
 
-def _load(module):
+def _load(module, globals_dict=None, symb_list=None):
+    if globals_dict is None:
+        globals_dict = six.moves.builtins.__dict__
     try:
         mod = importlib.import_module(module)
         if '__all__' in mod.__dict__:
             # import listed symbols
             for name in mod.__dict__['__all__']:
-                six.moves.builtins.__dict__[name] = mod.__dict__[name]
+                if symb_list is not None:
+                    symb_list.append(name)
+                globals_dict[name] = mod.__dict__[name]
         else:
             # only import non-private symbols
             for name, sym in six.iteritems(mod.__dict__):
                 if _validate_local(name):
-                    six.moves.builtins.__dict__[name] = sym
-    except Exception as e:
-        log_interactive.error(e)
+                    if symb_list is not None:
+                        symb_list.append(name)
+                    globals_dict[name] = sym
+    except Exception:
+        log_interactive.error("Loading module %s", module, exc_info=True)
 
 def load_module(name):
     _load("scapy.modules."+name)
 
-def load_layer(name):
-    _load("scapy.layers." + LAYER_ALIASES.get(name, name))
+def load_layer(name, globals_dict=None, symb_list=None):
+    _load("scapy.layers." + LAYER_ALIASES.get(name, name),
+          globals_dict=globals_dict, symb_list=symb_list)
 
 def load_contrib(name):
     try:
diff --git a/scapy/route.py b/scapy/route.py
index c8b8fa4e67d9859e49b84486d056165a20d5ad42..c6a973de5b60688d3e79c46203ef483913fa6b69 100644
--- a/scapy/route.py
+++ b/scapy/route.py
@@ -8,7 +8,6 @@ Routing and handling of network interfaces.
 """
 
 from __future__ import absolute_import
-import socket
 from scapy.consts import LOOPBACK_NAME, LOOPBACK_INTERFACE
 from scapy.utils import atol, ltoa, itom, pretty_routes
 from scapy.config import conf