diff --git a/src/kernel_hydro.h b/src/kernel_hydro.h
index 4859747c7e5b19e89a90daed390d39e28d0e6ec6..8853081ae42d91f623551206175ca1165db04bd6 100644
--- a/src/kernel_hydro.h
+++ b/src/kernel_hydro.h
@@ -26,8 +26,7 @@
 #include "inline.h"
 #include "vector.h"
 
-
-/* ----------------------------------------------------------------------------- */
+/* ------------------------------------------------------------------------- */
 #if defined(CUBIC_SPLINE_KERNEL)
 
 /* Coefficients for the kernel. */
@@ -36,13 +35,50 @@
 #define kernel_ivals 2
 #define kernel_gamma 1.825742
 #define kernel_constant 16. * M_1_PI
+static float kernel_coeffs[(kernel_degree + 1) * (kernel_ivals + 1)]
+    __attribute__((aligned(16))) = {3.f,  -3.f, 0.f,  0.5f, /* 0 < u < 0.5 */
+                                    -1.f, 3.f,  -3.f, 1.f,  /* 0.5 < u < 1 */
+                                    0.f,  0.f,  0.f,  0.f}; /* 1 < u */
+
+/* ------------------------------------------------------------------------- */
+#elif defined(QUARTIC_SPLINE_KERNEL)
+
+/* Coefficients for the kernel. */
+#define kernel_name "Quartic spline (M5)"
+#define kernel_degree 4
+#define kernel_ivals 5
+#define kernel_gamma 2.018932
+#define kernel_constant 15625. * M_1_PI / 512.
 static float kernel_coeffs[(kernel_degree + 1) * (kernel_ivals + 1)]
     __attribute__((aligned(16))) = {
-        +48.f * M_1_PI, -48.f * M_1_PI, 0.f,            +8.f * M_1_PI,
-        -16.f * M_1_PI, +48.f * M_1_PI, -48.f * M_1_PI, +16.f * M_1_PI,
-        0.f,            0.f,            0.f,            0.f};
+        6.f,  0.f,  -2.4f, 0.f,   0.368f, /* 0 < u < 0.2 */
+        -4.f, 8.f,  -4.8f, 0.32f, 0.352f, /* 0.2 < u < 0.4 */
+        -4.f, 8.f,  -4.8f, 0.32f, 0.352f, /* 0.4 < u < 0.6 */
+        1.f,  -4.f, 6.f,   -4.f,  1.f,    /* 0.6 < u < 0.8 */
+        1.f,  -4.f, 6.f,   -4.f,  1.f,    /* 0.8 < u < 1 */
+        0.f,  0.f,  0.f,   0.f,   0.f};   /* 1 < u */
+
+/* ------------------------------------------------------------------------- */
+#elif defined(QUINTIC_SPLINE_KERNEL)
 
-/* ----------------------------------------------------------------------------- */
+/* Coefficients for the kernel. */
+#define kernel_name "Quintic spline (M6)"
+#define kernel_degree 5
+#define kernel_ivals 3
+#define kernel_gamma 2.195775
+#define kernel_constant 2187. * M_1_PI / 40.
+static float kernel_coeffs[(kernel_degree + 1) * (kernel_ivals + 1)]
+    __attribute__((aligned(16))) = {
+        -10.f,        10.f,      0.f,
+        -2.2222222f,  0.f,       0.271604938f, /* 0 < u < 1/3 */
+        5.f,          -15.f,     16.666667f,
+        -7.77777777f, 0.925925f, 0.209876543f, /* 1/3 < u < 2/3 */
+        -1.f,         5.f,       -10.f,
+        10.f,         -5.f,      1.f, /* 2/3 < u < 1. */
+        0.f,          0.f,       0.f,
+        0.f,          0.f,       0.f}; /* 1 < u */
+
+/* ------------------------------------------------------------------------- */
 #elif defined(WENDLAND_C2_KERNEL)
 
 /* Coefficients for the kernel. */
@@ -50,18 +86,50 @@ static float kernel_coeffs[(kernel_degree + 1) * (kernel_ivals + 1)]
 #define kernel_degree 5
 #define kernel_ivals 1
 #define kernel_gamma 1.936492
-#define kernel_constant 10.5 * M_1_PI
+#define kernel_constant 21. * M_1_PI / 2.
+static float kernel_coeffs[(kernel_degree + 1) * (kernel_ivals + 1)]
+    __attribute__((aligned(16))) = {
+        4.f, -15.f, 20.f, -10.f, 1.f,  /* 0 < u < 1 */
+        0.f, 0.f,   0.f,  0.f,   0.f}; /* 1 < u */
+
+/* ------------------------------------------------------------------------- */
+#elif defined(WENDLAND_C4_KERNEL)
+
+/* Coefficients for the kernel. */
+#define kernel_name "Wendland C4"
+#define kernel_degree 8
+#define kernel_ivals 1
+#define kernel_gamma 2.207940
+#define kernel_constant 495. * M_1_PI / 32.
+static float kernel_coeffs[(kernel_degree + 1) * (kernel_ivals + 1)]
+    __attribute__((aligned(16))) = {
+        11.666667f, -64.f,       140.f, -149.333333f, 70.f,
+        0.f,        -9.3333333f, 0.f,   1.f, /* 0 < u < 1 */
+        0.f,        0.f,         0.f,   0.f,          0.f,
+        0.f,        0.f,         0.f,   0.f}; /* 1 < u */
+
+/* ------------------------------------------------------------------------- */
+#elif defined(WENDLAND_C6_KERNEL)
+
+/* Coefficients for the kernel. */
+#define kernel_name "Wendland C6"
+#define kernel_degree 11
+#define kernel_ivals 1
+#define kernel_gamma 2.449490
+#define kernel_constant 1365. * M_1_PI / 64.
 static float kernel_coeffs[(kernel_degree + 1) * (kernel_ivals + 1)]
     __attribute__((aligned(16))) = {
-        42.f * M_1_PI, -157.5f * M_1_PI, 210.f * M_1_PI, -105.f * M_1_PI,
-        0.f,           10.5f * M_1_PI,   0.f,            0.f,
-        0.f,           0.f,              0.f,            0.f};
+        32.f, -231.f, 704.f, -1155.f, 1056.f, -462.f,
+        0.f,  66.f,   0.f,   -11.f,   0.f,    1.f, /* 0 < u < 1 */
+        0.f,  0.f,    0.f,   0.f,     0.f,    0.f,
+        0.f,  0.f,    0.f,   0.f,     0.f,    0.f}; /* 1 < u */
 
