diff --git a/Solver/TESTCASES/DamBreak.lua b/Solver/TESTCASES/DamBreak.lua
index 2c5b1da9923b21b1c68d43bff75b11bcd4f83bd5..b74f1f6c61e3afe80840217919837b94ed71cec3 100644
--- a/Solver/TESTCASES/DamBreak.lua
+++ b/Solver/TESTCASES/DamBreak.lua
@@ -30,8 +30,8 @@ dimension=1
 law = dgConservationLawShallowWater1d()
 law:addBoundaryCondition('Left',law:newBoundaryWall())
 law:addBoundaryCondition('Right',law:newBoundaryWall())
-law:setBathymetry(functionConstant({0}))
-law:setLinearDissipation(functionConstant({0}))
+--law:setBathymetry(functionConstant({0}))
+--law:setLinearDissipation(functionConstant({0}))
 
 groups = dgGroupCollection(model, dimension, order)
 groups:buildGroupsOfInterfaces()
diff --git a/Solver/dgConservationLawShallowWater1d.cpp b/Solver/dgConservationLawShallowWater1d.cpp
index f24865f417d948e871d85c390aba82f8a5f2518c..9c4b6be5a7f1bff4bfdb9171bed84f67c1ba1a4c 100644
--- a/Solver/dgConservationLawShallowWater1d.cpp
+++ b/Solver/dgConservationLawShallowWater1d.cpp
@@ -1,6 +1,7 @@
 #include "dgConservationLawShallowWater1d.h"
 #include "function.h"
 static double g = 9.81;
