diff --git a/Solver/dgRungeKutta.cpp b/Solver/dgRungeKutta.cpp
index 336744ef18399af60348e99c317ec6d4338ee108..d61ffbca6f9de99ccbde3b6e98856515c84e7435 100644
--- a/Solver/dgRungeKutta.cpp
+++ b/Solver/dgRungeKutta.cpp
@@ -115,11 +115,12 @@ double dgRungeKutta::diagonalRK (const dgConservationLaw *claw,
   dgDofContainer K   (groups, nbFields);
   dgDofContainer Unp (groups, nbFields);
   dgDofContainer resd(groups, nbFields);
-  Unp.scale(0.);
-  Unp.axpy(*sol);
+  
    
-   if (_TransformNodalValue) _TransformNodalValue->apply(&Unp);
- 
+   if (_TransformNodalValue) _TransformNodalValue->apply(sol);
+   
+   Unp.scale(0.);
+   Unp.axpy(*sol);
    K.scale(0.);
    K.axpy(Unp);
 
@@ -130,8 +131,8 @@ double dgRungeKutta::diagonalRK (const dgConservationLaw *claw,
       K.scale(A[j]*dt);
       K.axpy(*sol);
     }
-    if (_TransformNodalValue) _TransformNodalValue->apply_Inverse(&K);
-    if (_limiter) _limiter->apply(&K);
+   if (_limiter) _limiter->apply(&K);
+   if (_TransformNodalValue) _TransformNodalValue->apply_Inverse(&K);
     residual.compute(*groups,K,resd);
     K.scale(0.);
     for(int k=0; k < groups->getNbElementGroups(); k++) {
diff --git a/Solver/dgTransformNodalValue.cpp b/Solver/dgTransformNodalValue.cpp
index bd5af3752054f468c7625f8b32541b2a825fd251..86d26c30b497a9f955b9102d19e1d3caf17faded 100644
--- a/Solver/dgTransformNodalValue.cpp
+++ b/Solver/dgTransformNodalValue.cpp
@@ -8,55 +8,29 @@ static double n_supra = 20;
 
 int dgSupraTransformNodalValue::apply ( dgDofContainer *solution)
 {    
-  dgGroupCollection *groups=solution->getGroups();
-  int nbFields =_claw->getNbFields();    
-
-
-  for (int iGroup=0 ; iGroup<groups->getNbElementGroups() ; iGroup++) {
-    dgGroupOfElements &group = *groups->getElementGroup(iGroup);
-    fullMatrix<double> &sol = solution->getGroupProxy(iGroup);
-    fullMatrix<double> Temp;  
-     for (int iElement=0 ; iElement<group.getNbElements() ; ++iElement)  { 
-      Temp.setAsProxy(sol, nbFields*iElement, nbFields );  
-      int fSize = Temp.size1();         
-      for (int k=0; k<nbFields; ++k) {
-         
-        for (int i=0; i<fSize; ++i) {
-          if (Temp(i,k)<0) Temp(i,k) = - pow(fabs(Temp(i,k)),1/n_supra);
-            else Temp(i,k) = pow(fabs(Temp(i,k)),1/n_supra);
-          // Temp(i,k) = Temp(i,k)*0.5;
-          }
-      
-      }
+  
+  
+  fullVector<double> sol = (*solution).getVector(); 
+  for (int i=0;i< sol.size();i++){
+   
+     if ((sol)(i)<0) (sol)(i)=-pow(- (sol)(i), 1/n_supra);
+       else (sol)(i)=pow( (sol)(i), 1/n_supra);
      }
-  }
+  
   return 1;        
 }
 
 int dgSupraTransformNodalValue::apply_Inverse ( dgDofContainer *solution)
 {    
-  dgGroupCollection *groups=solution->getGroups();
-  int nbFields =_claw->getNbFields();    
-  for (int iGroup=0 ; iGroup<groups->getNbElementGroups() ; iGroup++) {
-    dgGroupOfElements &group = *groups->getElementGroup(iGroup);
-    fullMatrix<double> &sol = solution->getGroupProxy(iGroup);
-    fullMatrix<double> Temp;  
-     for (int iElement=0 ; iElement<group.getNbElements() ; ++iElement)  { 
-      Temp.setAsProxy(sol, nbFields*iElement, nbFields ); 
-      int fSize = Temp.size1();         
-      for (int k=0; k<nbFields; ++k) {
-         
-        
-        for (int i=0; i<fSize; ++i) {
-           if (Temp(i,k)<0) Temp(i,k) =- pow(fabs(Temp(i,k)),n_supra);
-           else Temp(i,k) = pow(fabs(Temp(i,k)),n_supra);
-          //Temp(i,k) = 2*Temp(i,k);
-          
-       }
+  
 
-      }
+  fullVector<double> sol = (*solution).getVector(); 
+  for (int i=0;i< sol.size();i++){
+   
+     if ((sol)(i)<0) (sol)(i)=-pow(- (sol)(i), n_supra);
+       else (sol)(i)=pow( (sol)(i), n_supra);
      }
-  }     
+  
   return 1;
 }