diff --git a/Destination.cpp b/Destination.cpp
index 48717f5f..dbdec0c7 100644
--- a/Destination.cpp
+++ b/Destination.cpp
@@ -171,7 +171,7 @@ namespace client
   
 	std::shared_ptr<const i2p::data::LeaseSet> LeaseSetDestination::FindLeaseSet (const i2p::data::IdentHash& ident)
 	{
-		std::lock_guard<std::mutex> lock(m_RemoteLeaseSetsMutex);
+		std::unique_lock<std::mutex> lock(m_RemoteLeaseSetsMutex);
 		auto it = m_RemoteLeaseSets.find (ident);
 		if (it != m_RemoteLeaseSets.end ())
 		{
@@ -185,10 +185,7 @@ namespace client
 						if(ls && !ls->IsExpired())
 						{
 							ls->PopulateLeases();
-							{
-								std::lock_guard<std::mutex> _lock(m_RemoteLeaseSetsMutex);
-								m_RemoteLeaseSets[ident] = ls;
-							}
+							m_RemoteLeaseSets[ident] = ls;
 						}
 					});
 				}
@@ -203,15 +200,12 @@ namespace client
 			if (ls && !ls->IsExpired ())
 			{
 				ls->PopulateLeases (); // since we don't store them in netdb
-				{
-					std::lock_guard<std::mutex> lock(m_RemoteLeaseSetsMutex);
-					m_RemoteLeaseSets[ident] = ls;
-				}
+				m_RemoteLeaseSets[ident] = ls;
 				return ls;
 			}	
 		}
 		return nullptr;
-	}	
+	}
 
 	std::shared_ptr<const i2p::data::LocalLeaseSet> LeaseSetDestination::GetLeaseSet ()
 	{
diff --git a/I2CP.cpp b/I2CP.cpp
index e0139b9f..04f21408 100644
--- a/I2CP.cpp
+++ b/I2CP.cpp
@@ -103,7 +103,8 @@ namespace client
 		}
 		auto path = remoteSession->GetSharedRoutingPath ();
 		std::shared_ptr<i2p::tunnel::OutboundTunnel> outboundTunnel;
-		std::shared_ptr<const i2p::data::Lease> remoteLease;	
+		std::shared_ptr<const i2p::data::Lease> remoteLease;
+		bool unconfirmedTags=false;
 		if (path)
 		{
 			if (!remoteSession->CleanupUnconfirmedTags ()) // no stuck tags
@@ -112,9 +113,12 @@ namespace client
 				remoteLease = path->remoteLease;
 			}
 			else
+			{
 				remoteSession->SetSharedRoutingPath (nullptr);
+				unconfirmedTags=true;
+			}
 		}
-		else
+		if (!path || unconfirmedTags)
 		{
 			outboundTunnel = GetTunnelPool ()->GetNextOutboundTunnel ();
 			auto leases = remote->GetNonExpiredLeases ();