+static double RHO = 1.0;
 
 class dgConservationLawShallowWater1d : public dgConservationLaw {
   class advection;
@@ -22,6 +23,11 @@ class dgConservationLawShallowWater1d : public dgConservationLaw {
   dgConservationLawShallowWater1d() 
   {
     _nbf = 2; // eta u
+    fullMatrix<double> zero(1,1);
+    zero(0,0) = 0.0;
+    functionConstant *fzero = new functionConstant(&zero);
+    _bathymetry = fzero;
+    _linearDissipation = fzero;
   }
   dgBoundaryCondition *newBoundaryWall();
 };
@@ -132,29 +138,75 @@ class dgConservationLawShallowWater1d::riemann:public dataCacheDouble {
     int nQP = solL().size1();
     for(int i=0; i< nQP; i++) {
       double h = _bathymetry(i,0);
-      double nx = normals(0,i);
+      double n0 = normals(0,i);
       double HL = solL(i,0) + h, HR = solR(i,0) + h;
-      double uL = nx*solL(i,1) , uR = nx*solR(i,1) ;
-      double HuL = uL*HL, HuR = uR*HR;
-      double HM = (HL+HR)/2, HJ = (HL-HR)/2;
-      double HuM = (HuL+HuR)/2, HuJ = (HuL-HuR)/2;
+      double uL = solL(i,1) , uR = solR(i,1) ;
       double sqHL = sqrt(HL), sqHR = sqrt(HR);
-      double u_roe = (sqHL*uL + sqHR*uR) / (sqHL + sqHR);
-      double c_roe = sqrt(g*HM);
-      double H = HM + (HuJ - u_roe *HJ) / c_roe;
-      double Hu = HuM + (c_roe - u_roe*u_roe/c_roe) *HJ + u_roe/c_roe *HuJ;
-      double u = Hu / H;
-      double eta  = H-h;
-
-      double Fun = .5*u*u +g*eta;
-      double Feta = (h+eta)*u;
-
-      _value(i,0) = -Feta;
-      _value(i,1) = -Fun*nx;
+      double F1,F2;
+      //---------
+      //ROE 
+      //---------
+//       double HuL = uL*HL, HuR = uR*HR;
+//       double HM = (HL+HR)/2, HJ = (HL-HR)/2;
+//       double HuM = (HuL+HuR)/2, HuJ = (HuL-HuR)/2;
+//       double u_roe = (sqHL*uL + sqHR*uR) / (sqHL + sqHR);
+//       double c_roe = sqrt(g*HM);
+//       double H = HM + (HuJ - u_roe *HJ) / c_roe;
+//       double Hu = HuM + (c_roe - u_roe*u_roe/c_roe) *HJ + u_roe/c_roe *HuJ;
+//       double u = Hu / H;
+//       double p = RHO*g*(H-h);
+//       F1 = H*u*n0;
+//       F2 = (.5*u*u + p/RHO)*n0;
+
+//     //---------
+//     //LAX 
+//     //---------
+      double pL = RHO*g*solL(i,0);
+      double pR = RHO*g*solR(i,0);
+      F1 = .5*( HL*uL + HR*uR )*n0;
+      F2 = .5*( .5*uL*uL+pL/RHO  + .5*uR*uR+pR/RHO )*n0;       
+      double maxlambdaL = uL + sqrt(g*HL); 
+      double maxlambdaR = uR + sqrt(g*HR);  
+      const double aMax = std::max(maxlambdaL,maxlambdaR);
+      F1 += aMax*(HL-HR);
+      F2 += aMax*(uL-uR);
+
+//     //---------
+//     //HLL 
+//     //---------
+//     double cL = sqrt(g*HL);
+//     double cR = sqrt(g*HR);
+//     double pL = RHO*g*solL(i,0);
+//     double pR = RHO*g*solR(i,0);
+//     double ustar = (sqHL*uL + sqHR*uR) / (sqHL + sqHR); 
+//     double Hstar = (HL+HR)*.5;
+//     double cstar =  sqrt(g*Hstar);   
+//     double SL = std::min(uL - cL, ustar - cstar);
+//     double SR = std::min(uR + cR,  ustar + cstar);
+//     if (SL >= 0.){
+//       F1 =  HL*uL*n0;  
+//       F2 =  (.5*uL*uL + pL/RHO )*n0  ;
+//     }
+//     else if (SR <=0.){
+//       F1 =  HR*uR*n0;  
+//       F2 =  (.5*uR*uR + pR/RHO )*n0  ;
+//     }
+//     else{
+//       F1 = (SR*HL*uL*n0-SL*HR*uR*n0 + SL*SR*(HR-HL))/(SR-SL);
+//       F2 = (SR*(.5*uL*uL + pL/RHO )*n0-SL*(.5*uR*uR + pR/RHO )*n0  + SL*SR*(uR-uL))/(SR-SL);
+//     }
+
+    //-------------
+
+      _value(i,0) = -F1;
+      _value(i,1) = -F2;
       _value(i,2) = -_value(i,0);
       _value(i,3) = -_value(i,1);
+
     }
+
   }
+
 };
 
 class dgConservationLawShallowWater1d::boundaryWall : public dgBoundaryCondition {
diff --git a/Solver/dgConservationLawShallowWater2d.cpp b/Solver/dgConservationLawShallowWater2d.cpp
index 6394f67313212b505ff5c613d1bda1645173c53a..85730f9c98cf2f4569af017c625adbbcf15c6142 100644
--- a/Solver/dgConservationLawShallowWater2d.cpp
+++ b/Solver/dgConservationLawShallowWater2d.cpp
@@ -25,6 +25,14 @@ class dgConservationLawShallowWater2d : public dgConservationLaw {
   dgConservationLawShallowWater2d() 
   {
     _nbf = 3; // eta u v
+    fullMatrix<double> zero(1,1);
+    zero(0,0) = 0.0;
+    functionConstant *fzero = new functionConstant(&zero);
+    _bathymetry = fzero;
+    _linearDissipation = fzero;
+    _coriolisFactor = fzero;
+    _quadraticDissipation = fzero;
+    _source = fzero;
   }
   dgBoundaryCondition *newBoundaryWall();
 };