implemented reduction