diff --git a/cdist/config.py b/cdist/config.py
index 11da04da..f5c3121d 100644
--- a/cdist/config.py
+++ b/cdist/config.py
@@ -44,6 +44,22 @@ from cdist.util.remoteutil import inspect_ssh_mux_opts
 class Config(object):
     """Cdist main class to hold arbitrary data"""
 
+    # list of paths (files and/or directories) that will be removed on finish
+    _paths_for_removal = []
+
+    @classmethod
+    def _register_path_for_removal(cls, path):
+        cls._paths_for_removal.append(path)
+
+    @classmethod
+    def _remove_paths(cls):
+        while cls._paths_for_removal:
+            path = cls._paths_for_removal.pop()
+            if os.path.isfile(path):
+                os.remove(path)
+            else:
+                shutil.rmtree(path)
+
     def __init__(self, local, remote, dry_run=False, jobs=None,
                  cleanup_cmds=None, remove_remote_files_dirs=False):
 
@@ -266,8 +282,8 @@ class Config(object):
     @classmethod
     def _resolve_ssh_control_path(cls):
         base_path = tempfile.mkdtemp()
+        cls._register_path_for_removal(base_path)
         control_path = os.path.join(base_path, "s")
-        atexit.register(lambda: shutil.rmtree(base_path))
         return control_path
 
     @classmethod
@@ -345,6 +361,7 @@ class Config(object):
                     cleanup_cmds=cleanup_cmds,
                     remove_remote_files_dirs=remove_remote_files_dirs)
             c.run()
+            cls._remove_paths()
 
         except cdist.Error as e:
             log.error(e)
diff --git a/cdist/integration.py b/cdist/integration.py
index e2f9be6e..ee742cc5 100644
--- a/cdist/integration.py
+++ b/cdist/integration.py
@@ -36,6 +36,7 @@ import os
 import os.path
 import collections
 import uuid
+import shutil
 
 
 def find_cdist_exec_in_path():
@@ -123,6 +124,7 @@ def _process_hosts_simple(action, host, manifest, verbose,
         theclass.onehost(target_host, None, host_base_path, hostdir, args,
                          parallel=False, configuration=configuration,
                          remove_remote_files_dirs=True)
+    shutil.rmtree(base_root_path)
 
 
 def configure_hosts_simple(host, manifest,