diff --git a/binarycpython/utils/grid.py b/binarycpython/utils/grid.py
index 00ce11cbeedc11042e152deeae98a9dbc6e9849d..545d0217581a4f8fb082af038d1f41da0743a66e 100644
--- a/binarycpython/utils/grid.py
+++ b/binarycpython/utils/grid.py
@@ -2677,19 +2677,22 @@ class Population:
         # perhaps create symlink to latest gridcode: note, we use os.replace()
         # in case the symlink already exists
         if self.grid_options['symlink latest gridcode']:
-            ftmp = os.path.join(self.grid_options['tmp_dir'],
-                                'binary_c_grid-latest-tmp-symlink')
-            fsym = os.path.join(self.grid_options['tmp_dir'],
-                                'binary_c_grid-latest')
-            os.symlink(gridcode_filename,ftmp)
-            os.replace(ftmp,'binary_c_grid-latest-tmp')
-            verbose_print(
-                "{}Symlinked grid code to {} {}".format(self.ANSI_colours['blue'],
-                                                        ftmp,
-                                                        self.ANSI_colours['reset']),
-                self.grid_options["verbosity"],
-                1,
-            )
+            symlink = os.path.join(self.grid_options['tmp_dir'],
+                                   'binary_c_grid-latest')
+            os.unlink(symlink)
+
+            try:
+                os.symlink(gridcode_filename,symlink)
+                verbose_print(
+                    "{}Symlinked grid code to {} {}".format(self.ANSI_colours['blue'],
+                                                            symlink,
+                                                            self.ANSI_colours['reset']),
+                    self.grid_options["verbosity"],
+                    1,
+                )
+            except OSError:
+                print("symlink failed")
+
 
     def _write_gridcode_system_call(self, grid_variable, dry_run, branchpoint, branchcode):
         #################################################################################