diff --git a/src/binary_c_python_api.c b/src/binary_c_python_api.c
index 973a0253983fafb7847297fdc8140346887496fa..d71cb8f47771eec7fa95b50d02c9e176b0219ead 100644
--- a/src/binary_c_python_api.c
+++ b/src/binary_c_python_api.c
@@ -71,7 +71,8 @@ int run_system(char * argstring,
         store = NULL;
     }
 
-    struct persistent_data_t * persistent_data;
+    // persistent_data
+    struct persistent_data_t * persistent_data = NULL;
 
     /* make new stardata */
     stardata = NULL;
@@ -79,7 +80,7 @@ int run_system(char * argstring,
                         NULL,               // previous_stardatas
                         NULL,               // preferences
                         &store,             // store
-                        NULL,   // persistent_data TODO: see if this use is correct
+                        &persistent_data,               // persistent_data TODO: see if this use is correct
                         &argstring,         // argv
                         -1                  // argc
     );
@@ -117,26 +118,23 @@ int run_system(char * argstring,
     
     /* get error buffer pointer */
     binary_c_error_buffer(stardata,error_buffer);
-    
-    /* set raw_buffer_size = -1 to prevent it being freed */
-    stardata->tmpstore->raw_buffer_size = -1;
+
+    /* Determine whether to free the store memory adress*/
+    Boolean free_store = FALSE;
+    if (store_memaddr == -1)
+    {
+        Boolean free_store = TRUE;
+    }
 
     /* free stardata (except the buffer) */
     binary_c_free_memory(&stardata, // Stardata
         TRUE,                       // free_preferences
         TRUE,                       // free_stardata
-        FALSE,                      // free_store
+        free_store,                 // free_store
         FALSE,                      // free_raw_buffer
         TRUE                        // free_persistent TODO: check if this is correct here
     );
 
-    // add flag or logic to free store contents.
-    if (store_memaddr == -1)
-    {
-        binary_c_free_store_contents(store);
-    }
-
-    // TODO: Ask rob whether to free the memory here or not? or to free it manually.
     return 0;
 }
 
@@ -188,21 +186,15 @@ int return_arglines(char ** const buffer,
     /* get error buffer pointer */
     binary_c_error_buffer(stardata,error_buffer);
     
-    /* set raw_buffer_size = -1 to prevent it being freed */
-    stardata->tmpstore->raw_buffer_size = -1;
-
     /* free stardata (except the buffer) */
     binary_c_free_memory(&stardata, // Stardata
         TRUE,                       // free_preferences
         TRUE,                       // free_stardata
-        FALSE,                      // free_store
+        TRUE,                       // free_store
         FALSE,                      // free_raw_buffer
         TRUE                        // free_persistent TODO: check if this is correct here
     );
     
-    // TODO: check what this does
-    binary_c_free_store_contents(store);
-
     return 0;
 }
 
@@ -239,10 +231,7 @@ int return_help_info(char * argstring,
     
     /* get error buffer pointer */
     binary_c_error_buffer(stardata,error_buffer);
-    
-    /* set raw_buffer_size = -1 to prevent it being freed */
-    stardata->tmpstore->raw_buffer_size = -1;
-    
+        
     /* free stardata (except the buffer) */
     binary_c_free_memory(&stardata, // Stardata
         TRUE,                       // free_preferences
@@ -290,10 +279,7 @@ int return_help_all_info(char ** const buffer,
     
     /* get error buffer pointer */
     binary_c_error_buffer(stardata,error_buffer);
-    
-    /* set raw_buffer_size = -1 to prevent it being freed */
-    stardata->tmpstore->raw_buffer_size = -1;
-    
+        
     /* free stardata (except the buffer) */
     binary_c_free_memory(&stardata, // Stardata
         TRUE,                       // free_preferences
@@ -342,9 +328,6 @@ int return_version_info(char ** const buffer,
     /* get error buffer pointer */
     binary_c_error_buffer(stardata,error_buffer);
     
-    /* set raw_buffer_size = -1 to prevent it being freed */
-    stardata->tmpstore->raw_buffer_size = -1;
-
     /* free stardata (except the buffer) */
     binary_c_free_memory(&stardata, // Stardata
         TRUE,                       // free_preferences
@@ -392,10 +375,7 @@ long int return_store(char * argstring,
     
     /* get error buffer pointer */
     binary_c_error_buffer(stardata, error_buffer);
-    
-    /* set raw_buffer_size = -1 to prevent it being freed */
-    stardata->tmpstore->raw_buffer_size = -1;
-    
+        
     /* free stardata (except the buffer) */
     binary_c_free_memory(&stardata, // Stardata
         TRUE,                       // free_preferences
diff --git a/tests/test_run_system.py b/tests/test_run_system.py
new file mode 100644
index 0000000000000000000000000000000000000000..8bebfa99db67a8764d1ce007a6d8d26ef688a7e7
--- /dev/null
+++ b/tests/test_run_system.py
@@ -0,0 +1,34 @@
+import binary_c_python_api
+
+
+import textwrap
+
+
+# Evolution functions
+def test_run_system():
+    m1 = 15.0  # Msun
+    m2 = 14.0  # Msun
+    separation = 0  # 0 = ignored, use period
+    orbital_period = 4530.0  # days
+    eccentricity = 0.0
+    metallicity = 0.02
+    max_evolution_time = 15000
+    argstring = "binary_c M_1 {0:g} M_2 {1:g} separation {2:g} orbital_period {3:g} eccentricity {4:g} metallicity {5:g} max_evolution_time {6:g}  ".format(
+        m1,
+        m2,
+        separation,
+        orbital_period,
+        eccentricity,
+        metallicity,
+        max_evolution_time,
+    )
+
+    output = binary_c_python_api.run_system(argstring=argstring)
+
+    print("function: test_run_system")
+    print("Binary_c output:")
+    print(textwrap.indent(output, "\t"))
+
+####
+if __name__ == "__main__":
+    test_run_system()