Rejecting duplicate peerIds did not work for me. I kept an array of the sessions that I had started for all peerIds and when the advertiser triggered a call to session:peer:didChangeState: I did a disconnect and session=nil to all sessions in the array except the session that was finally connected.