diff --git a/nifty6/library/correlated_fields.py b/nifty6/library/correlated_fields.py
index 9955bb1b7253dd6ca3b7ea3fbab9ad297886482b..1ca3fc4ee0fb7620a3bb3abc9657c8da169a82cc 100644
--- a/nifty6/library/correlated_fields.py
+++ b/nifty6/library/correlated_fields.py
@@ -16,13 +16,16 @@
 #
 # NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik.
 
+from functools import reduce
+from operator import mul
+
 import numpy as np
 
-from ..logger import logger
 from ..domain_tuple import DomainTuple
 from ..domains.power_space import PowerSpace
 from ..domains.unstructured_domain import UnstructuredDomain
 from ..field import Field
+from ..logger import logger
 from ..multi_field import MultiField
 from ..operators.adder import Adder
 from ..operators.contraction_operator import ContractionOperator
@@ -447,21 +450,17 @@ class CorrelatedFieldMaker:
                                        self._position_spaces[0][amp_space],
                                        space=spaces[0])
         for i in range(1, n_amplitudes):
-            ht = (HarmonicTransformOperator(ht.target,
-                                            self._position_spaces[i][amp_space],
-                                            space=spaces[i]) @ ht)
-
-        pd = PowerDistributor(hspace, self._a[0].target[amp_space], amp_space)
-        for i in range(1, n_amplitudes):
-            pd = (pd @ PowerDistributor(
-                pd.domain, self._a[i].target[amp_space], space=spaces[i]))
-
-        a = ContractionOperator(pd.domain, spaces[1:]).adjoint @ self._a[0]
-        for i in range(1, n_amplitudes):
-            co = ContractionOperator(pd.domain, spaces[:i] + spaces[i + 1:])
-            a = a*(co.adjoint @ self._a[i])
-
-        return ht(azm*(pd @ a)*ducktape(hspace, None, self._prefix + 'xi'))
+            ht = HarmonicTransformOperator(ht.target,
+                                           self._position_spaces[i][amp_space],
+                                           space=spaces[i]) @ ht
+        a = []
+        for ii in range(n_amplitudes):
+            co = ContractionOperator(hspace, spaces[:ii] + spaces[ii + 1:])
+            pp = self._a[ii].target[amp_space]
+            pd = PowerDistributor(pp.harmonic_partner, pp, amp_space)
+            a.append(co.adjoint @ pd @ self._a[ii])
+        corr = reduce(mul, a)
+        return ht(azm*corr*ducktape(hspace, None, self._prefix + 'xi'))
 
     def finalize(self, offset=None, prior_info=100):
         """