diff --git a/NonLinearSolver/modelReduction/DeepMaterialNetworks.cpp b/NonLinearSolver/modelReduction/DeepMaterialNetworks.cpp
index 84bd3862c8fe106609a3499e0831067c38b8a2a8..c4b36cabd5601cb1334687084cffcb632750bb54 100644
--- a/NonLinearSolver/modelReduction/DeepMaterialNetworks.cpp
+++ b/NonLinearSolver/modelReduction/DeepMaterialNetworks.cpp
@@ -980,9 +980,14 @@ void BimaterialHomogenization::compute(const std::vector<fullMatrix<double> >& C
     {
       DCeffDnormal.resize(3);
     }    
-  };
-  computeBimaterial(Cin[0],Cin[1],f[0],f[1],normal,Ceff,
+    computeBimaterial(Cin[0],Cin[1],f[0],f[1],normal,Ceff,
                     stiff,&DCeffDcin[0],&DCeffDcin[1],&DCeffDf[0],&DCeffDf[1],&DCeffDnormal[0],&DCeffDnormal[1],&DCeffDnormal[2]);
+  }
+  else
+  {
+    computeBimaterial(Cin[0],Cin[1],f[0],f[1],normal,Ceff);
+  };
+  
 };
 
 void LaminateHomogenization::compute(const fullMatrix<double>& C1, const fullMatrix<double>& C2, const fullMatrix<double>& C3, 
@@ -1105,10 +1110,17 @@ void LaminateHomogenization::compute(const std::vector<fullMatrix<double> >& Cin
   }
   else if (numPhase == 2)
   {
-    computeBimaterial(Cin[0],Cin[1],f[0],f[1],normal,Ceff,
-                    stiff,&DCeffDcin[0],&DCeffDcin[1],
-                    &DCeffDf[0],&DCeffDf[1],&DCeffDnormal[0],
-                    &DCeffDnormal[1],&DCeffDnormal[2]);
+    if (stiff)
+    {
+      computeBimaterial(Cin[0],Cin[1],f[0],f[1],normal,Ceff,
+                      stiff,&DCeffDcin[0],&DCeffDcin[1],
+                      &DCeffDf[0],&DCeffDf[1],&DCeffDnormal[0],
+                      &DCeffDnormal[1],&DCeffDnormal[2]);
+    }
+    else
+    {
+      computeBimaterial(Cin[0],Cin[1],f[0],f[1],normal,Ceff);
+    }
   }
   else
   {
@@ -1173,7 +1185,14 @@ void LaminateHomogenization::compute(const std::vector<fullMatrix<double> >& Cin
         };
       }
       // two phase
-      computeBimaterial(CC[i],Cin[i+1],f0i,f1i,normal,CC[i+1],stiff,&A[i],&B[i],&F0[i],&F1[i],&N0[i],&N1[i],&N2[i]);
+      if (stiff)
+      {
+        computeBimaterial(CC[i],Cin[i+1],f0i,f1i,normal,CC[i+1],stiff,&A[i],&B[i],&F0[i],&F1[i],&N0[i],&N1[i],&N2[i]);
+      }
+      else
+      {
+        computeBimaterial(CC[i],Cin[i+1],f0i,f1i,normal,CC[i+1]);
+      }
     };
     //
     Ceff = CC[numPhase-1];
@@ -1265,10 +1284,17 @@ void LaminateHomogenization::compute(const std::vector<fullMatrix<double> >& Cin
   }
   else if (numPhase == 2)
   {
-    computeBimaterial(Cin[0],Cin[1],f[0],f[1],normal[0],Ceff,
+    if (stiff)
+    {
+      computeBimaterial(Cin[0],Cin[1],f[0],f[1],normal[0],Ceff,
                     stiff,&DCeffDcin[0],&DCeffDcin[1],
                     &DCeffDf[0],&DCeffDf[1],&DCeffDnormal[0][0],
                     &DCeffDnormal[0][1],&DCeffDnormal[0][2]);
+    }
+    else
+    {
+      computeBimaterial(Cin[0],Cin[1],f[0],f[1],normal[0],Ceff);
+    }
   }
   else
   {
@@ -1333,7 +1359,14 @@ void LaminateHomogenization::compute(const std::vector<fullMatrix<double> >& Cin
         };
       }
       // two phase
-      computeBimaterial(CC[i],Cin[i+1],f0i,f1i,normal[i],CC[i+1],stiff,&A[i],&B[i],&F0[i],&F1[i],&N0[i],&N1[i],&N2[i]);
+      if (stiff)
+      {
+        computeBimaterial(CC[i],Cin[i+1],f0i,f1i,normal[i],CC[i+1],stiff,&A[i],&B[i],&F0[i],&F1[i],&N0[i],&N1[i],&N2[i]);
+      }
+      else
+      {
+        computeBimaterial(CC[i],Cin[i+1],f0i,f1i,normal[i],CC[i+1]);
+      }
     };
     //
     Ceff = CC[numPhase-1];
@@ -1696,7 +1729,8 @@ void TrainingDeepMaterialNetwork::train(double lr, int maxEpoch, std::string los
   WBest = Wcur;
   Wprev = Wcur;
   g.resize(numDof,true);
-  double costfuncPrev = 0.;
+  double costfuncPrev = evaluateTrainingSet(*lossEval);
+  Msg::Info("costfuncPrev = %e",costfuncPrev);
   
   //OfflineData
   int epoch = 0;
@@ -1773,7 +1807,7 @@ void TrainingDeepMaterialNetwork::train(double lr, int maxEpoch, std::string los
     double costfunc = evaluateTrainingSet(*lossEval);
     if (numberBatches==Ntrain)
     {
-      if ((costfunc > costfuncPrev) && (epoch > 0))
+      if (costfunc > costfuncPrev)
       {
         numEpochIncrease ++;
         if (numEpochIncrease == 1)
diff --git a/NonLinearSolver/modelReduction/DeepMaterialNetworks.h b/NonLinearSolver/modelReduction/DeepMaterialNetworks.h
index bf1ead0059c58c8c25b700dc38b7c3769a9988a0..51ce1bf3d9116b9ca7f414b932f11ad09c04786c 100644
--- a/NonLinearSolver/modelReduction/DeepMaterialNetworks.h
+++ b/NonLinearSolver/modelReduction/DeepMaterialNetworks.h
@@ -142,10 +142,10 @@ class BimaterialHomogenization : public Homogenization
           fullMatrix<double>& DNDn2) const;
       virtual void computeBimaterial(const fullMatrix<double>& C1, const fullMatrix<double>& C2, double f1, double f2, const SVector3& normal,
                         fullMatrix<double>& Ceff, 
-                        bool stiff, 
-                        hyperFullMatrix* DCeffDC1, hyperFullMatrix* DCeffDC2,
-                        fullMatrix<double>* DCeffDf1, fullMatrix<double>* DCeffDf2, 
-                        fullMatrix<double>* DCeffDnormal1,fullMatrix<double>* DCeffDnormal2, fullMatrix<double>* DCeffDnormal3) const;
+                        bool stiff=false, 
+                        hyperFullMatrix* DCeffDC1=NULL, hyperFullMatrix* DCeffDC2=NULL,
+                        fullMatrix<double>* DCeffDf1=NULL, fullMatrix<double>* DCeffDf2=NULL, 
+                        fullMatrix<double>* DCeffDnormal1=NULL,fullMatrix<double>* DCeffDnormal2=NULL, fullMatrix<double>* DCeffDnormal3=NULL) const;
     #endif //SWIG
 };