diff --git a/demos/critical_filtering.py b/demos/critical_filtering.py
index 19fcb4a8876fb94d70f9e96d83fe3bcc67aa92f1..11d670beb0c4a4a6eead0bf30c7998b8c2883276 100644
--- a/demos/critical_filtering.py
+++ b/demos/critical_filtering.py
@@ -59,7 +59,7 @@ if __name__ == "__main__":
     S = ift.create_power_operator(h_space, power_spectrum=p_spec)
 
     # Draw a sample sh from the prior distribution in harmonic space
-    sp = ift.Field(p_space,  val=p_spec(p_space.k_lengths))
+    sp = ift.PS_field(p_space, p_spec)
     sh = ift.power_synthesize(sp, real_signal=True)
 
     # Choose the measurement instrument
diff --git a/demos/log_normal_wiener_filter.py b/demos/log_normal_wiener_filter.py
index 8b4209a065081d61bc07e13f84053d965bbcfb27..542737d2b7f7fc34aebf7a08a54a9d2f432f1e68 100644
--- a/demos/log_normal_wiener_filter.py
+++ b/demos/log_normal_wiener_filter.py
@@ -24,7 +24,7 @@ if __name__ == "__main__":
 
     # Creating the mock signal |\label{code:wf_mock_signal}|
     S = ift.create_power_operator(harmonic_space, power_spectrum=power_spectrum)
-    mock_power = ift.Field(power_space, val=power_spectrum(power_space.k_lengths))
+    mock_power = ift.PS_field(power_space, power_spectrum)
     mock_signal = fft(ift.power_synthesize(mock_power, real_signal=True))
 
     # Setting up an exemplary response
diff --git a/demos/paper_demos/wiener_filter.py b/demos/paper_demos/wiener_filter.py
index 229c6ab1f9732c0b317e2a0e02a0261581fbe868..e32d76a4a63e86752df8686b1216f485f3072071 100644
--- a/demos/paper_demos/wiener_filter.py
+++ b/demos/paper_demos/wiener_filter.py
@@ -23,7 +23,7 @@ if __name__ == "__main__":
 
     # Creating the mock signal |\label{code:wf_mock_signal}|
     S = ift.create_power_operator(harmonic_space, power_spectrum=power_spectrum)
-    mock_power = ift.Field(power_space, val=power_spectrum(power_space.k_lengths))
+    mock_power = ift.PS_field(power_space, power_spectrum)
     mock_signal = fft(ift.power_synthesize(mock_power, real_signal=True))
 
     # Setting up an exemplary response
diff --git a/demos/probing.py b/demos/probing.py
index 21b63493348415dae11199ae38517561f9bc4eda..4f3f1e0ef001d6cd815c1f89da5c70ca449226b1 100644
--- a/demos/probing.py
+++ b/demos/probing.py
@@ -4,6 +4,7 @@ import numpy as np
 
 np.random.seed(42)
 
+
 class DiagonalProber(ift.DiagonalProberMixin, ift.Prober):
     pass
 
diff --git a/nifty/data_objects/distributed_do.py b/nifty/data_objects/distributed_do.py
index b747284841459aef24c5d8c0a7946d2daea340cd..259b1ed39ec921705439b80418dc3c480bdd16fc 100644
--- a/nifty/data_objects/distributed_do.py
+++ b/nifty/data_objects/distributed_do.py
@@ -23,7 +23,7 @@ def _shareRange(nwork, nshares, myshare):
     nbase = nwork//nshares
     additional = nwork % nshares
     lo = myshare*nbase + min(myshare, additional)
-    hi = lo + nbase + int(myshare<additional)
+    hi = lo + nbase + int(myshare < additional)
     return lo, hi
 
 
@@ -408,15 +408,15 @@ def redistribute(arr, dist=None, nodist=None):
         ofs = 0
         for i in range(ntask):
             lo, hi = _shareRange(arr.shape[dist], ntask, i)
-            sslice[dist] = slice(lo,hi)
+            sslice[dist] = slice(lo, hi)
             ssz[i] = ssz0*(hi-lo)
             sbuf[ofs:ofs+ssz[i]] = arr._data[sslice].flat
             ofs += ssz[i]
             rsz[i] = rsz0*_shareSize(arr.shape[arr._distaxis], ntask, i)
     ssz *= arr._data.itemsize
     rsz *= arr._data.itemsize
-    sdisp = np.append (0, np.cumsum(ssz[:-1]))
-    rdisp = np.append (0, np.cumsum(rsz[:-1]))
+    sdisp = np.append(0, np.cumsum(ssz[:-1]))
+    rdisp = np.append(0, np.cumsum(rsz[:-1]))
     s_msg = [sbuf, (ssz, sdisp), MPI.BYTE]
     r_msg = [rbuf, (rsz, rdisp), MPI.BYTE]
     _comm.Alltoallv(s_msg, r_msg)
@@ -430,7 +430,7 @@ def redistribute(arr, dist=None, nodist=None):
         ofs = 0
         for i in range(ntask):
             lo, hi = _shareRange(arr.shape[arr._distaxis], ntask, i)
-            rslice[arr._distaxis] = slice(lo,hi)
+            rslice[arr._distaxis] = slice(lo, hi)
             sz = rsz[i]//arr._data.itemsize
             arrnew._data[rslice].flat = rbuf[ofs:ofs+sz]
             ofs += sz
diff --git a/nifty/sugar.py b/nifty/sugar.py
index 052586a8980c7f93b2cf8e148b47740a4437038b..e87a79adf31d7b6413cc93c8fa9cb54e4e38d928 100644
--- a/nifty/sugar.py
+++ b/nifty/sugar.py
@@ -29,7 +29,8 @@ from . import Space,\
 from . import nifty_utilities as utilities
 from . import dobj
 
-__all__ = ['power_analyze',
+__all__ = ['PS_field',
+           'power_analyze',
            'power_synthesize',
            'power_synthesize_special',
            'create_power_field',
@@ -38,6 +39,12 @@ __all__ = ['power_analyze',
            'create_composed_fft_operator']
 
 
+def PS_field(pspace, func, dtype=None):
+    if not isinstance(pspace, PowerSpace):
+        raise TypeError
+    data = dobj.from_global_data(func(pspace.k_lengths))
+    return Field(pspace, val=data, dtype=dtype)
+
 def _single_power_analyze(field, idx, binbounds):
     from .operators.power_projection_operator import PowerProjectionOperator
     power_domain = PowerSpace(field.domain[idx], binbounds)
@@ -223,9 +230,7 @@ def create_power_field(domain, power_spectrum, dtype=None):
         fp = Field(power_domain, val=power_spectrum.val, dtype=dtype)
     else:
         power_domain = PowerSpace(domain)
-        fp = Field(power_domain,
-                   val=dobj.from_global_data(power_spectrum(power_domain.k_lengths)),
-                   dtype=dtype)
+        fp = PS_field(power_domain, power_spectrum, dtype)
     P = PowerProjectionOperator(domain, power_domain)
     f = P.adjoint_times(fp)