diff --git a/cpp/kspace.cpp b/cpp/kspace.cpp
index d601345742f6c0845e15b1b0cea2b2f1770c7a71..694e188c723f0be5e8fac9d51b7d87c118ebb691 100644
--- a/cpp/kspace.cpp
+++ b/cpp/kspace.cpp
@@ -684,7 +684,8 @@ void kspace<be, dt>::cospectrum(
         const rnumber(* __restrict b)[2],
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset)
+        const hsize_t toffset,
+	const double wavenumber_exp)
 {
     TIMEZONE("field::cospectrum2");
     shared_array<double> spec_local_thread(this->nshells*ncomp(fc)*ncomp(fc),[&](double* spec_local){
@@ -704,7 +705,8 @@ void kspace<be, dt>::cospectrum(
                 int tmp_int = int(sqrt(k2) / this->dk)*ncomp(fc)*ncomp(fc);
                 for (hsize_t i=0; i<ncomp(fc); i++)
                 for (hsize_t j=0; j<ncomp(fc); j++){
-                    spec_local[tmp_int + i*ncomp(fc)+j] += nxmodes * (
+                    spec_local[tmp_int + i*ncomp(fc)+j] += pow(k2,wavenumber_exp/2.)*
+			nxmodes * (
                         (a[ncomp(fc)*cindex + i][0] * b[ncomp(fc)*cindex + j][0]) +
                         (a[ncomp(fc)*cindex + i][1] * b[ncomp(fc)*cindex + j][1]));
                 }
@@ -762,7 +764,8 @@ void kspace<be, dt>::cospectrum(
         const rnumber(* __restrict a)[2],
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset)
+        const hsize_t toffset,
+	const double wavenumber_exp)
 {
     TIMEZONE("field::cospectrum1");
     shared_array<double> spec_local_thread(this->nshells*ncomp(fc)*ncomp(fc),[&](double* spec_local){
@@ -782,7 +785,8 @@ void kspace<be, dt>::cospectrum(
                 int tmp_int = int(sqrt(k2) / this->dk)*ncomp(fc)*ncomp(fc);
                 for (hsize_t i=0; i<ncomp(fc); i++)
                 for (hsize_t j=0; j<ncomp(fc); j++){
-                    spec_local[tmp_int + i*ncomp(fc)+j] += nxmodes * (
+                    spec_local[tmp_int + i*ncomp(fc)+j] += pow(k2, wavenumber_exp/2.)*
+			nxmodes * (
                         (a[ncomp(fc)*cindex + i][0] * a[ncomp(fc)*cindex + j][0]) +
                         (a[ncomp(fc)*cindex + i][1] * a[ncomp(fc)*cindex + j][1]));
                 }
@@ -1007,136 +1011,160 @@ template void kspace<FFTW, TWO_THIRDS>::cospectrum<float, ONE>(
         const typename fftw_interface<float>::complex *__restrict__ b,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, TWO_THIRDS>::cospectrum<float, THREE>(
         const typename fftw_interface<float>::complex *__restrict__ a,
         const typename fftw_interface<float>::complex *__restrict__ b,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, TWO_THIRDS>::cospectrum<float, THREExTHREE>(
         const typename fftw_interface<float>::complex *__restrict__ a,
         const typename fftw_interface<float>::complex *__restrict__ b,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, TWO_THIRDS>::cospectrum<double, ONE>(
         const typename fftw_interface<double>::complex *__restrict__ a,
         const typename fftw_interface<double>::complex *__restrict__ b,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, TWO_THIRDS>::cospectrum<double, THREE>(
         const typename fftw_interface<double>::complex *__restrict__ a,
         const typename fftw_interface<double>::complex *__restrict__ b,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, TWO_THIRDS>::cospectrum<double, THREExTHREE>(
         const typename fftw_interface<double>::complex *__restrict__ a,
         const typename fftw_interface<double>::complex *__restrict__ b,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 
 template void kspace<FFTW, SMOOTH>::cospectrum<float, ONE>(
         const typename fftw_interface<float>::complex *__restrict__ a,
         const typename fftw_interface<float>::complex *__restrict__ b,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, SMOOTH>::cospectrum<float, THREE>(
         const typename fftw_interface<float>::complex *__restrict__ a,
         const typename fftw_interface<float>::complex *__restrict__ b,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, SMOOTH>::cospectrum<float, THREExTHREE>(
         const typename fftw_interface<float>::complex *__restrict__ a,
         const typename fftw_interface<float>::complex *__restrict__ b,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, SMOOTH>::cospectrum<double, ONE>(
         const typename fftw_interface<double>::complex *__restrict__ a,
         const typename fftw_interface<double>::complex *__restrict__ b,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, SMOOTH>::cospectrum<double, THREE>(
         const typename fftw_interface<double>::complex *__restrict__ a,
         const typename fftw_interface<double>::complex *__restrict__ b,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, SMOOTH>::cospectrum<double, THREExTHREE>(
         const typename fftw_interface<double>::complex *__restrict__ a,
         const typename fftw_interface<double>::complex *__restrict__ b,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 
 template void kspace<FFTW, TWO_THIRDS>::cospectrum<float, ONE>(
         const typename fftw_interface<float>::complex *__restrict__ a,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, TWO_THIRDS>::cospectrum<float, THREE>(
         const typename fftw_interface<float>::complex *__restrict__ a,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, TWO_THIRDS>::cospectrum<float, THREExTHREE>(
         const typename fftw_interface<float>::complex *__restrict__ a,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, TWO_THIRDS>::cospectrum<double, ONE>(
         const typename fftw_interface<double>::complex *__restrict__ a,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, TWO_THIRDS>::cospectrum<double, THREE>(
         const typename fftw_interface<double>::complex *__restrict__ a,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, TWO_THIRDS>::cospectrum<double, THREExTHREE>(
         const typename fftw_interface<double>::complex *__restrict__ a,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 
 template void kspace<FFTW, SMOOTH>::cospectrum<float, ONE>(
         const typename fftw_interface<float>::complex *__restrict__ a,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, SMOOTH>::cospectrum<float, THREE>(
         const typename fftw_interface<float>::complex *__restrict__ a,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, SMOOTH>::cospectrum<float, THREExTHREE>(
         const typename fftw_interface<float>::complex *__restrict__ a,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, SMOOTH>::cospectrum<double, ONE>(
         const typename fftw_interface<double>::complex *__restrict__ a,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, SMOOTH>::cospectrum<double, THREE>(
         const typename fftw_interface<double>::complex *__restrict__ a,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 template void kspace<FFTW, SMOOTH>::cospectrum<double, THREExTHREE>(
         const typename fftw_interface<double>::complex *__restrict__ a,
         const hid_t group,
         const std::string dset_name,
-        const hsize_t toffset);
+        const hsize_t toffset,
+	const double wavenumber_exp);
 
 template double kspace<FFTW, TWO_THIRDS>::L2norm<float, ONE>(
         const typename fftw_interface<float>::complex *__restrict__ a);
diff --git a/cpp/kspace.hpp b/cpp/kspace.hpp
index 80d89f2593d7462b0dd8e28c229e3c7919a9e1ae..6933df2c3231f14d013fff03898d64a58a678102 100644
--- a/cpp/kspace.hpp
+++ b/cpp/kspace.hpp
@@ -129,7 +129,8 @@ class kspace
                 const rnumber(* __restrict__ b)[2],
                 const hid_t group,
                 const std::string dset_name,
-                const hsize_t toffset);
+                const hsize_t toffset,
+		const double wavenumber_exp = 0);
 
         template <typename rnumber,
                   field_components fc>
@@ -137,7 +138,8 @@ class kspace
                 const rnumber(* __restrict__ a)[2],
                 const hid_t group,
                 const std::string dset_name,
-                const hsize_t toffset);
+                const hsize_t toffset,
+		const double wavenumber_exp = 0);
 
         template <typename rnumber,
                   field_components fc>