diff --git a/pycgtool/bondset.py b/pycgtool/bondset.py
index def598ff472698d30d9f4d22ca8a4fa12259669e..1768c8d9855349acf8ef7dbcdbf72220e8f032a9 100644
--- a/pycgtool/bondset.py
+++ b/pycgtool/bondset.py
@@ -115,31 +115,29 @@ class BondSet:
         except AttributeError:
             self._default_fc = False
 
+        # Setup default functional forms
         functional_forms = FunctionalForms()
-        self._functional_forms = {}
+        if self._default_fc:
+            default_forms = ["MartiniDefaultLength", "MartiniDefaultAngle", "MartiniDefaultDihedral"]
+        else:
+            default_forms = ["Harmonic", "CosHarmonic", "Harmonic"]
+        self._functional_forms = [None, None]
+        self._functional_forms.extend(map(lambda x: functional_forms[x], default_forms))
+
         try:
             self._functional_forms[2] = functional_forms[options.length_form]
         except AttributeError:
-            if self._default_fc:
-                self._functional_forms[2] = functional_forms.MartiniDefaultLength
-            else:
-                self._functional_forms[2] = functional_forms.Harmonic
+            pass
 
         try:
             self._functional_forms[3] = functional_forms[options.angle_form]
         except AttributeError:
-            if self._default_fc:
-                self._functional_forms[3] = functional_forms.MartiniDefaultAngle
-            else:
-                self._functional_forms[3] = functional_forms.CosHarmonic
+            pass
 
         try:
             self._functional_forms[4] = functional_forms[options.dihedral_form]
         except AttributeError:
-            if self._default_fc:
-                self._functional_forms[4] = functional_forms.MartiniDefaultDihedral
-            else:
-                self._functional_forms[4] = functional_forms.Harmonic
+            pass
 
         with CFG(filename) as cfg:
             for mol in cfg:
@@ -150,6 +148,7 @@ class BondSet:
                 for atomlist in mol:
                     try:
                         # TODO consider best way to override default func form
+                        # On per bond, or per type basis
                         func_form = functional_forms[atomlist[-1]]
                     except AttributeError:
                         func_form = self._functional_forms[len(atomlist)]
diff --git a/pycgtool/functionalforms.py b/pycgtool/functionalforms.py
index a3f4e83eeeed5f5a8a1cd3ebde8f20431cae9159..919e425aad7ae3c01889cf71162d2fc0ba209f3d 100644
--- a/pycgtool/functionalforms.py
+++ b/pycgtool/functionalforms.py
@@ -5,10 +5,20 @@ from pycgtool.util import SimpleEnum
 
 
 class FunctionalForms(object):
+    """
+    Class holding list of all defined functional forms for Boltzmann Inversion.
+
+    Creating an instance causes the Enum of functional forms to be updated with
+    all new subclasses of FunctionalForm.  These may then be accessed by name,
+    either as attributes or using square brackets.
+    """
     FormsEnum = SimpleEnum.enum("FormsEnum")
 
     @classmethod
-    def refresh(cls):
+    def _refresh(cls):
+        """
+        Update the functional forms Enum to include all new subclasses of FunctionalForm.
+        """
         enum_dict = cls.FormsEnum.as_dict()
         for subclass in FunctionalForm.__subclasses__():
             name = subclass.__name__
@@ -19,6 +29,7 @@ class FunctionalForms(object):
 
     def __init__(self, **kwargs):
         self._kwargs = kwargs
+        type(self)._refresh()
 
     def __getattr__(self, item):
         return type(self).FormsEnum[item].value
@@ -37,9 +48,23 @@ class FunctionalForms(object):
 
 
 class FunctionalForm(object, metaclass=abc.ABCMeta):
+    """
+    Parent class of any functional form used in Boltzmann Inversion to convert variance to a force constant.
+
+    New functional forms must define a static __call__ method.
+    """
     @staticmethod
     @abc.abstractstaticmethod
     def __call__(mean, var, temp):
+        """
+        Calculate force constant.
+        Abstract static method to be defined by all functional forms.
+
+        :param mean: Mean of internal coordinate distribution
+        :param var: Variance of internal coordinate distribution
+        :param temp: Temperature of simulation
+        :return: Calculated force constant
+        """
         pass
 
 
@@ -73,7 +98,3 @@ class MartiniDefaultDihedral(FunctionalForm):
     @staticmethod
     def __call__(mean, var, temp):
         return 50.
-
-FunctionalForms.refresh()
-
-
diff --git a/test/test_functionalforms.py b/test/test_functionalforms.py
index 05e214711dc9195a2a2eeff579478a199c45ec62..56056e53ab5076b659a21c3b4d076df387f66d49 100644
--- a/test/test_functionalforms.py
+++ b/test/test_functionalforms.py
@@ -16,7 +16,6 @@ class FunctionalFormTest(unittest.TestCase):
             @staticmethod
             def __call__(mean, var, temp):
                 return "TestResult"
-        FunctionalForms.refresh()
 
         funcs = FunctionalForms()
         self.assertIn("TestFunc", funcs)