diff --git a/nifty/config/nifty_about.py b/nifty/config/nifty_about.py
index 3e34608dbbce181c26ffef7996977b971fa5d6cd..94cbe802d5a469187316ee2d3566ce096c724358 100644
--- a/nifty/config/nifty_about.py
+++ b/nifty/config/nifty_about.py
@@ -23,9 +23,20 @@ from sys import stdout as so
 import os
 import inspect
 
+import d2o
+import keepers
+
 from nifty import __version__
 
 
+MPI = d2o.config.dependency_injector[
+        keepers.get_Configuration('D2O')['mpi_module']]
+
+comm = MPI.COMM_WORLD
+size = comm.size
+rank = comm.rank
+
+
 class switch(object):
     """
         ..                            __   __               __
@@ -251,12 +262,12 @@ class notification(switch):
         i = 2
         current = inspect.stack()[i][3]
         while current != '<module>':
-            result = '.' + current  + result
+            result = '.' + current + result
             i += 1
             current = inspect.stack()[i][3]
         return result[1:]
 
-    def cstring(self,subject):
+    def cstring(self, subject):
         """
             Casts an object to a string and augments that with a colour code.
 
@@ -272,10 +283,11 @@ class notification(switch):
                 String augmented with a color code.
 
         """
-        return self.ccode + str(self._get_caller()) + ':\n' + \
-                str(subject) + self._code + '\n'
+        if rank == 0:
+            return self.ccode + str(self._get_caller()) + ':\n' + \
+                   str(subject) + self._code + '\n'
 
-    def cflush(self,subject):
+    def cflush(self, subject):
         """
             Flushes an object in its colour coded sting representation to the
             standard output (*without* line break).
@@ -291,11 +303,11 @@ class notification(switch):
             None
 
         """
-        if(self.status):
+        if self.status and rank == 0:
             so.write(self.cstring(subject))
             so.flush()
 
-    def cprint(self,subject):
+    def cprint(self, subject):
         """
             Flushes an object in its colour coded sting representation to the
             standard output (*with* line break).
@@ -311,7 +323,7 @@ class notification(switch):
             None
 
         """
-        if(self.status):
+        if self.status and rank == 0:
             so.write(self.cstring(subject)+"\n")
             so.flush()
 
diff --git a/nifty/operators/nifty_minimization.py b/nifty/operators/nifty_minimization.py
index ff85e2a489b95ba5cb832881b76543b9c61dc49f..c2394f2e33c72851356d94deac419d050fdf9a99 100644
--- a/nifty/operators/nifty_minimization.py
+++ b/nifty/operators/nifty_minimization.py
@@ -857,7 +857,11 @@ class quasi_newton_minimizer(object):
         step_length = 0
         for i in xrange(limii):
             if self.callback is not None:
-                self.callback(self.x, i)
+                try:
+                    self.callback(self.x, f_k, i)
+                except StopIteration:
+                    self.note.cprint("\nCallback function stopped minization.")
+                    break
 
             # compute the the gradient for the current x
             gradient = self.fprime(self.x)
diff --git a/nifty/operators/nifty_operators.py b/nifty/operators/nifty_operators.py
index 273a14afd2e2842e04a6a21d375c0249878d41e0..a89e38cad4774aed7a41c069c59c1734a3a8bba4 100644
--- a/nifty/operators/nifty_operators.py
+++ b/nifty/operators/nifty_operators.py
@@ -3383,8 +3383,8 @@ class propagator_operator(operator):
             raise ValueError(about._errors.cstring(
                 "ERROR: At least M or N must be given."))
 
-    def _multiply(self, x, W=None, spam=None, reset=None, note=False,
-                  x0=None, tol=1E-4, clevel=1, limii=None, **kwargs):
+    def _multiply(self, x, W=None, spam=None, reset=None, note=True,
+                  x0=None, tol=1E-3, clevel=1, limii=1000, **kwargs):
 
         if W is None:
             W = self.S