added forward_diffusion