diff --git a/nifty4/library/krylov_sampling.py b/nifty4/library/krylov_sampling.py
index 95b535b3e1b648de480916594fa06ce52693d612..59d5ab4c2b5cef1d295d3c70f7e3020508de99b8 100644
--- a/nifty4/library/krylov_sampling.py
+++ b/nifty4/library/krylov_sampling.py
@@ -65,13 +65,13 @@ def generate_krylov_samples(D_inv, S, j, N_samps, controller):
 
     r = j.copy()
     p = r.copy()
-    d = p.vdot(D_inv(p))
+    Dip = D_inv(p)
+    d = p.vdot(Dip)
     while True:
         gamma = r.vdot(r) / d
         if gamma == 0.:
             break
         x = x + gamma*p
-        Dip = D_inv(p)
         for samp in y:
             samp += (np.random.randn() * np.sqrt(d) - samp.vdot(Dip)) / d * p
         energy = energy.at(x)
@@ -82,6 +82,7 @@ def generate_krylov_samples(D_inv, S, j, N_samps, controller):
         beta = r_new.vdot(r_new) / r.vdot(r)
         r = r_new
         p = r + beta * p
+        Dip = D_inv(p)
         d = p.vdot(Dip)
         if d == 0.:
             break