diff --git a/NonLinearSolver/internalPoints/ipHyperelastic.cpp b/NonLinearSolver/internalPoints/ipHyperelastic.cpp
index 605fe07dace5f0e46b2fe3e3fc60c3583aa53578..da6d2b9d101c42035c31fb1c9a0ec8191aed5147 100644
--- a/NonLinearSolver/internalPoints/ipHyperelastic.cpp
+++ b/NonLinearSolver/internalPoints/ipHyperelastic.cpp
@@ -13,7 +13,7 @@
 #include "restartManager.h"
 #include "STensorOperations.h"
 
-IPHyperViscoElastic::IPHyperViscoElastic(const int N):IPVariableMechanics(),_N(N),_elasticEnergy(0.),_Ee(0.),_kirchhoff(0.),_kirchhoff_vol(0.),_kirchhoff_dev(0.),
+IPHyperViscoElastic::IPHyperViscoElastic(const int N):IPVariableMechanics(),_N(N),_elasticEnergy(0.),_Ee(0.),_kirchhoff(0.),
       _irreversibleEnergy(0.),_DirreversibleEnergyDF(0.), _viscousEnergyPart(0.), _dElasticEnergyPartdF(0.), _dViscousEnergyPartdF(0.), _elasticBulkPropertyScaleFactor(1.), _elasticShearPropertyScaleFactor(1.)
 {
   _A.clear();
@@ -25,7 +25,7 @@ IPHyperViscoElastic::IPHyperViscoElastic(const int N):IPVariableMechanics(),_N(N
   }
 };
 IPHyperViscoElastic::IPHyperViscoElastic(const IPHyperViscoElastic& src): IPVariableMechanics(src), _Ee(src._Ee),
-    _N(src._N),_A(src._A),_B(src._B),_elasticEnergy(src._elasticEnergy), _kirchhoff(src._kirchhoff), _kirchhoff_vol(src._kirchhoff_vol), _kirchhoff_dev(src._kirchhoff_dev),
+    _N(src._N),_A(src._A),_B(src._B),_elasticEnergy(src._elasticEnergy), _kirchhoff(src._kirchhoff),
     _irreversibleEnergy(src._irreversibleEnergy),_DirreversibleEnergyDF(src._DirreversibleEnergyDF),
     _viscousEnergyPart(src._viscousEnergyPart), _dElasticEnergyPartdF(src._dElasticEnergyPartdF), 
     _dViscousEnergyPartdF(src._dViscousEnergyPartdF), _elasticBulkPropertyScaleFactor(src._elasticBulkPropertyScaleFactor), _elasticShearPropertyScaleFactor(src._elasticShearPropertyScaleFactor)
