diffuse implemented