     vx_imt =  dev_conserved[o1*n_cells + id] / d_imt;
     vy_imt =  dev_conserved[o2*n_cells + id] / d_imt;
     vz_imt =  dev_conserved[o3*n_cells + id] / d_imt;
+    #ifdef DE //PRESSURE_DE
+    E = dev_conserved[4*n_cells + id];
+    E_kin = 0.5 * d_imt * ( vx_imt*vx_imt + vy_imt*vy_imt + vz_imt*vz_imt );
+    dge = dev_conserved[(n_fields-1)*n_cells + id];
+    p_imt = Get_Pressure_From_DE( E, E - E_kin, dge, gamma ); 
+    #else
     p_imt  = (dev_conserved[4*n_cells + id] - 0.5*d_imt*(vx_imt*vx_imt + vy_imt*vy_imt + vz_imt*vz_imt)) * (gamma - 1.0);
+    #endif //PRESSURE_DE
     p_imt  = fmax(p_imt, (Real) TINY_NUMBER);
     #ifdef DE
-    ge_imt = dev_conserved[(n_fields-1)*n_cells + id] / d_imt;
+    ge_imt = dge / d_imt;
     #endif
     #ifdef SCALAR
     for (int i=0; i<NSCALARS; i++) {

  #endif  

  #ifdef DE
  Real ge_i, ge_imo, ge_ipo, ge_imt, ge_ipt, ge_L, ge_R;
  #ifdef CTU
  Real del_ge, ge_6, geL_0, geR_0;
  #endif

    vx_ipo =  dev_conserved[o1*n_cells + id] / d_ipo;
    vy_ipo =  dev_conserved[o2*n_cells + id] / d_ipo;
    vz_ipo =  dev_conserved[o3*n_cells + id] / d_ipo;
    #ifdef DE //PRESSURE_DE
    E = dev_conserved[4*n_cells + id];
    E_kin = 0.5 * d_ipo * ( vx_ipo*vx_ipo + vy_ipo*vy_ipo + vz_ipo*vz_ipo );
    dge = dev_conserved[(n_fields-1)*n_cells + id];
    p_ipo = Get_Pressure_From_DE( E, E - E_kin, dge, gamma ); 
    #else
    p_ipo  = (dev_conserved[4*n_cells + id] - 0.5*d_ipo*(vx_ipo*vx_ipo + vy_ipo*vy_ipo + vz_ipo*vz_ipo)) * (gamma - 1.0);
    #endif //PRESSURE_DE
    p_ipo  = fmax(p_ipo, (Real) TINY_NUMBER);
    #ifdef DE
    ge_ipo = dge / d_ipo;
    #endif
    #ifdef SCALAR
    for (int i=0; i<NSCALARS; i++) {
