diff --git a/src/chat_control.py b/src/chat_control.py
index 7850a2e3e9995a1a7a239c6a03e5b31a4e765f44..7f754081b35bba01580bafc24fcb9742fe2768c4 100644
--- a/src/chat_control.py
+++ b/src/chat_control.py
@@ -46,6 +46,7 @@ from common import exceptions
 from message_control import MessageControl
 from conversation_textview import ConversationTextview
 from message_textview import MessageTextView
+from common.stanza_session import EncryptedStanzaSession, ArchivingStanzaSession
 from common.contacts import GC_Contact
 from common.logger import constants
 from common.pep import MOODS, ACTIVITIES
@@ -1394,7 +1395,7 @@ class ChatControl(ChatControlBase):
 			self.session = session
 
 			if session.enable_encryption:
-				self.print_esession_details()
+				self.print_session_details()
 
 		# Enable encryption if needed
 		self.no_autonegotiation = False
@@ -2055,6 +2056,17 @@ class ChatControl(ChatControlBase):
 		msg = _('Session negotiation cancelled')
 		ChatControlBase.print_conversation_line(self, msg, 'status', '', None)
 
+	def print_archiving_session_details(self):
+		"""
+		Print esession settings to textview
+		"""
+		archiving = bool(self.session) and self.session.archiving
+		if archiving:
+			msg = _('This session WILL be archived on server')
+		else:
+			msg = _('This session WILL NOT be archived on server')
+		ChatControlBase.print_conversation_line(self, msg, 'status', '', None)
+
 	def print_esession_details(self):
 		"""
 		Print esession settings to textview
@@ -2079,6 +2091,12 @@ class ChatControl(ChatControlBase):
 		self._show_lock_image(e2e_is_active, 'E2E', e2e_is_active, self.session and \
 				self.session.is_loggable(), self.session and self.session.verified_identity)
 
+	def print_session_details(self):
+		if isinstance(self.session, EncryptedStanzaSession):
+			self.print_esession_details()
+		elif isinstance(self.session, ArchivingStanzaSession):
+			self.print_archiving_session_details()
+
 	def print_conversation(self, text, frm='', tim=None, encrypted=False,
 			subject=None, xhtml=None, simple=False, xep0184_id=None):
 		"""
@@ -2511,7 +2529,7 @@ class ChatControl(ChatControlBase):
 			if want_e2e and not self.no_autonegotiation \
 			and gajim.HAVE_PYCRYPTO and self.contact.supports(NS_ESESSION):
 				self.begin_e2e_negotiation()
-			elif not self.session.accepted:
+			elif not self.session or not self.session.status:
 				self.begin_archiving_negotiation()
 		else:
 			self.send_chatstate('active', self.contact)
diff --git a/src/common/connection_handlers.py b/src/common/connection_handlers.py
index d4a89eca0cb49d1ae75572a3a803fdbd702e4bc2..46e6b48fcd31891ed60ac24aa492126b3a5f0bde 100644
--- a/src/common/connection_handlers.py
+++ b/src/common/connection_handlers.py
@@ -1297,10 +1297,7 @@ class ConnectionVcard:
 					count = 0
 				if count > index + nb:
 					# Request the next page
-					try:
-						after = int(element.getTagData('last'))
-					except TypeError:
-						after = index + nb
+					after = element.getTagData('last')
 					self.request_collection_page(with_, start_, after=after)
 
 		elif self.awaiting_answers[id_][0] == ARCHIVING_MODIFICATIONS_ARRIVED:
diff --git a/src/common/stanza_session.py b/src/common/stanza_session.py
index 40e187cef83d7072729a6051c4d6221a053cd00d..5ac08db8f2ef55e9467d34a60c5875c5549d879f 100644
--- a/src/common/stanza_session.py
+++ b/src/common/stanza_session.py
@@ -177,7 +177,7 @@ class StanzaSession(object):
 class ArchivingStanzaSession(StanzaSession):
 	def __init__(self, conn, jid, thread_id, type_='chat'):
 		StanzaSession.__init__(self, conn, jid, thread_id, type_='chat')
-		self.accepted = False
+		self.archiving = False
 
 	def archiving_logging_preference(self, initiator_options=None):
 		return self.conn.logging_preference(self.jid, initiator_options)
