diff --git a/examples/cooling_rate/run.sh b/examples/cooling_rate/run.sh
index ce3d510430474c3986b463878c3edff2ba02d212..c140dca3d370df398e77fa31d871e97e9652c7a6 100644
--- a/examples/cooling_rate/run.sh
+++ b/examples/cooling_rate/run.sh
@@ -1,4 +1,4 @@
 #!/bin/bash
 
 ./plot_cooling.py 1
-./plot_cooling.py 100
+# ./plot_cooling.py 100
diff --git a/examples/initial_mass_function/plot_initial_mass_function.py b/examples/initial_mass_function/plot_initial_mass_function.py
index bc653edc70a36756b7f65f206fd4e5e02cd56129..bb972399eee6e1a756321695e5e63326c3e0b6d5 100644
--- a/examples/initial_mass_function/plot_initial_mass_function.py
+++ b/examples/initial_mass_function/plot_initial_mass_function.py
@@ -22,32 +22,42 @@ import pyswiftsim
 
 import numpy as np
 import matplotlib.pyplot as plt
+from time import strftime, gmtime
 plt.rc('text', usetex=True)
 
 N = 100
-
+solMass_in_cgs = 1.98848e33
 
 if __name__ == "__main__":
-
     with pyswiftsim.ParameterFile() as filename:
 
         parser = pyswiftsim.parseYamlFile(filename)
+
+        # get parser
         imf_parser = parser["GEARInitialMassFunction"]
+        units = parser["InternalUnitSystem"]
+        unit_mass = float(units["UnitMass_in_cgs"])
+        solMass_in_internal = solMass_in_cgs / unit_mass
 
-        mass_limits = list(imf_parser["mass_limits"])
-        mass_min = np.log10(mass_limits[0])
-        mass_max = np.log10(mass_limits[-1])
+        mass_limits = list(imf_parser["mass_limits_msun"])
+        mass_min = np.log10(mass_limits[0] * solMass_in_internal)
+        mass_max = np.log10(mass_limits[-1] * solMass_in_internal)
+
+        mass = np.logspace(mass_min, mass_max, N, dtype=np.float32)
 
-        # du / dt
         print("Computing initial mass function...")
 
-        mass = np.logspace(mass_min, mass_max, N, dtype=np.float32)
         imf = libstellar.initialMassFunction(filename, mass)
+        imf *= solMass_in_internal
 
         # plot IMF
+        mass /= solMass_in_internal
         plt.loglog(mass, imf)
 
-        plt.xlabel("Mass [Msun]")
-        plt.ylabel("Mass fraction")
+        plt.figure()
+        date = strftime("%d %b %Y", gmtime())
+        plt.title("Date: {}".format(date))
+        plt.xlabel("Mass [$M_\mathrm{sun}$]")
+        plt.ylabel("Initial Mass Function [$M_\mathrm{sun}^{-1}$]")
 
         plt.show()
diff --git a/examples/lifetime/plot_lifetime.py b/examples/lifetime/plot_lifetime.py
index 7696311e3cfd048d2dd000bebbbfc4389d448125..79998ef4f98eed12a4c78efd94809c0861208011 100644
--- a/examples/lifetime/plot_lifetime.py
+++ b/examples/lifetime/plot_lifetime.py
@@ -22,11 +22,14 @@ import pyswiftsim
 
 import numpy as np
 import matplotlib.pyplot as plt
+from time import strftime, gmtime
 plt.rc('text', usetex=True)
 
 
 N = 1000
 solar_metallicity = 0.02041
+solMass_in_cgs = 1.989e33
+year_in_cgs = 3.15569252e7
 
 
 if __name__ == "__main__":
@@ -35,12 +38,21 @@ if __name__ == "__main__":
         parser = pyswiftsim.parseYamlFile(filename)
         # Get masses
         imf = parser["GEARInitialMassFunction"]
-        mass_limits = imf["mass_limits"]
+        mass_limits = imf["mass_limits_msun"]
         mass_min = np.log10(mass_limits[0])
         mass_max = np.log10(mass_limits[-1])
 
         mass = np.logspace(mass_min, mass_max, N, dtype=np.float32)
 