-/* ----------------------------------------------------------------------------- */
+/* ------------------------------------------------------------------------- */
 #else
 
 #error "A kernel function must be chosen in const.h !!"
 
+/* ------------------------------------------------------------------------- */
 #endif
 
 /* Ok, now comes the real deal. */
@@ -82,7 +150,8 @@ static float kernel_coeffs[(kernel_degree + 1) * (kernel_ivals + 1)]
 #define kernel_nwneigh 4.0 * M_PI *kernel_gamma3 *kernel_eta3 / 3.0
 
 /* Kernel self contribution (i.e. W(0,h)) */
-#define kernel_root (kernel_coeffs[kernel_degree]) * kernel_igamma3
+#define kernel_root \
+  (kernel_coeffs[kernel_degree]) * kernel_constant *kernel_igamma3
 
 /**
  * @brief Computes the kernel function and its derivative.
@@ -97,7 +166,7 @@ __attribute__((always_inline)) INLINE static void kernel_deval(
     float u, float *const W, float *const dW_dx) {
 
   /* Go to the range [0,1[ from [0,H[ */
-  const float x = u * kernel_igamma;
+  const float x = u * (float)kernel_igamma;
 
   /* Pick the correct branch of the kernel */
   const int ind = (int)fminf(x * (float)kernel_ivals, kernel_ivals);
@@ -114,8 +183,8 @@ __attribute__((always_inline)) INLINE static void kernel_deval(
   }
 
   /* Return everything */
-  *W = w * kernel_igamma3;
-  *dW_dx = dw_dx * kernel_igamma4;
+  *W = w * (float)kernel_constant * (float)kernel_igamma3;
+  *dW_dx = dw_dx * (float)kernel_constant * (float)kernel_igamma4;
 }
 
 /**
diff --git a/tests/test27cells.c b/tests/test27cells.c
index 74c38996a81056b10633bf2bbf18cc7cff7e8f0d..5f32aca3a459167a73361abb5c25e74df5037094 100644
--- a/tests/test27cells.c
+++ b/tests/test27cells.c
@@ -61,12 +61,12 @@ struct cell *make_cell(size_t n, double *offset, double size, double h,
         part->x[2] =
             offset[2] +
             size * (z + 0.5 + random_uniform(-0.5, 0.5) * pert) / (float)n;
-        // part->v[0] = part->x[0] - 1.5;
-        // part->v[1] = part->x[1] - 1.5;
-        // part->v[2] = part->x[2] - 1.5;
-        part->v[0] = random_uniform(-0.05, 0.05);
-        part->v[1] = random_uniform(-0.05, 0.05);
-        part->v[2] = random_uniform(-0.05, 0.05);
+        part->v[0] = part->x[0] - 1.5;
+        part->v[1] = part->x[1] - 1.5;
+        part->v[2] = part->x[2] - 1.5;
+        //part->v[0] = random_uniform(-0.05, 0.05);
+        //part->v[1] = random_uniform(-0.05, 0.05);
+        //part->v[2] = random_uniform(-0.05, 0.05);
         part->h = size * h / (float)n;
         part->id = ++(*partId);
         part->mass = density * volume / count;
@@ -209,7 +209,7 @@ void runner_doself1_density(struct runner *r, struct cell *ci);
 int main(int argc, char *argv[]) {
 
   size_t runs = 0, particles = 0;
-  double h = 1.12575, size = 1., rho = 1.;
+  double h = 1.2348, size = 1., rho = 1.;
   double perturbation = 0.;
   char outputFileNameExtension[200] = "";
   char outputFileName[200] = "";
@@ -257,7 +257,7 @@ int main(int argc, char *argv[]) {
         "\nGenerates a cell pair, filled with particles on a Cartesian grid."
         "\nThese are then interacted using runner_dopair1_density."
         "\n\nOptions:"
-        "\n-h DISTANCE=1.1255 - Smoothing length"
+        "\n-h DISTANCE=1.2348 - Smoothing length in units of <x>"
         "\n-m rho             - Physical density in the cell"
         "\n-s size            - Physical size of the cell"
         "\n-d pert            - Perturbation to apply to the particles [0,1["
@@ -268,6 +268,7 @@ int main(int argc, char *argv[]) {
 
   /* Help users... */
   message("Smoothing length: h = %f", h);
+  message("Kernel          : %s", kernel_name);
   message("Neighbour target: N = %f", kernel_nwneigh);
 
   /* Build the infrastructure */