@@ -40,8 +40,6 @@ IPHyperViscoElastic& IPHyperViscoElastic::operator =(const IPVariable& src){
   if (psrc != NULL){
     _Ee = psrc->_Ee;
     _kirchhoff = psrc->_kirchhoff;
-    _kirchhoff_vol = psrc->_kirchhoff_vol;
-    _kirchhoff_dev = psrc->_kirchhoff_dev;
     _N = psrc->_N;
     _A = psrc->_A;
     _B = psrc->_B;
@@ -65,8 +63,6 @@ void IPHyperViscoElastic::restart() {
   restartManager::restart(_B);
   restartManager::restart(_Ee);
   restartManager::restart(_kirchhoff);
-  restartManager::restart(_kirchhoff_vol);
-  restartManager::restart(_kirchhoff_dev);
   restartManager::restart(_irreversibleEnergy);
   restartManager::restart(_DirreversibleEnergyDF);
   restartManager::restart(_viscousEnergyPart);
diff --git a/NonLinearSolver/internalPoints/ipHyperelastic.h b/NonLinearSolver/internalPoints/ipHyperelastic.h
index 49302c54f245254d4ae05a127f234bb5e289563a..e15a2742f16b6b43abeafc0ac32f111fc67f4f2e 100644
--- a/NonLinearSolver/internalPoints/ipHyperelastic.h
+++ b/NonLinearSolver/internalPoints/ipHyperelastic.h
@@ -25,8 +25,6 @@ class IPHyperViscoElastic : public IPVariableMechanics{
     double _elasticEnergy; // elastic energy stored
     STensor3 _Ee; // elastic strain
     STensor3 _kirchhoff; // corotational Kirchhoff stress
-    STensor3 _kirchhoff_vol; // Volumetric corotational Kirchhoff stress
-    STensor3 _kirchhoff_dev; // Deviatoric corotational Kirchhoff stress
 
     double _irreversibleEnergy;
     STensor3 _DirreversibleEnergyDF;
@@ -36,9 +34,8 @@ class IPHyperViscoElastic : public IPVariableMechanics{
     
   protected:
     //For energy sources
-    double _viscousEnergyPart, _p_vol, _Dppr_vol_DCepr;
-    STensor3 _dElasticEnergyPartdF, _dViscousEnergyPartdF, _K_dev_pr;
-    STensor43 _DKpr_dev_DCepr;
+    double _viscousEnergyPart;
+    STensor3 _dElasticEnergyPartdF, _dViscousEnergyPartdF;
 
   public:
     IPHyperViscoElastic(const int N);
@@ -56,18 +53,11 @@ class IPHyperViscoElastic : public IPVariableMechanics{
     virtual STensor3& getRefToCorotationalKirchhoffStress() {return _kirchhoff;};
     virtual const STensor3& getConstRefToCorotationalKirchhoffStress() const {return _kirchhoff;};
 
-    virtual STensor3& getRefToCorotationalKirchhoffVolStress() {return _kirchhoff_vol;};
-    virtual const STensor3& getConstRefToCorotationalKirchhoffVolStress() const {return _kirchhoff_vol;};
 
-    virtual STensor3& getRefToCorotationalKirchhoffDevStress() {return _kirchhoff_dev;};
-    virtual const STensor3& getConstRefToCorotationalKirchhoffDevStress() const {return _kirchhoff_dev;};
+
 
     virtual double defoEnergy() const{return _elasticEnergy;}
     virtual double& getRefToElasticEnergy() {return _elasticEnergy;};
-    virtual double& getRefTo_p_vol() {return _p_vol;};
-    virtual STensor3& getRefTo_K_dev_pr() {return _K_dev_pr;};
-    virtual double& getRefTo_Dppr_vol_DCepr() {return _Dppr_vol_DCepr;};
-    virtual STensor43& getRefTo_DKpr_dev_DCepr() {return _DKpr_dev_DCepr;};
     virtual double plasticEnergy() const{return 0.;}
 
     virtual double irreversibleEnergy() const {return _irreversibleEnergy;};
@@ -135,9 +125,7 @@ class IPHyperViscoElastoPlastic : public IPHyperViscoElastic{
     bool _dissipationBlocked;
     bool _dissipationActive;
   protected:
-    STensor3 _dPlasticEnergyPartdF, _dptilde_VoldCepr, _K_dev, _dK_devdGamma;
-    STensor43 _dK_devdCepr;
-    double _ptilde_Vol, _X_vol, _dptilde_VoldGamma, _D_dev;
+    STensor3 _dPlasticEnergyPartdF; 
 
   public:
     IPHyperViscoElastoPlastic(const J2IsotropicHardening* comp,
@@ -159,17 +147,6 @@ class IPHyperViscoElastoPlastic : public IPHyperViscoElastic{
     virtual double plasticEnergy() const{return _plasticEnergy;}
     
 
-    virtual double& getRefTo_ptilde_Vol() {return _ptilde_Vol;};
-    virtual double& getRefTo_X_vol() {return _X_vol;};
-    virtual double& getRefTo_dptilde_VoldGamma() {return _dptilde_VoldGamma;};
-    virtual STensor3& getRefTo_dptilde_VoldCepr() {return _dptilde_VoldCepr;};
-    virtual double& getRefTo_D_dev() {return _D_dev;};
-    virtual STensor3& getRefTo_K_dev() {return _K_dev;};
-    virtual STensor3& getRefTo_dK_devdGamma() {return _dK_devdGamma;};
-    virtual STensor43& getRefTo_dK_devdCepr() {return _dK_devdCepr;};
-    
-    
-
     virtual void restart();
 
     virtual bool inPostFailureStage() const {return _inPostFailureStage;};
diff --git a/NonLinearSolver/materialLaw/mlawHyperelastic.cpp b/NonLinearSolver/materialLaw/mlawHyperelastic.cpp
index fb0d7c1f1a8f88b6467573ce167fbd6b8736bf66..7a5c788b19900f5c6ae52013e86a2c2057ca23e9 100644
--- a/NonLinearSolver/materialLaw/mlawHyperelastic.cpp
+++ b/NonLinearSolver/materialLaw/mlawHyperelastic.cpp
@@ -98,31 +98,19 @@ void mlawHyperViscoElastic::setViscoElasticData(const std::string filename){
   fclose(file);
 };
 
-void mlawHyperViscoElastic::evaluatePhiPCorrection(const IPHyperViscoElastic *q1, double trEe, STensor3 devEpr, double &p_vol, double &Dppr_vol_DCepr, STensor3 &K_dev_pr, STensor43  &DKpr_dev_DCepr) const
+void mlawHyperViscoElastic::evaluatePhiPCorrection(double tr, const STensor3 &dev, double &A_v, double &dA_vdE, double &B_d, STensor3 &dB_vddev) const
 {
-  p_vol= getUpdatedBulkModulus(q1)*getVolumeCorrection()*pow(exp(getXiVolumeCorrection()*trEe)-1.,getZetaVolumeCorrection())*trEe;
-  Dppr_vol_DCepr= 0.5*(getUpdatedBulkModulus(q1)*getVolumeCorrection()*pow(exp(getXiVolumeCorrection()*trEe)-1.,getZetaVolumeCorrection()-1.)*(getXiVolumeCorrection()*getZetaVolumeCorrection()*trEe*exp(getXiVolumeCorrection()*trEe)+exp(getXiVolumeCorrection()*trEe)-1.));
+  A_v = getVolumeCorrection()*pow(exp(getXiVolumeCorrection()/3.*tr*tr)-1.,getZetaVolumeCorrection());
   
-  for (int i=0; i<3; i++){
-    for (int j=0; j<3; j++){
-  	K_dev_pr(i,j)=2.*getUpdatedShearModulus(q1)*getDevCorrection()*pow(exp(getThetaDevCorrection()*devEpr.dotprod())-1.,getPiDevCorrection())*devEpr(i,j); 
-    }
-  }
-
-
-  static STensor3 temp_DKpr_dev_DCepr;
-  STensorOperation::multSTensor3STensor43(devEpr,_Idev,temp_DKpr_dev_DCepr);
-  for (int i=0; i<3; i++){
-    for (int j=0; j<3; j++){
-      for (int k=0; k<3; k++){
-        for (int l=0; l<3; l++){
-          DKpr_dev_DCepr(i,j,k,l) = 2.*getUpdatedShearModulus(q1)*getDevCorrection()*(2.*getThetaDevCorrection()*getPiDevCorrection()*exp(getThetaDevCorrection()*devEpr.dotprod())* pow(exp(getThetaDevCorrection()*devEpr.dotprod())-1.,getPiDevCorrection()-1.)*(temp_DKpr_dev_DCepr(i,j))*devEpr(k,l)+pow(exp(getThetaDevCorrection()*devEpr.dotprod())-1.,getPiDevCorrection())*_Idev(i,j,k,l));
-        }
-      }
-    }
-  }
+  dA_vdE = getVolumeCorrection()*getZetaVolumeCorrection()*pow(exp(getXiVolumeCorrection()/3.*tr*tr)-1.,getZetaVolumeCorrection()-1.)*exp(getXiVolumeCorrection()/3.*tr*tr) *getXiVolumeCorrection()*2./3.*tr;
   
+  
+  B_d = getDevCorrection()*pow(exp(getThetaDevCorrection()*dev.dotprod())-1.,getPiDevCorrection());
+  STensorOperation::zero(dB_vddev);
 
+ 
+  dB_vddev=dev;
+  dB_vddev*=2.*getPiDevCorrection()*getDevCorrection()*pow(exp(getThetaDevCorrection()*dev.dotprod())-1.,getPiDevCorrection()-1.)* exp(getThetaDevCorrection()*dev.dotprod())*getThetaDevCorrection();
 }
 
 
@@ -135,9 +123,9 @@ double mlawHyperViscoElastic::deformationEnergy(const IPHyperViscoElastic& q) co
     static STensor3 devEe;
     STensorOperation::decomposeDevTr(q._Ee,devEe,trEe);
     
-    Psy = getUpdatedBulkModulus(&q)*(0.5*trEe*trEe+_volCorrection*pow(exp(_xivolCorrection*trEe)-1.,_zetavolCorrection))+getUpdatedShearModulus(&q)*STensorOperation::doubledot(devEe,devEe); 
+    Psy = getUpdatedBulkModulus(&q)*(0.5*trEe*trEe+_volCorrection*pow(exp(_xivolCorrection*trEe)-1.,_zetavolCorrection))+getUpdatedShearModulus(&q)*STensorOperation::doubledot(devEe,devEe); //this is not correct
     
-    //Psy = getUpdatedBulkModulus(&q)*(0.5*trEe*trEe+_volCorrection*(exp(trEe)-1.)*(exp(trEe)-1.))+getUpdatedShearModulus(&q)*STensorOperation::doubledot(devEe,devEe); //this is not correct
+
     for (int i=0; i<_N; i++){
       static STensor3 devEebranch;
       Psy += _Ki[i]*0.5*(q._B[i])*(q._B[i])+_Gi[i]*STensorOperation::doubledot(q._A[i],q._A[i]);
@@ -404,7 +392,7 @@ void mlawHyperViscoElastic::updateViscoElasticFlow(const IPHyperViscoElastic *q0
 };
 void mlawHyperViscoElastic::viscoElasticPredictor(const STensor3& Ee, const STensor3& Ee0,
           const IPHyperViscoElastic *q0, IPHyperViscoElastic *q1,
-          double& Ke, double& Ge) const{
+          double& Ke, double& Ge,     double& A_v,  double& B_d, double& dApr, STensor3& dB_vddev) const{
   if ((_Ki.size() > 0) or (_Gi.size() > 0)){
     static STensor3 DE, devDE;
     static double trDE;
@@ -435,20 +423,21 @@ void mlawHyperViscoElastic::viscoElasticPredictor(const STensor3& Ee, const STen
         Ke += _Ki[i]*ztak;
       }
 
-      static STensor3 devK, K_dev_pr;
-      double p, trEe;
-      STensorOperation::decomposeDevTr(Ee,devK,trEe);
-      evaluatePhiPCorrection(q1,trEe, devK, q1->getRefTo_p_vol(), q1->getRefTo_Dppr_vol_DCepr(), q1->getRefTo_K_dev_pr(), q1->getRefTo_DKpr_dev_DCepr());
-      devK *= (2.*getUpdatedShearModulus(q1));  // deviatoric part
-      p  = trEe;
-      p *= getUpdatedBulkModulus(q1); // pressure
+      static STensor3 devK, devE;
+      STensorOperation::zero(devK);
+      STensorOperation::zero(devE);
       
+      double p, trEe;
+      STensorOperation::decomposeDevTr(Ee,devE,trEe);
 
+      evaluatePhiPCorrection(trEe, devE, A_v, dApr, B_d, dB_vddev);
 
+      devK = devE;
+      devK *= (2.*getUpdatedShearModulus(q1)*(1.+B_d));  // deviatoric part
       
-      K_dev_pr = q1->getRefTo_K_dev_pr();
-      p+=q1->getRefTo_p_vol();
       
+      p  = trEe;
+      p *= getUpdatedBulkModulus(q1)*(1.+A_v); // pressure
 
       for (int i=0; i<_Gi.size(); i++){
         devK.daxpy(q1->_A[i],2.*_Gi[i]);
@@ -457,22 +446,11 @@ void mlawHyperViscoElastic::viscoElasticPredictor(const STensor3& Ee, const STen
         p += q1->_B[i]*_Ki[i];
       }
       
-      for (int i=0; i<3; i++){
-      	for (int j=0; j<3; j++){
-          devK(i,j) = devK(i,j)+K_dev_pr(i,j);
-
-    	}
-      }
       q1->_kirchhoff = devK;
       q1->_kirchhoff(0,0) += p;
       q1->_kirchhoff(1,1) += p;
       q1->_kirchhoff(2,2) += p;
-      //std::cout <<"  VolCorrection = "<<_volCorrection<<"  Xi VolCorrection = "<<_xivolCorrection<<"  Zeta VolCorrection = "<<_zetavolCorrection <<std::endl;
       
-      q1->_kirchhoff_dev = K_dev_pr;
-      q1->_kirchhoff_vol(0,0) += q1->getRefTo_p_vol(); 
-      q1->_kirchhoff_vol(1,1) += q1->getRefTo_p_vol(); 
-      q1->_kirchhoff_vol(2,2) += q1->getRefTo_p_vol(); 
     }
     
     else if (_viscoMethod == KelvinVoight){
@@ -536,39 +514,26 @@ void mlawHyperViscoElastic::viscoElasticPredictor(const STensor3& Ee, const STen
     }
   }
   else{
-    static STensor3 devK, K_dev_pr;
-    double p, trEe, p_vol;
-    STensorOperation::decomposeDevTr(Ee,devK,trEe);
-    evaluatePhiPCorrection(q1,trEe, devK, q1->getRefTo_p_vol(), q1->getRefTo_Dppr_vol_DCepr(), q1->getRefTo_K_dev_pr(), q1->getRefTo_DKpr_dev_DCepr());
-    devK *= (2.*getUpdatedShearModulus(q1));  // deviatoric part
-    p = trEe;
-
-    p *= getUpdatedBulkModulus(q1); // pressure
-    
-    
-
-    
-    K_dev_pr = q1->getRefTo_K_dev_pr();
-    
-    
-    p+=q1->getRefTo_p_vol();
-
+    static STensor3 devK, devE;
+    double p, trEe;
+    STensorOperation::zero(devK);
+    STensorOperation::zero(devE);
+      
+    STensorOperation::decomposeDevTr(Ee,devE,trEe);
 
-    q1->_kirchhoff_dev = K_dev_pr;
-    q1->_kirchhoff_vol(0,0) += q1->getRefTo_p_vol(); 
-    q1->_kirchhoff_vol(1,1) += q1->getRefTo_p_vol(); 
-    q1->_kirchhoff_vol(2,2) += q1->getRefTo_p_vol(); 
+    STensorOperation::zero(dB_vddev);
+    evaluatePhiPCorrection(trEe, devE, A_v, dApr, B_d, dB_vddev);
+            
+    devK = devE;
+    devK *= (2.*getUpdatedShearModulus(q1)*(1.+B_d));  // deviatoric part
+      
+      
+    p  = trEe;
+    p *= getUpdatedBulkModulus(q1)*(1.+A_v); // pressure
     
     Ke = getUpdatedBulkModulus(q1);
     Ge = getUpdatedShearModulus(q1);
-    
-    
-    for (int i=0; i<3; i++){
-    	for (int j=0; j<3; j++){
-          devK(i,j) = devK(i,j)+K_dev_pr(i,j);
 
-    	}
-    }
 
     q1->_kirchhoff = devK;
     q1->_kirchhoff(0,0) += p;
@@ -612,22 +577,26 @@ void mlawHyperViscoElastic::predictorCorrector_ViscoElastic(const STensor3& F0,
   STensorOperation::decomposeDevTr(E,devE,trE);
   
   double Ke, Ge;
-  viscoElasticPredictor(E,q0->_Ee,q0,q1,Ke,Ge);
+  double A_v_pr=0., B_d_pr = 0., dApr=0.;
+  static STensor3 dB_devpr;
+  STensorOperation::zero(dB_devpr);
+  viscoElasticPredictor(E,q0->_Ee,q0,q1,Ke,Ge,A_v_pr, B_d_pr, dApr, dB_devpr);
 
   const STensor3& corKir = q1->getConstRefToCorotationalKirchhoffStress();
   static STensor3 secondPK;
   STensorOperation::multSTensor3STensor43(corKir,dlnCdC,secondPK);
   STensorOperation::multSTensor3(F,secondPK,P);
   // first PK
-
+  
+  
+  
   q1->_elasticEnergy=deformationEnergy(*q1);
   q1->getRefToViscousEnergyPart()=viscousEnergy(*q0,*q1)+q0->getConstRefToViscousEnergyPart();
   if (stiff){
     static STensor43 DsecondPKdC;
     static STensor43 DcorKDE;
-    isotropicHookTensor(Ke,Ge,DcorKDE);
-    double Dppr_vol_DCepr=q1->getRefTo_Dppr_vol_DCepr();
-    static STensor43 DKpr_dev_DCepr=q1->getRefTo_DKpr_dev_DCepr();
+    isotropicHookTensor(Ke+getUpdatedBulkModulus(q1)*A_v_pr,Ge+getUpdatedShearModulus(q1)*B_d_pr,DcorKDE);
+    
     for (int i=0; i<3; i++){
       for (int j=0; j<3; j++){
         for (int k=0; k<3; k++){
@@ -640,10 +609,7 @@ void mlawHyperViscoElastic::predictorCorrector_ViscoElastic(const STensor3& F0,
                 }
                 for (int r=0; r<3; r++){
                   for (int s=0; s<3; s++){
-                    DsecondPKdC(i,j,k,l) += 0.5*DcorKDE(p,q,r,s)*dlnCdC(p,q,i,j)*dlnCdC(r,s,k,l)+0.5*DKpr_dev_DCepr(p,q,r,s)*dlnCdC(p,q,i,j)*dlnCdC(r,s,k,l);
-                    
-                    if(p==q and r==s)
-                      DsecondPKdC(i,j,k,l) += Dppr_vol_DCepr*dlnCdC(p,q,i,j)*dlnCdC(r,s,k,l);
+                    DsecondPKdC(i,j,k,l) += 0.5*(DcorKDE(p,q,r,s)+2.*getUpdatedShearModulus(q1)*devE(p,q)*dB_devpr(r,s)+ getUpdatedBulkModulus(q1)*dApr*trE*_I(p,q)*_I(r,s))*dlnCdC(p,q,i,j)*dlnCdC(r,s,k,l); 
                   }
                 }
               }
@@ -652,7 +618,6 @@ void mlawHyperViscoElastic::predictorCorrector_ViscoElastic(const STensor3& F0,
         }
       }
     }
-
     STensorOperation::zero(Tangent);
     for (int i=0; i<3; i++){
       for (int j=0; j<3; j++){
@@ -813,291 +778,17 @@ void mlawPowerYieldHyper::constitutive(
   }
 };
 
-
-void mlawPowerYieldHyper::evaluatePhiPCorrection(const IPHyperViscoElastic *q1, double _b, double v, double trEepr, double Gamma, double ptildepr_Vol, double ptildepr,double Ke, double u, STensor3 devEepr, STensor3 K_dev_pr, STensor3 devPhipr, double Ge, double &ptilde_Vol, double &X_vol, double &dptilde_VoldGamma, STensor3 &dptilde_VoldCepr, STensor3 &K_dev, double &D_dev, STensor3 &dK_devdGamma, STensor43 &dK_devdCepr) const
+void mlawPowerYieldHyper::evaluatePhiPCorrection(double tr, const STensor3 &dev, double &A_v, double &dA_vdE, double &B_d, STensor3 &dB_vddev) const
 {
 
-  STensorOperation::zero(dptilde_VoldCepr);
-  ptilde_Vol = ptildepr_Vol;
-  X_vol=0.;
-
-  double Dptilde_Vol=ptilde_Vol-ptildepr_Vol;
-  double trN = 2.*_b*(ptildepr+Dptilde_Vol)/(v);
-  //static STensor3 DpprDCepr;
-  int ite = 0;
-  int maxite = 100; // maximal number of iters
-
-  double J=getUpdatedBulkModulus(q1)*getVolumeCorrection()*pow(exp(getXiVolumeCorrection()*trEepr-getXiVolumeCorrection()*Gamma*trN)-1.,getZetaVolumeCorrection())*(trEepr-Gamma*trN)-ptilde_Vol;
-
-
-  while (fabs(J) >_tol or ite <1){
- 
-        double dJdptilde_Vol = -getXiVolumeCorrection()*getUpdatedBulkModulus(q1)*getVolumeCorrection()*getZetaVolumeCorrection()*Gamma*(2.*_b/v)*(trEepr-Gamma*trN)*exp(getXiVolumeCorrection()*trEepr-getXiVolumeCorrection()*Gamma*trN)*pow(exp(getXiVolumeCorrection()*trEepr-getXiVolumeCorrection()*Gamma*trN)-1.,getZetaVolumeCorrection()-1.)-Gamma*getUpdatedBulkModulus(q1)*getVolumeCorrection()*(2.*_b/v)*pow(exp(getXiVolumeCorrection()*trEepr-getXiVolumeCorrection()*Gamma*trN)-1.,getZetaVolumeCorrection())-1.;
-        
-        
-        double dptilde_Vol = -J/dJdptilde_Vol;
-
-        ptilde_Vol += dptilde_Vol;
-
-        Dptilde_Vol = ptilde_Vol-ptildepr_Vol;
-        trN = 2.*_b*(ptildepr+Dptilde_Vol)/(v);
-        J=getUpdatedBulkModulus(q1)*getVolumeCorrection()*pow(exp(getXiVolumeCorrection()*trEepr-getXiVolumeCorrection()*Gamma*trN)-1.,getZetaVolumeCorrection())*(trEepr-Gamma*trN)-ptilde_Vol;
-        
-        ite++;
-        
-        
-        if (fabs(J) <_tol) break;
-        if(ite > maxite){
-         // Msg::Error("No convergence for phi_p_vol in mlawPowerYieldHyper nonAssociatedFlow Maxwell iter = %d, J = %e!!",ite,J);
-          break;
-        }
-        
-  }
-  X_vol = exp(getXiVolumeCorrection()*(trEepr-2.*_b*Gamma/v*(ptildepr+Dptilde_Vol)));
-  
-  //dptilde_VoldGamma=-((2.*_b*getXiVolumeCorrection()*getXiVolumeCorrection()*getZetaVolumeCorrection()*getUpdatedBulkModulus(q1)*getVolumeCorrection())/(v*v)*pow(X_vol-1.,getZetaVolumeCorrection()-2.)*(getZetaVolumeCorrection()*X_vol-1.)*X_vol*(ptildepr+Dptilde_Vol))/(1.+(2.*_b*getXiVolumeCorrection()*getXiVolumeCorrection()*getZetaVolumeCorrection()*Gamma*getUpdatedBulkModulus(q1)*getVolumeCorrection())/(v)*pow(X_vol-1.,getZetaVolumeCorrection()-2.)*(getZetaVolumeCorrection()*X_vol-1.)*X_vol);
-  
-    dptilde_VoldGamma= -( (2.*_b)/(v*v)*getUpdatedBulkModulus(q1)*getVolumeCorrection()*(ptildepr+Dptilde_Vol)*(getZetaVolumeCorrection()*pow(X_vol-1.,getZetaVolumeCorrection()-1. )*(trEepr-2.*_b*Gamma/v*(ptildepr+Dptilde_Vol))*X_vol*getXiVolumeCorrection()+pow(X_vol-1.,getZetaVolumeCorrection())) )/(1.+2.*_b*Gamma/v*getUpdatedBulkModulus(q1)*getVolumeCorrection()*(getZetaVolumeCorrection()*pow(X_vol-1.,getZetaVolumeCorrection()-1.)*(trEepr-2.*_b*Gamma/v*(ptildepr+Dptilde_Vol))*X_vol*getXiVolumeCorrection()+pow(X_vol-1.,getZetaVolumeCorrection()) )) ;
-  
-  
-  for (int i=0; i<3; i++){
-        for (int j=0; j<3; j++){
-          
-          dptilde_VoldCepr(i,j) = ((getUpdatedBulkModulus(q1)*getVolumeCorrection()*(X_vol*getXiVolumeCorrection()*getZetaVolumeCorrection()*pow(X_vol-1.,getZetaVolumeCorrection()-1.)* (trEepr-2.*_b*Gamma/v*(ptildepr+Dptilde_Vol))+pow(X_vol-1.,getZetaVolumeCorrection())))*(_I(i,j)-(2.*_b*Gamma)/(v)*Ke*_I(i,j))) / (1.+(2.*_b*Gamma)/(v)*getUpdatedBulkModulus(q1)*getVolumeCorrection()*(X_vol*getXiVolumeCorrection()*getZetaVolumeCorrection()*pow(X_vol-1.,getZetaVolumeCorrection()-1.) *(trEepr-2.*_b*Gamma/v*(ptildepr+Dptilde_Vol))+pow(X_vol-1.,getZetaVolumeCorrection())));
-        }
-  }
-
-  
-  
-  //################################### DEVIATORIC TERMS
-  static STensor3 DK_dev, devE, J_dev;
-  STensorOperation::zero(dK_devdGamma);
-  STensorOperation::zero(dK_devdCepr);
-  K_dev = K_dev_pr;
-  D_dev=0.;
-    
-  for (int i=0; i<3; i++){
-        for (int j=0; j<3; j++){
-          DK_dev(i,j)=K_dev(i,j)-K_dev_pr(i,j);
-        }
-  }
-  
-  for (int i=0; i<3; i++){
-        for (int j=0; j<3; j++){
-          devE(i,j) = devEepr(i,j)-3.*Gamma*(devPhipr(i,j)+DK_dev(i,j))/(u);
-        }
-  }
-  
-  double Temp_Jdev = devE.dotprod();
-  
-  for (int i=0; i<3; i++){
-        for (int j=0; j<3; j++){
-          J_dev(i,j)=2.*getUpdatedShearModulus(q1)*getDevCorrection()*pow(exp(getThetaDevCorrection()*Temp_Jdev)-1.,getPiDevCorrection())*devE(i,j)-K_dev(i,j) ;
-        }
-  }
-  
-  double J_dev_tol = 0.;
-  for (int i=0; i<3; i++){
-        for (int j=0; j<3; j++){
-          J_dev_tol+=abs(J_dev(i,j)) ;
-        }
-  }
-  //std::cout << "###############CHECK Loop 1 J_dev_tol = "<<J_dev_tol<<std::endl;
-    
-  int ite_dev = 0;
-  int maxite_dev = 100; // maximal number of iters
-  static STensor43 ddevE, dJ_dev, dJ_dev_inv;
-  static STensor3 dTemp, NK_dev;
-  
-  STensorOperation::zero(dJ_dev);
-  double _tol_dev = _tol; //1.0e-15;
-  while (fabs(J_dev_tol) >_tol_dev or ite_dev <1){
-  
-        ddevE = _I4;
-        ddevE*=-3.*Gamma/u;
-        STensorOperation::multSTensor3STensor43( devE, _I4, dTemp);
-        dTemp*=-6.*Gamma/u;
-
-        for (int i=0; i<3; i++){
-        	for (int j=0; j<3; j++){
-        		for (int k=0; k<3; k++){
-        			for (int l=0; l<3; l++){
-        				dJ_dev(i,j,k,l) = 2.*getUpdatedShearModulus(q1)*getDevCorrection()*getThetaDevCorrection()*getPiDevCorrection()*exp(getThetaDevCorrection()*Temp_Jdev)* pow(exp(getThetaDevCorrection()*Temp_Jdev)-1.,getPiDevCorrection()-1.)*dTemp(i,j)*devE(k,l)+2.*getUpdatedShearModulus(q1)*getDevCorrection()*pow(exp(getThetaDevCorrection()*Temp_Jdev)-1.,getPiDevCorrection())*ddevE(i,j,k,l)-_I4(i,j,k,l);
-        			}
-        		}
-        	}
-        }
+  A_v = getVolumeCorrection()*pow(exp(1./3.*getXiVolumeCorrection()*tr*tr)-1.,getZetaVolumeCorrection());
+  dA_vdE =2./3.*getVolumeCorrection()*getXiVolumeCorrection()*getZetaVolumeCorrection()*pow(exp(1./3.*getXiVolumeCorrection()*tr*tr)-1.,getZetaVolumeCorrection()-1.)* exp(1./3.*getXiVolumeCorrection()*tr*tr)*tr; 
 
-        STensorOperation::inverseSTensor43(dJ_dev, dJ_dev_inv);
-        STensorOperation::zero(NK_dev);
-        for (int i=0; i<3; i++){
-        	for (int j=0; j<3; j++){
-        		for (int k=0; k<3; k++){
-        			for (int l=0; l<3; l++){
-        				NK_dev(i,j)+= dJ_dev_inv(i,j,k,l)*J_dev(l,k);
-        			}
-        		}
-        	}
-        }
 
-        
-        for (int i=0; i<3; i++){
-        	for (int j=0; j<3; j++){
-        		K_dev(i,j) = K_dev(i,j)-NK_dev(i,j);
-        	}
-        }
-        
-        
-        for (int i=0; i<3; i++){
-        	for (int j=0; j<3; j++){
-        		DK_dev(i,j)=K_dev(i,j)-K_dev_pr(i,j);
-        	}
-        }
-        
-
-        for (int i=0; i<3; i++){
-        	for (int j=0; j<3; j++){
-        		devE(i,j) = devEepr(i,j)-3.*Gamma*(devPhipr(i,j)+DK_dev(i,j))/(u);
-        	}
-        }
-  
-        Temp_Jdev = devE.dotprod();
-        
-        for (int i=0; i<3; i++){
-        	for (int j=0; j<3; j++){
-        		J_dev(i,j)=2.*getUpdatedShearModulus(q1)*getDevCorrection()*pow(exp(getThetaDevCorrection()*Temp_Jdev)-1.,getPiDevCorrection())*devE(i,j)-K_dev(i,j) ;
-        	}
-        }
-        
-        J_dev_tol=0.;
-        
-
-        for (int i=0; i<3; i++){
-        	for (int j=0; j<3; j++){
-        		J_dev_tol+=abs(J_dev(i,j));
-        	}
-        }
-        
-        //std::cout << "###############CHECK DESPUES LOOP 2 J_dev_tol = "<<J_dev_tol << " ite_dev = "<< ite_dev<<std::endl;
-        
-        if (fabs(J_dev_tol)<_tol_dev and ite_dev >1) break;
-        ite_dev++;
-        if(ite_dev > maxite_dev){
-          Msg::Error("No convergence for J_dev in mlawPowerYieldHyper nonAssociatedFlow Maxwell iter = %d, J_dev = %e!!",ite_dev,J_dev);
-          break;
-        }
-
-  }
-  
-  
-  
-  //Variables
-  double M = 0., V = 0., P = 0.;
-  static STensor3 R, O, T, M_temp;
-  //Final matrices
-  static STensor3 U;
-  static STensor43 S, S_inv;
-  
-  
-  for (int i=0; i<3; i++){
-  	for (int j=0; j<3; j++){
-  		M_temp(i,j) = 2.*devE(i,j);
-  		T(i,j) = (-3.)/(u*u)*(devPhipr(i,j)+DK_dev(i,j));
-  	}
-  }
-  
-  D_dev = exp(getThetaDevCorrection()*Temp_Jdev);
-  for (int i=0; i<3; i++){
-  	for (int j=0; j<3; j++){
-  		M+=M_temp(i,j)*T(j,i);
-  		R(i,j) = -6.*Gamma/u*devE(i,j);
-  		O(i,j) = 2.*getUpdatedShearModulus(q1)*getDevCorrection()*getPiDevCorrection()*getThetaDevCorrection()*D_dev*pow(D_dev-1.,getPiDevCorrection()-1.)*devE(i,j);
-  	}
-  }
-
-  V = 2.*getUpdatedShearModulus(q1)*getDevCorrection()*pow(D_dev-1.,getPiDevCorrection());
-  P=-3.*Gamma/u;
-  
-  
-  for (int i=0; i<3; i++){
-  	for (int j=0; j<3; j++){
-  		U(i,j)=M*O(i,j)+V*T(i,j);
-  		for (int k=0; k<3; k++){
-  			for (int l=0; l<3; l++){
-  				S(i,j,k,l) = -R(l,k)*O(i,j)+(1.-V*P)*_I4(i,j,k,l);
-  			}
-  		}
-  	}
-  }
-  
-  STensorOperation::inverseSTensor43(S, S_inv);
-  STensorOperation::multSTensor3STensor43(U,S_inv,dK_devdGamma);
-  
-  
-  //########################################dK_devdCepr
-  static STensor43 G,H;
-  static STensor43 S_dev,U_dev, S_dev_inv;
-  STensorOperation::zero(H);
-  STensorOperation::zero(G);
-  STensorOperation::zero(S_dev);
-  STensorOperation::zero(U_dev);
-  STensorOperation::zero(S_dev_inv);
-  
-  for (int i=0; i<3; i++){
-  	for (int j=0; j<3; j++){
-  		for (int k=0; k<3; k++){
-  			for (int l=0; l<3; l++){
-  				G(i,j,k,l) = 2.*getUpdatedShearModulus(q1)*getDevCorrection()*getPiDevCorrection()*pow(D_dev-1.,getPiDevCorrection()-1.)*devE(i,j)*devE(k,l);
-  			}
-  		}
-  	}
-  }  
-  
-  for (int i=0; i<3; i++){
-  	for (int j=0; j<3; j++){
-  		for (int k=0; k<3; k++){
-  			for (int l=0; l<3; l++){
-  				for (int m=0; m<3; m++){
-  					for (int n=0; n<3; n++){
-  						H(i,j,k,l) += (1.-6.*Ge*Gamma/u)*G(i,j,m,n)*_Idev(n,m,k,l);  				
-  					}
-  				}
-  			}
-  		}
-  	}
-  }
-  
+  B_d = getDevCorrection()*pow(exp(getThetaDevCorrection()*dev.dotprod())-1.,getPiDevCorrection());
+  dB_vddev =2.*getDevCorrection()*getPiDevCorrection()*getThetaDevCorrection()*pow(exp(getThetaDevCorrection()*dev.dotprod())-1.,getPiDevCorrection()-1.)*exp(getThetaDevCorrection()*dev.dotprod())*dev;
 
-  for (int i=0; i<3; i++){
-  	for (int j=0; j<3; j++){
-  		for (int k=0; k<3; k++){
-  			for (int l=0; l<3; l++){
-  				S_dev(i,j,k,l) = (1.+6.*getUpdatedShearModulus(q1)*getDevCorrection()*pow(D_dev-1.,getPiDevCorrection())*Gamma/u)*_I4(i,j,k,l)+6.*Gamma*D_dev*getThetaDevCorrection()/u*G(i,j,k,l);
-  				U_dev(i,j,k,l) = 2.*D_dev*getThetaDevCorrection()*H(i,j,k,l)+2.*getUpdatedShearModulus(q1)*getDevCorrection()*pow(D_dev-1.,getPiDevCorrection())*(1.-6.*Ge*Gamma/u)*_Idev(i,j,k,l);
-  			}
-  		}
-  	}
-  }
-  
-  STensorOperation::inverseSTensor43(S_dev, S_dev_inv);
-  
-  
-    for (int i=0; i<3; i++){
-  	for (int j=0; j<3; j++){
-  		for (int k=0; k<3; k++){
-  			for (int l=0; l<3; l++){
-  				for (int m=0; m<3; m++){
-  					for (int n=0; n<3; n++){
-  						  dK_devdCepr(i,j,k,l) += S_dev_inv(i,j,m,n)*U_dev(n,m,k,l);
-  					}
-  				}  				
-  			}
-  		}
-  	}
-  }  
-  
-}                       
-                          
+}     
 
 void mlawPowerYieldHyper::updateEqPlasticDeformation(IPHyperViscoElastoPlastic *q1, const IPHyperViscoElastoPlastic *q0,
                                             const double& nup, const double& Dgamma) const{
@@ -1182,25 +873,45 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
   // update A, B
   double Ge, Ke, trEepr;
   static STensor3 devEepr;
-  viscoElasticPredictor(Ee,q0->_Ee,q0,q1,Ke,Ge);
+  STensorOperation::zero(devEepr);
+  
+  
+  
+  
   
-  STensorOperation::decomposeDevTr(Ee,devEepr,trEepr); 
   
+  
+  double A_v_pr, B_d_pr, dApr;
+  static STensor3 dB_devpr;
+  STensorOperation::zero(dB_devpr);
+  viscoElasticPredictor(Ee,q0->_Ee,q0,q1,Ke,Ge,A_v_pr, B_d_pr, dApr, dB_devpr);
+  
+  STensorOperation::decomposeDevTr(Ee,devEepr,trEepr); 
+  //std::cout << "trEepr = "<<trEepr <<std::endl;
   static STensor3 PhiPr, PhiPr_Vol, PhiPr_Dev;
   PhiPr = q1->_kirchhoff;
   PhiPr -= q1->_backsig;
   
-  PhiPr_Dev = q1->_kirchhoff_dev;
-  PhiPr_Vol = q1->_kirchhoff_vol; 
+  STensorOperation::zero(PhiPr_Dev);
+  STensorOperation::zero(PhiPr_Vol);
   
-  static STensor3 devPhipr,devPhi, devPhipr_Vol, K_dev_pr, K_dev; // effective dev stress predictor
-  static double ptildepr,ptilde, ptildepr_Vol, ptilde_Vol, ptildepr_Dev;
+  static STensor3 devPhipr,devPhi, K_dev_pr, K_dev; // effective dev stress predictor
+  STensorOperation::zero(K_dev_pr);
+  STensorOperation::zero(K_dev);
+  
+  double ptildepr,ptilde, ptildepr_Vol, ptilde_Vol;
   STensorOperation::decomposeDevTr(PhiPr,devPhipr,ptildepr);
   ptildepr/= 3.;
-  STensorOperation::decomposeDevTr(PhiPr_Vol,devPhipr_Vol,ptildepr_Vol); 
-  ptildepr_Vol/= 3.; 
-  STensorOperation::decomposeDevTr(PhiPr_Dev,K_dev_pr,ptildepr_Dev); 
-  ptildepr_Dev/= 3.; 
+  
+  
+  
+  
+  
+  ptildepr_Vol = getUpdatedBulkModulus(q1)*A_v_pr*trEepr;
+  K_dev_pr = devEepr;
+  K_dev_pr *= 2.*getUpdatedShearModulus(q1)*B_d_pr;
+  
+  
   
   ptilde = ptildepr; // current effective pressure
   ptilde_Vol = ptildepr_Vol; // current effective volumetric pressure  
@@ -1239,8 +950,6 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
 
   double f = a(2)*pow(PhiEq,_n) - (a(1)*ptilde+a(0));
 
- 
-
 
   double DfDGamma = 0.;
   double dfdDgamma = 0.;
@@ -1251,16 +960,38 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
 
   double dDgammaDGamma = 0.;
   double Dgamma = 0.; // eqplastic strain
-  double Dptilde_vol = 0.0;
-  double dptilde_VoldGamma= 0.0;
-  double Dptilde_volDGamma=0.0;
+  double Dptilde_vol = 0.;
+  double dptilde_VoldGamma= 0.;
   double PhiEq_cor = 0.;
-  static STensor3 DK_dev, devPhipr_Dev_cor, dK_devdGamma = q1->getRefTo_dK_devdGamma();
+  
+  
+  double A_v=0.;
+  double B_d = 0.;
+  double dAdtrEe=0.;
+  static STensor3 dBddevEe;
+  STensorOperation::zero(dBddevEe);
+  
+  double trEe = 0.;
+  double J = 0.;
+  trEe = trEepr-2.*_b*Gamma*((ptildepr+Dptilde_vol)/(v));  
+  
+  static STensor3 DK_dev, devPhipr_Dev_cor, dK_devdGamma;
+  STensorOperation::zero(DK_dev);  
+  static STensor3 J_dev, devEe;
+  STensorOperation::zero(devEe);
   for (int i=0; i<3; i++){
-  	for (int j=0; j<3; j++){
-  		DK_dev(i,j)=K_dev(i,j)-K_dev_pr(i,j);
-  	}
+        for (int j=0; j<3; j++){
+          devEe(i,j) = devEepr(i,j)-3.*Gamma*(devPhipr(i,j)+DK_dev(i,j))/(u);
+        }
   }
+  STensorOperation::zero(J_dev);
+  
+  
+  
+
+  STensorOperation::zero(devPhipr_Dev_cor);
+  STensorOperation::zero(dK_devdGamma);
+  
   
   for (int i=0; i<3; i++){
   	for (int j=0; j<3; j++){
@@ -1290,24 +1021,20 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
           _viscosity->get(q1->_epspbarre,eta,Deta);
         double etaOverDt = eta/this->getTimeStep();
         
-        
-        dptilde_VoldGamma=q1->getRefTo_dptilde_VoldGamma();
-        
-        double dAdGamma = 1./(2.*A)*(-(72.*Gt*PhiEq*PhiEq)/(u)-(16.*_b*_b*_b*Kt*(ptildepr+Dptilde_vol)*(ptildepr+Dptilde_vol)/(3*v*v*v))+(8.*_b*_b*(ptildepr+Dptilde_vol))/(3*v*v)*dptilde_VoldGamma);
+        double dAdGamma = 1./(2.*A)*(-(72.*Gt*PhiEq*PhiEq)/(u)-(16.*_b*_b*_b*Kt*ptilde*ptilde/(3*v))+((8.*_b*_b*ptilde)/(3*v))*dptilde_VoldGamma);
         for (int i=0; i<3; i++){
             for (int j=0; j<3; j++){
-               dAdGamma+= 18./(u*u)*(devPhipr_Dev_cor(i,j)*dK_devdGamma(j,i));
+               dAdGamma+= 1./(2.*A)*(18./(u*u)*(devPhipr_Dev_cor(i,j)*dK_devdGamma(j,i)));
             }
         }
-        //std::cout << "###############CHECK DESPUES LOOP 2 dAdGamma = "<<dAdGamma <<std::endl;
         dDgammaDGamma = kk*(A+Gamma*dAdGamma);
 
         this->getYieldCoefficientDerivatives(q1,q1->_nup,Da);
-        dfdDgamma = Da(2)*pow(PhiEq,_n) - Da(1)*(ptildepr+Dptilde_vol)/v -Da(0); //OK
+        dfdDgamma = Da(2)*pow(PhiEq,_n) - Da(1)*ptilde -Da(0); //OK
         if (Gamma>0 and etaOverDt>0)
           dfdDgamma -= _p*pow(etaOverDt,_p-1.)*Deta/this->getTimeStep()*pow(Gamma,_p);
 
-        DfDGamma = dfdDgamma*dDgammaDGamma - (_n*a(2)*6.*Gt)*pow(PhiEq,_n)/u + a(1)*(ptildepr+Dptilde_vol)*2.*_b*Kt/(v*v)-(a(1)*dptilde_VoldGamma)/(v); 
+        DfDGamma = dfdDgamma*dDgammaDGamma - (_n*a(2)*6.*Gt)*pow(PhiEq,_n)/u + a(1)*ptilde*2.*_b*Kt/(v)-((a(1)/v)*dptilde_VoldGamma); 
         for (int i=0; i<3; i++){
             for (int j=0; j<3; j++){
                DfDGamma+= 3.*_n*a(2)/(2.*u*u)*pow(PhiEq,_n-2.) *(devPhipr_Dev_cor(i,j)*dK_devdGamma(j,i));
@@ -1328,34 +1055,132 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
 
         u = 1.+6.*Gt*Gamma;
         v = 1.+2.*_b*Kt*Gamma;
-        
+                
+        double dtrEedptilde = -2.*_b*Gamma/v;
+        J=getUpdatedBulkModulus(q1);
+        int ite_vol = 0;
+        int maxite_vol = 100; // maximal number of iters
+        double dJdptilde_Vol =0.;
+        double Np_vol;
+  
+        while (1){
+
+        	evaluatePhiPCorrection(trEe, devEe, A_v, dAdtrEe, B_d, dBddevEe);
+        	J=getUpdatedBulkModulus(q1)*A_v*trEe-ptilde_Vol;
+        	dJdptilde_Vol = getUpdatedBulkModulus(q1)*( dAdtrEe*dtrEedptilde*trEe+A_v*dtrEedptilde)-1.;
        
-        evaluatePhiPCorrection(q1, _b, v, trEepr, Gamma, ptildepr_Vol, ptildepr, Ke, u, devEepr, K_dev_pr, devPhipr, Ge, q1->getRefTo_ptilde_Vol(), q1->getRefTo_X_vol(), q1->getRefTo_dptilde_VoldGamma(), q1->getRefTo_dptilde_VoldCepr(), q1->getRefTo_K_dev(), q1->getRefTo_D_dev(), q1->getRefTo_dK_devdGamma(), q1->getRefTo_dK_devdCepr()); 
-        
+        	ptilde_Vol = ptilde_Vol-J/dJdptilde_Vol; 
+       
+        	Dptilde_vol = ptilde_Vol-ptildepr_Vol;
 
+        	trEe = trEepr-2.*_b*Gamma*(ptildepr+Dptilde_vol)/(v);
+        	J=getUpdatedBulkModulus(q1)*A_v*trEe-ptilde_Vol;
+       
         
-        ptilde_Vol = q1->getRefTo_ptilde_Vol();
-        Dptilde_vol = ptilde_Vol-ptildepr_Vol;
-        
-        dK_devdGamma = q1->getRefTo_dK_devdGamma();
-        K_dev = q1->getRefTo_K_dev();
-        
-        
-        for (int i=0; i<3; i++){
-        	for (int j=0; j<3; j++){
-        		DK_dev(i,j)=K_dev(i,j)-K_dev_pr(i,j);
-        	}
+        	if ((fabs(J)/getUpdatedBulkModulus(q1) <_tol and ite_vol >2) or ite_vol > maxite_vol)
+        	{
+                  dptilde_VoldGamma = -(2.*_b*getUpdatedBulkModulus(q1)/(v*v)*(ptildepr+Dptilde_vol)*(dAdtrEe*trEe+A_v))/(1.+2.*_b*Gamma*getUpdatedBulkModulus(q1)/(v)*(dAdtrEe*trEe+A_v));
+        	  if (ite_vol > maxite_vol)
+        	    Msg::Error("No convergence for phi_p_vol in mlawPowerYieldHyper nonAssociatedFlow Maxwell iter = %d, J = %e!!",ite,J);
+        	  break;
+                }
+        	ite_vol++;
         }
-        for (int i=0; i<3; i++){
-        	for (int j=0; j<3; j++){
-        		devPhipr_Dev_cor(i,j) = devPhipr(i,j)+DK_dev(i,j);
+  
+ 
+        //################################### DEVIATORIC TERMS
+  
+        static STensor43 ddevEedK_dev;
+        STensorOperation::zero(ddevEedK_dev);
+  
+  
+ 
+        double J_dev_tol=getUpdatedShearModulus(q1);
+        int ite_dev = 0;
+        int maxite_dev = 100; // maximal number of iters
+  
+        static STensor43 dJ_dev, dJ_dev_inv;
+        static STensor3 dTemp, NK_dev;
+        STensorOperation::zero(dJ_dev);
+        STensorOperation::zero(dJ_dev_inv);
+        STensorOperation::zero(dTemp);
+        STensorOperation::zero(NK_dev);
+          
+        while (1){
+  
+          	evaluatePhiPCorrection(trEe, devEe, A_v, dAdtrEe, B_d, dBddevEe);
+
+                for (int i=0; i<3; i++){
+        	        for (int j=0; j<3; j++){
+        		      J_dev(i,j)=2.*getUpdatedShearModulus(q1)*B_d*devEe(i,j)-K_dev(i,j) ;
+        	        }
+                }
+
+        	ddevEedK_dev = _I4;
+        	ddevEedK_dev *= -3.*Gamma/u;
+        	STensorOperation::zero(dTemp);
+        	STensorOperation::multSTensor3STensor43(dBddevEe,ddevEedK_dev,dTemp);
+        	for (int i=0; i<3; i++){
+        		for (int j=0; j<3; j++){
+        			for (int k=0; k<3; k++){
+        				for (int l=0; l<3; l++){
+        					dJ_dev(i,j,k,l) = 2.*getUpdatedShearModulus(q1)*devEe(i,j)*dTemp(k,l)+ 2.*getUpdatedShearModulus(q1)*B_d*ddevEedK_dev(i,j,k,l)-_I4(i,j,k,l);
+        				}
+        			}
+        		}
+        	}
+
+        	STensorOperation::inverseSTensor43(dJ_dev, dJ_dev_inv);
+        	STensorOperation::zero(NK_dev);
+        	STensorOperation::multSTensor43STensor3(dJ_dev_inv,J_dev,NK_dev); 
+
+        
+        	for (int i=0; i<3; i++){
+        		for (int j=0; j<3; j++){
+        			K_dev(i,j) = K_dev(i,j)-NK_dev(i,j); // tau_c
+        			DK_dev(i,j)=K_dev(i,j)-K_dev_pr(i,j); //Delta Tau_c =tau_c - tau_c_pr
+        			devEe(i,j) = devEepr(i,j)-3.*Gamma*(devPhipr(i,j)+DK_dev(i,j))/(u);
+        			devPhipr_Dev_cor(i,j) = devPhipr(i,j)+DK_dev(i,j); //Phipr+Delta tau_c
+         		        J_dev(i,j)=2.*getUpdatedShearModulus(q1)*B_d*devEe(i,j)-K_dev(i,j) ;
+        	        }
+                }
+        	J_dev_tol=J_dev.norm0();
+
+        	if ((fabs(J_dev_tol)/getUpdatedShearModulus(q1)<_tol and ite_dev >2)  or ite_dev > maxite_dev)
+        	{
+        	        //#############dK_devdGamma
+                       double M_d = 0.;
+                       static STensor3 T_d, U_d;
+ 
+                       for (int i=0; i<3; i++){
+        	            for (int j=0; j<3; j++){
+        		        T_d(i,j) = -3./(u*u)*(devPhipr_Dev_cor(i,j));
+        		        M_d+=dBddevEe(i,j)*T_d(j,i);
+        	            }
+                       } 
+                       for (int i=0; i<3; i++){
+        	          for (int j=0; j<3; j++){
+        		     U_d(i,j)=2.*getUpdatedShearModulus(q1)*devEe(i,j)*M_d+2.*getUpdatedShearModulus(q1)*B_d*T_d(i,j);
+                          }
+                       }
+                       STensorOperation::multSTensor43STensor3(dJ_dev_inv,U_d,dK_devdGamma, -1.);
+
+                       //#############dK_devdGamma
+                       if(ite_dev > maxite_dev)
+        		  Msg::Error("No convergence for J_dev in mlawPowerYieldHyper nonAssociatedFlow Maxwell iter = %d, J_dev = %e!!",ite_dev,J_dev);
+        	       break;
+        	   
         	}
+        	ite_dev++;
+
         }
+        
+  
+  
         PhiEq_cor = sqrt(1.5*devPhipr_Dev_cor.dotprod());
         PhiEq = PhiEq_cor/u;
-        
-        //PhiEq = PhiEqpr/u;
-        A = sqrt(6.*PhiEq*PhiEq+4.*_b*_b/3.*((ptildepr+Dptilde_vol)*(ptildepr+Dptilde_vol))/(v*v));
+        ptilde = (ptildepr+Dptilde_vol)/v;
+        A = sqrt(6.*PhiEq*PhiEq+4.*_b*_b/3.*ptilde*ptilde);
         Dgamma = kk*Gamma*A;
 
         //Msg::Error("it = %d, u=%e, v=%e, Dgamma=%e",ite,u,v,Dgamma);
@@ -1364,7 +1189,8 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
         hardening(q0,q1);
         getYieldCoefficients(q1,a);
 
-        f = a(2)*pow(PhiEq,_n) - (a(1)*(ptildepr+Dptilde_vol)/(v)+a(0)); 
+        f = a(2)*pow(PhiEq,_n) - (a(1)*ptilde+a(0)); 
+        
         double viscoTerm = etaOverDt*Gamma;
         if (Gamma>0 and etaOverDt>0) f-= pow(viscoTerm,_p);
 
@@ -1372,7 +1198,7 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
         //if (ite> maxite-5)
          //Msg::Error("it = %d, DfDGamma = %e error = %e dGamma = %e, Gamma = %e",ite,DfDGamma,f,dGamma,Gamma);
          
-        //std::cout << "NR F: f = "<<f <<" Gamma = "<<Gamma<<" dfdDgamma = "<<dfdDgamma<< " dDgammaDGamma = "<< dDgammaDGamma << " dptilde_VoldGamma = " << dptilde_VoldGamma<< " Dptilde_vol"<< Dptilde_vol<< " dptilde_VoldGamma = "<< dptilde_VoldGamma << " dGamma = "<<dGamma<< " DfDGamma = "<< DfDGamma <<"  Iteration = "<<ite<<" ## Vc = " << getVolumeCorrection()<<" Xi = " << getXiVolumeCorrection()<<" Zeta = " << getZetaVolumeCorrection()<<" Dc = " << getDevCorrection()<<" Theta = " << getThetaDevCorrection()<<" Pi = " << getPiDevCorrection()<<std::endl;
+        //std::cout << "NR F: f = "<<f <<" Gamma = "<<Gamma<<" dfdDgamma = "<<dfdDgamma<< " dDgammaDGamma = "<< dDgammaDGamma << " dptilde_VoldGamma = " << dptilde_VoldGamma<< " Dptilde_vol"<< Dptilde_vol<< " ptilde = "<<ptilde  << " dGamma = "<<dGamma<< " DfDGamma = "<< DfDGamma <<"  Iteration = "<<ite<<" ## Vc = " << getVolumeCorrection()<<" Xi = " << getXiVolumeCorrection()<<" Zeta = " << getZetaVolumeCorrection()<<" Dc = " << getDevCorrection()<<" Theta = " << getThetaDevCorrection()<<" Pi = " << getPiDevCorrection()<<std::endl;
         if (fabs(f) <_tol) break;
 
         if(ite > maxite){
@@ -1381,16 +1207,13 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
           return;
         }
       };
-      //std::cout << "###################################################################################################################################################################################################"<<std::endl;
+
       q1->_DgammaDt = Dgamma/this->getTimeStep();
 
       // update effective stress tensor
       
       devPhi =devPhipr_Dev_cor;
       devPhi *= (1./u);
-      ptilde = (ptildepr+Dptilde_vol)/v;
-
-      // update normal
       devN = devPhi;
       devN *=  3.;
       trN =  2.*_b*ptilde;
@@ -1444,7 +1267,6 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
   // second Piola Kirchhoff stress
   static STensor3 S;
   STensorOperation::multSTensor3STensor43(KS,DlnDCe,S); 
-
   for(int i=0; i<3; i++)
     for(int j=0; j<3; j++){
       P(i,j) = 0.;
@@ -1478,15 +1300,47 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
   if (stiff){
     static STensor3 DpprDCepr;
     static STensor43 DdevKprDCepr;
-    STensorOperation::multSTensor3STensor43(_I,DlnDCepr,DpprDCepr);
-    static STensor3 devEe;
-    double trEe;
-  
-    STensorOperation::decomposeDevTr(Ee,devEe,trEe);
-   
-    DpprDCepr*= (0.5*Ke)+ q1->getRefTo_Dppr_vol_DCepr();
+    
+    
+    
+    STensorOperation::multSTensor3STensor43(_I,DlnDCepr,DpprDCepr);   
+    DpprDCepr*= (0.5*Ke)+ 0.5*getUpdatedBulkModulus(q1)*(dApr*trEepr+A_v_pr);
+    
+    
+ 
+    static STensor43 DKpr_dev_DCepr, DKpr_dev_DCepr_Temp, Temp1, Temp2, Temp4;
+    STensorOperation::zero(DKpr_dev_DCepr);
+    STensorOperation::zero(Temp1);
+    STensorOperation::zero(Temp2);
+    STensorOperation::zero(Temp4);
+
     STensorOperation::multSTensor43(_Idev,DlnDCepr,DdevKprDCepr);
-    DdevKprDCepr*= Ge;
+    
+    DdevKprDCepr*= Ge;//+getUpdatedShearModulus(q1)*B_d_pr;
+    
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            Temp1(i,j,k,l) += getUpdatedShearModulus(q1)*(devEepr(i,j)*dB_devpr(k,l)+B_d_pr*_Idev(i,j,k,l));
+          }
+        }
+      }
+    }
+    
+    STensorOperation::multSTensor43(Temp1,_Idev,Temp2);
+    STensorOperation::multSTensor43(Temp2,DlnDCepr,Temp4);
+    
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            DdevKprDCepr(i,j,k,l) += Temp4(i,j,k,l);
+          }
+        }
+      }
+    }
+    
     static STensor3 DpDCepr;
     static STensor43 DdevKDCepr;
     DpDCepr = DpprDCepr;
@@ -1498,36 +1352,83 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
     static STensor43 DdevNDCepr;
     static STensor3 DGDCepr;
 
+
     if (Gamma >0){
       // plastic
       static STensor3 dAdCepr, dfDCepr, dptilde_VoldCepr, dgamadCepr, DGDCepr, dptildeOldpr_VoldCepr;
-      static STensor43 dK_devdCepr;
+      static STensor43 dK_devdCepr, DdevKOldprDCepr;
+      STensorOperation::zero(dAdCepr);
+      STensorOperation::zero(dfDCepr);
+      STensorOperation::zero(dptilde_VoldCepr);
+      STensorOperation::zero(dgamadCepr);
+      STensorOperation::zero(DGDCepr);
+      STensorOperation::zero(dptildeOldpr_VoldCepr);
+      STensorOperation::zero(dK_devdCepr);
+      STensorOperation::zero(DdevKOldprDCepr);
+            
+      for (int i=0; i<3; i++){
+      	for (int j=0; j<3; j++){
+      		dptilde_VoldCepr(i,j) = ( getUpdatedBulkModulus(q1)*(trEe*dAdtrEe+A_v)*(_I(i,j)-2.*_b*Gamma/v*Ke*_I(i,j)) )/(1.+2.*_b*Gamma*getUpdatedBulkModulus(q1)/v*(trEe*dAdtrEe+A_v));
+      	}
+      }
       
-      DpDCepr *=0.;
       
-      dptilde_VoldCepr = q1->getRefTo_dptilde_VoldCepr();
-      dK_devdCepr = q1->getRefTo_dK_devdCepr();
-      STensorOperation::multSTensor43(0.5*dK_devdCepr, DlnDCepr, dK_devdCepr);
-      STensorOperation::multSTensor3STensor43(0.5*dptilde_VoldCepr,DlnDCepr,dptilde_VoldCepr);
+      //########################################dK_devdEepr
+      static STensor43 H_d;
+      static STensor43 S_dev, S_dev_inv;
+      STensorOperation::zero(H_d);
+      STensorOperation::zero(S_dev);
+      STensorOperation::zero(S_dev_inv);
+  
+  
+      for (int i=0; i<3; i++){
+      	for (int j=0; j<3; j++){
+      		for (int k=0; k<3; k++){
+      			for (int l=0; l<3; l++){
+      				for (int m=0; m<3; m++){
+      					for (int n=0; n<3; n++){
+      						H_d(i,j,k,l) += 2.*getUpdatedShearModulus(q1)*(1.-6.*Ge*Gamma/u)*(devEe(i,j)*dBddevEe(m,n)*_Idev(n,m,k,l));
+      						S_dev(i,j,k,l) += 6.*getUpdatedShearModulus(q1)*Gamma/u*(devEe(i,j)*dBddevEe(m,n)*_Idev(n,m,k,l));  				
+  					}
+  				}
+  				H_d(i,j,k,l) += 2.*getUpdatedShearModulus(q1)*(1.-6.*Ge*Gamma/u)*B_d*_Idev(i,j,k,l);
+  				S_dev(i,j,k,l) += (1.+6.*getUpdatedShearModulus(q1)*Gamma/u*B_d)*_I4(i,j,k,l);
+  			}
+  		}
+      	}
+      }
+    
+      STensorOperation::inverseSTensor43(S_dev, S_dev_inv);
+      STensorOperation::zero(dK_devdCepr);
+      STensorOperation::multSTensor43(S_dev_inv,H_d,dK_devdCepr);
+  
+      //########################################dK_devdEepr
+
+      // d/dEpr-> d/dCpr
+      STensorOperation::multSTensor43(dK_devdCepr, DlnDCepr, dK_devdCepr);
+      dK_devdCepr*=0.5;
+      STensorOperation::multSTensor3STensor43(dptilde_VoldCepr,DlnDCepr,dptilde_VoldCepr);
+      dptilde_VoldCepr*=0.5;
+      
       STensorOperation::multSTensor3STensor43(_I,DlnDCepr,dptildeOldpr_VoldCepr);
       dptildeOldpr_VoldCepr*=0.5*Ke;
+      STensorOperation::multSTensor43(_Idev,DlnDCepr,DdevKOldprDCepr);
+      DdevKOldprDCepr*= Ge;
       
       double fact = 1.5*a(2)*_n*pow(PhiEq,_n-2.)/(u*u); 
       for (int i=0; i<3; i++){
         for (int j=0; j<3; j++){
-          dAdCepr(i,j) = (4.*_b*_b*(ptildepr+Dptilde_vol)/(A*3.*v*v))*(dptildeOldpr_VoldCepr(i,j)+dptilde_VoldCepr(i,j));
+          dAdCepr(i,j) = (4.*_b*_b*ptilde/(A*3.*v))*(dptildeOldpr_VoldCepr(i,j)+dptilde_VoldCepr(i,j));
           dfDCepr(i,j) =  -(a(1)/v)*(dptildeOldpr_VoldCepr(i,j)+dptilde_VoldCepr(i,j)); 
           for (int k=0; k<3; k++){
             for (int l=0; l<3; l++){
-              dAdCepr(i,j) += (9./(A*u*u))*devPhipr_Dev_cor(k,l)*(DdevKprDCepr(k,l,i,j)+dK_devdCepr(k,l,i,j));
-              dfDCepr(i,j) += fact*devPhipr_Dev_cor(k,l)*(DdevKprDCepr(k,l,i,j)+dK_devdCepr(k,l,i,j)); 
+              dAdCepr(i,j) += (9./(A*u*u))*devPhipr_Dev_cor(k,l)*(DdevKOldprDCepr(k,l,i,j)+dK_devdCepr(k,l,i,j));
+              dfDCepr(i,j) += fact*devPhipr_Dev_cor(k,l)*(DdevKOldprDCepr(k,l,i,j)+dK_devdCepr(k,l,i,j));  
             }
           }
         }
       }
 
-
-
       for (int i=0; i<3; i++){
         for (int j=0; j<3; j++){
           DGDCepr(i,j) = (-dfDCepr(i,j)-dfdDgamma*kk*Gamma*dAdCepr(i,j))/DfDGamma;
@@ -1536,7 +1437,7 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
 
       for (int i=0; i<3; i++){
         for (int j=0; j<3; j++){
-          DgamaDCepr(i,j) = kk*Gamma*dAdCepr(i,j)+ kk*dDgammaDGamma*DGDCepr(i,j);
+          DgamaDCepr(i,j) = kk*Gamma*dAdCepr(i,j)+ dDgammaDGamma*DGDCepr(i,j); // remove the extra kk
         }
       }
 
@@ -1550,7 +1451,7 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
           for (int j=0; j<3; j++)
             for (int k=0; k<3; k++)
               for (int l=0; l<3; l++){
-              	DdevNDCepr(i,j,k,l)  = (3./u)*(DdevKprDCepr(i,j,k,l)+dK_devdCepr(i,j,k,l))+(3./u*dK_devdGamma(i,j)-18.*Gt/(u*u)*devPhipr_Dev_cor(i,j))*DGDCepr(k,l);
+              	DdevNDCepr(i,j,k,l)  = (3./u)*(DdevKOldprDCepr(i,j,k,l)+dK_devdCepr(i,j,k,l))+(3./u*dK_devdGamma(i,j)-18.*Gt/(u*u)*devPhipr_Dev_cor(i,j))*DGDCepr(k,l);
               }
 
       static STensor43 temp1;
@@ -1570,17 +1471,17 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
                   EprFp0(i,j,k,l) += dexpAdA(i,s,k,l)*Fp0(s,j);
                 }
               }
-
-      DpDCepr=dptildeOldpr_VoldCepr; 
       
       STensorOperation::multSTensor43(EprFp0,temp1,dFpDCepr);
+
+      DpDCepr = dptildeOldpr_VoldCepr; 
       // update
       for (int i=0; i<3; i++){
         for (int j=0; j<3; j++){
           DpDCepr(i,j) -= Ke*(DGDCepr(i,j)*trN+Gamma*DtrNDCepr(i,j))-dptilde_VoldGamma*DGDCepr(i,j)-dptilde_VoldCepr(i,j); 
           for (int k=0; k<3; k++){
             for (int l=0; l<3; l++){
-              DdevKDCepr(i,j,k,l) -=  2.*Ge*(DGDCepr(k,l)*devN(i,j)+Gamma*DdevNDCepr(i,j,k,l))-dK_devdCepr(i,j,k,l)-DGDCepr(k,l)*dK_devdGamma(i,j);
+              DdevKDCepr(i,j,k,l) =  DdevKOldprDCepr(i,j,k,l)-2.*Ge*(DGDCepr(k,l)*devN(i,j)+Gamma*DdevNDCepr(i,j,k,l))+dK_devdCepr(i,j,k,l)+DGDCepr(k,l)*dK_devdGamma(i,j);
             }
           }
         }
@@ -1700,7 +1601,7 @@ void mlawPowerYieldHyper::predictorCorrector_nonAssociatedFlow(const STensor3& F
             Tangent(i,j,k,l) = 0.;
             for (int m=0; m<3; m++){
               for (int n=0; n<3; n++){
-                Tangent(i,j,k,l) += dFedF(i,m,k,l)*S(m,n)*Fpinv(j,n);
+                Tangent(i,j,k,l) +=dFedF(i,m,k,l)*S(m,n)*Fpinv(j,n);
                 Tangent(i,j,k,l) += Fe(i,m)*dSdF(m,n,k,l)*Fpinv(j,n);
                 Tangent(i,j,k,l) += Fe(i,m)*S(m,n)*DinvFpDF(j,n,k,l);
               }
@@ -1818,7 +1719,13 @@ void mlawPowerYieldHyper::predictorCorrector_associatedFlow(const STensor3& F, c
 
   // update A, B
   double Ge, Ke;
-  viscoElasticPredictor(Ee,q0->_Ee,q0,q1,Ke,Ge);
+  
+  
+  
+  double A_v_pr=0., B_d_pr = 0., dApr=0.;
+  static STensor3 dB_devpr;
+  STensorOperation::zero(dB_devpr);
+  viscoElasticPredictor(Ee,q0->_Ee,q0,q1,Ke,Ge,A_v_pr, B_d_pr, dApr, dB_devpr);
 
   static STensor3 devKpr; // dev corotational kirchoff stress predictor
   static double ppr; // pressure predictor
diff --git a/NonLinearSolver/materialLaw/mlawHyperelastic.h b/NonLinearSolver/materialLaw/mlawHyperelastic.h
index de3347fe7ecc34f6911d97cc4fa2869786d5ae42..d56585037ce48fd50bab08d436c1b211c7c8dc42 100644
--- a/NonLinearSolver/materialLaw/mlawHyperelastic.h
+++ b/NonLinearSolver/materialLaw/mlawHyperelastic.h
@@ -59,14 +59,16 @@ class mlawHyperViscoElastic : public materialLaw{
     void updateViscoElasticFlow(const IPHyperViscoElastic *q0, IPHyperViscoElastic *q1, double& Ke, double& Ge) const;
     void viscoElasticPredictor(const STensor3& Ee, const STensor3& Ee0,
               const IPHyperViscoElastic *q0, IPHyperViscoElastic *q1,
-              double& Ke, double& Ge) const;
+              double& Ke, double& Ge,     double& A_v,  double& B_d, double& dAprd, STensor3& dB_vddev) const;
 
     void isotropicHookTensor(const double K, const double G, STensor43& L) const;
 
     void predictorCorrector_ViscoElastic(const STensor3& F0, const STensor3& F, STensor3&P, const IPHyperViscoElastic *q0_, IPHyperViscoElastic *q1,
                                   const bool stiff, STensor43& Tangent) const;
 
-    void evaluatePhiPCorrection(const IPHyperViscoElastic *q1, double trEe, STensor3 devEpr, double &p_vol, double &Dppr_vol_DCepr, STensor3 &K_dev_pr, STensor43  &DKpr_dev_DCepr) const;
+    void evaluatePhiPCorrection(double trEe, const STensor3 &devEpr,  double &A_v, double &dAprdEepr, double &B_d, STensor3 &dB_vddevEe) const;
+    //void evaluateA_dA(double trEe, double &A_v, double &dAprdEepr) const;
+    
   #endif // SWIG
 
   public:
@@ -82,12 +84,12 @@ class mlawHyperViscoElastic : public materialLaw{
     virtual void setViscoElasticData(const std::string filename);
     virtual void setVolumeCorrection(double _vc, double _xivc, double _zetavc, double _dc, double _thetadc, double _pidc) {_volCorrection=_vc,_xivolCorrection=_xivc,_zetavolCorrection=_zetavc, _devCorrection=_dc,_thetadevCorrection=_thetadc,_pidevCorrection=_pidc;};
     virtual double getVolumeCorrection() const {if (_volCorrection<1.e-5) return 0.; else return _volCorrection;};
-    virtual double getXiVolumeCorrection() const {if (_xivolCorrection<1.e-5) return 0.5; else return _xivolCorrection;};
-    virtual double getZetaVolumeCorrection() const {if (_zetavolCorrection<1.e-5) return 2.; else return _zetavolCorrection;};
+    virtual double getXiVolumeCorrection() const {if (_xivolCorrection<1.e-5) return 1.; else return _xivolCorrection;};
+    virtual double getZetaVolumeCorrection() const {if (_zetavolCorrection<1.e-5) return 1.; else return _zetavolCorrection;};
     
     virtual double getDevCorrection() const {if (_devCorrection<1.e-5) return 0.; else return _devCorrection;};
-    virtual double getThetaDevCorrection() const {if (_thetadevCorrection<1.e-5) return 0.5; else return _thetadevCorrection;};
-    virtual double getPiDevCorrection() const {if (_pidevCorrection<1.e-5) return 2.; else return _pidevCorrection;};
+    virtual double getThetaDevCorrection() const {if (_thetadevCorrection<1.e-5) return 1.; else return _thetadevCorrection;};
+    virtual double getPiDevCorrection() const {if (_pidevCorrection<1.e-5) return 1.; else return _pidevCorrection;};
 
     #ifndef SWIG
     mlawHyperViscoElastic(const mlawHyperViscoElastic& src);
@@ -178,7 +180,8 @@ class mlawPowerYieldHyper : public mlawHyperViscoElastic{
                             STensor3&P, const bool stiff, STensor43& Tangent, STensor43& dFedF, STensor43& dFpdF) const;
 
 
-    void evaluatePhiPCorrection(const IPHyperViscoElastic *q1, double _b, double v, double trEepr, double Gamma, double ptildepr_Vol, double ptildepr,double Ke, double u, STensor3 devEepr, STensor3 K_dev_pr, STensor3 devPhipr, double Ge, double &ptilde_Vol, double &X_vol, double &dptilde_VoldGamma, STensor3 &dptilde_VoldCepr, STensor3 &K_dev, double &D_dev, STensor3 &dK_devdGamma, STensor43 &dK_devdCepr) const;
+    void evaluatePhiPCorrection(double trEe, const STensor3 &devEpr,  double &A_v, double &dAprdEepr, double &B_d, STensor3 &dB_vddevEe) const;
+   
   protected:
 
 
diff --git a/dG3D/benchmarks/powerYieldViscoElastWithCorrection/cylinder.py b/dG3D/benchmarks/powerYieldViscoElastWithCorrection/cylinder.py
index 045b0ea765b24f29b3a0237f20fa0b89edb6cfb9..0d14fb42b8d56b525e98b443e18bbc1f01bed586 100644
--- a/dG3D/benchmarks/powerYieldViscoElastWithCorrection/cylinder.py
+++ b/dG3D/benchmarks/powerYieldViscoElastWithCorrection/cylinder.py
@@ -26,7 +26,7 @@ law1.setViscoElasticNumberOfElement(N)
 law1.setViscoElasticData(1,700.,250)
 law1.setViscoElasticData(2,240,40)
 law1.setViscoElasticData(3,130,2)
-law1.setVolumeCorrection(0.6,1.,2.,0.6,1.,2.)
+law1.setVolumeCorrection(8.,6.,2.,8.,6.,2.)
 
 # geometry
 meshfile="cylinder.msh" # name of mesh file
diff --git a/dG3D/benchmarks/smpPhenomenological_Mech/SMP_mech.py b/dG3D/benchmarks/smpPhenomenological_Mech/SMP_mech.py
index 2af42de66eba302f9dfdbd41aa33293c750efe51..5432043aa301c2162b3a4fc29461a5e3206e878b 100644
--- a/dG3D/benchmarks/smpPhenomenological_Mech/SMP_mech.py
+++ b/dG3D/benchmarks/smpPhenomenological_Mech/SMP_mech.py
@@ -54,8 +54,8 @@ cfAM	= 0.0
 zAM 	= 0.05 #0.685  #0.685
 
 tau_y0G = 1000.e6
-tau_y0R = 6.e6 #0.6e6
-tau_y0AM= 6.e6		
+tau_y0R = 0.6e6 #0.6e6
+tau_y0AM= 0.6e6		
 HR1	= 2.e5 
 HR2	= 1. 
 HR3	= 1 
@@ -68,11 +68,11 @@ HG3	= 1.
 ###
 
 ##extra branch
-corJAM=corJR=corJG=8. #8. 
+corJAM=corJR=corJG=8. 
 xicorJAM=xicorJR=xicorJG=6. #6.
-zetacorJAM=zetacorJR=zetacorJG=250. #250. #Has to be > 2.
-dcorJAM=dcorJR=dcorJG=10. #10.
-thetacorJAM=thetacorJG=thetacorJR=0.225 #0.225 #0.225
+zetacorJAM=zetacorJR=zetacorJG=4. #250. #Has to be > 2.
+dcorJAM=dcorJR=dcorJG=10.
+thetacorJAM=thetacorJG=thetacorJR=6. #0.225 #0.225 #0.225
 picorJAM=picorJG=picorJR=2. #2.
 #1.e6
 ########
@@ -182,8 +182,8 @@ law1.setYieldPowerFactorAM(3.5);
 
 #law1.setElasticPotentialFunctionAM(EPFunc_AM)
 #law1.setElasticPotentialFunctionR(EPFunc_R)
-#law1.setVolumeCorrectionAM(corJAM, xicorJAM, zetacorJAM, dcorJAM, thetacorJAM, picorJAM)
-#law1.setVolumeCorrectionR(corJR, xicorJR, zetacorJR, dcorJR, thetacorJR, picorJR)
+law1.setVolumeCorrectionAM(corJAM, xicorJAM, zetacorJAM, dcorJAM, thetacorJAM, picorJAM)
+law1.setVolumeCorrectionR(corJR, xicorJR, zetacorJR, dcorJR, thetacorJR, picorJR)
 #law1.setVolumeCorrectionG(corJG, xicorJG, zetacorJG, dcorJG, thetacorJG, picorJG)
 
 law1.setTcTmWcWm(Atc, Btm, Cwc, Dwm, alphatc,alphatm, alphawc, alphawm) 
@@ -229,7 +229,7 @@ mysolver.addDomain(myfield1)
 mysolver.addMaterialLaw(law1)				
 mysolver.Scheme(soltype)				
 mysolver.Solver(sol)					
-mysolver.snlData(nstep,ftime/1.,tol,tol)		
+mysolver.snlData(nstep,ftime/1.,tol,tol/100.)		
 mysolver.snlManageTimeStep(50, 3, 2, 10)		
 mysolver.stepBetweenArchiving(nstepArch)		
 
@@ -435,7 +435,7 @@ mysolver.solve()
 
 # ===Test==========================================================================================
 check= TestCheck()		
-check.equal(-2.859195e-05,mysolver.getArchivedNodalValue(7,0,mysolver.displacement),1e-5)
+check.equal(-2.590210e-5,mysolver.getArchivedNodalValue(7,0,mysolver.displacement),1e-5)
 
 
 
@@ -610,7 +610,7 @@ mysolver.solve()
 
 # ===Test==========================================================================================
 check2 = TestCheck()
-check2.equal(0.,mysolver.getArchivedNodalValue(7,0,mysolver.displacement),1e-1)	
-check2.equal(0.,mysolver.getArchivedNodalValue(7,2,mysolver.displacement),1e-1)	
+check2.equal(-1.433048e-05,mysolver.getArchivedNodalValue(7,0,mysolver.displacement),1e-1)	
+check2.equal(6.559040e-05,mysolver.getArchivedNodalValue(7,2,mysolver.displacement),1e-1)	
 
 
diff --git a/dG3D/benchmarks/smpPhenomenological_Thermo/SMP_thermo.py b/dG3D/benchmarks/smpPhenomenological_Thermo/SMP_thermo.py
index 746e1513956c0594573bacf5e4f71a3b2df32b42..753f9110ba9aa456de8e29d64b9a2ea9b974cc22 100644
--- a/dG3D/benchmarks/smpPhenomenological_Thermo/SMP_thermo.py
+++ b/dG3D/benchmarks/smpPhenomenological_Thermo/SMP_thermo.py
@@ -54,8 +54,8 @@ cfAM	= 0.0
 zAM 	= 0.05 #0.685  #0.685
 
 tau_y0G = 1000.e6
-tau_y0R = 6.e6 #0.6e6
-tau_y0AM= 6.e6		
+tau_y0R = 0.6e6
+tau_y0AM= 0.6e6		
 HR1	= 2.e5 
 HR2	= 1. 
 HR3	= 1 
@@ -68,11 +68,11 @@ HG3	= 1.
 ###
 
 ##extra branch
-corJAM=corJR=corJG=8. #8. 
+corJAM=corJR=corJG=8. 
 xicorJAM=xicorJR=xicorJG=6. #6.
-zetacorJAM=zetacorJR=zetacorJG=250. #250. #Has to be > 2.
-dcorJAM=dcorJR=dcorJG=10. #10.
-thetacorJAM=thetacorJG=thetacorJR=0.225 #0.225 #0.225
+zetacorJAM=zetacorJR=zetacorJG=4. #250. #Has to be > 2.
+dcorJAM=dcorJR=dcorJG=10.
+thetacorJAM=thetacorJG=thetacorJR=6. #0.225 #0.225 #0.225
 picorJAM=picorJG=picorJR=2. #2.
 #1.e6
 ########
@@ -432,7 +432,7 @@ mysolver.solve()
 
 
 check = TestCheck()
-check.equal(-1.563127e+02,mysolver.getArchivedForceOnPhysicalGroup("Face", 5678, 3),1.e-6)
+check.equal(-1.50000e+02,mysolver.getArchivedForceOnPhysicalGroup("Face", 5678, 3),1.e-6)
 check.equal(3.452332e2,mysolver.getArchivedNodalValue(1,3,mysolver.displacement),1.e-6)
 check.equal(0.,mysolver.getArchivedNodalValue(7,0,mysolver.displacement),1.e-6)