diff --git a/src/problem/Formulation.cpp b/src/problem/Formulation.cpp
index b539e1b7e274ac74ec62b571f775cecd83f68e95..f4982bbeefeb4446e83c0c3adae7199527dc78b1 100644
--- a/src/problem/Formulation.cpp
+++ b/src/problem/Formulation.cpp
@@ -1031,35 +1031,6 @@ namespace gmshddm
       _artificialCommutator = true;
       togglePhysicalAndArtificialSourceTerms();
 
-      auto deactivateBilinear = [=](const unsigned long long idom) {
-        for(auto formulation : *_volume[idom]) {
-          if(formulation->isBilinear()) {
-	    formulation->deactivate();
-          }
-        }
-        for(auto formulation : _surface[idom]) {
-          for(auto term : *formulation.second) {
-            if(term->isBilinear()) {
-              term->deactivate();
-            }
-          }
-        }
-      };
-
-      auto activateBilinear = [=](const unsigned long long idom) {
-        for(auto formulation : *_volume[idom]) {
-          if(formulation->isBilinear()) {
-            formulation->activate();
-          }
-        }
-        for(auto formulation : _surface[idom]) {
-          for(auto term : *formulation.second) {
-            if(term->isBilinear()) {
-              term->activate();
-            }
-          }
-        }
-      };
 
       // Assemble the volumic systems for each subdomain
       for(auto idom = 0ULL; idom < _volume.size(); ++idom) {
@@ -1068,7 +1039,7 @@ namespace gmshddm
           _volume[idom]->setAttribute("ddm::artificialCommutator", _artificialCommutator);
           gmshfem::common::Options::instance()->verbose = innerVerbosity;
           if(sameMatrixWithArtificialAndPhysicalSources) {
-            deactivateBilinear(idom);
+            _deactivateBilinear(idom);
             _volume[idom]->setRHSToZero();
             _volume[idom]->assemble();
           }
@@ -1077,7 +1048,7 @@ namespace gmshddm
             _volume[idom]->initSystem();
             _volume[idom]->pre();
             _volume[idom]->assemble();
-            deactivateBilinear(idom);
+            _deactivateBilinear(idom);
           }
           gmshfem::common::Options::instance()->verbose = outerVerbosity;
         }
@@ -1125,12 +1096,12 @@ namespace gmshddm
         if(mpi::isItMySubdomain(idom)) {
           gmshfem::common::Options::instance()->verbose = innerVerbosity;
           if(!sameMatrixWithArtificialAndPhysicalSources) {
-            activateBilinear(idom);
+            _activateBilinear(idom);
           }
           _volume[idom]->assemble();
           _volume[idom]->solve(true);
           if(sameMatrixWithArtificialAndPhysicalSources) {
-            activateBilinear(idom);
+            _activateBilinear(idom);
           }
           gmshfem::common::Options::instance()->verbose = outerVerbosity;
         }
@@ -1175,35 +1146,7 @@ namespace gmshddm
       _artificialCommutator = true;
       togglePhysicalAndArtificialSourceTerms();
 
-      auto deactivateBilinear = [=](const unsigned long long idom) {
-        for(auto formulation : *_volume[idom]) {
-          if(formulation->isBilinear()) {
-	    formulation->deactivate();
-          }
-        }
-        for(auto formulation : _surface[idom]) {
-          for(auto term : *formulation.second) {
-            if(term->isBilinear()) {
-              term->deactivate();
-            }
-          }
-        }
-      };
 
-      auto activateBilinear = [=](const unsigned long long idom) {
-        for(auto formulation : *_volume[idom]) {
-          if(formulation->isBilinear()) {
-            formulation->activate();
-          }
-        }
-        for(auto formulation : _surface[idom]) {
-          for(auto term : *formulation.second) {
-            if(term->isBilinear()) {
-              term->activate();
-            }
-          }
-        }
-      };
 
       for(auto idom = 0ULL; idom < _volume.size(); ++idom) {
         _volume[idom]->setAttribute("ddm::physicalCommutator", _physicalCommutator);
@@ -1213,7 +1156,7 @@ namespace gmshddm
         _volume[idom]->initSystem();
         _volume[idom]->pre();
 	_volume[idom]->assemble();
-	deactivateBilinear(idom);
+	_deactivateBilinear(idom);
         gmshfem::common::Options::instance()->verbose = outerVerbosity;
       }
 
@@ -1250,7 +1193,7 @@ namespace gmshddm
       }
 
       for(auto idom = 0ULL; idom < _volume.size(); ++idom) {
-        activateBilinear(idom);
+        _activateBilinear(idom);
       }
 
 
@@ -1415,6 +1358,40 @@ namespace gmshddm
       }
     }
 
+    template< class T_Scalar >
+    void Formulation< T_Scalar >::_activateBilinear(const unsigned long long idom)
+    {
+      for(auto formulation : *_volume[idom]) {
+        if(formulation->isBilinear()) {
+          formulation->activate();
+        }
+      }
+      for(auto formulation : _surface[idom]) {
+        for(auto term : *formulation.second) {
+          if(term->isBilinear()) {
+            term->activate();
+          }
+        }
+      }
+    }
+
+    template< class T_Scalar >
+    void Formulation< T_Scalar >::_deactivateBilinear(const unsigned long long idom)
+    {
+      for(auto formulation : *_volume[idom]) {
+        if(formulation->isBilinear()) {
+          formulation->deactivate();
+        }
+      }
+      for(auto formulation : _surface[idom]) {
+        for(auto term : *formulation.second) {
+          if(term->isBilinear()) {
+            term->deactivate();
+          }
+        }
+      }
+    }
+
 
     template< class T_Scalar >
     int MatVectProductImpl(Mat A, Vec X, Vec Y, bool IA)
diff --git a/src/problem/Formulation.h b/src/problem/Formulation.h
index a20579ec482b612a173e835f8ef227a5c096eabb..9b98c67e8d657c6628ac932beac30df0634862e5 100644
--- a/src/problem/Formulation.h
+++ b/src/problem/Formulation.h
@@ -79,6 +79,9 @@ namespace gmshddm
       void _assembleAndSolveSurface();
       void _extractRHS();
 
+      void _activateBilinear (const unsigned long long idom);
+      void _deactivateBilinear (const unsigned long long idom);
+
      public:
       Formulation(const std::string &name, const std::vector< std::vector< unsigned int > > &topology);
       Formulation(const std::string &name, const std::vector< gmshfem::problem::Formulation< T_Scalar > * > &volume, const std::vector< std::unordered_map< unsigned int, gmshfem::problem::Formulation< T_Scalar > * > > &surface);