Index: src/sas/sascalc/corfunc/corfunc_calculator.py
===================================================================
--- src/sas/sascalc/corfunc/corfunc_calculator.py	(revision a684c6435dd144a092b0c0a5c7d4c847428968f5)
+++ src/sas/sascalc/corfunc/corfunc_calculator.py	(revision a2db1abd36c0ce023e2534da80ed70c035b6cb0c)
@@ -10,4 +10,5 @@
 from numpy.linalg import lstsq
 from sas.sascalc.dataloader.data_info import Data1D
+from sas.sascalc.corfunc.transform_thread import TransformThread
 
 class CorfuncCalculator(object):
@@ -66,4 +67,5 @@
         self.upperq = upperq
         self.background = 0
+        self._transform_thread = None
 
     def set_data(self, data, scale=1):
@@ -120,5 +122,6 @@
         return extrapolation
 
-    def compute_transform(self, extrapolation, background=None):
+    def compute_transform(self, extrapolation, background=None,
+        completefn=None, updatefn=None):
         """
         Transform an extrapolated scattering curve into a correlation function.
@@ -127,18 +130,26 @@
         :param background: The background value (if not provided, previously
             calculated value will be used)
+        :param completefn: The function to call when the transform calculation
+            is complete`
+        :param updatefn: The function to call to update the GUI with the status
+            of the transform calculation
         :return: The transformed data
         """
-        qs = extrapolation.x
-        iqs = extrapolation.y
-        q = self._data.x
+        if self._transform_thread is not None:
+            if self._transform_thread.isrunning(): return
+
         if background is None: background = self.background
 
-        gamma = dct((iqs-background)*qs**2)
-        gamma = gamma / gamma.max()
-        xs = np.pi*np.arange(len(qs),dtype=np.float32)/(q[1]-q[0])/len(qs)
-
-        transform = Data1D(xs, gamma)
-
-        return transform
+        self._transform_thread = TransformThread(self._data, extrapolation,
+        background, completefn=completefn, updatefn=updatefn)
+        self._transform_thread.queue()
+
+    def transform_isrunning(self):
+        if self._transform_thread is None: return False
+        return self._transform_thread.isrunning()
+
+    def stop_transform(self):
+        if self._transform_thread.isrunning():
+            self._transform_thread.stop()
 
     def extract_parameters(self, transformed_data):
Index: src/sas/sascalc/corfunc/transform_thread.py
===================================================================
--- src/sas/sascalc/corfunc/transform_thread.py	(revision a2db1abd36c0ce023e2534da80ed70c035b6cb0c)
+++ src/sas/sascalc/corfunc/transform_thread.py	(revision a2db1abd36c0ce023e2534da80ed70c035b6cb0c)
@@ -0,0 +1,40 @@
+from sas.sascalc.data_util.calcthread import CalcThread
+from sas.sascalc.dataloader.data_info import Data1D
+from scipy.fftpack import dct
+import numpy as np
+from time import sleep
+
+class TransformThread(CalcThread):
+    def __init__(self, raw_data, extrapolated_data, bg, updatefn=None,
+        completefn=None):
+        CalcThread.__init__(self, updatefn=updatefn, completefn=completefn)
+        self.data = raw_data
+        self.background = bg
+        self.extrapolation = extrapolated_data
+
+    def compute(self):
+        qs = self.extrapolation.x
+        iqs = self.extrapolation.y
+        q = self.data.x
+        background = self.background
+
+        self.ready(delay=0.0)
+        self.update(msg="Starting Fourier transform.")
+        self.ready(delay=0.0)
+        if self.isquit():
+            return
+        try:
+            gamma = dct((iqs-background)*qs**2)
+            gamma = gamma / gamma.max()
+        except:
+            self.update(msg="Fourier transform failed.")
+            self.complete(transform=None)
+            return
+        if self.isquit():
+            return
+        self.update(msg="Fourier transform completed.")
+
+        xs = np.pi*np.arange(len(qs),dtype=np.float32)/(q[1]-q[0])/len(qs)
+        transform = Data1D(xs, gamma)
+
+        self.complete(transform=transform)
