diff --git a/libi2pd_client/I2CP.cpp b/libi2pd_client/I2CP.cpp
index 6bbf58dd..88465143 100644
--- a/libi2pd_client/I2CP.cpp
+++ b/libi2pd_client/I2CP.cpp
@@ -764,6 +764,7 @@ namespace client
 	void I2CPSession::AddRoutingSession (const i2p::data::IdentHash& signingKey, std::shared_ptr<i2p::garlic::GarlicRoutingSession> remoteSession)
 	{
 		if (!remoteSession) return;
+		remoteSession->SetAckRequestInterval (I2CP_SESSION_ACK_REQUEST_INTERVAL);
 		std::lock_guard<std::mutex> l(m_RoutingSessionsMutex);
 		m_RoutingSessions[signingKey] = remoteSession;
 	}
@@ -1110,12 +1111,12 @@ namespace client
 	void I2CPServer::Stop ()
 	{
 		m_Acceptor.cancel ();
-		{
-			auto sessions = m_Sessions;
-			for (auto& it: sessions)
-				it.second->Stop ();
-		}
-		m_Sessions.clear ();
+		
+		decltype(m_Sessions) sessions;
+		m_Sessions.swap (sessions);
+		for (auto& it: sessions)
+			it.second->Stop ();
+		
 		StopIOService ();
 	}
 
diff --git a/libi2pd_client/I2CP.h b/libi2pd_client/I2CP.h
index d974ebba..d5ac648e 100644
--- a/libi2pd_client/I2CP.h
+++ b/libi2pd_client/I2CP.h
@@ -31,6 +31,7 @@ namespace client
 	const size_t I2CP_MAX_MESSAGE_LENGTH = 65535;
 	const size_t I2CP_MAX_SEND_QUEUE_SIZE = 1024*1024; // in bytes, 1M
 	const int I2CP_LEASESET_CREATION_TIMEOUT = 10; // in seconds
+	const int I2CP_SESSION_ACK_REQUEST_INTERVAL = 12100; // in milliseconds
 
 	const size_t I2CP_HEADER_LENGTH_OFFSET = 0;
 	const size_t I2CP_HEADER_TYPE_OFFSET = I2CP_HEADER_LENGTH_OFFSET + 4;