diff --git a/src/hydro/Gizmo/hydro.h b/src/hydro/Gizmo/hydro.h
index 7cfb29fa196bf40ed83bc1340cae807f9ccb4ec9..d322c493e01d7f89db5d7eec3db9974bdc5750c8 100644
--- a/src/hydro/Gizmo/hydro.h
+++ b/src/hydro/Gizmo/hydro.h
@@ -109,8 +109,12 @@ __attribute__((always_inline)) INLINE static void hydro_first_init_part(
   p->conserved.momentum[1] = mass * p->primitives.v[1];
   p->conserved.momentum[2] = mass * p->primitives.v[2];
 
-  /* and the thermal energy */
+/* and the thermal energy */
+#if defined(EOS_ISOTHERMAL_GAS)
+  p->conserved.energy = mass * const_isothermal_internal_energy;
+#else
   p->conserved.energy *= mass;
+#endif
 
 #if defined(GIZMO_FIX_PARTICLES)
   p->v[0] = 0.;
@@ -350,21 +354,24 @@ __attribute__((always_inline)) INLINE static void hydro_predict_extra(
   else
     p->h *= expf(w1);
 
-  const float w2 = -hydro_dimension * w1;
-  if (fabsf(w2) < 0.2f) {
-    p->primitives.rho *= approx_expf(w2);
-  } else {
-    p->primitives.rho *= expf(w2);
-  }
-
-  p->primitives.v[0] += (p->a_hydro[0] + p->gravity.old_a[0]) * dt;
-  p->primitives.v[1] += (p->a_hydro[1] + p->gravity.old_a[1]) * dt;
-  p->primitives.v[2] += (p->a_hydro[2] + p->gravity.old_a[2]) * dt;
-  if (p->conserved.mass > 0.) {
-    const float u = p->conserved.energy + p->du_dt * dt;
-    p->primitives.P =
-        hydro_gamma_minus_one * u * p->primitives.rho / p->conserved.mass;
-  }
+//  const float w2 = -hydro_dimension * w1;
+//  if (fabsf(w2) < 0.2f) {
+//    p->primitives.rho *= approx_expf(w2);
+//  } else {
+//    p->primitives.rho *= expf(w2);
+//  }
+
+//  p->primitives.v[0] += (p->a_hydro[0] + p->gravity.old_a[0]) * dt;
+//  p->primitives.v[1] += (p->a_hydro[1] + p->gravity.old_a[1]) * dt;
+//  p->primitives.v[2] += (p->a_hydro[2] + p->gravity.old_a[2]) * dt;
+
+//#if !defined(EOS_ISOTHERMAL_GAS)
+//  if (p->conserved.mass > 0.) {
+//    const float u = p->conserved.energy + p->du_dt * dt;
+//    p->primitives.P =
+//        hydro_gamma_minus_one * u * p->primitives.rho / p->conserved.mass;
+//  }
+//#endif
 
 #ifdef SWIFT_DEBUG_CHECKS
   if (p->h <= 0.) {
@@ -460,7 +467,11 @@ __attribute__((always_inline)) INLINE static void hydro_kick_extra(
   p->conserved.momentum[0] += p->conserved.flux.momentum[0];
   p->conserved.momentum[1] += p->conserved.flux.momentum[1];
   p->conserved.momentum[2] += p->conserved.flux.momentum[2];
+#if defined(EOS_ISOTHERMAL_GAS)
+  p->conserved.energy = p->conserved.mass * const_isothermal_internal_energy;
+#else
   p->conserved.energy += p->conserved.flux.energy;
+#endif
 
   /* Add gravity. We only do this if we have gravity activated. */
   if (p->gpart) {
@@ -475,6 +486,7 @@ __attribute__((always_inline)) INLINE static void hydro_kick_extra(
     p->conserved.momentum[1] += dt * p->conserved.mass * a_grav[1];
     p->conserved.momentum[2] += dt * p->conserved.mass * a_grav[2];
 
+#if !defined(EOS_ISOTHERMAL_GAS)
     p->conserved.energy += dt * (p->conserved.momentum[0] * a_grav[0] +
                                  p->conserved.momentum[1] * a_grav[1] +
                                  p->conserved.momentum[2] * a_grav[2]);
@@ -482,6 +494,7 @@ __attribute__((always_inline)) INLINE static void hydro_kick_extra(
     p->conserved.energy += dt * (a_grav[0] * p->gravity.mflux[0] +
                                  a_grav[1] * p->gravity.mflux[1] +
                                  a_grav[2] * p->gravity.mflux[2]);
+#endif
   }
 
   /* reset fluxes */
@@ -492,6 +505,11 @@ __attribute__((always_inline)) INLINE static void hydro_kick_extra(
   p->conserved.flux.momentum[1] = 0.0f;
   p->conserved.flux.momentum[2] = 0.0f;
   p->conserved.flux.energy = 0.0f;
+
+  /* Set particle movement */
+  xp->v_full[0] = p->conserved.momentum[0] / p->conserved.mass;
+  xp->v_full[1] = p->conserved.momentum[1] / p->conserved.mass;
+  xp->v_full[2] = p->conserved.momentum[2] / p->conserved.mass;
 }
 
 /**
diff --git a/src/riemann/riemann_exact_isothermal.h b/src/riemann/riemann_exact_isothermal.h
index 8e8a6a4dcce456b55f85148bed7342ad4e651c1b..34471593e2293e653ee130835aaf3548a9020562 100644
--- a/src/riemann/riemann_exact_isothermal.h
+++ b/src/riemann/riemann_exact_isothermal.h
@@ -112,7 +112,7 @@ __attribute__((always_inline)) INLINE static float riemann_guess_rho(float* WL,
   /* Currently three possibilities and not really an algorithm to decide which
      one to choose: */
   /* just the average */
-  return 0.5f * (WL[0] + WR[0]);
+  //  return 0.5f * (WL[0] + WR[0]);
 
   /* two rarefaction approximation */
   return sqrtf(WL[0] * WR[0] * expf((vL - vR) / const_isothermal_soundspeed));
@@ -276,11 +276,24 @@ __attribute__((always_inline)) INLINE static void riemann_solver_solve(
   vL = WL[1] * n_unit[0] + WL[2] * n_unit[1] + WL[3] * n_unit[2];
   vR = WR[1] * n_unit[0] + WR[2] * n_unit[1] + WR[3] * n_unit[2];
 
-  /* VACUUM... */
+/* VACUUM... */
+#ifdef SWIFT_DEBUG_CHECKS
+  if (WL[0] == 0. || WL[4] == 0. || WR[0] == 0. || WR[4] == 0. ||
+      (4.0f * const_isothermal_soundspeed / hydro_gamma_minus_one <= vR - vL)) {
+    error("Vacuum not handled (yet)!");
+  }
+#endif
 
   rho = 0.;
   /* obtain a first guess for p */
   rhoguess = riemann_guess_rho(WL, WR, vL, vR);
+
+#ifdef SWIFT_DEBUG_CHECKS
+  if (rhoguess <= 0.) {
+    error("Zero or negative initial density guess.");
+  }
+#endif
+
   frho = riemann_f(rho, WL, WR, vL, vR);
   frhoguess = riemann_f(rhoguess, WL, WR, vL, vR);
   /* ok, rhostar is close to 0, better use Brent's method... */
@@ -289,14 +302,18 @@ __attribute__((always_inline)) INLINE static void riemann_solver_solve(
     /* Newton-Raphson until convergence or until suitable interval is found
        to use Brent's method */
     unsigned int counter = 0;
-    while (fabs(rho - rhoguess) > 1.e-6f * 0.5f * (rho + rhoguess) &&
+    while (fabs(rho - rhoguess) > 5.e-7f * (rho + rhoguess) &&
            frhoguess < 0.0f) {
       rho = rhoguess;
       rhoguess = rhoguess - frhoguess / riemann_fprime(rhoguess, WL, WR);
       frhoguess = riemann_f(rhoguess, WL, WR, vL, vR);
       counter++;
       if (counter > 1000) {
-        error("Stuck in Newton-Raphson!\n");
+        error(
+            "Stuck in Newton-Raphson (rho: %g, rhoguess: %g, frhoguess: %g, "
+            "fprime: %g, rho-rhoguess: %g, WL: %g %g %g, WR: %g %g %g)!\n",
+            rho, rhoguess, frhoguess, riemann_fprime(rhoguess, WL, WR),
+            (rho - rhoguess), WL[0], vL, WL[4], WR[0], vR, WR[4]);
       }
     }
   }