+        # transform into internal units
+        units = parser["InternalUnitSystem"]
+        unit_mass = units["UnitMass_in_cgs"]
+        unit_vel = units["UnitVelocity_in_cgs"]
+        unit_length = units["UnitLength_in_cgs"]
+        unit_time = unit_length / unit_vel
+
+        mass *= solMass_in_cgs / unit_mass
+
         # get metallicity
         Z = solar_metallicity * np.ones(N, dtype=np.float32)
 
@@ -49,8 +61,13 @@ if __name__ == "__main__":
         lifetime = libstellar.lifetimeFromMass(filename, mass, Z)
         mass_from_lifetime = libstellar.massFromLifetime(filename, lifetime, Z)
 
-        lifetime /= 1e6
+        mass /= solMass_in_cgs / unit_mass
+        mass_from_lifetime /= solMass_in_cgs / unit_mass
+        lifetime /= 1e6 * year_in_cgs / unit_time
 
+        plt.figure()
+        date = strftime("%d %b %Y", gmtime())
+        plt.title("Date: {}".format(date))
         plt.loglog(mass, lifetime, label="Lifetime from mass")
         plt.loglog(mass_from_lifetime, lifetime, "--",
                    label="Mass from lifetime")
diff --git a/examples/supernovae_rate/plot_rates.py b/examples/supernovae_rate/plot_rates.py
index 0e4943b3b96324764ee5eb19af812cbd2e357e54..300c5fcb314d79796d7fb54e67ea49070dfe2ea1 100644
--- a/examples/supernovae_rate/plot_rates.py
+++ b/examples/supernovae_rate/plot_rates.py
@@ -22,6 +22,7 @@ import pyswiftsim
 
 import numpy as np
 import matplotlib.pyplot as plt
+from time import strftime, gmtime
 plt.rc('text', usetex=True)
 
 
@@ -29,14 +30,27 @@ N = 1000
 solar_metallicity = 0.02041
 t_min = 1e6  # in yr
 t_max = 3e10
+solMass_in_cgs = 1.989e33
+year_in_cgs = 3.15569252e7
 
 
 if __name__ == "__main__":
     with pyswiftsim.ParameterFile() as filename:
+        parser = pyswiftsim.parseYamlFile(filename)
 
         # Get times
         times = np.logspace(np.log10(t_min), np.log10(t_max), N + 1,
                             dtype=np.float32)
+
+        # transform into internal units
+        units = parser["InternalUnitSystem"]
+        unit_mass = units["UnitMass_in_cgs"]
+        unit_vel = units["UnitVelocity_in_cgs"]
+        unit_length = units["UnitLength_in_cgs"]
+        unit_time = unit_length / unit_vel
+
+        times *= year_in_cgs / unit_time
+
         t1 = times[:-1]
         t2 = times[1:]
 
@@ -48,15 +62,22 @@ if __name__ == "__main__":
         rate_snia = libstellar.supernovaeIaRate(filename, t1, t2, Z)
         rate_snii = libstellar.supernovaeIIRate(filename, t1, t2, Z)
 
-        t1 /= 1e6
-        rate_snia *= 1e9
-        rate_snii *= 1e9
+        t1 /= 1e6 * year_in_cgs / unit_time
+
+        unit_rate = year_in_cgs / unit_time
+        unit_rate *= solMass_in_cgs / unit_mass
+
+        rate_snia *= 1e9 * unit_rate
+        rate_snii *= 1e9 * unit_rate
 
+        plt.figure()
+        date = strftime("%d %b %Y", gmtime())
+        plt.title("Date: {}".format(date))
         plt.loglog(t1, rate_snia, label="SNIa")
         plt.loglog(t1, rate_snii, label="SNII")
 
         plt.xlabel("Time [Myr]")
-        plt.ylabel("Supernovae rate [$M_\odot^{-1} Gyr^{-1}$]")
+        plt.ylabel("Supernovae rate [$M_\odot^{-1} \mathrm{Gyr}^{-1}$]")
         plt.legend()
 
         plt.show()
diff --git a/scripts/pyswift_cooling_rate b/scripts/pyswift_cooling_rate
index 262629c6debc640b90821d828f9190ef5b67d872..7c905944b6bda576c1048fcc11828912810c8f9e 100644
--- a/scripts/pyswift_cooling_rate
+++ b/scripts/pyswift_cooling_rate
@@ -25,7 +25,6 @@ import numpy as np
 import matplotlib.pyplot as plt
 from astropy import units, constants
 import yaml
