diff --git a/fsl/utils/settings.py b/fsl/utils/settings.py
index 5be32c9a9e2296ab9b22e8fe48da46348c815b59..ceeb6bfe9060f6f8db8f28987869bc84e22628fc 100644
--- a/fsl/utils/settings.py
+++ b/fsl/utils/settings.py
@@ -128,8 +128,9 @@ def delete(*args, **kwargs):
     pass
 def readFile(*args, **kwargs):
     pass
+@contextlib.contextmanager
 def writeFile(*args, **kwargs):
-    pass
+    yield
 def deleteFile(*args, **kwargs):
     pass
 def filePath(*args, **kwargs):
@@ -420,7 +421,7 @@ class Settings(object):
         try:
             with open(configFile, 'wb') as f:
                 pickle.dump(config, f, protocol=2)
-        except (FileNotFoundError, IOError, pickle.PicklingError, EOFError):
+        except (IOError, pickle.PicklingError, EOFError):
             log.warning('Unable to save {} configuration file '
                         '{}'.format(self.__configID, configFile),
                         exc_info=True)
diff --git a/tests/test_settings.py b/tests/test_settings.py
index c906c63ce406427179c2cf015ec9c28ab816d32b..b17b1b87ab8e7ed747d2c2d0dd56d4e13053737a 100644
--- a/tests/test_settings.py
+++ b/tests/test_settings.py
@@ -433,6 +433,15 @@ def test_writeConfigFile():
             readback = pickle.load(f)
             assert testdata == readback
 
+        # should fail gracefuly
+        # if write is not possible
+        s = settings.Settings(cfgid='test', cfgdir=testdir, writeOnExit=False)
+
+    # testdir has been removed,
+    # but call should not crash
+    s.writeConfigFile()
+
+
 
 
 def test_set():