diff --git a/src/const.h b/src/const.h
index 85d64f5f3bf97b3f6ca6df8f230e0e0990687d34..928835c5ae0ac70d641243b0d183c2c0652cdc8a 100644
--- a/src/const.h
+++ b/src/const.h
@@ -68,7 +68,9 @@
 #define GIZMO_UNPHYSICAL_RESCUE
 /* Show a warning message if an unphysical value was reset (only works if
    GIZMO_UNPHYSICAL_RESCUE is also selected). */
+#ifdef SWIFT_DEBUG_CHECKS
 #define GIZMO_UNPHYSICAL_WARNING
+#endif
 
 /* Parameters that control how GIZMO handles pathological particle
    configurations. */
diff --git a/src/hydro/Gizmo/hydro_gradients.h b/src/hydro/Gizmo/hydro_gradients.h
index 4a2f603e03321e40b744e5e787f26c849d6e2a8a..cd08e19efb76848b21d483fe5360e32f209eb65d 100644
--- a/src/hydro/Gizmo/hydro_gradients.h
+++ b/src/hydro/Gizmo/hydro_gradients.h
@@ -93,17 +93,16 @@ __attribute__((always_inline)) INLINE static void hydro_gradients_finalize(
  */
 __attribute__((always_inline)) INLINE static void hydro_gradients_predict(
     struct part* restrict pi, struct part* restrict pj, float hi, float hj,
-    const float* dx, float r, float* xij_i, float* Wi, float* Wj) {
+    const float* dx, float r, const float* xij_i, float* Wi, float* Wj) {
 
-  float dWi[5], dWj[5];
-  float xij_j[3];
 
   /* perform gradient reconstruction in space and time */
   /* Compute interface position (relative to pj, since we don't need the actual
    * position) eqn. (8) */
   const float xfac = hj / (hi + hj);
-  for (int k = 0; k < 3; k++) xij_j[k] = xfac * dx[k];
+  const float xij_j[3] = {xfac * dx[0], xfac * dx[1], xfac * dx[2]};
 
+  float dWi[5];
   dWi[0] = pi->primitives.gradients.rho[0] * xij_i[0] +
            pi->primitives.gradients.rho[1] * xij_i[1] +
            pi->primitives.gradients.rho[2] * xij_i[2];
@@ -120,6 +119,7 @@ __attribute__((always_inline)) INLINE static void hydro_gradients_predict(
            pi->primitives.gradients.P[1] * xij_i[1] +
            pi->primitives.gradients.P[2] * xij_i[2];
 
+  float dWj[5];
   dWj[0] = pj->primitives.gradients.rho[0] * xij_j[0] +
            pj->primitives.gradients.rho[1] * xij_j[1] +
            pj->primitives.gradients.rho[2] * xij_j[2];
diff --git a/src/hydro/Gizmo/hydro_iact.h b/src/hydro/Gizmo/hydro_iact.h
index 7017056f2e5a784b2eed6273f13bc7d1752617fc..2274d0fa75d92ffa814c321b019803f83421bbc4 100644
--- a/src/hydro/Gizmo/hydro_iact.h
+++ b/src/hydro/Gizmo/hydro_iact.h
@@ -51,15 +51,14 @@ __attribute__((always_inline)) INLINE static void runner_iact_density(
     float r2, const float *dx, float hi, float hj, struct part *restrict pi,
     struct part *restrict pj, float a, float H) {
 
-  float r = sqrtf(r2);
-  float xi, xj;
-  float h_inv;
   float wi, wj, wi_dx, wj_dx;
-  int k, l;
+
+  /* Get r and h inverse. */
+  const float r = sqrtf(r2);
 
   /* Compute density of pi. */
-  h_inv = 1.f / hi;
-  xi = r * h_inv;
+  const float hi_inv = 1.f / hi;
+  const float xi = r * hi_inv;
   kernel_deval(xi, &wi, &wi_dx);
 
   pi->density.wcount += wi;
@@ -67,16 +66,17 @@ __attribute__((always_inline)) INLINE static void runner_iact_density(
 
   /* these are eqns. (1) and (2) in the summary */
   pi->geometry.volume += wi;
-  for (k = 0; k < 3; k++)
-    for (l = 0; l < 3; l++) pi->geometry.matrix_E[k][l] += dx[k] * dx[l] * wi;
+  for (int k = 0; k < 3; k++)
+    for (int l = 0; l < 3; l++)
+      pi->geometry.matrix_E[k][l] += dx[k] * dx[l] * wi;
 
   pi->geometry.centroid[0] -= dx[0] * wi;
   pi->geometry.centroid[1] -= dx[1] * wi;
   pi->geometry.centroid[2] -= dx[2] * wi;
 
   /* Compute density of pj. */
-  h_inv = 1.f / hj;
-  xj = r * h_inv;
+  const float hj_inv = 1.f / hj;
+  const float xj = r * hj_inv;
   kernel_deval(xj, &wj, &wj_dx);
 
   pj->density.wcount += wj;
@@ -84,8 +84,9 @@ __attribute__((always_inline)) INLINE static void runner_iact_density(
 
   /* these are eqns. (1) and (2) in the summary */
   pj->geometry.volume += wj;
-  for (k = 0; k < 3; k++)
-    for (l = 0; l < 3; l++) pj->geometry.matrix_E[k][l] += dx[k] * dx[l] * wj;
+  for (int k = 0; k < 3; k++)
+    for (int l = 0; l < 3; l++)
+      pj->geometry.matrix_E[k][l] += dx[k] * dx[l] * wj;
 
   pj->geometry.centroid[0] += dx[0] * wj;
   pj->geometry.centroid[1] += dx[1] * wj;
@@ -117,17 +118,13 @@ __attribute__((always_inline)) INLINE static void runner_iact_nonsym_density(
     float r2, const float *dx, float hi, float hj, struct part *restrict pi,
     const struct part *restrict pj, float a, float H) {
 
-  float r;
-  float xi;
-  float h_inv;
   float wi, wi_dx;
-  int k, l;
 
-  /* Get r and r inverse. */
-  r = sqrtf(r2);
+  /* Get r and h inverse. */
+  const float r = sqrtf(r2);
 
-  h_inv = 1.f / hi;
-  xi = r * h_inv;
+  const float hi_inv = 1.f / hi;
+  const float xi = r * hi_inv;
   kernel_deval(xi, &wi, &wi_dx);
 
   pi->density.wcount += wi;
@@ -135,8 +132,9 @@ __attribute__((always_inline)) INLINE static void runner_iact_nonsym_density(
 
   /* these are eqns. (1) and (2) in the summary */
   pi->geometry.volume += wi;
-  for (k = 0; k < 3; k++)
-    for (l = 0; l < 3; l++) pi->geometry.matrix_E[k][l] += dx[k] * dx[l] * wi;
+  for (int k = 0; k < 3; k++)
+    for (int l = 0; l < 3; l++)
+      pi->geometry.matrix_E[k][l] += dx[k] * dx[l] * wi;
 
   pi->geometry.centroid[0] -= dx[0] * wi;
   pi->geometry.centroid[1] -= dx[1] * wi;
@@ -222,34 +220,24 @@ __attribute__((always_inline)) INLINE static void runner_iact_fluxes_common(
     float r2, const float *dx, float hi, float hj, struct part *restrict pi,
     struct part *restrict pj, int mode, float a, float H) {
 
-  float r = sqrtf(r2);
-  float xi, xj;
-  float hi_inv, hi_inv_dim;
-  float hj_inv, hj_inv_dim;
-  float wi, wj, wi_dx, wj_dx;
-  int k, l;
-  float A[3];
-  float Anorm;
-  float Bi[3][3];
-  float Bj[3][3];
-  float Vi, Vj;
-  float xij_i[3], xfac, xijdotdx;
-  float vmax, dvdotdx;
-  float vi[3], vj[3], vij[3];
-  float Wi[5], Wj[5];
-  float n_unit[3];
+  const float r_inv = 1.f / sqrtf(r2);
+  const float r = r2 * r_inv;
 
   /* Initialize local variables */
-  for (k = 0; k < 3; k++) {
-    for (l = 0; l < 3; l++) {
+  float Bi[3][3];
+  float Bj[3][3];
+  float vi[3], vj[3];
+  for (int k = 0; k < 3; k++) {
+    for (int l = 0; l < 3; l++) {
       Bi[k][l] = pi->geometry.matrix_E[k][l];
       Bj[k][l] = pj->geometry.matrix_E[k][l];
     }
     vi[k] = pi->v[k]; /* particle velocities */
     vj[k] = pj->v[k];
   }
-  Vi = pi->geometry.volume;
-  Vj = pj->geometry.volume;
+  const float Vi = pi->geometry.volume;
+  const float Vj = pj->geometry.volume;
+  float Wi[5], Wj[5];
   Wi[0] = pi->primitives.rho;
   Wi[1] = pi->primitives.v[0];
   Wi[2] = pi->primitives.v[1];
@@ -262,56 +250,63 @@ __attribute__((always_inline)) INLINE static void runner_iact_fluxes_common(
   Wj[4] = pj->primitives.P;
 
   /* calculate the maximal signal velocity */
+  float vmax;
   if (Wi[0] > 0.0f && Wj[0] > 0.0f) {
-    vmax =
-        sqrtf(hydro_gamma * Wi[4] / Wi[0]) + sqrtf(hydro_gamma * Wj[4] / Wj[0]);
-  } else {
+    const float ci = gas_soundspeed_from_pressure(Wi[0], Wi[4]);
+    const float cj = gas_soundspeed_from_pressure(Wj[0], Wj[4]);
+    vmax = ci + cj;
+  } else
     vmax = 0.0f;
-  }
-  dvdotdx = (Wi[1] - Wj[1]) * dx[0] + (Wi[2] - Wj[2]) * dx[1] +
-            (Wi[3] - Wj[3]) * dx[2];
-  dvdotdx = min(dvdotdx, (vi[0] - vj[0]) * dx[0] + (vi[1] - vj[1]) * dx[1] +
-                             (vi[2] - vj[2]) * dx[2]);
-  if (dvdotdx < 0.) {
-    /* the magical factor 3 also appears in Gadget2 */
-    vmax -= 3.f * dvdotdx / r;
-  }
+
+  float dvdr = (pi->v[0] - pj->v[0]) * dx[0] + (pi->v[1] - pj->v[1]) * dx[1] +
+               (pi->v[2] - pj->v[2]) * dx[2];
+
+  /* Velocity on the axis linking the particles */
+  float dvdotdx = (Wi[1] - Wj[1]) * dx[0] + (Wi[2] - Wj[2]) * dx[1] +
+                  (Wi[3] - Wj[3]) * dx[2];
+  dvdotdx = min(dvdotdx, dvdr);
+
+  /* We only care about this velocity for particles moving towards each others
+   */
+  dvdotdx = min(dvdotdx, 0.f);
+
+  /* Get the signal velocity */
+  /* the magical factor 3 also appears in Gadget2 */
+  vmax -= 3.f * dvdotdx * r_inv;
+
+  /* Store the signal velocity */
   pi->timestepvars.vmax = max(pi->timestepvars.vmax, vmax);
-  if (mode == 1) {
-    pj->timestepvars.vmax = max(pj->timestepvars.vmax, vmax);
-  }
+  if (mode == 1) pj->timestepvars.vmax = max(pj->timestepvars.vmax, vmax);
 
   /* Compute kernel of pi. */
-  hi_inv = 1.f / hi;
-  hi_inv_dim = pow_dimension(hi_inv);
-  xi = r * hi_inv;
+  float wi, wi_dx;
+  const float hi_inv = 1.f / hi;
+  const float hi_inv_dim = pow_dimension(hi_inv);
+  const float xi = r * hi_inv;
   kernel_deval(xi, &wi, &wi_dx);
 
   /* Compute kernel of pj. */
-  hj_inv = 1.f / hj;
-  hj_inv_dim = pow_dimension(hj_inv);
-  xj = r * hj_inv;
+  float wj, wj_dx;
+  const float hj_inv = 1.f / hj;
+  const float hj_inv_dim = pow_dimension(hj_inv);
+  const float xj = r * hj_inv;
   kernel_deval(xj, &wj, &wj_dx);
 
   /* Compute h_dt. We are going to use an SPH-like estimate of div_v for that */
-  float dvdr = (pi->v[0] - pj->v[0]) * dx[0] + (pi->v[1] - pj->v[1]) * dx[1] +
-               (pi->v[2] - pj->v[2]) * dx[2];
-  float ri = 1.0f / r;
-  float hidp1 = pow_dimension_plus_one(hi_inv);
-  float hjdp1 = pow_dimension_plus_one(hj_inv);
-  float wi_dr = hidp1 * wi_dx;
-  float wj_dr = hjdp1 * wj_dx;
-  dvdr *= ri;
-  if (pj->primitives.rho > 0.) {
+  const float hidp1 = pow_dimension_plus_one(hi_inv);
+  const float hjdp1 = pow_dimension_plus_one(hj_inv);
+  const float wi_dr = hidp1 * wi_dx;
+  const float wj_dr = hjdp1 * wj_dx;
+  dvdr *= r_inv;
+  if (pj->primitives.rho > 0.)
     pi->force.h_dt -= pj->conserved.mass * dvdr / pj->primitives.rho * wi_dr;
-  }
-  if (mode == 1 && pi->primitives.rho > 0.) {
+  if (mode == 1 && pi->primitives.rho > 0.)
     pj->force.h_dt -= pi->conserved.mass * dvdr / pi->primitives.rho * wj_dr;
-  }
 
-  /* Compute area */
+  /* Compute (square of) area */
   /* eqn. (7) */
-  Anorm = 0.0f;
+  float Anorm2 = 0.0f;
+  float A[3];
   if (pi->density.wcorr > const_gizmo_min_wcorr &&
       pj->density.wcorr > const_gizmo_min_wcorr) {
     /* in principle, we use Vi and Vj as weights for the left and right
@@ -327,30 +322,31 @@ __attribute__((always_inline)) INLINE static void runner_iact_fluxes_common(
       Xj = Xi;
     }
 #endif
-    for (k = 0; k < 3; k++) {
+    for (int k = 0; k < 3; k++) {
       /* we add a minus sign since dx is pi->x - pj->x */
       A[k] = -Xi * (Bi[k][0] * dx[0] + Bi[k][1] * dx[1] + Bi[k][2] * dx[2]) *
                  wi * hi_inv_dim -
              Xj * (Bj[k][0] * dx[0] + Bj[k][1] * dx[1] + Bj[k][2] * dx[2]) *
                  wj * hj_inv_dim;
-      Anorm += A[k] * A[k];
+      Anorm2 += A[k] * A[k];
     }
   } else {
     /* ill condition gradient matrix: revert to SPH face area */
-    Anorm = -(hidp1 * Vi * Vi * wi_dx + hjdp1 * Vj * Vj * wj_dx) * ri;
+    const float Anorm =
+        -(hidp1 * Vi * Vi * wi_dx + hjdp1 * Vj * Vj * wj_dx) * r_inv;
     A[0] = -Anorm * dx[0];
     A[1] = -Anorm * dx[1];
     A[2] = -Anorm * dx[2];
-    Anorm *= Anorm * r2;
+    Anorm2 = Anorm * Anorm * r2;
   }
 
-  if (Anorm == 0.f) {
-    /* if the interface has no area, nothing happens and we return */
-    /* continuing results in dividing by zero and NaN's... */
-    return;
-  }
+  /* if the interface has no area, nothing happens and we return */
+  /* continuing results in dividing by zero and NaN's... */
+  if (Anorm2 == 0.f) return;
 
-  Anorm = sqrtf(Anorm);
+  /* Compute the area */
+  const float Anorm_inv = 1. / sqrtf(Anorm2);
+  const float Anorm = Anorm2 * Anorm_inv;
 
 #ifdef SWIFT_DEBUG_CHECKS
   /* For stability reasons, we do require A and dx to have opposite
@@ -358,29 +354,32 @@ __attribute__((always_inline)) INLINE static void runner_iact_fluxes_common(
      always points from particle i to particle j, as it would in a real
      moving-mesh code). If not, our scheme is no longer upwind and hence can
      become unstable. */
-  float dA_dot_dx = A[0] * dx[0] + A[1] * dx[1] + A[2] * dx[2];
+  const float dA_dot_dx = A[0] * dx[0] + A[1] * dx[1] + A[2] * dx[2];
   /* In GIZMO, Phil Hopkins reverts to an SPH integration scheme if this
      happens. We curently just ignore this case and display a message. */
   const float rdim = pow_dimension(r);
-  if (dA_dot_dx > 1.e-6 * rdim) {
+  if (dA_dot_dx > 1.e-6f * rdim) {
     message("Ill conditioned gradient matrix (%g %g %g %g %g)!", dA_dot_dx,
             Anorm, Vi, Vj, r);
   }
 #endif
 
   /* compute the normal vector of the interface */
-  for (k = 0; k < 3; k++) n_unit[k] = A[k] / Anorm;
+  const float n_unit[3] = {A[0] * Anorm_inv, A[1] * Anorm_inv,
+                           A[2] * Anorm_inv};
 
   /* Compute interface position (relative to pi, since we don't need the actual
-   * position) */
-  /* eqn. (8) */
-  xfac = hi / (hi + hj);
-  for (k = 0; k < 3; k++) xij_i[k] = -xfac * dx[k];
+   * position) eqn. (8) */
+  const float xfac = -hi / (hi + hj);
+  const float xij_i[3] = {xfac * dx[0], xfac * dx[1], xfac * dx[2]};
 
   /* Compute interface velocity */
   /* eqn. (9) */
-  xijdotdx = xij_i[0] * dx[0] + xij_i[1] * dx[1] + xij_i[2] * dx[2];
-  for (k = 0; k < 3; k++) vij[k] = vi[k] + (vi[k] - vj[k]) * xijdotdx / r2;
+  float xijdotdx = xij_i[0] * dx[0] + xij_i[1] * dx[1] + xij_i[2] * dx[2];
+  xijdotdx *= r_inv * r_inv;
+  const float vij[3] = {vi[0] + (vi[0] - vj[0]) * xijdotdx,
+                        vi[1] + (vi[1] - vj[1]) * xijdotdx,
+                        vi[2] + (vi[2] - vj[2]) * xijdotdx};
 
   /* complete calculation of position of interface */
   /* NOTE: dx is not necessarily just pi->x - pj->x but can also contain
@@ -388,8 +387,7 @@ __attribute__((always_inline)) INLINE static void runner_iact_fluxes_common(
            we have to use xij w.r.t. the actual particle.
            => we need a separate xij for pi and pj... */
   /* tldr: we do not need the code below, but we do need the same code as above
-     but then
-     with i and j swapped */
+     but then with i and j swapped */
   //    for ( k = 0 ; k < 3 ; k++ )
   //      xij[k] += pi->x[k];
 
@@ -418,10 +416,10 @@ __attribute__((always_inline)) INLINE static void runner_iact_fluxes_common(
   totflux[4] *= Anorm;
 
   /* Store mass flux */
-  float mflux = totflux[0];
-  pi->gravity.mflux[0] += mflux * dx[0];
-  pi->gravity.mflux[1] += mflux * dx[1];
-  pi->gravity.mflux[2] += mflux * dx[2];
+  const float mflux_i = totflux[0];
+  pi->gravity.mflux[0] += mflux_i * dx[0];
+  pi->gravity.mflux[1] += mflux_i * dx[1];
+  pi->gravity.mflux[2] += mflux_i * dx[2];
 
   /* Update conserved variables */
   /* eqn. (16) */
@@ -432,13 +430,13 @@ __attribute__((always_inline)) INLINE static void runner_iact_fluxes_common(
   pi->conserved.flux.energy -= totflux[4];
 
 #ifndef GIZMO_TOTAL_ENERGY
-  float ekin = 0.5f * (pi->primitives.v[0] * pi->primitives.v[0] +
-                       pi->primitives.v[1] * pi->primitives.v[1] +
-                       pi->primitives.v[2] * pi->primitives.v[2]);
+  const float ekin_i = 0.5f * (pi->primitives.v[0] * pi->primitives.v[0] +
+                               pi->primitives.v[1] * pi->primitives.v[1] +
+                               pi->primitives.v[2] * pi->primitives.v[2]);
   pi->conserved.flux.energy += totflux[1] * pi->primitives.v[0];
   pi->conserved.flux.energy += totflux[2] * pi->primitives.v[1];
   pi->conserved.flux.energy += totflux[3] * pi->primitives.v[2];
-  pi->conserved.flux.energy -= totflux[0] * ekin;
+  pi->conserved.flux.energy -= totflux[0] * ekin_i;
 #endif
 
   /* Note that this used to be much more complicated in early implementations of
@@ -448,10 +446,10 @@ __attribute__((always_inline)) INLINE static void runner_iact_fluxes_common(
    * for the flux over the entire time step. */
   if (mode == 1) {
     /* Store mass flux */
-    mflux = totflux[0];
-    pj->gravity.mflux[0] -= mflux * dx[0];
-    pj->gravity.mflux[1] -= mflux * dx[1];
-    pj->gravity.mflux[2] -= mflux * dx[2];
+    const float mflux_j = totflux[0];
+    pj->gravity.mflux[0] -= mflux_j * dx[0];
+    pj->gravity.mflux[1] -= mflux_j * dx[1];
+    pj->gravity.mflux[2] -= mflux_j * dx[2];
 
     pj->conserved.flux.mass += totflux[0];
     pj->conserved.flux.momentum[0] += totflux[1];
@@ -460,13 +458,13 @@ __attribute__((always_inline)) INLINE static void runner_iact_fluxes_common(
     pj->conserved.flux.energy += totflux[4];
 
 #ifndef GIZMO_TOTAL_ENERGY
-    ekin = 0.5f * (pj->primitives.v[0] * pj->primitives.v[0] +
-                   pj->primitives.v[1] * pj->primitives.v[1] +
-                   pj->primitives.v[2] * pj->primitives.v[2]);
+    const float ekin_j = 0.5f * (pj->primitives.v[0] * pj->primitives.v[0] +
+				 pj->primitives.v[1] * pj->primitives.v[1] +
+				 pj->primitives.v[2] * pj->primitives.v[2]);
     pj->conserved.flux.energy -= totflux[1] * pj->primitives.v[0];
     pj->conserved.flux.energy -= totflux[2] * pj->primitives.v[1];
     pj->conserved.flux.energy -= totflux[3] * pj->primitives.v[2];
-    pj->conserved.flux.energy += totflux[0] * ekin;
+    pj->conserved.flux.energy += totflux[0] * ekin_j;
 #endif
   }
 }
diff --git a/src/hydro/Gizmo/hydro_slope_limiters_face.h b/src/hydro/Gizmo/hydro_slope_limiters_face.h
index 5a955217ee9e5b9efe876b1be2dc78d7f0262fb1..b5ebcc5eab8ad515c791686e1c72b3eafe1db2be 100644
--- a/src/hydro/Gizmo/hydro_slope_limiters_face.h
+++ b/src/hydro/Gizmo/hydro_slope_limiters_face.h
@@ -88,7 +88,7 @@ hydro_slope_limit_face_quantity(float phi_i, float phi_j, float phi_mid0,
  * @param r Distance between particle i and particle j.
  */
 __attribute__((always_inline)) INLINE static void hydro_slope_limit_face(
-    float *Wi, float *Wj, float *dWi, float *dWj, float *xij_i, float *xij_j,
+    float *Wi, float *Wj, float *dWi, float *dWj, const float *xij_i, const float *xij_j,
     float r) {
 
   const float xij_i_norm =
diff --git a/src/riemann/riemann_exact.h b/src/riemann/riemann_exact.h
index 4a7b40ae78c4c3f1a880539367172894fe298995..9081eb31060ee20ef0dada0621b9bc71fad4db08 100644
--- a/src/riemann/riemann_exact.h
+++ b/src/riemann/riemann_exact.h
@@ -47,14 +47,14 @@
  * @param W The left or right state vector
  * @param a The left or right sound speed
  */
-__attribute__((always_inline)) INLINE static float riemann_fb(float p, float* W,
+__attribute__((always_inline)) INLINE static float riemann_fb(float p,
+                                                              const float* W,
                                                               float a) {
 
-  float fval = 0.;
-  float A, B;
+  float fval;
   if (p > W[4]) {
-    A = hydro_two_over_gamma_plus_one / W[0];
-    B = hydro_gamma_minus_one_over_gamma_plus_one * W[4];
+    const float A = hydro_two_over_gamma_plus_one / W[0];
+    const float B = hydro_gamma_minus_one_over_gamma_plus_one * W[4];
     fval = (p - W[4]) * sqrtf(A / (p + B));
   } else {
     fval = hydro_two_over_gamma_minus_one * a *
@@ -75,7 +75,8 @@ __attribute__((always_inline)) INLINE static float riemann_fb(float p, float* W,
  * @param aR The right sound speed
  */
 __attribute__((always_inline)) INLINE static float riemann_f(
-    float p, float* WL, float* WR, float vL, float vR, float aL, float aR) {
+    float p, const float* WL, const float* WR, float vL, float vR, float aL,
+    float aR) {
 
   return riemann_fb(p, WL, aL) + riemann_fb(p, WR, aR) + (vR - vL);
 }
@@ -87,15 +88,13 @@ __attribute__((always_inline)) INLINE static float riemann_f(
  * @param W The left or right state vector
  * @param a The left or right sound speed
  */
-__attribute__((always_inline)) INLINE static float riemann_fprimeb(float p,
-                                                                   float* W,
-                                                                   float a) {
+__attribute__((always_inline)) INLINE static float riemann_fprimeb(
+    float p, const float* W, float a) {
 
-  float fval = 0.;
-  float A, B;
+  float fval;
   if (p > W[4]) {
-    A = hydro_two_over_gamma_plus_one / W[0];
-    B = hydro_gamma_minus_one_over_gamma_plus_one * W[4];
+    const float A = hydro_two_over_gamma_plus_one / W[0];
+    const float B = hydro_gamma_minus_one_over_gamma_plus_one * W[4];
     fval = (1.0f - 0.5f * (p - W[4]) / (B + p)) * sqrtf(A / (p + B));
   } else {
     fval = 1.0f / W[0] / a * pow_minus_gamma_plus_one_over_two_gamma(p / W[4]);
@@ -113,7 +112,7 @@ __attribute__((always_inline)) INLINE static float riemann_fprimeb(float p,
  * @param aR The right sound speed
  */
 __attribute__((always_inline)) INLINE static float riemann_fprime(
-    float p, float* WL, float* WR, float aL, float aR) {
+    float p, const float* WL, const float* WR, float aL, float aR) {
 
   return riemann_fprimeb(p, WL, aL) + riemann_fprimeb(p, WR, aR);
 }
@@ -125,11 +124,10 @@ __attribute__((always_inline)) INLINE static float riemann_fprime(
  * @param W The left or right state vector
  */
 __attribute__((always_inline)) INLINE static float riemann_gb(float p,
-                                                              float* W) {
+                                                              const float* W) {
 
-  float A, B;
-  A = hydro_two_over_gamma_plus_one / W[0];
-  B = hydro_gamma_minus_one_over_gamma_plus_one * W[4];
+  const float A = hydro_two_over_gamma_plus_one / W[0];
+  const float B = hydro_gamma_minus_one_over_gamma_plus_one * W[4];
   return sqrtf(A / (p + B));
 }
 
@@ -147,7 +145,7 @@ __attribute__((always_inline)) INLINE static float riemann_gb(float p,
  * @param aR The right sound speed
  */
 __attribute__((always_inline)) INLINE static float riemann_guess_p(
-    float* WL, float* WR, float vL, float vR, float aL, float aR) {
+    const float* WL, const float* WR, float vL, float vR, float aL, float aR) {
 
   float pguess, pmin, pmax, qmax;
   float ppv;
@@ -199,8 +197,8 @@ __attribute__((always_inline)) INLINE static float riemann_guess_p(
  */
 __attribute__((always_inline)) INLINE static float riemann_solve_brent(
     float lower_limit, float upper_limit, float lowf, float upf,
-    float error_tol, float* WL, float* WR, float vL, float vR, float aL,
-    float aR) {
+    float error_tol, const float* WL, const float* WR, float vL, float vR,
+    float aL, float aR) {
 
   float a, b, c, d, s;
   float fa, fb, fc, fs;
@@ -306,7 +304,7 @@ __attribute__((always_inline)) INLINE static float riemann_solve_brent(
  * @param n_unit Normal vector of the interface
  */
 __attribute__((always_inline)) INLINE static void riemann_solver_solve(
-    float* WL, float* WR, float* Whalf, float* n_unit) {
+    const float* WL, const float* WR, float* Whalf, const float* n_unit) {
 
   /* velocity of the left and right state in a frame aligned with n_unit */
   float vL, vR, vhalf;
@@ -510,7 +508,8 @@ __attribute__((always_inline)) INLINE static void riemann_solver_solve(
 }
 
 __attribute__((always_inline)) INLINE static void riemann_solve_for_flux(
-    float* Wi, float* Wj, float* n_unit, float* vij, float* totflux) {
+    const float* Wi, const float* Wj, const float* n_unit, const float* vij,
+    float* totflux) {
 
   float Whalf[5];
   float flux[5][3];
diff --git a/src/riemann/riemann_hllc.h b/src/riemann/riemann_hllc.h
index 1cdc4e809cf4cfc6865a1e0cbb75f709056f7c64..2578db44aa0fabb9f2d238abea497a2f0a6be71f 100644
--- a/src/riemann/riemann_hllc.h
+++ b/src/riemann/riemann_hllc.h
@@ -38,7 +38,8 @@
 #endif
 
 __attribute__((always_inline)) INLINE static void riemann_solve_for_flux(
-    float *WL, float *WR, float *n, float *vij, float *totflux) {
+    const float *WL, const float *WR, const float *n, const float *vij,
+    float *totflux) {
 
   /* Handle pure vacuum */
   if (!WL[0] && !WR[0]) {
diff --git a/src/riemann/riemann_trrs.h b/src/riemann/riemann_trrs.h
index 44fbe6ffb8fb1f557045b6e466c87e7d8b591aab..e5605ab7d09700b8a79792cb552d6ef52569c7b5 100644
--- a/src/riemann/riemann_trrs.h
+++ b/src/riemann/riemann_trrs.h
@@ -52,7 +52,7 @@
  * @param n_unit Normal vector of the interface
  */
 __attribute__((always_inline)) INLINE static void riemann_solver_solve(
-    float* WL, float* WR, float* Whalf, float* n_unit) {
+    const float* WL, const float* WR, float* Whalf, const float* n_unit) {
   float aL, aR;
   float PLR;
   float vL, vR;
@@ -160,7 +160,8 @@ __attribute__((always_inline)) INLINE static void riemann_solver_solve(
 }
 
 __attribute__((always_inline)) INLINE static void riemann_solve_for_flux(
-    float* Wi, float* Wj, float* n_unit, float* vij, float* totflux) {
+    const float* Wi, const float* Wj, const float* n_unit, const float* vij,
+    float* totflux) {
 
   float Whalf[5];
   float flux[5][3];
diff --git a/src/riemann/riemann_vacuum.h b/src/riemann/riemann_vacuum.h
index ace1b672e42e797cd2125bc27d8d35232ecd45dc..c1144a2557889df20ece7dea6918af804ee03232 100644
--- a/src/riemann/riemann_vacuum.h
+++ b/src/riemann/riemann_vacuum.h
@@ -24,7 +24,7 @@
  * @brief Check if the given input states are vacuum or will generate vacuum
  */
 __attribute__((always_inline)) INLINE static int riemann_is_vacuum(
-    float* WL, float* WR, float vL, float vR, float aL, float aR) {
+    const float* WL, const float* WR, float vL, float vR, float aL, float aR) {
 
   /* vacuum */
   if (!WL[0] || !WR[0]) return 1;
@@ -53,8 +53,8 @@ __attribute__((always_inline)) INLINE static int riemann_is_vacuum(
  * @param n_unit Normal vector of the interface
  */
 __attribute__((always_inline)) INLINE static void riemann_solve_vacuum(
-    float* WL, float* WR, float vL, float vR, float aL, float aR, float* Whalf,
-    float* n_unit) {
+    const float* WL, const float* WR, float vL, float vR, float aL, float aR,
+    float* Whalf, const float* n_unit) {
 
   float SL, SR;
   float vhalf;
@@ -202,8 +202,8 @@ __attribute__((always_inline)) INLINE static void riemann_solve_vacuum(
  * @brief Solve the vacuum Riemann problem and return the fluxes
  */
 __attribute__((always_inline)) INLINE static void riemann_solve_vacuum_flux(
-    float* WL, float* WR, float vL, float vR, float aL, float aR, float* n_unit,
-    float* vij, float* totflux) {
+    const float* WL, const float* WR, float vL, float vR, float aL, float aR,
+    const float* n_unit, const float* vij, float* totflux) {
 
   float Whalf[5];
   float flux[5][3];