diff --git a/netrender/client.py b/netrender/client.py
index 069d5bdb8b92fece76f590c7e52afe65f432b624..f246dcd8cc9c8a12e63c902df58433b57d2e4b0e 100644
--- a/netrender/client.py
+++ b/netrender/client.py
@@ -443,9 +443,7 @@ class NetworkRenderEngine(bpy.types.RenderEngine):
             result_path = os.path.join(bpy.path.abspath(netsettings.path), "output.exr")
             
             folder = os.path.split(result_path)[0]
-            
-            if not os.path.exists(folder):
-                os.mkdir(folder)
+            verifyCreateDir(folder)
 
             f = open(result_path, "wb")
 
diff --git a/netrender/master.py b/netrender/master.py
index d5989f8c3f5d9f01323228e1cb5b0950aebcc754..69a185b1de5a316abf1cb47828ca7d5bf97c5402 100644
--- a/netrender/master.py
+++ b/netrender/master.py
@@ -979,8 +979,7 @@ class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
         else:
             self.path = path
 
-        if not os.path.exists(self.path):
-            os.mkdir(self.path)
+        verifyCreateDir(self.path)
 
         self.slave_timeout = 5 # 5 mins: need a parameter for that
 
@@ -1105,8 +1104,7 @@ class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
 
         # create job directory
         job.save_path = os.path.join(self.path, "job_" + job.id)
-        if not os.path.exists(job.save_path):
-            os.mkdir(job.save_path)
+        verifyCreateDir(job.save_path)
 
         job.save()
 
diff --git a/netrender/slave.py b/netrender/slave.py
index fe3979a7272bbcf4c7fd448ffe33e67af4275c5f..d8d82e8dd5ab3d9fa4225a0cdb8531696f2d767f 100644
--- a/netrender/slave.py
+++ b/netrender/slave.py
@@ -144,8 +144,7 @@ def render_slave(engine, netsettings, threads):
         slave_id = response.getheader("slave-id")
 
         NODE_PREFIX = os.path.join(slave_path, "slave_" + slave_id)
-        if not os.path.exists(NODE_PREFIX):
-            os.mkdir(NODE_PREFIX)
+        verifyCreateDir(NODE_PREFIX)
 
         engine.update_stats("", "Network render connected to master, waiting for jobs")
 
@@ -161,8 +160,7 @@ def render_slave(engine, netsettings, threads):
                 engine.update_stats("", "Network render processing job from master")
 
                 JOB_PREFIX = os.path.join(NODE_PREFIX, "job_" + job.id)
-                if not os.path.exists(JOB_PREFIX):
-                    os.mkdir(JOB_PREFIX)
+                verifyCreateDir(JOB_PREFIX)
 
                 # set tempdir for fsaa temp files
                 # have to set environ var because render is done in a subprocess and that's the easiest way to propagate the setting
diff --git a/netrender/utils.py b/netrender/utils.py
index c173e02dbbc04c61ce19b75936dd287866ed033c..7a2abb6beaac12385af199e710d8ae7db6728bfe 100644
--- a/netrender/utils.py
+++ b/netrender/utils.py
@@ -269,6 +269,23 @@ def hashData(data):
     m.update(data)
     return m.hexdigest()
 
+def verifyCreateDir(directory_path):
+    original_path = directory_path
+    directory_path = os.path.expanduser(directory_path)
+    directory_path = os.path.expandvars(directory_path)
+    if not os.path.exists(directory_path):
+        try:
+            os.makedirs(directory_path)
+            print("Created directory:", directory_path)
+            if original_path != directory_path:
+                print("Expanded from the following path:", original_path)
+        except:
+            print("Couldn't create directory:", directory_path)
+            if original_path != directory_path:
+                print("Expanded from the following path:", original_path)
+            raise
+    
+
 def cacheName(ob, point_cache):
     name = point_cache.name
     if name == "":
@@ -332,9 +349,7 @@ def createLocalPath(rfile, prefixdirectory, prefixpath, forcelocal):
                     suffix = os.path.join(last, suffix)
 
                 directory = os.path.join(prefixdirectory, suffix)
-                
-                if not os.path.exists(directory):
-                    os.mkdir(directory)
+                verifyCreateDir(directory)
 
                 finalpath = os.path.join(directory, name)
             else:
@@ -350,8 +365,7 @@ def createLocalPath(rfile, prefixdirectory, prefixpath, forcelocal):
         directory = directory.replace("../")
         directory = os.path.join(prefixdirectory, directory)
 
-        if not os.path.exists(directory):
-            os.mkdir(directory)
+        verifyCreateDir(directory)
 
         finalpath = os.path.join(directory, name)