diff --git a/modules/img/alg/src/fft.cc b/modules/img/alg/src/fft.cc
index 3f3f90f5a4e56c32462feca268469b8278512b26..84ac57b19bed1eda916653ca4a44b355c908892f 100644
--- a/modules/img/alg/src/fft.cc
+++ b/modules/img/alg/src/fft.cc
@@ -64,6 +64,10 @@ FFTFnc::FFTFnc(bool f): ori_flag_(f)
   OST_FFTW_fftw_init_threads();
 }
 
+FFTFnc::~FFTFnc()
+{
+  OST_FFTW_fftw_cleanup();
+}
 
 // real spatial -> complex half-frequency
 template <>
diff --git a/modules/img/alg/src/fft.hh b/modules/img/alg/src/fft.hh
index e554716336ff908ed3d567676bda2fd378a94cec..c8b3ccfc97cdba8aa430f0d927e50a018f67e06e 100644
--- a/modules/img/alg/src/fft.hh
+++ b/modules/img/alg/src/fft.hh
@@ -37,7 +37,7 @@ struct DLLEXPORT FFTException: public Error {
 struct DLLEXPORT_IMG_ALG FFTFnc {
   FFTFnc();
   FFTFnc(bool);
-
+  ~FFTFnc();
   template <typename T, class D>
   ImageStateBasePtr VisitState(const ImageStateImpl<T,D>& s) const;
 
diff --git a/modules/img/alg/src/fftw_helper.hh b/modules/img/alg/src/fftw_helper.hh
index 365eb6d66da3af9235a5fa864dbeaa51589a5ee8..b1b6066aaf71d91282cf8bde70d8201b7bde2456 100644
--- a/modules/img/alg/src/fftw_helper.hh
+++ b/modules/img/alg/src/fftw_helper.hh
@@ -72,15 +72,22 @@ Author: Juergen Haas
 #if OST_FFT_USE_THREADS
   #if OST_DOUBLE_PRECISION
     #define OST_FFTW_fftw_init_threads fftw_init_threads
+    #define OST_FFTW_fftw_cleanup fftw_cleanup_threads
     #define OST_FFTW_fftw_plan_with_nthreads fftw_plan_with_nthreads
   #else
     #define OST_FFTW_fftw_init_threads fftwf_init_threads
+    #define OST_FFTW_fftw_cleanup fftwf_cleanup_threads
     #define OST_FFTW_fftw_plan_with_nthreads fftwf_plan_with_nthreads
   #endif
 #else
   void fftw_noop(unsigned int i=0){}
   #define OST_FFTW_fftw_init_threads fftw_noop
   #define OST_FFTW_fftw_plan_with_nthreads fftw_noop
+  #if OST_DOUBLE_PRECISION
+    #define OST_FFTW_fftw_cleanup fftw_cleanup
+  #else
+    #define OST_FFTW_fftw_cleanup fftwf_cleanup
+  #endif
 #endif
 
 #endif