diff --git a/bilby/core/sampler/emcee.py b/bilby/core/sampler/emcee.py
index 33f21fcf987f20bf278b07287a7cd2f5a3696225..17867251d37165ab8a8495c123b930b64ae2a123 100644
--- a/bilby/core/sampler/emcee.py
+++ b/bilby/core/sampler/emcee.py
@@ -3,6 +3,7 @@ from __future__ import absolute_import, print_function
 from collections import namedtuple
 import os
 import signal
+import shutil
 from shutil import copyfile
 import sys
 
@@ -308,7 +309,7 @@ class Emcee(MCMCSampler):
         with open(temp_chain_file, "a") as ff:
             for ii, point in enumerate(points):
                 ff.write(self.checkpoint_info.chain_template.format(ii, *point))
-        os.rename(temp_chain_file, chain_file)
+        shutil.move(temp_chain_file, chain_file)
 
     @property
     def _previous_iterations(self):
diff --git a/bilby/core/utils.py b/bilby/core/utils.py
index 345831f685f3d6058cdf67c9300bdc10de03c689..f007416b27e8a5923a379a9528b3c3c0c5188fd1 100644
--- a/bilby/core/utils.py
+++ b/bilby/core/utils.py
@@ -3,6 +3,7 @@ from __future__ import division
 from distutils.spawn import find_executable
 import logging
 import os
+import shutil
 from math import fmod
 import argparse
 import traceback
@@ -1065,7 +1066,7 @@ def move_old_file(filename, overwrite=False):
             logger.debug(
                 'Renaming existing file {} to {}.old'.format(filename,
                                                              filename))
-            os.rename(filename, filename + '.old')
+            shutil.move(filename, filename + '.old')
     logger.debug("Saving result to {}".format(filename))
 
 
@@ -1178,7 +1179,7 @@ def safe_file_dump(data, filename, module):
     temp_filename = filename + ".temp"
     with open(temp_filename, "wb") as file:
         module.dump(data, file)
-    os.rename(temp_filename, filename)
+    shutil.move(temp_filename, filename)
 
 
 def latex_plot_format(func):