diff --git a/domainPatch.py b/domainPatch.py
index c92816d5d527b4759b1f74c9f2baca076986d4dc..44b7964cb3602dc87dfcab9d3cb3d09bc9fb7f90 100644
--- a/domainPatch.py
+++ b/domainPatch.py
@@ -190,16 +190,21 @@ class DomainPatch(df.SubDomain):
 
 
     def govering_problem(self, phase: str, iter_num: int = 0) -> tp.Dict[str, fl.Form]:
-        """ return the governing form ant right hand side as a dictionary"""
+        """ return the governing form and right hand side for phase phase and iteration
+            iter_num as a dictionary.
+
+        return the governing form ant right hand side for phase phase and iteration
+        iter_num (without the gli terms) as a dictionary. 
+        """
         # define measures
         dx = self.dx
         ds = self.ds
         dt = self.timestep_size
         if self.isRichards:
             if phase == 'nonwetting':
-                print("CAUTION: You invoked domainPatch.governing_problem() with \n#
-                       Parameter phase = 'nonwetting'. But isRichards = True for \n#
-                       current subdomain. \nReturning wetting phase equation only.\n")
+                print("CAUTION: You invoked domainPatch.governing_problem() with\n", #
+                "Parameter phase = 'nonwetting'. But isRichards = True for",
+                "current subdomain. \nReturning wetting phase equation only.\n")
             Lw = self.L['wetting']
             # this is pw_i in the paper
             pw = self.pressure['wetting']
@@ -271,7 +276,7 @@ class DomainPatch(df.SubDomain):
 
                 rhs1 = (La*pw_prev_iter*phi_a)*dx
                 rhs2 = -((S(pc_prev_iter) - S(pc_prev_timestep))*phi_a)*dx
-                rhs_without_gli = rhs1 + rhs2 + dt*source_a*phi_a)*dx
+                rhs_without_gli = rhs1 + rhs2 + dt*source_a*phi_a*dx
 
                 form_and_rhs = {#
                     'form': form,#
@@ -283,7 +288,7 @@ class DomainPatch(df.SubDomain):
                 # gather interface forms
                 interface_forms = []
                 for interface in self.has_interface:
-                    if self.interface[interface].neighbour_is_Richards(self.subdomain_index):
+                    if self.interface[interface].neighbour_isRichards[self.subdomain_index]:
                         # if the neighbour of our subdomain (with index self.subdomain_index)
                         # assumes a Richards model, we assume constant normalised atmospheric pressure
                         # and no interface term is practically appearing.
@@ -298,7 +303,7 @@ class DomainPatch(df.SubDomain):
                 rhs1 = (La*pnw_prev_iter*phi_a)*dx
                 # the non wetting phase has a + before instead of a - before the bracket
                 rhs2 = ((S(pc_prev_iter) - S(pc_prev_timestep))*phi_a)*dx
-                rhs_without_gli = rhs1 + rhs2 + dt*source_a*phi_a)*dx
+                rhs_without_gli = rhs1 + rhs2 + dt*source_a*phi_a*dx
 
                 form_and_rhs = {#
                     'form': form,#
@@ -307,8 +312,9 @@ class DomainPatch(df.SubDomain):
                 return form_and_rhs
 
             else:
-                raise RuntimeError('missmatch for input parameter phase. \n#
-                Expected either phase == wetting or phase == nonwetting ')
+                raise RuntimeError('missmatch for input parameter phase.',
+                'Expected either phase == wetting or phase == nonwetting ')
+                return None
 
     #### PRIVATE METHODS
     def _init_function_space(self) -> None:
@@ -736,8 +742,7 @@ class Interface(BoundaryPart):
                 # this is an array of bools
                 isRichards: np.array = None,#
                 **kwds):
-        # domain_index should be contained in adjacent_subdomains.
-        # self.domain_index = domain_index
+        #
         self.isRichards = isRichards
         self.adjacent_subdomains = adjacent_subdomains
         # pressure_values is a dictionary of dictionaries, one for each of the
@@ -755,6 +760,13 @@ class Interface(BoundaryPart):
             self.adjacent_subdomains[0]: 0,#
             self.adjacent_subdomains[1]: 0
         }
+        # dictionary holding a bool variable for each subdomain index in self.adjacent_subdomains
+        # indicating wether the neighbouring subdomain w.r.t. that index assumes
+        # Richards model or not.
+        self.neighbour_isRichards = {
+            self.adjacent_subdomains[0]: self.isRichards[self.adjacent_subdomains[1]],#
+            self.adjacent_subdomains[1]: self.isRichards[self.adjacent_subdomains[0]]
+        }
         # dictionary holding the neighbouring domain index relative to the key index
         # this is used for calculating the gl_terms.
         self.neighbour = {
@@ -797,7 +809,7 @@ class Interface(BoundaryPart):
 
     def init_interface_values(self,#
                             interface_marker: df.MeshFunction,#
-                            interface_marker_value: int) -> dict:
+                            interface_marker_value: int) -> None:
         """ allocate dictionaries that are used to store the interface dof values
             of the pressure, previous pressure, gl decoupling term as well as previous
             gl update term respectively as pairs(parent_mesh_index: dof_value)
@@ -835,15 +847,15 @@ class Interface(BoundaryPart):
             for phase in ['wetting', 'nonwetting']:
                 self.pressure_values[subdom_ind].update({phase: dict()})
                 self.pressure_values_prev[subdom_ind].update({phase: dict()})
-                # the gli_term will hold forms not functions, therefor we leave
-                # the dictionary empty. it will be populated by domainPatch._calc_gli_term()
-                # self.gli_term[subdom_ind].update({phase: dict()})
-                # self.gli_term_prev[subdom_ind].update({phase: dict()})
+                # the gli_term will hold dofs of the gli terms for communications
+                # they are initiated with 0
+                self.gli_term[subdom_ind].update({phase: dict()})
+                self.gli_term_prev[subdom_ind].update({phase: dict()})
                 for vert_ind in vertex_indices:
                     self.pressure_values[subdom_ind][phase].update({vert_ind: 0.0})
                     self.pressure_values_prev[subdom_ind][phase].update({vert_ind: 0.0})
-                    # self.gli_term[subdom_ind][phase].update({vert_ind: 0.0})
-                    # self.gli_term_prev[subdom_ind][phase].update({vert_ind: 0.0})
+                    self.gli_term[subdom_ind][phase].update({vert_ind: 0.0})
+                    self.gli_term_prev[subdom_ind][phase].update({vert_ind: 0.0})
         # end init_interface_values
 
     def write_dofs(self, from_function: df.Function, #