diff --git a/binarycpython/utils/custom_logging_functions.py b/binarycpython/utils/custom_logging_functions.py
index 9f58b705a291e39df188765ba9b286a3b27bddff..54bd02b652c45e4bc48975864c383cb9ae9f0cea 100644
--- a/binarycpython/utils/custom_logging_functions.py
+++ b/binarycpython/utils/custom_logging_functions.py
@@ -4,7 +4,8 @@ import subprocess
 import socket
 import tempfile
 import ctypes
-
+import random
+import uuid
 
 def autogen_C_logging_code(logging_dict):
     """
@@ -230,9 +231,18 @@ def compile_shared_lib(code, sourcefile_name, outfile_name, verbose=False):
     # Write code to file
     binary_c_write_log_code(code, sourcefile_name)
 
+    # Remove the library if present:
+    if os.path.exists(outfile_name):
+        try:
+            print('removing' ,outfile_name)
+            os.remove(outfile_name)
+        except:
+            print("Error while deleting file {}".format(outfile_name))
+
     # create compilation command
     compilation_dict = return_compilation_dict()
 
+
     # Construct full command
     command = "{cc} {ccflags} {libs} -o {outfile_name} {sourcefile_name} {inc}".format(
         cc=compilation_dict["cc"],
@@ -246,7 +256,7 @@ def compile_shared_lib(code, sourcefile_name, outfile_name, verbose=False):
     # remove extra whitespaces:
     command = " ".join(command.split())
 
-    # Execute compilation
+    # Execute compilation and create the library
     if verbose:
         print("Executing following command:\n{command}".format(command=command))
     res = subprocess.check_output("{command}".format(command=command), shell=True)
@@ -281,22 +291,28 @@ def create_and_load_logging_function(custom_logging_code):
     """
 
     #
+
+
+    library_name = os.path.join(temp_custom_logging_dir(), "libcustom_logging_{}.so".format(uuid.uuid4().hex))
+    
     compile_shared_lib(
         custom_logging_code,
         sourcefile_name=os.path.join(temp_custom_logging_dir(), "custom_logging.c"),
-        outfile_name=os.path.join(temp_custom_logging_dir(), "libcustom_logging.so"),
+        # outfile_name=os.path.join(temp_custom_logging_dir(), "libcustom_logging.so"),
+        # outfile_name=os.path.join(temp_custom_logging_dir(), "libcustom_logging_{}.so".format(random.randint(1, 100))),
+        outfile_name=library_name,
+        # verbose=True
     )
 
     # Loading library
     dll1 = ctypes.CDLL("libgslcblas.so", mode=ctypes.RTLD_GLOBAL)
     dll2 = ctypes.CDLL("libgsl.so", mode=ctypes.RTLD_GLOBAL)
     dll3 = ctypes.CDLL("libbinary_c.so", mode=ctypes.RTLD_GLOBAL)
-    libmean = ctypes.CDLL(
-        os.path.join(temp_custom_logging_dir(), "libcustom_logging.so"),
+    libcustom_logging = ctypes.CDLL(library_name,
         mode=ctypes.RTLD_GLOBAL,
     )  # loads the shared library
 
     # Get memory adress of function. mimicking a pointer
-    func_memaddr = ctypes.cast(libmean.custom_output_function, ctypes.c_void_p).value
+    func_memaddr = ctypes.cast(libcustom_logging.custom_output_function, ctypes.c_void_p).value
 
     return func_memaddr
diff --git a/binarycpython/utils/grid.py b/binarycpython/utils/grid.py
index c8b66521efaa69fbcfab1fe4d700b6eccae06d6f..da789a5e86ef8cfda27f1feebbc81faaf22a7957 100644
--- a/binarycpython/utils/grid.py
+++ b/binarycpython/utils/grid.py
@@ -87,11 +87,15 @@ class Population(object):
 
             # Filter out keys for the grid_options
             elif key in self.grid_options.keys():
+                print("adding: {}={} to grid_options".format(key, kwargs[key]))
+
                 self.grid_options[key] = kwargs[key]
             # The of the keys go into a custom_options dict
             else:
+                print("!! Key doesnt match previously known parameter: adding: {}={} to custom_options".format(key, kwargs[key]))
                 self.custom_options[key] = kwargs[key]
 
+
     def return_argline(self, parameter_dict=None):
         """
         Function to create the string for the arg line from a parameter dict
@@ -250,6 +254,34 @@ class Population(object):
         with open(outfile, "w") as f:
             f.write(json.dumps(all_info, indent=4))
 
+    def set_custom_logging(self):
+        """
+        Function/routine to set all the custom logging so that the function memory pointer is known to the grid.
+        """
+
+        # C_logging_code gets priority of C_autogen_code
+        if self.grid_options["C_auto_logging"]:
+            # Generate real logging code
+            logging_line = autogen_C_logging_code(self.grid_options["C_auto_logging"])
+
+            # Generate entire shared lib code around logging lines
+            custom_logging_code = binary_c_log_code(logging_line)
+
+            # Load memory adress
+            self.grid_options[
+                "custom_logging_func_memaddr"
+            ] = create_and_load_logging_function(custom_logging_code)
+        #
+        if self.grid_options["C_logging_code"]:
+            # Generate entire shared lib code around logging lines
+            custom_logging_code = binary_c_log_code(self.grid_options["C_logging_code"])
+
+            # Load memory adress
+            self.grid_options[
+                "custom_logging_func_memaddr"
+            ] = create_and_load_logging_function(custom_logging_code)
+    
+
     ###################################################
     # Evolution functions
     ###################################################
@@ -259,9 +291,11 @@ class Population(object):
         Function to run a single system
         """
 
+        ### Custom logging code:
+        self.set_custom_logging()
+
         argline = self.return_argline(self.bse_options)
-        out = binary_c_python_api.run_binary(argline)
-        # out = binary_c_python_api.run_binary('binary_c M_1 15 M_2 14 separation 0 orbital_period 4530 eccentricity 0 metallicity 0.02 max_evolution_time 15000')
+        out = binary_c_python_api.run_system(argline, self.grid_options['custom_logging_func_memaddr'], self.grid_options['store_memaddr']) # Todo: change this to run_binary again but then build in checks in binary
         return out
 
     def evolve_population(self, custom_arg_file=None):
@@ -293,15 +327,17 @@ class Population(object):
             ] = create_and_load_logging_function(custom_logging_code)
 
         ### Load store
-        store = binary_c_python_api.return_store("")
+        self.grid_options['store_memaddr'] = binary_c_python_api.return_store("")
 
-        print("ho")
-
-        print(self.return_argline())
+        # Execute.
+        out = binary_c_python_api.run_population(
+            self.return_argline(), 
+            self.grid_options['custom_logging_func_memaddr'], 
+            self.grid_options['store_memaddr']
+        )
 
-        out = binary_c_python_api.run_population(self.return_argline(), 12, store)
         print(out)
-        quit()
+
 
         ### Arguments
         # If user inputs a file containing arg lines then use that
@@ -321,10 +357,12 @@ class Population(object):
         else:
             # generate population from options
 
-            print("ho")
-
             pass
 
+
+        quit()
+
+
         #######
         # Do stuff
         for line in population_arglines: