diff --git a/nifty6/domains/lm_space.py b/nifty6/domains/lm_space.py
index d3e9723d03b62344fac28ea42ef32c27687978bb..3cad266e3c8c7a0815c6040a2ba3a14a7515ebd7 100644
--- a/nifty6/domains/lm_space.py
+++ b/nifty6/domains/lm_space.py
@@ -11,7 +11,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
-# Copyright(C) 2013-2019 Max-Planck-Society
+# Copyright(C) 2013-2020 Max-Planck-Society
 #
 # NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik.
 
@@ -125,7 +125,7 @@ class LMSpace(StructuredDomain):
         # evaluate the kernel function at the required thetas
         kernel_sphere = Field.from_raw(gl, func(theta))
         # normalize the kernel such that the integral over the sphere is 4pi
-        kernel_sphere = kernel_sphere * (4 * np.pi / kernel_sphere.integrate())
+        kernel_sphere = kernel_sphere * (4 * np.pi / kernel_sphere.s_integrate())
         # compute the spherical harmonic coefficients of the kernel
         op = HarmonicTransformOperator(lm0, gl)
         kernel_lm = op.adjoint_times(kernel_sphere.weight(1)).val
diff --git a/nifty6/domains/rg_space.py b/nifty6/domains/rg_space.py
index 7b41ff75438b385aea45677cee60adbd4b14da62..c27864b25564b3b309f0d2e97e5507e37bc0bbb9 100644
--- a/nifty6/domains/rg_space.py
+++ b/nifty6/domains/rg_space.py
@@ -11,7 +11,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
-# Copyright(C) 2013-2019 Max-Planck-Society
+# Copyright(C) 2013-2020 Max-Planck-Society
 #
 # NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik.
 
@@ -168,7 +168,7 @@ class RGSpace(StructuredDomain):
         op = HarmonicTransformOperator(self, self.get_default_codomain())
         dist = op.target[0]._get_dist_array()
         kernel = Field(op.target, func(dist.val))
-        kernel = kernel / kernel.integrate()
+        kernel = kernel / kernel.s_integrate()
         return op.adjoint_times(kernel.weight(1))
 
     def get_default_codomain(self):
diff --git a/nifty6/extra.py b/nifty6/extra.py
index 762c7115a86d7a7d204a2087991227d04bcfaf4c..049e8632027c5c39f564aebbb792d233f8ba331c 100644
--- a/nifty6/extra.py
+++ b/nifty6/extra.py
@@ -11,7 +11,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
-# Copyright(C) 2013-2019 Max-Planck-Society
+# Copyright(C) 2013-2020 Max-Planck-Society
 #
 # NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik.
 
@@ -44,8 +44,8 @@ def _adjoint_implementation(op, domain_dtype, target_dtype, atol, rtol,
         return
     f1 = from_random("normal", op.domain, dtype=domain_dtype)
     f2 = from_random("normal", op.target, dtype=target_dtype)
-    res1 = f1.vdot(op.adjoint_times(f2))
-    res2 = op.times(f1).vdot(f2)
+    res1 = f1.s_vdot(op.adjoint_times(f2))
+    res2 = op.times(f1).s_vdot(f2)
     if only_r_linear:
         res1, res2 = res1.real, res2.real
     np.testing.assert_allclose(res1, res2, atol=atol, rtol=rtol)
@@ -218,7 +218,7 @@ def consistency_check(op, domain_dtype=np.float64, target_dtype=np.float64,
 
 
 def _get_acceptable_location(op, loc, lin):
-    if not np.isfinite(lin.val.sum()):
+    if not np.isfinite(lin.val.s_sum()):
         raise ValueError('Initial value must be finite')
     dir = from_random("normal", loc.domain)
     dirder = lin.jac(dir)
@@ -231,7 +231,7 @@ def _get_acceptable_location(op, loc, lin):
         try:
             loc2 = loc+dir
             lin2 = op(Linearization.make_var(loc2, lin.want_metric))
-            if np.isfinite(lin2.val.sum()) and abs(lin2.val.sum()) < 1e20:
+            if np.isfinite(lin2.val.s_sum()) and abs(lin2.val.s_sum()) < 1e20:
                 break
         except FloatingPointError:
             pass
@@ -285,7 +285,7 @@ def check_jacobian_consistency(op, loc, tol=1e-8, ntries=100, perf_check=True):
             dirder = linmid.jac(dir)
             numgrad = (lin2.val-lin.val)
             xtol = tol * dirder.norm() / np.sqrt(dirder.size)
-            if (abs(numgrad-dirder) <= xtol).all():
+            if (abs(numgrad-dirder) <= xtol).s_all():
                 break
             dir = dir*0.5
             dirnorm *= 0.5
diff --git a/nifty6/field.py b/nifty6/field.py
index 00cb2923d50ca3b392c3d71a0e11ff36d91d9146..f7b64ac6a9df577bb5601c1966a017cbb81357f8 100644
--- a/nifty6/field.py
+++ b/nifty6/field.py
@@ -11,7 +11,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
-# Copyright(C) 2013-2019 Max-Planck-Society
+# Copyright(C) 2013-2020 Max-Planck-Society
 #
 # NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik.
 
@@ -284,7 +284,7 @@ class Field(object):
         from .operators.outer_product_operator import OuterProduct
         return OuterProduct(self, x.domain)(x)
 
-    def vdot(self, x=None, spaces=None):
+    def vdot(self, x, spaces=None):
         """Computes the dot product of 'self' with x.
 
         Parameters
@@ -312,11 +312,33 @@ class Field(object):
         spaces = utilities.parse_spaces(spaces, ndom)
 
         if len(spaces) == ndom:
-            return np.vdot(self._val, x._val)
+            return Field.scalar(np.array(np.vdot(self._val, x._val)))
         # If we arrive here, we have to do a partial dot product.
         # For the moment, do this the explicit, non-optimized way
         return (self.conjugate()*x).sum(spaces=spaces)
 
+    def s_vdot(self, x):
+        """Computes the dot product of 'self' with x.
+
+        Parameters
+        ----------
+        x : Field
+            x must be defined on the same domain as `self`.
+
+        Returns
+        -------
+        float or complex
+            The dot product
+        """
+        if not isinstance(x, Field):
+            raise TypeError("The dot-partner must be an instance of " +
+                            "the Field class")
+
+        if x._domain != self._domain:
+            raise ValueError("Domain mismatch")
+
+        return np.vdot(self._val, x._val)
+
     def norm(self, ord=2):
         """Computes the L2-norm of the field values.
 
@@ -357,7 +379,7 @@ class Field(object):
 
     def _contraction_helper(self, op, spaces):
         if spaces is None:
-            return getattr(self._val, op)()
+            return Field.scalar(getattr(self._val, op)())
 
         spaces = utilities.parse_spaces(spaces, len(self._domain))
 
@@ -371,7 +393,7 @@ class Field(object):
 
         # check if the result is scalar or if a result_field must be constr.
         if np.isscalar(data):
-            return data
+            return Field.scalar(data)
         else:
             return_domain = tuple(dom
                                   for i, dom in enumerate(self._domain)
@@ -379,6 +401,9 @@ class Field(object):
 
             return Field(DomainTuple.make(return_domain), data)
 
+#     def _s_contraction_helper(self, op):
+#         return getattr(self._val, op)()
+
     def sum(self, spaces=None):
         """Sums up over the sub-domains given by `spaces`.
 
@@ -390,12 +415,21 @@ class Field(object):
 
         Returns
         -------
-        Field or scalar
-            The result of the summation. If it is carried out over the entire
-            domain, this is a scalar, otherwise a Field.
+        Field
+            The result of the summation.
         """
         return self._contraction_helper('sum', spaces)
 
+    def s_sum(self):
+        """Returns the sum over all entries
+
+        Returns
+        -------
+        scalar
+            The result of the summation.
+        """
+        return self._val.sum()
+
     def integrate(self, spaces=None):
         """Integrates over the sub-domains given by `spaces`.
 
@@ -410,9 +444,8 @@ class Field(object):
 
         Returns
         -------
-        Field or scalar
-            The result of the integration. If it is carried out over the
-            entire domain, this is a scalar, otherwise a Field.
+        Field
+            The result of the integration.
         """
         swgt = self.scalar_weight(spaces)
         if swgt is not None:
@@ -422,6 +455,23 @@ class Field(object):
         tmp = self.weight(1, spaces=spaces)
         return tmp.sum(spaces)
 
+    def s_integrate(self):
+        """Integrates over the Field.
+
+        Integration is performed by summing over `self` multiplied by its
+        volume factors.
+
+        Returns
+        -------
+        Scalar
+            The result of the integration.
+        """
+        swgt = self.scalar_weight()
+        if swgt is not None:
+            return self.s_sum()*swgt
+        tmp = self.weight(1)
+        return tmp.s_sum()
+
     def prod(self, spaces=None):
         """Computes the product over the sub-domains given by `spaces`.
 
@@ -434,18 +484,26 @@ class Field(object):
 
         Returns
         -------
-        Field or scalar
-            The result of the product. If it is carried out over the entire
-            domain, this is a scalar, otherwise a Field.
+        Field
+            The result of the product. 
         """
         return self._contraction_helper('prod', spaces)
 
+    def s_prod(self):
+        return self._val.prod()
+
     def all(self, spaces=None):
         return self._contraction_helper('all', spaces)
 
+    def s_all(self):
+        return self._val.all()
+
     def any(self, spaces=None):
         return self._contraction_helper('any', spaces)
 
+    def s_any(self):
+        return self._val.any()
+
 #     def min(self, spaces=None):
 #         """Determines the minimum over the sub-domains given by `spaces`.
 #
@@ -457,9 +515,8 @@ class Field(object):
 #
 #         Returns
 #         -------
-#         Field or scalar
-#             The result of the operation. If it is carried out over the entire
-#             domain, this is a scalar, otherwise a Field.
+#         Field
+#             The result of the operation.
 #         """
 #         return self._contraction_helper('min', spaces)
 #
@@ -474,9 +531,8 @@ class Field(object):
 #
 #         Returns
 #         -------
-#         Field or scalar
-#             The result of the operation. If it is carried out over the entire
-#             domain, this is a scalar, otherwise a Field.
+#         Field
+#             The result of the operation.
 #         """
 #         return self._contraction_helper('max', spaces)
 
@@ -494,9 +550,8 @@ class Field(object):
 
         Returns
         -------
-        Field or scalar
-            The result of the operation. If it is carried out over the entire
-            domain, this is a scalar, otherwise a Field.
+        Field
+            The result of the operation.
         """
         if self.scalar_weight(spaces) is not None:
             return self._contraction_helper('mean', spaces)
@@ -505,6 +560,19 @@ class Field(object):
         tmp = self.weight(1, spaces)
         return tmp.sum(spaces)*(1./tmp.total_volume(spaces))
 
+    def s_mean(self):
+        """Determines the field mean
+
+        ``x.s_mean()`` is equivalent to
+        ``x.s_integrate()/x.total_volume()``.
+
+        Returns
+        -------
+        scalar
+            The result of the operation.
+        """
+        return self.s_integrate()/self.total_volume()
+
     def var(self, spaces=None):
         """Determines the variance over the sub-domains given by `spaces`.
 
@@ -517,9 +585,8 @@ class Field(object):
 
         Returns
         -------
-        Field or scalar
-            The result of the operation. If it is carried out over the entire
-            domain, this is a scalar, otherwise a Field.
+        Field
+            The result of the operation.
         """
         if self.scalar_weight(spaces) is not None:
             return self._contraction_helper('var', spaces)
@@ -531,6 +598,24 @@ class Field(object):
             sq = (self-m1)**2
         return sq.mean(spaces)
 
+    def s_var(self):
+        """Determines the field variance
+
+        Returns
+        -------
+        scalar
+            The result of the operation.
+        """
+        if self.scalar_weight() is not None:
+            return self._val.var()
+        # MR FIXME: not very efficient or accurate
+        m1 = self.s_mean()
+        if utilities.iscomplextype(self.dtype):
+            sq = abs(self-m1)**2
+        else:
+            sq = (self-m1)**2
+        return sq.s_mean()
+
     def std(self, spaces=None):
         """Determines the standard deviation over the sub-domains given by
         `spaces`.
@@ -546,15 +631,29 @@ class Field(object):
 
         Returns
         -------
-        Field or scalar
-            The result of the operation. If it is carried out over the entire
-            domain, this is a scalar, otherwise a Field.
+        Field
+            The result of the operation.
         """
         from .sugar import sqrt
         if self.scalar_weight(spaces) is not None:
             return self._contraction_helper('std', spaces)
         return sqrt(self.var(spaces))
 
+    def s_std(self):
+        """Determines the standard deviation of the Field.
+
+        ``x.s_std()`` is equivalent to ``sqrt(x.s_var())``.
+
+        Returns
+        -------
+        scalar
+            The result of the operation.
+        """
+        from .sugar import sqrt
+        if self.scalar_weight() is not None:
+            return self._val.std()
+        return np.sqrt(self.s_var())
+
     def __repr__(self):
         return "<nifty6.Field>"
 
diff --git a/nifty6/linearization.py b/nifty6/linearization.py
index a76098388e0ea70a336fda108a902a7c1991aaec..bbc54c9be00e0c6a934637fa802a1c495c68f50d 100644
--- a/nifty6/linearization.py
+++ b/nifty6/linearization.py
@@ -234,10 +234,10 @@ class Linearization(object):
         from .operators.simple_linear_operators import VdotOperator
         if isinstance(other, (Field, MultiField)):
             return self.new(
-                Field.scalar(self._val.vdot(other)),
+                self._val.vdot(other),
                 VdotOperator(other)(self._jac))
         return self.new(
-            Field.scalar(self._val.vdot(other._val)),
+            self._val.vdot(other._val),
             VdotOperator(self._val)(other._jac) +
             VdotOperator(other._val)(self._jac))
 
@@ -256,14 +256,9 @@ class Linearization(object):
             the (partial) sum
         """
         from .operators.contraction_operator import ContractionOperator
-        if spaces is None:
-            return self.new(
-                Field.scalar(self._val.sum()),
-                ContractionOperator(self._jac.target, None)(self._jac))
-        else:
-            return self.new(
-                self._val.sum(spaces),
-                ContractionOperator(self._jac.target, spaces)(self._jac))
+        return self.new(
+            self._val.sum(spaces),
+            ContractionOperator(self._jac.target, spaces)(self._jac))
 
     def integrate(self, spaces=None):
         """Computes the (partial) integral over self
@@ -280,14 +275,9 @@ class Linearization(object):
             the (partial) integral
         """
         from .operators.contraction_operator import ContractionOperator
-        if spaces is None:
-            return self.new(
-                Field.scalar(self._val.integrate()),
-                ContractionOperator(self._jac.target, None, 1)(self._jac))
-        else:
-            return self.new(
-                self._val.integrate(spaces),
-                ContractionOperator(self._jac.target, spaces, 1)(self._jac))
+        return self.new(
+            self._val.integrate(spaces),
+            ContractionOperator(self._jac.target, spaces, 1)(self._jac))
 
     def exp(self):
         tmp = self._val.exp()
diff --git a/nifty6/multi_field.py b/nifty6/multi_field.py
index cfe14b2428e2a5551e00c4a2a7408c92bc5beb2f..d0a629a52bcefc822de31c724242f8024f17a2f7 100644
--- a/nifty6/multi_field.py
+++ b/nifty6/multi_field.py
@@ -111,13 +111,16 @@ class MultiField(object):
         if other._domain != self._domain:
             raise ValueError("domains are incompatible.")
 
-    def vdot(self, x):
+    def s_vdot(self, x):
         result = 0.
         self._check_domain(x)
         for v1, v2 in zip(self._val, x._val):
-            result += v1.vdot(v2)
+            result += v1.s_vdot(v2)
         return result
 
+    def vdot(self, x):
+        return Field.scalar(self.s_vdot(x))
+
 #    @staticmethod
 #    def build_dtype(dtype, domain):
 #        if isinstance(dtype, dict):
diff --git a/nifty6/operators/energy_operators.py b/nifty6/operators/energy_operators.py
index 9ffe3919cda3003d6f037fdd6f074d6ecb225a39..486d42e4e427b61c1df6e5da01953f882e89a5e1 100644
--- a/nifty6/operators/energy_operators.py
+++ b/nifty6/operators/energy_operators.py
@@ -60,7 +60,7 @@ class Squared2NormOperator(EnergyOperator):
 
     def apply(self, x, difforder):
         self._check_input(x)
-        res = Field.scalar(x.vdot(x))
+        res = x.vdot(x)
         if difforder == self.VALUE_ONLY:
             return res
         jac = VdotOperator(2*x)
@@ -90,7 +90,7 @@ class QuadraticFormOperator(EnergyOperator):
     def apply(self, x, difforder):
         self._check_input(x)
         t1 = self._op(x)
-        res = Field.scalar(0.5*x.vdot(t1))
+        res = 0.5*x.vdot(t1)
         if difforder == self.VALUE_ONLY:
             return res
         return Linearization(res, VdotOperator(t1))
@@ -132,9 +132,7 @@ class VariableCovarianceGaussianEnergy(EnergyOperator):
         if difforder >= self.WITH_JAC:
             x = Linearization.make_var(x, difforder == self.WITH_METRIC)
         res = 0.5*(x[self._r].vdot(x[self._r]*x[self._icov]).real - x[self._icov].log().sum())
-        if difforder == self.VALUE_ONLY:
-            return Field.scalar(res)
-        if difforder == self.WITH_JAC:
+        if difforder <= self.WITH_JAC:
             return res
         mf = {self._r: x.val[self._icov], self._icov: .5*x.val[self._icov]**(-2)}
         return res.add_metric(makeOp(MultiField.from_dict(mf)))
@@ -240,9 +238,7 @@ class PoissonianEnergy(EnergyOperator):
         if difforder >= self.WITH_JAC:
             x = Linearization.make_var(x, difforder == self.WITH_METRIC)
         res = x.sum() - x.log().vdot(self._d)
-        if difforder == self.VALUE_ONLY:
-            return Field.scalar(res)
-        if difforder == self.WITH_JAC:
+        if difforder <= self.WITH_JAC:
             return res
         return res.add_metric(makeOp(1./x.val))
 
@@ -284,9 +280,7 @@ class InverseGammaLikelihood(EnergyOperator):
         if difforder >= self.WITH_JAC:
             x = Linearization.make_var(x, difforder == self.WITH_METRIC)
         res = x.log().vdot(self._alphap1) + x.one_over().vdot(self._beta)
-        if difforder == self.VALUE_ONLY:
-            return Field.scalar(res)
-        if difforder == self.WITH_JAC:
+        if difforder <= self.WITH_JAC:
             return res
         return res.add_metric(makeOp(self._alphap1/(x.val**2)))
 
@@ -317,9 +311,7 @@ class StudentTEnergy(EnergyOperator):
         if difforder >= self.WITH_JAC:
             x = Linearization.make_var(x, difforder == self.WITH_METRIC)
         res = ((self._theta+1)/2)*(x**2/self._theta).log1p().sum()
-        if difforder == self.VALUE_ONLY:
-            return Field.scalar(res)
-        if difforder == self.WITH_JAC:
+        if difforder <= self.WITH_JAC:
             return res
         met = ScalingOperator(self.domain, (self._theta+1) / (self._theta+3))
         return res.add_metric(met)
@@ -355,9 +347,7 @@ class BernoulliEnergy(EnergyOperator):
         if difforder >= self.WITH_JAC:
             x = Linearization.make_var(x, difforder == self.WITH_METRIC)
         res = -x.log().vdot(self._d) + (1.-x).log().vdot(self._d-1.)
-        if difforder == self.VALUE_ONLY:
-            return Field.scalar(res)
-        if difforder == self.WITH_JAC:
+        if difforder <= self.WITH_JAC:
             return res
         met = makeOp(1./(x.val*(1. - x.val)))
         met = SandwichOperator.make(x.jac, met)
diff --git a/nifty6/operators/simple_linear_operators.py b/nifty6/operators/simple_linear_operators.py
index f3248b388c5be0a8403887c9325e4be78aea5059..d95fc3a56d762463dd9231bfeddd43a7d255e6fe 100644
--- a/nifty6/operators/simple_linear_operators.py
+++ b/nifty6/operators/simple_linear_operators.py
@@ -41,7 +41,7 @@ class VdotOperator(LinearOperator):
     def apply(self, x, mode):
         self._check_mode(mode)
         if mode == self.TIMES:
-            return Field.scalar(self._field.vdot(x))
+            return self._field.vdot(x)
         return self._field*x.val[()]
 
 
diff --git a/test/test_field.py b/test/test_field.py
index 657de9dfe3b0182be8a9d4ac39c0cebba8a0bdb0..0701d0c6da8bcb2ed3c8dafd2be9df8d167e80c0 100644
--- a/test/test_field.py
+++ b/test/test_field.py
@@ -69,8 +69,8 @@ def test_power_synthesize_analyze(space1, space2):
         sk = opfull.draw_sample()
 
         sp = ift.power_analyze(sk, spaces=(0, 1), keep_phase_information=False)
-        sc1.add(sp.sum(spaces=1)/fp2.sum())
-        sc2.add(sp.sum(spaces=0)/fp1.sum())
+        sc1.add(sp.sum(spaces=1)/fp2.s_sum())
+        sc2.add(sp.sum(spaces=0)/fp1.s_sum())
 
     assert_allclose(sc1.mean.val, fp1.val, rtol=0.2)
     assert_allclose(sc2.mean.val, fp2.val, rtol=0.2)
@@ -98,8 +98,8 @@ def test_DiagonalOperator_power_analyze2(space1, space2):
     for ii in range(samples):
         sk = S_full.draw_sample()
         sp = ift.power_analyze(sk, spaces=(0, 1), keep_phase_information=False)
-        sc1.add(sp.sum(spaces=1)/fp2.sum())
-        sc2.add(sp.sum(spaces=0)/fp1.sum())
+        sc1.add(sp.sum(spaces=1)/fp2.s_sum())
+        sc2.add(sp.sum(spaces=0)/fp1.s_sum())
 
     assert_allclose(sc1.mean.val, fp1.val, rtol=0.2)
     assert_allclose(sc2.mean.val, fp2.val, rtol=0.2)
@@ -124,8 +124,8 @@ def test_vdot():
     s = ift.RGSpace((10,))
     f1 = ift.Field.from_random("normal", domain=s, dtype=np.complex128)
     f2 = ift.Field.from_random("normal", domain=s, dtype=np.complex128)
-    assert_allclose(f1.vdot(f2), f1.vdot(f2, spaces=0))
-    assert_allclose(f1.vdot(f2), np.conj(f2.vdot(f1)))
+    assert_allclose(f1.s_vdot(f2), f1.vdot(f2, spaces=0).val)
+    assert_allclose(f1.s_vdot(f2), np.conj(f2.s_vdot(f1)))
 
 
 def test_vdot2():
@@ -154,7 +154,7 @@ def test_sum():
         ), distances=(0.3,))
     m1 = ift.Field(ift.makeDomain(x1), np.arange(9))
     m2 = ift.Field.full(ift.makeDomain((x1, x2)), 0.45)
-    res1 = m1.sum()
+    res1 = m1.s_sum()
     res2 = m2.sum(spaces=1)
     assert_allclose(res1, 36)
     assert_allclose(res2.val, np.full(9, 2*12*0.45))
@@ -165,7 +165,7 @@ def test_integrate():
     x2 = ift.RGSpace((2, 12), distances=(0.3,))
     m1 = ift.Field(ift.makeDomain(x1), np.arange(9))
     m2 = ift.Field.full(ift.makeDomain((x1, x2)), 0.45)
-    res1 = m1.integrate()
+    res1 = m1.s_integrate()
     res2 = m2.integrate(spaces=1)
     assert_allclose(res1, 36*2)
     assert_allclose(res2.val, np.full(9, 2*12*0.45*0.3**2))
@@ -204,13 +204,13 @@ def test_trivialities():
     assert_equal(f1.one_over().val, (1./f1).val)
     assert_equal(f1.real.val, 27.)
     assert_equal(f1.imag.val, 3.)
-    assert_equal(f1.sum(), f1.sum(0))
+    assert_equal(f1.s_sum(), f1.sum(0).val)
     assert_equal(f1.conjugate().val,
                  ift.Field.full(s1, 27. - 3j).val)
     f1 = ift.makeField(s1, np.arange(10))
     # assert_equal(f1.min(), 0)
     # assert_equal(f1.max(), 9)
-    assert_equal(f1.prod(), 0)
+    assert_equal(f1.s_prod(), 0)
 
 
 def test_weight():
@@ -241,12 +241,12 @@ def test_weight():
 @pmp('dt', [np.float64, np.complex128])
 def test_reduction(dom, dt):
     s1 = ift.Field.full(dom, dt(1.))
-    assert_allclose(s1.mean(), 1.)
-    assert_allclose(s1.mean(0), 1.)
-    assert_allclose(s1.var(), 0., atol=1e-14)
-    assert_allclose(s1.var(0), 0., atol=1e-14)
-    assert_allclose(s1.std(), 0., atol=1e-14)
-    assert_allclose(s1.std(0), 0., atol=1e-14)
+    assert_allclose(s1.s_mean(), 1.)
+    assert_allclose(s1.mean(0).val, 1.)
+    assert_allclose(s1.s_var(), 0., atol=1e-14)
+    assert_allclose(s1.var(0).val, 0., atol=1e-14)
+    assert_allclose(s1.s_std(), 0., atol=1e-14)
+    assert_allclose(s1.std(0).val, 0., atol=1e-14)
 
 
 def test_err():
@@ -322,12 +322,12 @@ def test_stdfunc():
 
 def test_emptydomain():
     f = ift.Field.full((), 3.)
-    assert_equal(f.sum(), 3.)
-    assert_equal(f.prod(), 3.)
+    assert_equal(f.s_sum(), 3.)
+    assert_equal(f.s_prod(), 3.)
     assert_equal(f.val, 3.)
     assert_equal(f.val.shape, ())
     assert_equal(f.val.size, 1)
-    assert_equal(f.vdot(f), 9.)
+    assert_equal(f.s_vdot(f), 9.)
 
 
 @pmp('num', [float(5), 5.])
diff --git a/test/test_operators/test_fft_operator.py b/test/test_operators/test_fft_operator.py
index aca6f8732476455a76f2709904cb7a0080b37919..0fc4ccaf699ef1d246f97e6d413ec8e896297734 100644
--- a/test/test_operators/test_fft_operator.py
+++ b/test/test_operators/test_fft_operator.py
@@ -119,5 +119,5 @@ def test_normalisation(space, dtype, op):
     out2 = fft2.inverse_times(inp)
     zero_idx = tuple([0]*len(space.shape))
     assert_allclose(
-        inp.val[zero_idx], out.integrate(), rtol=tol, atol=tol)
+        inp.val[zero_idx], out.s_integrate(), rtol=tol, atol=tol)
     assert_allclose(out.val, out2.val, rtol=tol, atol=tol)
