diff --git a/cpp/fftw_interface.hpp b/cpp/fftw_interface.hpp
index d80cbbc2101afc7fbe8091dc06ecba4981a748de..10496355de3db27d4703245e0abb287bc067d2fb 100644
--- a/cpp/fftw_interface.hpp
+++ b/cpp/fftw_interface.hpp
@@ -790,6 +790,8 @@ public:
     }
 };
 
+template<class T>
+using complex_t = typename fftw_interface<T>::complex;
 
 
 #endif // FFTW_INTERFACE_HPP
diff --git a/cpp/field.cpp b/cpp/field.cpp
index f4242295ffbfeb24485cbb2eaee4f02c498137aa..982fad2d76d2bd82781bd99479e3ade5f4678a15 100644
--- a/cpp/field.cpp
+++ b/cpp/field.cpp
@@ -102,7 +102,7 @@ field<rnumber, be, fc>::field(
             this->c2r_plan = fftw_interface<rnumber>::mpi_plan_many_dft_c2r(
                     3, nfftw, ncomp(fc),
                     FFTW_MPI_DEFAULT_BLOCK, FFTW_MPI_DEFAULT_BLOCK,
-                    (typename fftw_interface<rnumber>::complex*)this->data,
+                    (complex_t<rnumber>*)this->data,
                     this->data,
                     this->comm,
                     this->fftw_plan_rigor | FFTW_MPI_TRANSPOSED_IN);
@@ -113,7 +113,7 @@ field<rnumber, be, fc>::field(
                     3, nfftw, ncomp(fc),
                     FFTW_MPI_DEFAULT_BLOCK, FFTW_MPI_DEFAULT_BLOCK,
                     this->data,
-                    (typename fftw_interface<rnumber>::complex*)this->data,
+                    (complex_t<rnumber>*)this->data,
                     this->comm,
                     this->fftw_plan_rigor | FFTW_MPI_TRANSPOSED_OUT);
             //plan_information = fftw_interface<rnumber>::sprint(this->r2c_plan);
@@ -672,13 +672,13 @@ void field<rnumber, be, fc>::Hermitian_reflect()
     TIMEZONE("field::Hermitian_reflect");
     start_mpi_profiling_zone(turtle_mpi_pcontrol::FIELD);
     assert(!this->real_space_representation);
-    typename fftw_interface<rnumber>::complex *cdata = this->get_cdata();
+    complex_t<rnumber> *cdata = this->get_cdata();
     // reflect kx = 0 plane, line by line, for ky != 0
     MPI_Status *mpistatus = new MPI_Status;
     // bufferp will hold data from "plus", i.e. iy
     // bufferm will hold data from "minus", i.e. ny - iy
-    typename fftw_interface<rnumber>::complex *bufferp = new typename fftw_interface<rnumber>::complex[ncomp(fc)*this->clayout->sizes[1]];
-    typename fftw_interface<rnumber>::complex *bufferm = new typename fftw_interface<rnumber>::complex[ncomp(fc)*this->clayout->sizes[1]];
+    complex_t<rnumber> *bufferp = new complex_t<rnumber>[ncomp(fc)*this->clayout->sizes[1]];
+    complex_t<rnumber> *bufferm = new complex_t<rnumber>[ncomp(fc)*this->clayout->sizes[1]];
     int rankp, rankm;
     // for each ky slice except ky=0
     for (ptrdiff_t iy = 1; iy < ptrdiff_t(this->clayout->sizes[0]/2); iy++)
@@ -880,7 +880,7 @@ void field<rnumber, be, fc>::symmetrize_FFT()
 {
     TIMEZONE("field::symmetrize_FFT");
     assert(!this->real_space_representation);
-    typename fftw_interface<rnumber>::complex *cdata = this->get_cdata();
+    complex_t<rnumber> *cdata = this->get_cdata();
 
     // make 0 mode real
     if (this->myrank == this->clayout->rank[0][0])
@@ -960,7 +960,7 @@ void field<rnumber, be, fc>::symmetrize_alternate()
     MPI_Barrier(this->clayout->comm); // TODO: figure out if this can be taken out by careful MPI tag generation
     start_mpi_profiling_zone(turtle_mpi_pcontrol::FIELD);
     assert(!this->real_space_representation);
-    typename fftw_interface<rnumber>::complex *cdata = this->get_cdata();
+    complex_t<rnumber> *cdata = this->get_cdata();
 
     // make 0 mode real
     if (this->myrank == this->clayout->rank[0][0])
@@ -1006,8 +1006,8 @@ void field<rnumber, be, fc>::symmetrize_alternate()
     MPI_Status *mpistatus = new MPI_Status;
     // bufferp will hold data from "plus", i.e. iy
     // bufferm will hold data from "minus", i.e. ny - iy
-    typename fftw_interface<rnumber>::complex *bufferp = new typename fftw_interface<rnumber>::complex[ncomp(fc)*this->clayout->sizes[1]];
-    typename fftw_interface<rnumber>::complex *bufferm = new typename fftw_interface<rnumber>::complex[ncomp(fc)*this->clayout->sizes[1]];
+    complex_t<rnumber> *bufferp = new complex_t<rnumber>[ncomp(fc)*this->clayout->sizes[1]];
+    complex_t<rnumber> *bufferm = new complex_t<rnumber>[ncomp(fc)*this->clayout->sizes[1]];
     int rankp, rankm;
     // for each ky slice except ky=0
     for (ptrdiff_t iy = 1; iy < ptrdiff_t(this->clayout->sizes[0]/2); iy++)
@@ -1226,7 +1226,7 @@ void field<rnumber, be, fc>::symmetrize()
     TIMEZONE("field::symmetrize");
     start_mpi_profiling_zone(turtle_mpi_pcontrol::FIELD);
     assert(!this->real_space_representation);
-    typename fftw_interface<rnumber>::complex *cdata = this->get_cdata();
+    complex_t<rnumber> *cdata = this->get_cdata();
 
     // make 0 mode real
     if (this->myrank == this->clayout->rank[0][0])
@@ -1272,8 +1272,8 @@ void field<rnumber, be, fc>::symmetrize()
     MPI_Status *mpistatus = new MPI_Status;
     // bufferp will hold data from "plus", i.e. iy
     // bufferm will hold data from "minus", i.e. ny - iy
-    typename fftw_interface<rnumber>::complex *bufferp = new typename fftw_interface<rnumber>::complex[ncomp(fc)*this->clayout->sizes[1]];
-    typename fftw_interface<rnumber>::complex *bufferm = new typename fftw_interface<rnumber>::complex[ncomp(fc)*this->clayout->sizes[1]];
+    complex_t<rnumber> *bufferp = new complex_t<rnumber>[ncomp(fc)*this->clayout->sizes[1]];
+    complex_t<rnumber> *bufferm = new complex_t<rnumber>[ncomp(fc)*this->clayout->sizes[1]];
     int rankp, rankm;
     // for each ky slice except ky=0
     for (ptrdiff_t iy = 1; iy < ptrdiff_t(this->clayout->sizes[0]/2); iy++)
@@ -1468,7 +1468,7 @@ void field<rnumber, be, fc>::compute_stats(
     // what follows gave me a headache until I found this link:
     // http://stackoverflow.com/questions/8256636/expected-primary-expression-error-on-template-method-using
     kk->template cospectrum<rnumber, fc>(
-            (typename fftw_interface<rnumber>::complex*)(this->data),
+            (complex_t<rnumber>*)(this->data),
             group,
             dset_name + "_" + dset_name,
             toffset);
@@ -2212,7 +2212,7 @@ int joint_rspace_3PDF(
 template <typename rnumber,
           field_backend be,
           field_components fc>
-field<rnumber, be, fc>& field<rnumber, be, fc>::operator=(const typename fftw_interface<rnumber>::complex *__restrict__ source)
+field<rnumber, be, fc>& field<rnumber, be, fc>::operator=(const complex_t<rnumber> *__restrict__ source)
 {
     // use CLOOP pattern, because we want the array to be arranged in memory
     // for optimal access by FFTW
@@ -2337,7 +2337,7 @@ field<rnumber, be, fc> &field<rnumber, be, fc>::operator=(
             int64_t slice_size = src.clayout->local_size / src.clayout->subsizes[0];
             // clean up
             *this = 0.0;
-            typename fftw_interface<rnumber>::complex *buffer;
+            complex_t<rnumber> *buffer;
             buffer = fftw_interface<rnumber>::alloc_complex(slice_size*ncomp(fc));
 
             int min_fast_dim =
diff --git a/cpp/field.hpp b/cpp/field.hpp
index c136761e780eac73c1eada16e5ecece5c78f4e53..1fff8a6c382b27fd66df2ce0c8eab163b77e469c 100644
--- a/cpp/field.hpp
+++ b/cpp/field.hpp
@@ -192,14 +192,14 @@ class field
             return this->data;
         }
 
-        inline typename fftw_interface<rnumber>::complex *__restrict__ get_cdata()
+        inline complex_t<rnumber> *__restrict__ get_cdata()
         {
-            return (typename fftw_interface<rnumber>::complex*__restrict__)this->data;
+            return (complex_t<rnumber>*__restrict__)this->data;
         }
 
-        inline typename fftw_interface<rnumber>::complex *__restrict__ get_cdata() const
+        inline complex_t<rnumber> *__restrict__ get_cdata() const
         {
-            return (typename fftw_interface<rnumber>::complex*__restrict__)this->data;
+            return (complex_t<rnumber>*__restrict__)this->data;
         }
 
         inline rnumber &rval(ptrdiff_t rindex, unsigned int component = 0)
@@ -261,7 +261,7 @@ class field
             return *(this->data + ((cindex*3 + comp1)*3+comp0)*2 + imag);
         }
 
-        field<rnumber, be, fc>& operator=(const typename fftw_interface<rnumber>::complex *__restrict__ source);
+        field<rnumber, be, fc>& operator=(const complex_t<rnumber> *__restrict__ source);
         field<rnumber, be, fc>& operator=(const rnumber *__restrict__ source);
         field<rnumber, be, fc>& operator=(const rnumber value);
         field<rnumber, be, fc>& operator=(const field<rnumber, be, fc> &src);
diff --git a/cpp/kspace.cpp b/cpp/kspace.cpp
index fca880f7437ee7010a6d4e25f5a1317da0312555..ca61908d3b8fc64b07bc1c6074f067719258e32e 100644
--- a/cpp/kspace.cpp
+++ b/cpp/kspace.cpp
@@ -30,9 +30,6 @@
 
 #include <cmath>
 
-template<class T>
-using complex_t = typename fftw_interface<T>::complex;
-
 template <field_backend be,
           kspace_dealias_type dt>
 template <field_components fc>
diff --git a/cpp/kspace.hpp b/cpp/kspace.hpp
index 0344b19a094f141d997bc63ab0ac0a8652fccfe2..48ac71ceab4cfe17a2768284860363aec1ae556e 100644
--- a/cpp/kspace.hpp
+++ b/cpp/kspace.hpp
@@ -83,27 +83,27 @@ class kspace
         template <typename rnumber,
                   field_components fc>
         void low_pass(
-                typename fftw_interface<rnumber>::complex *__restrict__ a,
+                complex_t<rnumber> *__restrict__ a,
                 const double kmax);
 
 
         template <typename rnumber,
                   field_components fc>
         void Gauss_filter(
-                typename fftw_interface<rnumber>::complex *__restrict__ a,
+                complex_t<rnumber> *__restrict__ a,
                 const double sigma);
 
         template <typename rnumber,
                   field_components fc,
                   int n>
         void Gauss_n_filter(
-                typename fftw_interface<rnumber>::complex *__restrict__ a,
+                complex_t<rnumber> *__restrict__ a,
                 const double sigma);
 
         template <typename rnumber,
                   field_components fc>
         void ball_filter(
-                typename fftw_interface<rnumber>::complex *__restrict__ a,
+                complex_t<rnumber> *__restrict__ a,
                 const double sigma);
 
         /**
@@ -114,20 +114,20 @@ class kspace
         template <typename rnumber,
                   field_components fc>
         int filter(
-                typename fftw_interface<rnumber>::complex *__restrict__ a,
+                complex_t<rnumber> *__restrict__ a,
                 const double wavenumber,
                 std::string filter_type = std::string("Gauss"));
 
         template <typename rnumber,
                   field_components fc>
         int filter_calibrated_ell(
-                typename fftw_interface<rnumber>::complex *__restrict__ a,
+                complex_t<rnumber> *__restrict__ a,
                 const double wavenumber,
                 std::string filter_type = std::string("Gauss"));
 
         template <typename rnumber,
                   field_components fc>
-        void dealias(typename fftw_interface<rnumber>::complex *__restrict__ a);
+        void dealias(complex_t<rnumber> *__restrict__ a);
 
         template <typename rnumber,
                   field_components fc>
@@ -287,21 +287,21 @@ class kspace
         }
         template <typename rnumber>
         void project_divfree(
-                typename fftw_interface<rnumber>::complex *__restrict__ a,
+                complex_t<rnumber> *__restrict__ a,
                 const bool maintain_energy = false);
         template <typename rnumber>
         void project_divfree(
-                typename fftw_interface<rnumber>::complex *__restrict__ xa,
-                typename fftw_interface<rnumber>::complex *__restrict__ ya,
-                typename fftw_interface<rnumber>::complex *__restrict__ za,
+                complex_t<rnumber> *__restrict__ xa,
+                complex_t<rnumber> *__restrict__ ya,
+                complex_t<rnumber> *__restrict__ za,
                 const bool maintain_energy = false);
         // TODO: can the following be done in a cleaner way?
         template <typename rnumber>
-        void force_divfree(typename fftw_interface<rnumber>::complex *__restrict__ a){
+        void force_divfree(complex_t<rnumber> *__restrict__ a){
             this->template project_divfree<rnumber>(a, false);
         }
         template <typename rnumber>
-        void rotate_divfree(typename fftw_interface<rnumber>::complex *__restrict__ a);
+        void rotate_divfree(complex_t<rnumber> *__restrict__ a);
 };
 
 #endif//KSPACE_HPP