-from time import strftime, gmtime
 from argparse import ArgumentParser
 import os
 
@@ -244,8 +243,6 @@ def plot_solution(rate, data, us, opt):
         cbar.set_ticklabels(tc)
         cbar.ax.set_ylabel("Log( Cooling Length / kpc )")
 
-    date = strftime("%d %b %Y", gmtime())
-    plt.title("Date: {}".format(date))
     plt.show()
 
 
diff --git a/scripts/pyswift_initial_mass_function b/scripts/pyswift_initial_mass_function
index 803e520495fc9d453963975de2e4100d20374bc5..fa35ce5a8d50329fe5b9fc0bbba2ffcc932ae667 100644
--- a/scripts/pyswift_initial_mass_function
+++ b/scripts/pyswift_initial_mass_function
@@ -26,6 +26,7 @@ from argparse import ArgumentParser
 import os
 
 plt.rc('text', usetex=True)
+solMass_in_cgs = 1.98848e33
 
 
 def parseArguments():
@@ -75,8 +76,10 @@ if __name__ == "__main__":
 
         parser = pyswiftsim.parseYamlFile(filename)
         imf_parser = parser["GEARInitialMassFunction"]
+        units = parser["InternalUnitSystem"]
+        unit_mass = float(units["UnitMass_in_cgs"])
 
-        mass_limits = list(imf_parser["mass_limits"])
+        mass_limits = list(imf_parser["mass_limits_msun"])
         if opt.mass_min is not None:
             mass_min = np.log10(opt.mass_min)
         else:
@@ -87,11 +90,17 @@ if __name__ == "__main__":
         else:
             mass_max = np.log10(mass_limits[-1])
 
+        mass_min *= solMass_in_cgs / unit_mass
+        mass_max *= solMass_in_cgs / unit_mass
+
         print("Computing initial mass function...")
 
         mass = np.logspace(mass_min, mass_max, opt.N, dtype=np.float32)
         imf = libstellar.initialMassFunction(filename, mass)
 
+        imf *= solMass_in_cgs / unit_mass
+        mass /= solMass_in_cgs / unit_mass
+
         # plot IMF
         plt.loglog(mass, imf)
 
diff --git a/scripts/pyswift_lifetime b/scripts/pyswift_lifetime
index 8485f006cd4e36deba35ceda434c6f7bd9785178..9fb7754db9c4ceadde0fedaf4007c375c2c1a7ee 100644
--- a/scripts/pyswift_lifetime
+++ b/scripts/pyswift_lifetime
@@ -26,6 +26,9 @@ from argparse import ArgumentParser
 import os
 plt.rc('text', usetex=True)
 
+solMass_in_cgs = 1.989e33
+year_in_cgs = 3.15569252e7
+
 
 def parseArguments():
     parser = ArgumentParser(description="Plot the lifetime of a star")
@@ -80,7 +83,7 @@ if __name__ == "__main__":
         parser = pyswiftsim.parseYamlFile(filename)
         imf_parser = parser["GEARInitialMassFunction"]
 
-        mass_limits = list(imf_parser["mass_limits"])
+        mass_limits = list(imf_parser["mass_limits_msun"])
         if opt.mass_min is not None:
             mass_min = np.log10(opt.mass_min)
         else:
@@ -93,13 +96,24 @@ if __name__ == "__main__":
 
         mass = np.logspace(mass_min, mass_max, opt.N, dtype=np.float32)
 
+        # transform into internal units
+        units = parser["InternalUnitSystem"]
+        unit_mass = units["UnitMass_in_cgs"]
+        unit_vel = units["UnitVelocity_in_cgs"]
+        unit_length = units["UnitLength_in_cgs"]
+        unit_time = unit_length / unit_vel
+
+        mass *= solMass_in_cgs / unit_mass
+
         # get metallicity
         Z = opt.metallicity * np.ones(opt.N, dtype=np.float32)
 
         print("Computing lifetime...")
 
         lifetime = libstellar.lifetimeFromMass(filename, mass, Z)
-        lifetime /= 1e6
+
+        mass /= solMass_in_cgs / unit_mass
+        lifetime /= 1e6 * year_in_cgs / unit_time
 
         plt.loglog(mass, lifetime)
 
