diff --git a/examples/Makefile.am b/examples/Makefile.am
index 15fceb236057d21ba878cb09da39aca5bb70b692..735817c24cc52786e4c562e46e3619fb4a9a2e34 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -1,4 +1,3 @@
-
 # This file is part of SWIFT.
 # Copyright (c) 2012 Pedro Gonnet (pedro.gonnet@durham.ac.uk),
 #                    Matthieu Schaller (matthieu.schaller@durham.ac.uk).
diff --git a/examples/main.c b/examples/main.c
index 6422ccceef0a5f5c5f3b5acce9ba60b957986aac..fa0ac2567ac253568903ce8c47b2c9c38fee3704 100644
--- a/examples/main.c
+++ b/examples/main.c
@@ -93,7 +93,6 @@ void print_help_message() {
  * @brief Main routine that loads a few particles and generates some output.
  *
  */
-
 int main(int argc, char *argv[]) {
 
   struct clocks_time tic, toc;
@@ -482,10 +481,8 @@ int main(int argc, char *argv[]) {
     if (j % 100 == 2) e.forcerepart = reparttype;
 #endif
 
+    /* Reset timers */
     timers_reset(timers_mask_all);
-#ifdef COUNTER
-    for (k = 0; k < runner_counter_count; k++) runner_counter[k] = 0;
-#endif
 
     /* Take a step. */
     engine_step(&e);
diff --git a/src/approx_math.h b/src/approx_math.h
index ef93ea63c383c74caa3eaff65446962872389a35..cbca602b3fafcc5044b0939b2207b8f9d50a7446 100644
--- a/src/approx_math.h
+++ b/src/approx_math.h
@@ -19,6 +19,8 @@
 #ifndef SWIFT_APPROX_MATH_H
 #define SWIFT_APPROX_MATH_H
 
+#include "inline.h"
+
 /**
  * @brief Approximate version of expf(x) using a 4th order Taylor expansion
  *
diff --git a/src/cell.h b/src/cell.h
index 65665c9dcfcd652cc688f652008044d618b10790..ebdfc8ec5d13ce6867159b6ff8bc3c62d065adc6 100644
--- a/src/cell.h
+++ b/src/cell.h
@@ -26,7 +26,6 @@
 /* Includes. */
 #include "lock.h"
 #include "multipole.h"
-#include "part.h"
 
 /* Forward declaration of space, needed for cell_unpack. */
 struct space;
diff --git a/src/common_io.c b/src/common_io.c
index 4399c83f7ebd2bb5355b7df9cc1fdecd301e36aa..03d5618cd0cafe5ff6067cf72107baacffb5d85a 100644
--- a/src/common_io.c
+++ b/src/common_io.c
@@ -43,6 +43,8 @@
 #include "const.h"
 #include "error.h"
 #include "kernel_hydro.h"
+#include "part.h"
+#include "units.h"
 #include "version.h"
 
 const char* particle_type_names[NUM_PARTICLE_TYPES] = {
diff --git a/src/common_io.h b/src/common_io.h
index ed1c96801c904d9952c7b3ca995b847afdc3fb43..08b4e4f22dd79a1a1f9accfb27eecbbb22a347a1 100644
--- a/src/common_io.h
+++ b/src/common_io.h
@@ -23,13 +23,13 @@
 /* Config parameters. */
 #include "../config.h"
 
-/* Includes. */
-#include "kernel_hydro.h"
-#include "part.h"
-#include "units.h"
-
 #if defined(HAVE_HDF5)
 
+/* Forward-declare stuff to avoid cyclic includes. */
+struct UnitSystem;
+struct part;
+struct gpart;
+
 /**
  * @brief The different types of data used in the GADGET IC files.
  *
diff --git a/src/debug.c b/src/debug.c
index a3647915d96a9456cb6d8177d144dab56fd0b97e..77238ab135e3f27b8c2c43b0ec18e7745493b138 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -20,11 +20,19 @@
  *
  ******************************************************************************/
 
+/* Config parameters. */
+#include "../config.h"
+
+/* Some standard headers. */
 #include <stdio.h>
 
+/* This object's header. */
+#include "debug.h"
+
+/* Local includes. */
 #include "config.h"
 #include "const.h"
-#include "debug.h"
+#include "inline.h"
 #include "part.h"
 
 /* Import the right hydro definition */
@@ -51,7 +59,6 @@
  *
  * (Should be used for debugging only as it runs in O(N).)
  */
-
 void printParticle(struct part *parts, struct xpart *xparts, long long int id,
                    size_t N) {
 
@@ -69,6 +76,17 @@ void printParticle(struct part *parts, struct xpart *xparts, long long int id,
   if (!found) printf("## Particles[???] id=%lld not found\n", id);
 }
 
+/**
+ * @brief Looks for the g-particle with the given id and prints its information
+ * to
+ * the standard output.
+ *
+ * @param gparts The array of g-particles.
+ * @param id The id too look for.
+ * @param N The size of the array of g-particles.
+ *
+ * (Should be used for debugging only as it runs in O(N).)
+ */
 void printgParticle(struct gpart *gparts, long long int id, size_t N) {
 
   int found = 0;
@@ -95,9 +113,7 @@ void printgParticle(struct gpart *gparts, long long int id, size_t N) {
  *
  * @param p The particle to print
  * @param xp The extended data ot the particle to print
- *
  */
-
 void printParticle_single(struct part *p, struct xpart *xp) {
 
   printf("## Particle: id=%lld ", p->id);
@@ -105,6 +121,18 @@ void printParticle_single(struct part *p, struct xpart *xp) {
   printf("\n");
 }
 
+/**
+ * @brief Prints the details of a given particle to stdout
+ *
+ * @param gp The g-particle to print
+ */
+void printgParticle_single(struct gpart *gp) {
+
+  printf("## g-Particle: id=%lld ", gp->id);
+  gravity_debug_particle(gp);
+  printf("\n");
+}
+
 #ifdef HAVE_METIS
 
 /**
diff --git a/src/debug.h b/src/debug.h
index fba5cb68680472715025f9fee39a5bf06abacf81..13be15adb867e8bafe95e2900f68caaa36192510 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -19,14 +19,15 @@
 #ifndef SWIFT_DEBUG_H
 #define SWIFT_DEBUG_H
 
-/* Includes. */
-#include "cell.h"
-#include "part.h"
+struct part;
+struct gpart;
+struct xpart;
 
 void printParticle(struct part *parts, struct xpart *xparts, long long int id,
                    size_t N);
 void printgParticle(struct gpart *parts, long long int id, size_t N);
 void printParticle_single(struct part *p, struct xpart *xp);
+void printgParticle_single(struct gpart *gp);
 
 #ifdef HAVE_METIS
 #include "metis.h"
diff --git a/src/engine.c b/src/engine.c
index aa65f45678fae1e21276422b69f1c76cd7e9eaef..bc2bf839c9a8108bbedaa7de1f9b138348374ffa 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -59,9 +59,12 @@
 #include "parallel_io.h"
 #include "part.h"
 #include "partition.h"
+#include "proxy.h"
+#include "runner.h"
 #include "serial_io.h"
 #include "single_io.h"
 #include "timers.h"
+#include "units.h"
 
 const char *engine_policy_names[13] = {"none",
                                        "rand",
diff --git a/src/engine.h b/src/engine.h
index 6c17de54ba62a95c4a5feb3c126390a5b5877d05..1c6e4d79b5027eb51efbf670c080d971f19ab924 100644
--- a/src/engine.h
+++ b/src/engine.h
@@ -37,18 +37,9 @@
 #include <stdio.h>
 
 /* Includes. */
-#include "hydro_properties.h"
-#include "lock.h"
-#include "parser.h"
+#include "clocks.h"
 #include "partition.h"
-#include "physical_constants.h"
-#include "potentials.h"
-#include "proxy.h"
-#include "runner.h"
 #include "scheduler.h"
-#include "space.h"
-#include "task.h"
-#include "units.h"
 
 /* Some constants. */
 enum engine_policy {
diff --git a/src/hydro/Default/hydro_iact.h b/src/hydro/Default/hydro_iact.h
index 4d651b61bd934388414d54fa813820111d26e682..0a577931b5e0ca67ab07dfe414a548da66e82cdd 100644
--- a/src/hydro/Default/hydro_iact.h
+++ b/src/hydro/Default/hydro_iact.h
@@ -20,12 +20,6 @@
 #ifndef SWIFT_RUNNER_IACT_H
 #define SWIFT_RUNNER_IACT_H
 
-/* Includes. */
-#include "const.h"
-#include "kernel_hydro.h"
-#include "part.h"
-#include "vector.h"
-
 /**
  * @brief SPH interaction functions following the Gadget-2 version of SPH.
  *
@@ -44,7 +38,6 @@
 /**
  * @brief Density loop
  */
-
 __attribute__((always_inline)) INLINE static void runner_iact_density(
     float r2, float *dx, float hi, float hj, struct part *pi, struct part *pj) {
 
@@ -218,7 +211,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_vec_density(
 /**
  * @brief Density loop (non-symmetric version)
  */
-
 __attribute__((always_inline)) INLINE static void runner_iact_nonsym_density(
     float r2, float *dx, float hi, float hj, struct part *pi, struct part *pj) {
 
@@ -267,7 +259,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_nonsym_density(
 /**
  * @brief Density loop (non-symmetric vectorized version)
  */
-
 __attribute__((always_inline)) INLINE static void
 runner_iact_nonsym_vec_density(float *R2, float *Dx, float *Hi, float *Hj,
                                struct part **pi, struct part **pj) {
@@ -360,7 +351,6 @@ runner_iact_nonsym_vec_density(float *R2, float *Dx, float *Hi, float *Hj,
 /**
  * @brief Force loop
  */
-
 __attribute__((always_inline)) INLINE static void runner_iact_force(
     float r2, float *dx, float hi, float hj, struct part *pi, struct part *pj) {
 
@@ -456,7 +446,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_force(
 /**
  * @brief Force loop (Vectorized version)
  */
-
 __attribute__((always_inline)) INLINE static void runner_iact_vec_force(
     float *R2, float *Dx, float *Hi, float *Hj, struct part **pi,
     struct part **pj) {
@@ -675,7 +664,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_vec_force(
 /**
  * @brief Force loop (non-symmetric version)
  */
-
 __attribute__((always_inline)) INLINE static void runner_iact_nonsym_force(
     float r2, float *dx, float hi, float hj, struct part *pi, struct part *pj) {
 
@@ -766,7 +754,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_nonsym_force(
 /**
  * @brief Force loop (Vectorized non-symmetric version)
  */
-
 __attribute__((always_inline)) INLINE static void runner_iact_nonsym_vec_force(
     float *R2, float *Dx, float *Hi, float *Hj, struct part **pi,
     struct part **pj) {
diff --git a/src/hydro/Gadget2/hydro_iact.h b/src/hydro/Gadget2/hydro_iact.h
index 8fcae293280e55bb838edf3c243f4e322914216f..8738b4be09931df4c938f1dff3adeed11468dcfc 100644
--- a/src/hydro/Gadget2/hydro_iact.h
+++ b/src/hydro/Gadget2/hydro_iact.h
@@ -20,12 +20,6 @@
 #ifndef SWIFT_RUNNER_IACT_LEGACY_H
 #define SWIFT_RUNNER_IACT_LEGACY_H
 
-/* Includes. */
-#include "const.h"
-#include "kernel_hydro.h"
-#include "part.h"
-#include "vector.h"
-
 /**
  * @brief SPH interaction functions following the Gadget-2 version of SPH.
  *
@@ -42,7 +36,6 @@
 /**
  * @brief Density loop
  */
-
 __attribute__((always_inline)) INLINE static void runner_iact_density(
     float r2, float *dx, float hi, float hj, struct part *pi, struct part *pj) {
 
@@ -113,7 +106,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_density(
 /**
  * @brief Density loop (non-symmetric version)
  */
-
 __attribute__((always_inline)) INLINE static void runner_iact_nonsym_density(
     float r2, float *dx, float hi, float hj, struct part *pi, struct part *pj) {
 
@@ -162,7 +154,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_nonsym_density(
 /**
  * @brief Force loop
  */
-
 __attribute__((always_inline)) INLINE static void runner_iact_force(
     float r2, float *dx, float hi, float hj, struct part *pi, struct part *pj) {
 
@@ -260,7 +251,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_force(
 /**
  * @brief Force loop (non-symmetric version)
  */
-
 __attribute__((always_inline)) INLINE static void runner_iact_nonsym_force(
     float r2, float *dx, float hi, float hj, struct part *pi, struct part *pj) {
 
diff --git a/src/hydro/Minimal/hydro_iact.h b/src/hydro/Minimal/hydro_iact.h
index f453d8fa1c495472af27ccf98356a3dab0894e98..c9da185b8a29eafe2a58420ae5de3a05ff043225 100644
--- a/src/hydro/Minimal/hydro_iact.h
+++ b/src/hydro/Minimal/hydro_iact.h
@@ -19,12 +19,6 @@
 #ifndef SWIFT_RUNNER_IACT_MINIMAL_H
 #define SWIFT_RUNNER_IACT_MINIMAL_H
 
-/* Includes. */
-#include "const.h"
-#include "kernel_hydro.h"
-#include "part.h"
-#include "vector.h"
-
 /**
  * @brief Minimal conservative implementation of SPH
  *
@@ -70,7 +64,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_density(
 /**
  * @brief Density loop (non-symmetric version)
  */
-
 __attribute__((always_inline)) INLINE static void runner_iact_nonsym_density(
     float r2, float *dx, float hi, float hj, struct part *pi, struct part *pj) {
 
@@ -95,7 +88,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_nonsym_density(
 /**
  * @brief Force loop
  */
-
 __attribute__((always_inline)) INLINE static void runner_iact_force(
     float r2, float *dx, float hi, float hj, struct part *pi, struct part *pj) {
 
@@ -168,7 +160,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_force(
 /**
  * @brief Force loop (non-symmetric version)
  */
-
 __attribute__((always_inline)) INLINE static void runner_iact_nonsym_force(
     float r2, float *dx, float hi, float hj, struct part *pi, struct part *pj) {
 
diff --git a/src/lock.h b/src/lock.h
index 5eb97de15f81d17bad45e85226cb0881d24482ba..ca7f01ee029cd1c57ed8fd0f3237ea54cb43e9a7 100644
--- a/src/lock.h
+++ b/src/lock.h
@@ -24,7 +24,6 @@
 
 /* Includes. */
 #include "atomic.h"
-#include "inline.h"
 
 #ifdef PTHREAD_SPINLOCK
 #include <pthread.h>
diff --git a/src/parallel_io.c b/src/parallel_io.c
index e779b56a85da3db72ea860fb336fa42037fbcd0e..c5cac1cb5efc6e533e599867e39cdd7c7b2c87fa 100644
--- a/src/parallel_io.c
+++ b/src/parallel_io.c
@@ -37,7 +37,11 @@
 
 /* Local includes. */
 #include "common_io.h"
+#include "engine.h"
 #include "error.h"
+#include "kernel_hydro.h"
+#include "part.h"
+#include "units.h"
 
 /**
  * @brief Reads a data array from a given HDF5 group.
diff --git a/src/parallel_io.h b/src/parallel_io.h
index 970ad8c41dcbc2df3a85b178f836e16926147788..5e85e0948283ceb4095a6f49d026ef5e39168538 100644
--- a/src/parallel_io.h
+++ b/src/parallel_io.h
@@ -19,15 +19,19 @@
 #ifndef SWIFT_PARALLEL_IO_H
 #define SWIFT_PARALLEL_IO_H
 
+/* Config parameters. */
+#include "../config.h"
+
 /* MPI headers. */
 #ifdef WITH_MPI
 #include <mpi.h>
 #endif
 
-/* Includes. */
-#include "engine.h"
-#include "part.h"
-#include "units.h"
+/* Forward-declare stuff to avoid cyclic includes. */
+struct engine;
+struct gpart;
+struct part;
+struct UnitSystem;
 
 #if defined(HAVE_HDF5) && defined(WITH_MPI) && defined(HAVE_PARALLEL_HDF5)
 
diff --git a/src/part.h b/src/part.h
index 5d4c9c88a1acadea3d23a3df618c04da389fb61d..e99be6e51a9bd74dd9eec8f590e80989e83ec2e1 100644
--- a/src/part.h
+++ b/src/part.h
@@ -22,9 +22,6 @@
 /* Config parameters. */
 #include "../config.h"
 
-/* Some standard headers. */
-#include <stdlib.h>
-
 /* MPI headers. */
 #ifdef WITH_MPI
 #include <mpi.h>
@@ -38,7 +35,7 @@
 #define xpart_align 32
 #define gpart_align 32
 
-/* Import the right particle definition */
+/* Import the right hydro particle definition */
 #if defined(MINIMAL_SPH)
 #include "./hydro/Minimal/hydro_part.h"
 #elif defined(GADGET2_SPH)
@@ -49,6 +46,7 @@
 #error "Invalid choice of SPH variant"
 #endif
 
+/* Import the right gravity particle definition */
 #include "./gravity/Default/gravity_part.h"
 
 #ifdef WITH_MPI
diff --git a/src/runner.c b/src/runner.c
index addeebda93a4d3f4b031f6fdc1f9eb856adc0a32..d38b52ce38f6fc16d97fc642b3f4d6890d9387d2 100644
--- a/src/runner.c
+++ b/src/runner.c
@@ -40,6 +40,7 @@
 /* Local headers. */
 #include "approx_math.h"
 #include "atomic.h"
+#include "cell.h"
 #include "const.h"
 #include "debug.h"
 #include "drift.h"
@@ -135,7 +136,6 @@ void runner_do_grav_external(struct runner *r, struct cell *c, int timer) {
  * @param sort The entries
  * @param N The number of entries.
  */
-
 void runner_do_sort_ascending(struct entry *sort, int N) {
 
   struct {
@@ -217,7 +217,6 @@ void runner_do_sort_ascending(struct entry *sort, int N) {
  * @param clock Flag indicating whether to record the timing or not, needed
  *      for recursive calls.
  */
-
 void runner_do_sort(struct runner *r, struct cell *c, int flags, int clock) {
 
   struct entry *finger;
@@ -423,7 +422,6 @@ void runner_do_init(struct runner *r, struct cell *c, int timer) {
  * @param r The runner thread.
  * @param c The cell.
  */
-
 void runner_do_ghost(struct runner *r, struct cell *c) {
 
   struct part *p, *parts = c->parts;
diff --git a/src/runner.h b/src/runner.h
index 758b6cf57dbc1a46b6fc068a23615f3b28c8707e..6838b959955c4e54e208b8d2d16339e7fdb1740f 100644
--- a/src/runner.h
+++ b/src/runner.h
@@ -23,13 +23,12 @@
 #ifndef SWIFT_RUNNER_H
 #define SWIFT_RUNNER_H
 
-/* Includes. */
-#include "cell.h"
-#include "inline.h"
-
 extern const double runner_shift[13][3];
 extern const char runner_flip[27];
 
+struct cell;
+struct engine;
+
 /* A struct representing a runner's thread and its data. */
 struct runner {
 
diff --git a/src/runner_doiact.h b/src/runner_doiact.h
index c603d4ae4927183ad492244138e4217f833e1fea..f49c3fcf738b50f726662458137d51b5a0e4e952 100644
--- a/src/runner_doiact.h
+++ b/src/runner_doiact.h
@@ -18,10 +18,6 @@
  *
  ******************************************************************************/
 
-/* Includes. */
-#include "cell.h"
-#include "part.h"
-
 /* Before including this file, define FUNCTION, which is the
    name of the interaction function. This creates the interaction functions
    runner_dopair_FUNCTION, runner_dopair_FUNCTION_naive, runner_doself_FUNCTION,
diff --git a/src/runner_doiact_grav.h b/src/runner_doiact_grav.h
index 13e6fe68ca223fa95a307fd063208e1f5d5efa6c..e3788dfa1123584c913bca6baa6fc2db6698e6d0 100644
--- a/src/runner_doiact_grav.h
+++ b/src/runner_doiact_grav.h
@@ -19,11 +19,6 @@
 #ifndef SWIFT_RUNNER_DOIACT_GRAV_H
 #define SWIFT_RUNNER_DOIACT_GRAV_H
 
-/* Includes. */
-#include "cell.h"
-#include "clocks.h"
-#include "part.h"
-
 /**
  * @brief Compute the sorted gravity interactions between a cell pair.
  *
diff --git a/src/scheduler.c b/src/scheduler.c
index 496df93adf5a656460f7b39904a3cc58ac3e5caa..8f833dad5085c675f129cb1061fa354f236ec9bc 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -44,6 +44,9 @@
 #include "error.h"
 #include "intrinsics.h"
 #include "kernel_hydro.h"
+#include "queue.h"
+#include "space.h"
+#include "task.h"
 #include "timers.h"
 
 /**
diff --git a/src/scheduler.h b/src/scheduler.h
index a867f7bc36cc8865d28d751565663641d92aa7fb..f6b358b158d8a37d118d8ad0ccee270108aa3f95 100644
--- a/src/scheduler.h
+++ b/src/scheduler.h
@@ -32,11 +32,13 @@
 #include <pthread.h>
 
 /* Includes. */
-#include "cell.h"
 #include "lock.h"
-#include "queue.h"
-#include "space.h"
-#include "task.h"
+
+/* Forward-declare stuff to avoid cyclic includes. */
+struct cell;
+struct queue;
+struct space;
+struct task;
 
 /* Some constants. */
 #define scheduler_maxwait 3
diff --git a/src/serial_io.c b/src/serial_io.c
index 5abd3ebc28672d68c4135efe5753dc4713c2d3c6..7e78276dc83430655b4ea4de2fb7425e71e07966 100644
--- a/src/serial_io.c
+++ b/src/serial_io.c
@@ -26,22 +26,22 @@
 /* Some standard headers. */
 #include <hdf5.h>
 #include <math.h>
+#include <mpi.h>
 #include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
-/* MPI headers. */
-#ifdef WITH_MPI
-#include <mpi.h>
-#endif
-
 /* This object's header. */
 #include "serial_io.h"
 
 /* Local includes. */
 #include "common_io.h"
+#include "engine.h"
 #include "error.h"
+#include "kernel_hydro.h"
+#include "part.h"
+#include "units.h"
 
 /*-----------------------------------------------------------------------------
  * Routines reading an IC file
diff --git a/src/serial_io.h b/src/serial_io.h
index b7ed6eb62d823829a473f828696c291e552effa3..f3b6d7ab983ce2ba5c32017201f74d57c9e0a2fa 100644
--- a/src/serial_io.h
+++ b/src/serial_io.h
@@ -19,15 +19,19 @@
 #ifndef SWIFT_SERIAL_IO_H
 #define SWIFT_SERIAL_IO_H
 
+/* Config parameters. */
+#include "../config.h"
+
 /* MPI headers. */
 #ifdef WITH_MPI
 #include <mpi.h>
 #endif
 
-/* Includes. */
-#include "engine.h"
-#include "part.h"
-#include "units.h"
+/* Forward-declare stuff to avoid cyclic includes. */
+struct engine;
+struct gpart;
+struct part;
+struct UnitSystem;
 
 #if defined(HAVE_HDF5) && defined(WITH_MPI) && !defined(HAVE_PARALLEL_HDF5)
 
diff --git a/src/single_io.c b/src/single_io.c
index fb3bf4368feed9892b098228d85c99f0bc3e724b..3f65aae0b5d495670f2b4862e466ec849f997d63 100644
--- a/src/single_io.c
+++ b/src/single_io.c
@@ -36,8 +36,11 @@
 
 /* Local includes. */
 #include "common_io.h"
-#include "const.h"
+#include "engine.h"
 #include "error.h"
+#include "kernel_hydro.h"
+#include "part.h"
+#include "units.h"
 
 /*-----------------------------------------------------------------------------
  * Routines reading an IC file
diff --git a/src/single_io.h b/src/single_io.h
index adfc5b43941b2c0d69d9ce0924164aff56864a23..ae176ce37f41865df9c7c0d55c7af5ca97373702 100644
--- a/src/single_io.h
+++ b/src/single_io.h
@@ -19,10 +19,14 @@
 #ifndef SWIFT_SINGLE_IO_H
 #define SWIFT_SINGLE_IO_H
 
-/* Includes. */
-#include "engine.h"
-#include "part.h"
-#include "units.h"
+/* Config parameters. */
+#include "../config.h"
+
+/* Forward-declare stuff to avoid cyclic includes. */
+struct engine;
+struct gpart;
+struct part;
+struct UnitSystem;
 
 #if defined(HAVE_HDF5) && !defined(WITH_MPI)
 
diff --git a/src/space.h b/src/space.h
index d53c0f2a5784ef25654309741b4455e3dbcc3e0c..fec25a35937c10c419a4c5dd4fffa8e08e5c9c82 100644
--- a/src/space.h
+++ b/src/space.h
@@ -26,13 +26,10 @@
 /* Includes. */
 #include <stddef.h>
 
-/* Local includes. */
-#include "cell.h"
-#include "parser.h"
-#include "part.h"
+#include "lock.h"
 
-/* Forward-declare the engine to avoid cyclic includes. */
-struct engine;
+/* Forward-declare stuff to avoid cyclic includes. */
+struct swift_params;
 
 /* Some constants. */
 #define space_maxdepth 10
@@ -158,4 +155,5 @@ void space_do_split(struct space *s, struct cell *c);
 void space_do_parts_sort();
 void space_do_gparts_sort();
 void space_link_cleanup(struct space *s);
+
 #endif /* SWIFT_SPACE_H */
diff --git a/src/tools.c b/src/tools.c
index 0363100331ad5b298279e9ebadcf87eab5f9e896..1a2b794f688047183827e5c2ed6ba80ba1339080 100644
--- a/src/tools.c
+++ b/src/tools.c
@@ -19,16 +19,25 @@
  *
  ******************************************************************************/
 
+/* Config parameters. */
+#include "../config.h"
+
+/* Some standard headers. */
 #include <math.h>
 #include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
 
+/* This object's header. */
+#include "tools.h"
+
+/* Local includes. */
 #include "cell.h"
 #include "error.h"
+#include "gravity.h"
+#include "hydro.h"
 #include "part.h"
-#include "swift.h"
-#include "tools.h"
+#include "runner.h"
 
 /**
  *  Factorize a given integer, attempts to keep larger pair of factors.
@@ -56,9 +65,7 @@ void factor(int value, int *f1, int *f2) {
  * @param N The number of parts.
  * @param periodic Periodic boundary conditions flag.
  */
-
-void pairs_n2(double *dim, struct part *__restrict__ parts, int N,
-              int periodic) {
+void pairs_n2(double *dim, struct part *restrict parts, int N, int periodic) {
   int i, j, k, count = 0;
   // int mj, mk;
   // double maxratio = 1.0;
@@ -121,8 +128,7 @@ void pairs_n2(double *dim, struct part *__restrict__ parts, int N,
 }
 
 void pairs_single_density(double *dim, long long int pid,
-                          struct part *__restrict__ parts, int N,
-                          int periodic) {
+                          struct part *restrict parts, int N, int periodic) {
   int i, k;
   // int mj, mk;
   // double maxratio = 1.0;
@@ -271,7 +277,7 @@ void self_all_density(struct runner *r, struct cell *ci) {
 }
 
 void pairs_single_grav(double *dim, long long int pid,
-                       struct gpart *__restrict__ parts, int N, int periodic) {
+                       struct gpart *restrict parts, int N, int periodic) {
   int i, k;
   // int mj, mk;
   // double maxratio = 1.0;
@@ -328,7 +334,6 @@ void pairs_single_grav(double *dim, long long int pid,
  *
  * @param N number of intervals in [0,1].
  */
-
 void density_dump(int N) {
   int k;
   float r2[4] = {0.0f, 0.0f, 0.0f, 0.0f}, hi[4], hj[4];
@@ -363,10 +368,8 @@ void density_dump(int N) {
 /**
  * @brief Compute the force on a single particle brute-force.
  */
-
 void engine_single_density(double *dim, long long int pid,
-                           struct part *__restrict__ parts, int N,
-                           int periodic) {
+                           struct part *restrict parts, int N, int periodic) {
   int i, k;
   double r2, dx[3];
   float fdx[3], ih;
@@ -412,7 +415,7 @@ void engine_single_density(double *dim, long long int pid,
 }
 
 void engine_single_force(double *dim, long long int pid,
-                         struct part *__restrict__ parts, int N, int periodic) {
+                         struct part *restrict parts, int N, int periodic) {
   int i, k;
   double r2, dx[3];
   float fdx[3];
diff --git a/src/tools.h b/src/tools.h
index 5f9f41d033ab03983bde3bb37e87f8a39d2deecd..ea8eddf43fb835523b7a7631963bbab2d621cedf 100644
--- a/src/tools.h
+++ b/src/tools.h
@@ -22,21 +22,23 @@
 #ifndef SWIFT_TOOL_H
 #define SWIFT_TOOL_H
 
-#include "cell.h"
-#include "runner.h"
+/* Forward-declare stuff to avoid cyclic includes. */
+struct cell;
+struct gpart;
+struct part;
+struct runner;
 
 void factor(int value, int *f1, int *f2);
 void density_dump(int N);
 void pairs_single_grav(double *dim, long long int pid,
-                       struct gpart *__restrict__ parts, int N, int periodic);
+                       struct gpart *restrict parts, int N, int periodic);
 void pairs_single_density(double *dim, long long int pid,
-                          struct part *__restrict__ parts, int N, int periodic);
+                          struct part *restrict parts, int N, int periodic);
 
 void pairs_all_density(struct runner *r, struct cell *ci, struct cell *cj);
 void self_all_density(struct runner *r, struct cell *ci);
 
-void pairs_n2(double *dim, struct part *__restrict__ parts, int N,
-              int periodic);
+void pairs_n2(double *dim, struct part *restrict parts, int N, int periodic);
 
 double random_uniform(double a, double b);
 void shuffle_particles(struct part *parts, const int count);