working key exchange
merge