diff --git a/scripts/pyswift_supernovae_rate b/scripts/pyswift_supernovae_rate
index 65bf52b12a6c9c6d6dbf588038ad368ac2073455..a60baf0f6d493e59964cd441df2c9e2aff914be5 100644
--- a/scripts/pyswift_supernovae_rate
+++ b/scripts/pyswift_supernovae_rate
@@ -26,6 +26,9 @@ from argparse import ArgumentParser
 import os
 plt.rc('text', usetex=True)
 
+solMass_in_cgs = 1.989e33
+year_in_cgs = 3.15569252e7
+
 
 def parseArguments():
     parser = ArgumentParser(description="Plot the supernovae rate")
@@ -60,6 +63,16 @@ def parseArguments():
         type=float, default=0.02041,
         help="Metallicity of the stars")
 
+    parser.add_argument(
+        "--disable-snia", dest="disable_snia",
+        action="store_true",
+        help="Disable the SNIa")
+
+    parser.add_argument(
+        "--disable-snii", dest="disable_snii",
+        action="store_true",
+        help="Disable the SNII")
+
     args = parser.parse_args()
 
     return args
@@ -76,14 +89,25 @@ if __name__ == "__main__":
             "The parameter file '{}' does not exist".format(opt.params))
 
     with pyswiftsim.ParameterFile(existing=opt.params) as filename:
+        parser = pyswiftsim.parseYamlFile(filename)
 
-        # Get times
+        # Get times in yr
         opt.time_min *= 1e6
         opt.time_max *= 1e6
 
         times = np.logspace(
             np.log10(opt.time_min), np.log10(opt.time_max), opt.N + 1,
             dtype=np.float32)
+
+        # transform into internal units
+        units = parser["InternalUnitSystem"]
+        unit_mass = float(units["UnitMass_in_cgs"])
+        unit_vel = float(units["UnitVelocity_in_cgs"])
+        unit_length = float(units["UnitLength_in_cgs"])
+        unit_time = unit_length / unit_vel
+
+        times *= year_in_cgs / unit_time
+
         t1 = times[:-1]
         t2 = times[1:]
 
@@ -92,15 +116,22 @@ if __name__ == "__main__":
 
         print("Computing supernovae rate...")
 
-        rate_snia = libstellar.supernovaeIaRate(filename, t1, t2, Z)
-        rate_snii = libstellar.supernovaeIIRate(filename, t1, t2, Z)
+        if not opt.disable_snia:
+            rate_snia = libstellar.supernovaeIaRate(filename, t1, t2, Z)
+        if not opt.disable_snii:
+            rate_snii = libstellar.supernovaeIIRate(filename, t1, t2, Z)
+
+        t1 /= 1e6 * year_in_cgs / unit_time
 
-        t1 /= 1e6
-        rate_snia *= 1e9
-        rate_snii *= 1e9
+        unit_rate = year_in_cgs / unit_time
+        unit_rate *= solMass_in_cgs / unit_mass
 
-        plt.loglog(t1, rate_snia, label="SNIa")
-        plt.loglog(t1, rate_snii, label="SNII")
+        if not opt.disable_snia:
+            rate_snia *= 1e9 * unit_rate
+            plt.loglog(t1, rate_snia, label="SNIa")
+        if not opt.disable_snii:
+            rate_snii *= 1e9 * unit_rate
+            plt.loglog(t1, rate_snii, label="SNII")
 
         plt.xlabel("Time [Myr]")
         plt.ylabel("Supernovae rate [$M_\odot^{-1} Gyr^{-1}$]")
diff --git a/tests/test_initial_mass_function.py b/tests/test_initial_mass_function.py
index ca80c505bb39844035953934cdb84bf221591068..416aa3c4f7905b419200358cd9632bc1af4513db 100644
--- a/tests/test_initial_mass_function.py
+++ b/tests/test_initial_mass_function.py
@@ -26,6 +26,7 @@ plt.rc('text', usetex=True)
 
 
 N = 100
+solMass_in_cgs = 1.989e33
 
 
 if __name__ == "__main__":
@@ -34,14 +35,21 @@ if __name__ == "__main__":
 
         parser = pyswiftsim.parseYamlFile(filename)
         imf = parser["GEARInitialMassFunction"]
