diff --git a/pocketfft_hdronly.h b/pocketfft_hdronly.h
index b416ff779b00aabb0be268b6c0c4dd4ee7c8c3b5..8b411256d5fc07eda85597a6d06501f01a5b3801 100644
--- a/pocketfft_hdronly.h
+++ b/pocketfft_hdronly.h
@@ -216,8 +216,6 @@ template<typename T> struct cmplx {
   cmplx(T r_, T i_) : r(r_), i(i_) {}
   void Set(T r_, T i_) { r=r_; i=i_; }
   void Set(T r_) { r=r_; i=T(0); }
-  void Split(T &r_, T &i_) const { r_=r; i_=i; }
-  void SplitConj(T &r_, T &i_) const { r_=r; i_=-i; }
   cmplx &operator+= (const cmplx &other)
     { r+=other.r; i+=other.i; return *this; }
   template<typename T2>cmplx &operator*= (T2 other)
@@ -3203,11 +3201,17 @@ template<typename T> POCKETFFT_NOINLINE void general_c2r(
           if (forward)
             for (; i<len-1; i+=2, ++ii)
               for (size_t j=0; j<vlen; ++j)
-                in[it.iofs(j,ii)].SplitConj(tdatav[i][j], tdatav[i+1][j]);
+                {
+                tdatav[i  ][j] =  in[it.iofs(j,ii)].r;
+                tdatav[i+1][j] = -in[it.iofs(j,ii)].i;
+                }
           else
             for (; i<len-1; i+=2, ++ii)
               for (size_t j=0; j<vlen; ++j)
-                in[it.iofs(j,ii)].Split(tdatav[i][j], tdatav[i+1][j]);
+                {
+                tdatav[i  ][j] = in[it.iofs(j,ii)].r;
+                tdatav[i+1][j] = in[it.iofs(j,ii)].i;
+                }
           if (i<len)
             for (size_t j=0; j<vlen; ++j)
               tdatav[i][j] = in[it.iofs(j,ii)].r;
@@ -3225,10 +3229,16 @@ template<typename T> POCKETFFT_NOINLINE void general_c2r(
         size_t i=1, ii=1;
         if (forward)
           for (; i<len-1; i+=2, ++ii)
-            in[it.iofs(ii)].SplitConj(tdata[i], tdata[i+1]);
+            {
+            tdata[i  ] =  in[it.iofs(ii)].r;
+            tdata[i+1] = -in[it.iofs(ii)].i;
+            }
         else
           for (; i<len-1; i+=2, ++ii)
-            in[it.iofs(ii)].Split(tdata[i], tdata[i+1]);
+            {
+            tdata[i  ] = in[it.iofs(ii)].r;
+            tdata[i+1] = in[it.iofs(ii)].i;
+            }
         if (i<len)
           tdata[i] = in[it.iofs(ii)].r;
         }
diff --git a/pypocketfft.cc b/pypocketfft.cc
index b50065cffd384a33107587ebf55cb3cf8fcd3a28..a4880ba8f3c42aefa7d256322980f3968933cdeb 100644
--- a/pypocketfft.cc
+++ b/pypocketfft.cc
@@ -130,7 +130,7 @@ template<typename T> py::array c2c_internal(const py::array &in,
   T fct = norm_fct<T>(inorm, dims, axes);
   pocketfft::c2c(dims, s_in, s_out, axes, forward, d_in, d_out, fct, nthreads);
   }
-  return res;
+  return move(res);
   }
 
 template<typename T> py::array c2c_sym_internal(const py::array &in,
@@ -159,7 +159,7 @@ template<typename T> py::array c2c_sym_internal(const py::array &in,
     iter.advance();
     }
   }
-  return res;
+  return move(res);
   }
 
 py::array c2c(const py::array &a, const py::object &axes_, bool forward,