diff --git a/binarycpython/tests/main.py b/binarycpython/tests/main.py
index 62da6bb66f7d3097db09733e6c8d378586ccdd4c..815f86aace5ff740b062a65036c149bf23f994b3 100755
--- a/binarycpython/tests/main.py
+++ b/binarycpython/tests/main.py
@@ -68,22 +68,23 @@ from binarycpython.tests.test_plot_functions import (
 )
 from binarycpython.tests.test_run_system_wrapper import *
 
-from binarycpython.tests.tests_population_extensions.test__distribution_functions import (
+from binarycpython.tests.tests_population_extensions.test_distribution_functions import (
     test_flat,
     test_number,
-    test_const_distribution
+    test_const_distribution,
+    test_powerlaw
 )
-from binarycpython.tests.tests_population_extensions.test__grid_options_defaults import (
+from binarycpython.tests.tests_population_extensions.test_grid_options_defaults import (
     test_grid_options_help, 
     test_grid_options_description_checker,
     test_write_grid_options_to_rst_file,
 )
 
-from binarycpython.tests.tests_population_extensions.test__version_info import (
+from binarycpython.tests.tests_population_extensions.test_version_info import (
     test_return_binary_c_version_info,
     test_parse_binary_c_version_info
 )
-from binarycpython.tests.tests_population_extensions.test__gridcode import (
+from binarycpython.tests.tests_population_extensions.test_gridcode import (
     test_add_grid_variable,
 )
 
diff --git a/binarycpython/utils/grid.py b/binarycpython/utils/grid.py
index 4aa28736af8593693cb46a170cecbc7694d7a18e..2f9adb08d22e9346679d84fefe74cd34807db2d5 100644
--- a/binarycpython/utils/grid.py
+++ b/binarycpython/utils/grid.py
@@ -67,18 +67,18 @@ from binarycpython.utils.dicts import (
     keys_to_floats,
 )
 
-from binarycpython.utils.population_extensions._analytics import analytics
-from binarycpython.utils.population_extensions._cache import cache
-from binarycpython.utils.population_extensions._dataIO import dataIO
-from binarycpython.utils.population_extensions._distribution_functions import distribution_functions
-from binarycpython.utils.population_extensions._grid_logging import grid_logging
-from binarycpython.utils.population_extensions._grid_options_defaults import grid_options_defaults
-from binarycpython.utils.population_extensions._gridcode import gridcode
-from binarycpython.utils.population_extensions._HPC import HPC
-from binarycpython.utils.population_extensions._metadata import metadata
-from binarycpython.utils.population_extensions._Moe_di_Stefano_2017 import Moe_di_Stefano_2017
-from binarycpython.utils.population_extensions._spacing_functions import spacing_functions
-from binarycpython.utils.population_extensions._version_info import version_info
+from binarycpython.utils.population_extensions.analytics import analytics
+from binarycpython.utils.population_extensions.cache import cache
+from binarycpython.utils.population_extensions.dataIO import dataIO
+from binarycpython.utils.population_extensions.distribution_functions import distribution_functions
+from binarycpython.utils.population_extensions.grid_logging import grid_logging
+from binarycpython.utils.population_extensions.grid_options_defaults import grid_options_defaults
+from binarycpython.utils.population_extensions.gridcode import gridcode
+from binarycpython.utils.population_extensions.HPC import HPC
+from binarycpython.utils.population_extensions.metadata import metadata
+from binarycpython.utils.population_extensions.Moe_di_Stefano_2017 import Moe_di_Stefano_2017
+from binarycpython.utils.population_extensions.spacing_functions import spacing_functions
+from binarycpython.utils.population_extensions.version_info import version_info
 
 from binarycpython import _binary_c_bindings
 
@@ -148,6 +148,7 @@ class Population(
         self.grid_options = copy.deepcopy(self.get_grid_options_defaults_dict())
 
         # Custom options
+        # TODO: is this really necessary here? The custom options should be empty on start i think
         self.custom_options = {
             "save_snapshot": False,
         }
@@ -172,7 +173,7 @@ class Population(
             self.get_Moe_di_Stefano_2017_default_options()
         )
 
-        # Write MOE2017 options to a file. NOTE: not sure why i put this here anymore
+        # Write MOE2017 options to a file. NOTE: (david) not sure why i put this here anymore
         os.makedirs(
             os.path.join(self.grid_options["tmp_dir"], "moe_distefano"), exist_ok=True
         )
@@ -222,6 +223,10 @@ class Population(
         # add metadata
         self.add_system_metadata()
 
+        # set up function cache.
+        # NOTE: (david) I added this here to be able to test the distributions functions without actually running anything.
+        self.setup_function_cache()
+
     def jobID(self):
         """
         Function to return the job ID number of this process
diff --git a/binarycpython/utils/population_extensions/_cache.py b/binarycpython/utils/population_extensions/_cache.py
index 4a83d3a2b957cdc52527a90452d54382479b7cee..6cb6a59f5153c044f15c2acbaeebf3ce71b8d79c 100644
--- a/binarycpython/utils/population_extensions/_cache.py
+++ b/binarycpython/utils/population_extensions/_cache.py
@@ -243,12 +243,13 @@ class cache:
                     "function_cache_functions"
                 ].get(func)
 
+                # TODO: Make this part better: needs to be able to handle any depth
                 x = func.split(".")
-                modulename = "binarycpython.utils." + x[0]
+                modulename = "binarycpython.utils.population_extensions." + x[0]
                 module = importlib.import_module(modulename)
                 _method = eval("module.{}.{}".format(x[0], x[1]))
-                if testargs:
 
+                if testargs:
                     def _func_wrap(*args, **kwargs):
                         """
                         wrap to return args and kwargs
diff --git a/binarycpython/utils/population_extensions/_dataIO.py b/binarycpython/utils/population_extensions/_dataIO.py
index 9e28d1ff7df4d445f07366696156ec7de23f7182..716e36ef91bbdd723fa64026e2731a781eb19e2f 100644
--- a/binarycpython/utils/population_extensions/_dataIO.py
+++ b/binarycpython/utils/population_extensions/_dataIO.py
@@ -673,6 +673,7 @@ class dataIO:
         os.sync()
         dirname = os.path.dirname(filename)
         os.scandir(dirname)
+        os.scandir.close()
 
     def compression_type(self, filename):
         """
diff --git a/binarycpython/utils/population_extensions/_grid_options_defaults.py b/binarycpython/utils/population_extensions/_grid_options_defaults.py
index 779f7590c81240966f86740a6a933acfff9419a2..6eac46ebe503286d4edb027c2bddaebb66226575 100644
--- a/binarycpython/utils/population_extensions/_grid_options_defaults.py
+++ b/binarycpython/utils/population_extensions/_grid_options_defaults.py
@@ -205,13 +205,13 @@ class grid_options_defaults:
                 # set above
                 #
                 # if n is None, no cache is set up
-                "_distribution_functions.powerlaw_constant": (0, "NoCache", "1,100,-2"),
-                "_distribution_functions.calculate_constants_three_part_powerlaw": (
+                "distribution_functions.powerlaw_constant": (0, "NoCache", "1,100,-2"),
+                "distribution_functions.calculate_constants_three_part_powerlaw": (
                     16,
                     "FIFOCache",
                     "0.1,0.5,1,100,-1.3,-2.3,-2.3",
                 ),
-                "_distribution_functions.gaussian_normalizing_const": (
+                "distribution_functions.gaussian_normalizing_const": (
                     16,
                     "FIFOCache",
                     "1.0,1.0,-10.0,+10.0",