diff --git a/binarycpython/utils/grid.py b/binarycpython/utils/grid.py
index a28022334ea6a865638324f97635694ed83fe12e..00ce11cbeedc11042e152deeae98a9dbc6e9849d 100644
--- a/binarycpython/utils/grid.py
+++ b/binarycpython/utils/grid.py
@@ -484,6 +484,7 @@ class Population:
             parameter_name: str,
             gridtype: str = "centred",
             branchpoint: int = 0,
+            branchcode: Union[str, None] = None,
             precode: Union[str, None] = None,
             postcode: Union[str, None] = None,
             condition: Union[str, None] = None,
@@ -577,6 +578,7 @@ class Population:
             "condition": condition,
             "gridtype": gridtype,
             "branchpoint": branchpoint,
+            "branchcode": branchcode,
             "grid_variable_number": len(self.grid_options["_grid_variables"]),
         }
 
@@ -2562,6 +2564,7 @@ class Population:
                     grid_variable,
                     dry_run,
                     grid_variable["branchpoint"],
+                    grid_variable["branchcode"],
                 )
 
             # increment indent_depth
@@ -2620,6 +2623,7 @@ class Population:
                     reverse_sorted_grid_variables[loopnr + 1][1],
                     dry_run,
                     grid_variable["branchpoint"],
+                    grid_variable["branchcode"],
                 )
                 self._increment_indent_depth(-1)
                 self._add_code("\n")
@@ -2670,13 +2674,35 @@ class Population:
         with open(gridcode_filename, "w") as file:
             file.write(self.code_string)
 
-    def _write_gridcode_system_call(self, grid_variable, dry_run, branchpoint):
+        # 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,
+            )
+
+    def _write_gridcode_system_call(self, grid_variable, dry_run, branchpoint, branchcode):
         #################################################################################
         # Here are the calls to the queuing or other solution. this part is for every system
         # Add comment
         self._increment_indent_depth(+1)
         self._add_code("#" * 40 + "\n")
 
+        if branchcode:
+            self._add_code(
+                "# Branch code\nif {}:\n",
+                branchcode)
+
         if branchpoint:
             self._add_code(
                 "# Code below will get evaluated for every system at this level of multiplicity (last one of that being {})\n".format(
@@ -4552,7 +4578,7 @@ eccentricity3=0
         """
 
         # Just return 1 if no option has been chosen
-        if self.grid_options["multiplicity_fraction_function"] == 0:
+        if self.grid_options["multiplicity_fraction_function"] in [0, "None"]:
             verbose_print(
                 "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.",
                 self.grid_options["verbosity"],
@@ -4567,7 +4593,7 @@ eccentricity3=0
             raise ValueError(msg)
 
         # Go over the chosen options
-        if self.grid_options["multiplicity_fraction_function"] == 1:
+        if self.grid_options["multiplicity_fraction_function"] in [1, 'Arenou2010']:
             # Arenou 2010 will be used
             verbose_print(
                 "_calculate_multiplicity_fraction: Using Arenou 2010 to calculate multiplicity fractions",
@@ -4583,10 +4609,10 @@ eccentricity3=0
                 4: 0,
             }
 
-        elif self.grid_options["multiplicity_fraction_function"] == 2:
+        elif self.grid_options["multiplicity_fraction_function"] in [2, 'Raghavan2010']:
             # Raghavan 2010 will be used
             verbose_print(
-                "_calculate_multiplicity_fraction: Using Rhagavan 2010 to calculate multiplicity fractions",
+                "_calculate_multiplicity_fraction: Using Raghavan (2010) to calculate multiplicity fractions",
                 self.grid_options["verbosity"],
                 3,
             )
@@ -4599,7 +4625,7 @@ eccentricity3=0
                 4: 0,
             }
 
-        elif self.grid_options["multiplicity_fraction_function"] == 3:
+        elif self.grid_options["multiplicity_fraction_function"] in [3, 'Moe2017']:
             # We need to check several things now here:
 
             # First, are the options for the MOE2017 grid set? On start it is filled with the default settings
diff --git a/binarycpython/utils/grid_options_defaults.py b/binarycpython/utils/grid_options_defaults.py
index 44bb9ade4a6c9050b11177cd2c5fd71c39203030..a1d05e9ddf87c99a6a2b76f8166687394a61ecce 100644
--- a/binarycpython/utils/grid_options_defaults.py
+++ b/binarycpython/utils/grid_options_defaults.py
@@ -123,6 +123,7 @@ grid_options_defaults_dict = {
     ## Grid type evolution
     "_grid_variables": {},  # grid variables
     "gridcode_filename": None,  # filename of gridcode
+    "symlink latest gridcode":True, # symlink to latest gridcode
     ## Monte carlo type evolution
     # TODO: make MC options
     ## Evolution from source file