add #negotiate method