diff --git a/sumpy/tools.py b/sumpy/tools.py
index d0781bbbc04ed71d1e1ba77dc60b0889b9a42cd2..669a3d63321f79972c5f39d14c90ca9b5fb46fc4 100644
--- a/sumpy/tools.py
+++ b/sumpy/tools.py
@@ -870,16 +870,18 @@ def fft(seq, inverse=False, sac=None):
 
     from pymbolic.algorithm import fft as _fft, ifft as _ifft
 
-    def wrap(expr):
+    def wrap(level, expr):
         if isinstance(expr, np.ndarray):
-            res = [wrap(a) for a in expr]
+            res = [wrap(level, a) for a in expr]
             return np.array(res, dtype=object).reshape(expr.shape)
         return add_to_sac(sac, expr)
 
     if inverse:
-        return _ifft(list(seq), wrap_intermediate=wrap).tolist()
+        return _ifft(np.array(seq), wrap_intermediate_with_level=wrap,
+                complex_dtype=np.complex128).tolist()
     else:
-        return _fft(list(seq), wrap_intermediate=wrap).tolist()
+        return _fft(np.array(seq), wrap_intermediate_with_level=wrap,
+                complex_dtype=np.complex128).tolist()
 
 
 def fft_toeplitz_upper_triangular(first_row, x, sac=None):