diff --git a/test/test_operators/test_harmonic_transform_operator.py b/test/test_operators/test_harmonic_transform_operator.py
index f28e40d80b6e4348dd5ff75ee2d153be1b9b3eb4..6e9e0510a55107f0c2d3cc9bd83d894d27bfaeb1 100644
--- a/test/test_operators/test_harmonic_transform_operator.py
+++ b/test/test_operators/test_harmonic_transform_operator.py
@@ -44,8 +44,8 @@ def test_dotsht(lm, tp):
     inp = ift.Field.from_random(
         domain=a, random_type='normal', std=1, mean=0, dtype=tp)
     out = fft.times(inp)
-    v1 = np.sqrt(out.vdot(out))
-    v2 = np.sqrt(inp.vdot(fft.adjoint_times(out)))
+    v1 = np.sqrt(out.s_vdot(out))
+    v2 = np.sqrt(inp.s_vdot(fft.adjoint_times(out)))
     assert_allclose(v1, v2, rtol=tol, atol=tol)
 
 
@@ -57,8 +57,8 @@ def test_dotsht2(lm, tp):
     inp = ift.Field.from_random(
         domain=a, random_type='normal', std=1, mean=0, dtype=tp)
     out = fft.times(inp)
-    v1 = np.sqrt(out.vdot(out))
-    v2 = np.sqrt(inp.vdot(fft.adjoint_times(out)))
+    v1 = np.sqrt(out.s_vdot(out))
+    v2 = np.sqrt(inp.s_vdot(fft.adjoint_times(out)))
     assert_allclose(v1, v2, rtol=tol, atol=tol)
 
 
@@ -72,4 +72,4 @@ def test_normalisation(space, tp):
     out = fft.times(inp)
     zero_idx = tuple([0]*len(space.shape))
     assert_allclose(
-        inp.val[zero_idx], out.integrate(), rtol=tol, atol=tol)
+        inp.val[zero_idx], out.s_integrate(), rtol=tol, atol=tol)