add weak self reference