-        mass_limits = imf["mass_limits"]
+        mass_limits = imf["mass_limits_msun"]
         mass_min = float(mass_limits[0])
         mass_max = float(mass_limits[1])
 
         mass = np.linspace(mass_min, mass_max, N, dtype=np.float32)
 
+        units = parser["InternalUnitSystem"]
+        unit_mass = units["UnitMass_in_cgs"]
+        # change the units
+        mass *= solMass_in_cgs / unit_mass
+
         print("Computing initial mass function...")
 
         imf = libstellar.initialMassFunction(filename, mass)
 
+        imf *= solMass_in_cgs / unit_mass
+
         print("IMF obtained: {}".format(imf))
diff --git a/tests/test_lifetime.py b/tests/test_lifetime.py
index 3fc7a84d9a9a91eedaf7ccc033058d88bb6e93cf..aac4281d47c93cf5cb7ac0c1262e119736d25b8c 100644
--- a/tests/test_lifetime.py
+++ b/tests/test_lifetime.py
@@ -27,7 +27,8 @@ plt.rc('text', usetex=True)
 
 N = 100
 solar_metallicity = 0.02041
-
+solMass_in_cgs = 1.989e33
+year_in_cgs = 3.15569252e7
 
 if __name__ == "__main__":
     with pyswiftsim.ParameterFile() as filename:
@@ -41,6 +42,14 @@ if __name__ == "__main__":
 
         mass = np.linspace(mass_min, mass_max, N, dtype=np.float32)
 
+        units = parser["InternalUnitSystem"]
+        unit_mass = units["UnitMass_in_cgs"]
+        unit_vel = units["UnitVelocity_in_cgs"]
+        unit_length = units["UnitLength_in_cgs"]
+        unit_time = unit_length / unit_vel
+        # change the units
+        mass *= solMass_in_cgs / unit_mass
+
         # get metallicity
         Z = solar_metallicity * np.ones(N, dtype=np.float32)
 
@@ -49,6 +58,10 @@ if __name__ == "__main__":
         lifetime = libstellar.lifetimeFromMass(filename, mass, Z)
         mass_from_lifetime = libstellar.massFromLifetime(filename, lifetime, Z)
 
+        mass /= solMass_in_cgs / unit_mass
+        mass_from_lifetime /= solMass_in_cgs / unit_mass
+        lifetime /= year_in_cgs / unit_time
+
         print("Mass used: {}".format(mass))
 
         print("Lifetime obtained: {}".format(lifetime))
diff --git a/tests/test_rates.py b/tests/test_rates.py
index 332f957001b460a1feb1913e1ffbbf7fcec4cc0f..7bc38ff4f37d96e98fc822225fb4c594cc367ab5 100644
--- a/tests/test_rates.py
+++ b/tests/test_rates.py
@@ -27,16 +27,29 @@ plt.rc('text', usetex=True)
 
 N = 100
 solar_metallicity = 0.02041
-t_min = 1e6 # in yr
+t_min = 1e6  # in yr
 t_max = 1e10
+solMass_in_cgs = 1.989e33
+year_in_cgs = 3.15569252e7
 
 
 if __name__ == "__main__":
     with pyswiftsim.ParameterFile() as filename:
+        parser = pyswiftsim.parseYamlFile(filename)
 
         # Get times
         times = np.logspace(np.log10(t_min), np.log10(t_max), N + 1,
                             dtype=np.float32)
+
+        # transform into internal units
+        units = parser["InternalUnitSystem"]
+        unit_mass = units["UnitMass_in_cgs"]
+        unit_vel = units["UnitVelocity_in_cgs"]
+        unit_length = units["UnitLength_in_cgs"]
+        unit_time = unit_length / unit_vel
+
+        times *= year_in_cgs / unit_time
+
         t1 = times[:-1]
         t2 = times[1:]
 
@@ -48,6 +61,11 @@ if __name__ == "__main__":
         rate = libstellar.supernovaeIaRate(filename, t1, t2, Z)
         rate += libstellar.supernovaeIIRate(filename, t1, t2, Z)
 
+        rate *= year_in_cgs / unit_time
+        rate *= solMass_in_cgs / unit_mass
+
+        t1 /= year_in_cgs / unit_time
+
         print("Time used: {}".format(t1))
 
         print("Rate obtained: {}".format(rate))