diff --git a/python/dune/perftool/blockstructured/accumulation.py b/python/dune/perftool/blockstructured/accumulation.py
index 05b2c8b61e56b0edc96a14640ad2c7e8512c7066..a6024cf99eef56dbeaf1c7a07aae66e56479caf9 100644
--- a/python/dune/perftool/blockstructured/accumulation.py
+++ b/python/dune/perftool/blockstructured/accumulation.py
@@ -1,8 +1,11 @@
 from dune.perftool.generation import temporary_variable, instruction
+from dune.perftool.loopy.target import dtype_floatingpoint
 from dune.perftool.options import get_option
 from dune.perftool.pdelab.localoperator import determine_accumulation_space
 from dune.perftool.pdelab.argument import name_accumulation_variable
 from dune.perftool.pdelab.localoperator import boundary_predicates
+from dune.perftool.generation.loopy import function_mangler
+import loopy as lp
 import pymbolic.primitives as prim
 
 
@@ -20,6 +23,13 @@ def name_accumulation_alias(container, accumspace):
     return name
 
 
+@function_mangler
+def residual_weight_mangler(knl, func, arg_dtypes):
+    if isinstance(func, str) and func.endswith('.weight'):
+        from pudb import set_trace; set_trace()
+        return lp.CallMangleInfo(func, (lp.types.NumpyType(dtype_floatingpoint()),), ())
+
+
 def generate_accumulation_instruction(expr, visitor):
     # Collect the lfs and lfs indices for the accumulate call
     test_lfs = determine_accumulation_space(visitor.test_info, 0)
@@ -39,8 +49,10 @@ def generate_accumulation_instruction(expr, visitor):
 
     assignee = prim.Subscript(prim.Variable(accumvar_alias), tuple(prim.Variable(i) for i in lfs_inames))
 
+    expr_with_weight = prim.Product((expr, prim.Call(prim.Variable(accumvar+'.weight'),())))
+
     instruction(assignee=assignee,
-                expression=prim.Sum((expr, assignee)),
+                expression=prim.Sum((expr_with_weight, assignee)),
                 forced_iname_deps=frozenset(lfs_inames).union(frozenset(quad_inames)),
                 forced_iname_deps_is_final=True,
                 predicates=predicates