@@ -206,7 +206,7 @@ class ArchivingStanzaSession(StanzaSession):
 
 		feature.addChild(node=x)
 
-		self.status = 'requested'
+		self.status = 'requested-archiving'
 
 		self.send(request)
 
@@ -229,7 +229,7 @@ class ArchivingStanzaSession(StanzaSession):
 
 		x.addChild(node=xmpp.DataField(name='logging', value=logging))
 
-		self.status = 'responded'
+		self.status = 'responded-archiving'
 
 		feature.addChild(node=x)
 
@@ -250,7 +250,10 @@ class ArchivingStanzaSession(StanzaSession):
 		if self.negotiated['logging'] == 'mustnot':
 			self.loggable = False
 		print 'SESSION ACCEPTED', self.loggable
-		self.accepted = True
+		self.status = 'active'
+		self.archiving = True
+		if self.control:
+			self.control.print_archiving_session_details()
 
 	def accept_archiving_alice(self, form):
 		negotiated = {}
@@ -278,7 +281,10 @@ class ArchivingStanzaSession(StanzaSession):
 		if self.negotiated['logging'] == 'mustnot':
 			self.loggable = False
 		print 'SESSION ACCEPTED', self.loggable
-		self.accepted = True
+		self.status = 'active'
+		self.archiving = True
+		if self.control:
+			self.control.print_archiving_session_details()
 
 
 class EncryptedStanzaSession(ArchivingStanzaSession):
@@ -307,7 +313,7 @@ class EncryptedStanzaSession(ArchivingStanzaSession):
 	handle_session_negotiation method.
 	'''
 	def __init__(self, conn, jid, thread_id, type_='chat'):
-		StanzaSession.__init__(self, conn, jid, thread_id, type_='chat')
+		ArchivingStanzaSession.__init__(self, conn, jid, thread_id, type_='chat')
 
 		self.xes = {}
 		self.es = {}
diff --git a/src/message_control.py b/src/message_control.py
index 7ee724554354475ee598ee342c9d4cf924965735..e1d3f491956b4b44d263b09927ef8dbe9f320fb4 100644
--- a/src/message_control.py
+++ b/src/message_control.py
@@ -30,6 +30,7 @@ import gtkgui_helpers
 
 from common import gajim
 from common import helpers
+from common.stanza_session import EncryptedStanzaSession, ArchivingStanzaSession
 
 # Derived types MUST register their type IDs here if custom behavor is required
 TYPE_CHAT = 'chat'
@@ -163,11 +164,16 @@ class MessageControl:
 			if self.resource:
 				jid += '/' + self.resource
 
-		crypto_changed = bool(session and session.enable_encryption) != \
+		crypto_changed = bool(session and isinstance(session,
+			EncryptedStanzaSession) and session.enable_encryption) != \
 			bool(oldsession and oldsession.enable_encryption)
 
-		if crypto_changed:
-			self.print_esession_details()
+		archiving_changed = bool(session and isinstance(session,
+			ArchivingStanzaSession) and session.archiving) != \
+			bool(oldsession and oldsession.archiving)
+
+		if crypto_changed or archiving_changed:
+			self.print_session_details()
 
 	def send_message(self, message, keyID='', type_='chat', chatstate=None,
 	msg_id=None, composing_xep=None, resource=None, user_nick=None, xhtml=None,
diff --git a/src/session.py b/src/session.py
index 614bb88ef2579a3ce75245059fea2e04b8ba42d1..3a84976c2b5662e8af95338f556646563e4e3d35 100644
--- a/src/session.py
+++ b/src/session.py
@@ -440,7 +440,8 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession):
 
 				return
 
-			elif self.status == 'requested' and form.getType() == 'submit':
+			elif self.status == 'requested-archiving' and form.getType() == \
+			'submit':
 				try:
 					self.accept_archiving_alice(form)
 				except exceptions.NegotiationError, details:
@@ -481,7 +482,8 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession):
 						self.fail_bad_negotiation(details)
 
 				return
-			elif self.status == 'responded' and form.getType() == 'result':
+			elif self.status == 'responded-archiving' and form.getType() == \
+			'result':
 				try:
 					self.accept_archiving_bob(form)
 				except exceptions.NegotiationError, details: