why retain ? I think the observer should call retain() if it want to forward it through the pipeline etc.