Index: src/sans/fit/BumpsFitting.py
===================================================================
--- src/sans/fit/BumpsFitting.py	(revision 042f0652a0552c6add090233c50477ed4d1361c1)
+++ src/sans/fit/BumpsFitting.py	(revision 85f17f6bb5b70f80e5a85bdff8c094ee719a425e)
@@ -11,4 +11,16 @@
 from sans.fit.AbstractFitEngine import FitEngine
 from sans.fit.AbstractFitEngine import FResult
+
+class BumpsMonitor(object):
+    def __init__(self, handler, max_step=0):
+        self.handler = handler
+        self.max_step = max_step
+    def config_history(self, history):
+        history.requires(time=1, value=2, point=1, step=1)
+    def __call__(self, history):
+        self.handler.progress(history.step[0], self.max_step)
+        if len(history.step)>1 and history.step[1] > history.step[0]:
+            self.handler.improvement()
+        self.handler.update_fit()
 
 class SasProblem(object):
@@ -240,16 +252,9 @@
 
         if True: # bumps
-            def abort_test():
-                try: curr_thread.isquit()
-                except KeyboardInterrupt:
-                    if handler is not None:
-                        handler.stop("Fitting: Terminated!!!")
-                    return True
-                return False
-
             problem = SasProblem(param_list=self.param_list,
                                  model=model.model,
                                  data=data)
-            run_bumps(problem, result, ftol, abort_test)
+            run_bumps(problem, result, ftol,
+                      handler, curr_thread, msg_q)
         else:
             problem = SasProblem(param_list=self.param_list,
@@ -263,5 +268,4 @@
 
         if handler is not None:
-            handler.set_result(result=result)
             handler.update_fit(last=True)
         if q is not None:
@@ -272,8 +276,20 @@
         return [result]
 
-def run_bumps(problem, result, ftol, abort_test):
+def run_bumps(problem, result, ftol, handler, curr_thread, msg_q):
+    def abort_test():
+        if curr_thread is None: return False
+        try: curr_thread.isquit()
+        except KeyboardInterrupt:
+            if handler is not None:
+                handler.stop("Fitting: Terminated!!!")
+            return True
+        return False
+
     fitopts = fitters.FIT_OPTIONS[fitters.FIT_DEFAULT]
     fitclass = fitopts.fitclass
     options = fitopts.options.copy()
+    max_steps = fitopts.options.get('steps', 0) + fitopts.options.get('burn', 0)
+    if 'monitors' not in options:
+        options['monitors'] = [BumpsMonitor(handler, max_steps)]
     options['ftol'] = ftol
     fitdriver = fitters.FitDriver(fitclass, problem=problem,
@@ -297,11 +313,11 @@
     result.theory = problem.theory
 
-def run_levenburg_marquardt(model, result, ftol):
+def run_levenburg_marquardt(problem, result, ftol):
     # This import must be here; otherwise it will be confused when more
     # than one thread exist.
     from scipy import optimize
 
-    out, cov_x, _, mesg, success = optimize.leastsq(model.residuals,
-                                                    model.getp(),
+    out, cov_x, _, mesg, success = optimize.leastsq(problem.residuals,
+                                                    problem.getp(),
                                                     ftol=ftol,
                                                     full_output=1)
@@ -310,8 +326,8 @@
     else:
         stderr = []
-    result.fitness = model.chisq()
+    result.fitness = problem.chisq()
     result.stderr  = stderr
     result.pvec = out
     result.success = success
-    result.theory = model.theory
-
+    result.theory = problem.theory
+
Index: src/sans/perspectives/fitting/console.py
===================================================================
--- src/sans/perspectives/fitting/console.py	(revision 6fe51002a81260397b29374005fb3e465ff93b4a)
+++ src/sans/perspectives/fitting/console.py	(revision 85f17f6bb5b70f80e5a85bdff8c094ee719a425e)
@@ -87,5 +87,5 @@
         Print result object
         """
-        msg = " \n %s \n" % self.result.__str__()
+        msg = " \n %s \n" % str(self.result)
         wx.PostEvent(self.parent, StatusEvent(status=msg))
                      
@@ -136,5 +136,5 @@
         self.fit_duration += self.elapsed_time
         str_time = time.strftime("%a, %d %b %Y %H:%M:%S ", time.localtime(t1))
-        UPDATE_INTERVAL = 0.5
+        UPDATE_INTERVAL = 5.0
         u_flag = False
         if self.fit_duration >= UPDATE_INTERVAL:
@@ -171,5 +171,5 @@
                                               type="progress"))
      
-    def starting_fit(self):
+    def _DEAD_starting_fit(self):
         """
         """
