diff --git a/src/gajim.py b/src/gajim.py
index 928045293a2688e854604fb0a68114a7bc7b93c3..41a29ce65de29fe95dda731c5d07df882a5bc678 100644
--- a/src/gajim.py
+++ b/src/gajim.py
@@ -1235,6 +1235,7 @@ class Interface:
 		fjid = room_jid + '/' + nick
 		show = array[1]
 		status = array[2]
+		conn = gajim.connections[account]
 
 		# Get the window and control for the updated status, this may be a
 		# PrivateChatControl
@@ -1267,6 +1268,13 @@ class Interface:
 				c = gajim.contacts.contact_from_gc_contact(gc_c)
 				ctrl.gc_contact = gc_c
 				ctrl.contact = c
+				if ctrl.session:
+					# stop e2e
+					if ctrl.session.enable_encryption:
+						thread_id = ctrl.session.thread_id
+						ctrl.session.terminate_e2e()
+						conn.delete_session(fjid, thread_id)
+						ctrl.no_autonegotiation = False
 				ctrl.draw_banner()
 				old_jid = room_jid + '/' + nick
 				new_jid = room_jid + '/' + new_nick
diff --git a/src/groupchat_control.py b/src/groupchat_control.py
index d230106878054ab67f0de936ea25ec5cc15f197f..99fdb6ab9343d670d2462c45c6d6cb66220f7b01 100644
--- a/src/groupchat_control.py
+++ b/src/groupchat_control.py
@@ -170,6 +170,15 @@ class PrivateChatControl(ChatControl):
 	def update_contact(self):
 		self.contact = gajim.contacts.contact_from_gc_contact(self.gc_contact)
 
+	def begin_e2e_negotiation(self):
+		self.no_autonegotiation = True
+
+		if not self.session:
+			fjid = self.gc_contact.get_full_jid()
+			new_sess = gajim.connections[self.account].make_new_session(fjid, type_=self.type_id)
+			self.set_session(new_sess)
+
+		self.session.negotiate_e2e(False)
 
 class GroupchatControl(ChatControlBase):
 	TYPE_ID = message_control.TYPE_GC
@@ -1174,6 +1183,20 @@ class GroupchatControl(ChatControlBase):
 						self.nick = new_nick
 						self.new_nick = ''
 						s = _('You are now known as %s') % new_nick
+						# Stop all E2E sessions
+						nick_list = gajim.contacts.get_nick_list(self.account,
+							self.room_jid)
+						for nick in nick_list:
+							fjid = self.room_jid + '/' + nick
+							ctrl = gajim.interface.msg_win_mgr.get_control(fjid,
+								self.account)
+							if ctrl and ctrl.session and \
+							ctrl.session.enable_encryption:
+								thread_id = ctrl.session.thread_id
+								ctrl.session.terminate_e2e()
+								gajim.connections[self.account].delete_session(fjid,
+									thread_id)
+								ctrl.no_autonegotiation = False
 					else:
 						s = _('%(nick)s is now known as %(new_nick)s') % {
 							'nick': nick, 'new_nick': new_nick}
@@ -1844,6 +1867,13 @@ class GroupchatControl(ChatControlBase):
 				contact.status = ''
 				ctrl.update_ui()
 				ctrl.parent_win.redraw_tab(ctrl)
+			for sess in gajim.connections[self.account].get_sessions(fjid):
+				if sess.control:
+					sess.control.no_autonegotiation = False
+				if sess.enable_encryption:
+					sess.terminate_e2e()
+					gajim.connections[self.account].delete_session(fjid,
+						sess.thread_id)
 		# They can already be removed by the destroy function
 		if self.room_jid in gajim.contacts.get_gc_list(self.account):
 			gajim.contacts.remove_room(self.account, self.room_jid)