implement reductions