diff --git a/multiarea_model/default_params.py b/multiarea_model/default_params.py
index 3cc31982786111bd22d5b5b25d9af46d4d47fca3..ccf891e8fc256d922a98b8358bf7f628970a8c22 100644
--- a/multiarea_model/default_params.py
+++ b/multiarea_model/default_params.py
@@ -269,9 +269,22 @@ Theory params
 
 theory_params = {'neuron_params': neuron_params,
                  'input_params': input_params,
+                 # Initial rates can be None (start integration at
+                 # zero rates), a numpy.ndarray defining the initial
+                 # rates or 'random_uniform' which leads to randomly
+                 # drawn initial rates from a uniform distribution.
                  'initial_rates': None,
+                 # If 'initial_rates' is set to 'random_uniform',
+                 # 'initial_rates_iter' defines the number of
+                 # different initial conditions
                  'initial_rates_iter': None,
+                 # If 'initial_rates' is set to 'random_uniform',
+                 # 'initial_rates_max' defines the maximum rate of the
+                 # uniform distribution to draw the initial rates from
+                 'initial_rates_max': 1000.,
+                 # The simulation time of the mean-field theory integration
                  'T': 50.,
+                 # The time step of the mean-field theory integration
                  'dt': 0.1}
 
 
diff --git a/multiarea_model/theory.py b/multiarea_model/theory.py
index a1bf8d55cdfd7323067732b99cd487e18c678031..d584df91204fcd955eb305a456d426017208fa7a 100644
--- a/multiarea_model/theory.py
+++ b/multiarea_model/theory.py
@@ -138,7 +138,7 @@ class Theory():
                 gen = self.initial_rates(self.params['initial_rates_iter'],
                                          dim,
                                          mode=self.params['initial_rates'],
-                                         rate_max=1000.)
+                                         rate_max=self.params['initial_rates_max'])
                 num_iter = self.params['initial_rates_iter']
             # initial rates are explicitly defined in self.params
             elif isinstance(self.params['initial_rates'], np.ndarray):
@@ -321,11 +321,27 @@ class Theory():
     def initial_rates(self, num_iter, dim, mode='random_uniform', rate_max=100., rng_seed=123):
         """
         Helper function to create generator for initial rates
+
+        Parameters
+        ----------
+        num_iter : int
+           Number of elements in generator
+        dim : int
+           Dimension of each element, i.e. number of populations in
+           the network
+        mode : str
+           Mode defining the process to generate each element.
+           Currently only 'random_uniform' is supported: each element
+           is drawn from a uniform distribution
+        rate_max : float
+           Maximal rate for uniform distribution.
+        rng_seed : int
+           Seed for random number generation. Defaults to 123.
         """
-        np.random.seed(rng_seed)
+        rng = np.random.RandomState(seed=rng_seed)
         n = 0
         while n < num_iter:
-            yield rate_max * np.random.rand(dim)
+            yield rate_max * rng.rand(dim)
             n += 1
 
     def mu_sigma(self, rates, external=True, matrix_filter=None,
@@ -333,6 +349,20 @@ class Theory():
         """
         Calculates mean and variance according to the
         theory.
+
+        Parameters
+        ----------
+        rates : numpy.ndarray
+            Stationary rates of the network.
+        external : bool
+            Whether to include external input into the calculation.
+            Defaults to False.
+         matrix_filter : numpy.ndarray
+            Filter to filter for a subset of the network. Defaults to
+            None.
+        vector_filter : numpy.ndarray
+            Filter to filter for a subset of the network. Defaults to
+            None.
         """
         if matrix_filter is not None:
             K = copy(self.network.K_matrix)
@@ -369,9 +399,23 @@ class Theory():
         return mu, sigma
 
     def stability_matrix(self, rates, matrix_filter=None,
-                         vector_filter=None, full_output=False, replace_cc=None):
+                         vector_filter=None, full_output=False):
         """
         Computes stability matrix on the population level.
+
+        Parameters
+        ----------
+        rates : numpy.ndarray
+            Stationary rates of the network.
+        matrix_filter : numpy.ndarray
+            Filter to filter for a subset of the network. Defaults to
+            None.
+        vector_filter : numpy.ndarray
+            Filter to filter for a subset of the network. Defaults to
+            None.
+        full_output : bool
+            Whether to return only the matrix itself or all variables
+            contributing. Defaults to False.
         """
         if np.any(matrix_filter is not None):
             assert(np.any(vector_filter is not None))
@@ -432,21 +476,34 @@ class Theory():
             return M
 
     def lambda_max(self, rates, matrix_filter=None,
-                   vector_filter=None, full_output=False, replace_cc=None):
+                   vector_filter=None, full_output=False):
         """
         Computes radius of eigenvalue spectrum of the stability matrix.
+
+        Parameters
+        ----------
+        rates : numpy.ndarray
+            Stationary rates of the network.
+        matrix_filter : numpy.ndarray
+            Filter to filter for a subset of the network. Defaults to
+            None.
+        vector_filter : numpy.ndarray
+            Filter to filter for a subset of the network. Defaults to
+            None.
+        full_output : bool
+            Whether to return only the value itself or all variables
+            contributing. Defaults to False.
         """
         if full_output:
             (M, slope, slope_sigma,
              M, EV, C, V, G_N) = self.stability_matrix(rates,
                                                        matrix_filter=matrix_filter,
                                                        vector_filter=vector_filter,
-                                                       full_output=full_output,
-                                                       replace_cc=replace_cc)
+                                                       full_output=full_output)
         else:
             M = self.stability_matrix(rates, matrix_filter=matrix_filter,
                                       vector_filter=vector_filter,
-                                      full_output=full_output, replace_cc=replace_cc)
+                                      full_output=full_output)
         EV = np.linalg.eig(M)
         lambda_max = np.sqrt(np.max(np.real(EV[0])))
         if full_output: