diff --git a/binarycpython/utils/functions.py b/binarycpython/utils/functions.py
index fa79c8ef032b4c3a6f9e7a260bde5994c970579c..798cfc01adddf790d70d8c89587eff0e354d6cc5 100644
--- a/binarycpython/utils/functions.py
+++ b/binarycpython/utils/functions.py
@@ -195,7 +195,7 @@ def parse_binary_c_version_info(version_info_string):
             "mass_g": mass_g,
             "mass_amu": mass_amu,
         }
-    version_info_dict["isotopes"] = isotope_dict
+    version_info_dict["isotopes"] = isotope_dict if isotope_dict else None
 
     ##########################
     # Argpairs:
@@ -212,7 +212,7 @@ def parse_binary_c_version_info(version_info_string):
         else:
             argpair_dict[split_info[0]][split_info[1]] = split_info[2]
 
-    version_info_dict["argpairs"] = argpair_dict
+    version_info_dict["argpairs"] = argpair_dict if argpair_dict else None
 
     ##########################
     # ensembles:
@@ -225,7 +225,7 @@ def parse_binary_c_version_info(version_info_string):
         split_info = el.split("Ensemble ")[-1].split(" is ")
         if len(split_info) > 1:
             ensemble_dict[int(split_info[0])] = split_info[-1]
-    version_info_dict["ensembles"] = ensemble_dict
+    version_info_dict["ensembles"] = ensemble_dict if ensemble_dict else None
 
     ##########################
     # macros:
@@ -254,7 +254,7 @@ def parse_binary_c_version_info(version_info_string):
             macros_dict[param_name] = param_type_dict[param_type](param_value)
         except ValueError:
             macros_dict[param_name] = str(param_value)
-    version_info_dict["macros"] = macros_dict
+    version_info_dict["macros"] = macros_dict if macros_dict else None
 
     ##########################
     # Elements:
@@ -283,7 +283,7 @@ def parse_binary_c_version_info(version_info_string):
             "amt_isotopes": len(isotopes),
             "isotopes": isotopes,
         }
-    version_info_dict["elements"] = version_info_dict
+    version_info_dict["elements"] = elements_dict if elements_dict else None
 
     ##########################
     # dt_limits:
@@ -300,7 +300,7 @@ def parse_binary_c_version_info(version_info_string):
             "value": float(split_info[-1]),
         }
 
-    version_info_dict["dt_limits"] = dt_limits_dict
+    version_info_dict["dt_limits"] = dt_limits_dict if dt_limits_dict else None
 
     ##########################
     # Nucleosynthesis sources:
@@ -314,7 +314,7 @@ def parse_binary_c_version_info(version_info_string):
         split_info = el.split("Nucleosynthesis source")[-1].strip().split(" is ")
         nucsyn_sources_dict[int(split_info[0])] = split_info[-1]
 
-    version_info_dict["nucleosynthesis_sources"] = nucsyn_sources_dict
+    version_info_dict["nucleosynthesis_sources"] = nucsyn_sources_dict if nucsyn_sources_dict else None
 
     ##########################
     # miscellaneous:
@@ -329,16 +329,29 @@ def parse_binary_c_version_info(version_info_string):
 
     git_branch = [el for el in cleaned if el.startswith("git branch")]
     misc_dict["git_branch"] = git_branch[0].split("git branch ")[-1].replace('"', "")
+    cleaned = cleaned-set(git_branch)
 
     build = [el for el in cleaned if el.startswith("Build")]
     misc_dict["build"] = build[0].split("Build: ")[-1].replace('"', "")
+    cleaned = cleaned-set(build)
 
     email = [el for el in cleaned if el.startswith("Email")]
     misc_dict["email"] = email[0].split("Email ")[-1].split(",")
+    cleaned = cleaned-set(email)
 
-    misc_dict["uncaught"] = cleaned
+    other_items = set([el for el in cleaned if ' is ' in el])
+    cleaned = cleaned - other_items
 
-    version_info_dict["miscellaneous"] = misc_dict
+    for el in other_items:
+        split = el.split(' is ')
+        key = split[0].strip()
+        val = ' is '.join(split[1:]).strip()
+        misc_dict[key] = val
+
+
+    misc_dict["uncaught"] = "\n".join(cleaned)
+
+    version_info_dict["miscellaneous"] = misc_dict if misc_dict else None
     return version_info_dict
 
 
@@ -957,6 +970,18 @@ class binarycDecoder(json.JSONDecoder):
             return o
 
 
+class BinaryCEncoder(json.JSONEncoder):
+    def default(self, o):
+        print('inarycoij')
+        try:
+            str_repr = str(o)
+        except TypeError:
+            pass
+        else:
+            return str_repr
+        # Let the base class default method raise the TypeError
+        return JSONEncoder.default(self, o)
+
 def binaryc_json_serializer(obj):
     """
     Custom serializer for binary_c to use when functions are present in the dictionary
@@ -967,8 +992,8 @@ def binaryc_json_serializer(obj):
 
     if inspect.isfunction(obj):
         return str(obj)
-    return obj
-
+    else:
+        return obj
 
 def handle_ensemble_string_to_json(raw_output):
     """