diff --git a/configure.ac b/configure.ac
index ffb146cdd3d0830b6c835b297b8ac563e6a2b26e..04c82357c08da0db37b358aa099ff81e23e09302 100644
--- a/configure.ac
+++ b/configure.ac
@@ -150,7 +150,7 @@ AC_ARG_ENABLE([mpi],
 # so could change.
 good_mpi="yes"
 if test "$enable_mpi" = "yes"; then
-    AX_MPI([CC="$MPICC $ac_cv_prog_cc_stdc" AC_DEFINE(HAVE_MPI, 1, [Define if you have the MPI library.]) ])
+    AX_MPI([CC="$MPICC $ac_cv_prog_cc_stdc" AC_DEFINE(HAVE_MPI, 1, [Define if you have the MPI library.]) ], [enable_mpi="no"])
     MPI_LIBRARY="Unknown MPI"
 
     # Various MPI implementations require additional libraries when also using
diff --git a/src/power_spectrum.c b/src/power_spectrum.c
index 55a974960081b4843cdea668dcd39a5dabdf177d..1eaef8168a21a01daccaf11179ffde7149cf8361 100644
--- a/src/power_spectrum.c
+++ b/src/power_spectrum.c
@@ -28,6 +28,8 @@
 #include <fftw3.h>
 #endif
 
+/* Standard headers */
+#include <stdio.h>
 #include <string.h>
 
 /* This object's header. */
@@ -114,6 +116,8 @@ INLINE static const char* get_powtype_filename(const enum power_type type) {
 void power_init(struct power_spectrum_data* p, struct swift_params* params,
                 int nr_threads) {
 
+#ifdef HAVE_FFTW
+
   /* Get power spectrum parameters */
   p->Ngrid = parser_get_opt_param_int(params, "PowerSpectrum:grid_side_length",
                                       power_data_default_grid_side_length);
@@ -223,8 +227,14 @@ void power_init(struct power_spectrum_data* p, struct swift_params* params,
     safe_checkdir("power_spectra", /*create=*/1);
     safe_checkdir("power_spectra/foldings", /*create=*/1);
   }
+
+#else
+  error("Trying to initialize the PS code without FFTW present!");
+#endif
 }
 
+#ifdef HAVE_FFTW
+
 /**
  * @brief Shared information for shot noise to be used by all the threads in the
  * pool.
@@ -1355,9 +1365,12 @@ void power_spectrum(const enum power_type type1, const enum power_type type2,
   pow_data->powgridft = NULL;
 }
 
+#endif /* HAVE_FFTW */
+
 void calc_all_power_spectra(struct power_spectrum_data* pow_data,
                             const struct space* s, struct threadpool* tp,
                             const int verbose) {
+#ifdef HAVE_FFTW
 
   const ticks tic = getticks();
 
@@ -1375,9 +1388,13 @@ void calc_all_power_spectra(struct power_spectrum_data* pow_data,
   if (verbose)
     message("took %.3f %s.", clocks_from_ticks(getticks() - tic),
             clocks_getunit());
+#else
+  error("Can't use the PS code without FFTW present!");
+#endif /* HAVE_FFTW */
 }
 
 void power_clean(struct power_spectrum_data* pow_data) {
+#ifdef HAVE_FFTW
   fftw_destroy_plan(pow_data->fftplanpow);
   fftw_destroy_plan(pow_data->fftplanpow2);
   free(pow_data->types2);
@@ -1386,6 +1403,9 @@ void power_clean(struct power_spectrum_data* pow_data) {
   // Probably already done for PM at this point
   fftw_cleanup_threads();
 #endif
+#else
+  error("Can't use the PS code without FFTW present!");
+#endif /* HAVE_FFTW */
 }
 
 /**
@@ -1397,12 +1417,14 @@ void power_clean(struct power_spectrum_data* pow_data) {
  */
 void power_spectrum_struct_dump(const struct power_spectrum_data* p,
                                 FILE* stream) {
+#ifdef HAVE_FFTW
   restart_write_blocks((void*)p, sizeof(struct power_spectrum_data), 1, stream,
                        "power spectrum data", "power spectrum data");
   restart_write_blocks(p->types1, p->spectrumcount, sizeof(enum power_type),
                        stream, "power types 1", "power types 1");
   restart_write_blocks(p->types2, p->spectrumcount, sizeof(enum power_type),
                        stream, "power types 2", "power types 2");
+#endif
 }
 
 /**
@@ -1414,6 +1436,7 @@ void power_spectrum_struct_dump(const struct power_spectrum_data* p,
  */
 void power_spectrum_struct_restore(struct power_spectrum_data* p,
                                    FILE* stream) {
+#ifdef HAVE_FFTW
   restart_read_blocks((void*)p, sizeof(struct power_spectrum_data), 1, stream,
                       NULL, "power spectrum data");
   p->types1 =
@@ -1465,4 +1488,5 @@ void power_spectrum_struct_restore(struct power_spectrum_data* p,
   fftw_free(p->powgrid2);
   p->powgrid2 = NULL;
   p->powgridft2 = NULL;
+#endif /* HAVE_FFTW */
 }
diff --git a/src/power_spectrum.h b/src/power_spectrum.h
index c717dcaf1ad97a23465a6fa06fc199a7749bf983..97b7feefde6225e590a05f0331b607838a5a24bb 100644
--- a/src/power_spectrum.h
+++ b/src/power_spectrum.h
@@ -100,9 +100,6 @@ struct power_spectrum_data {
 
 void power_init(struct power_spectrum_data* p, struct swift_params* params,
                 int nr_threads);
-void power_spectrum(const enum power_type type1, const enum power_type type2,
-                    struct power_spectrum_data* pow_data, const struct space* s,
-                    struct threadpool* tp, const int verbose);
 void calc_all_power_spectra(struct power_spectrum_data* pow_data,
                             const struct space* s, struct threadpool* tp,
                             const int verbose);