diff --git a/RouterContext.cpp b/RouterContext.cpp
index b6b4e9c4..6adc0154 100644
--- a/RouterContext.cpp
+++ b/RouterContext.cpp
@@ -13,6 +13,10 @@ namespace i2p
 		if (!Load ())
 			CreateNewRouter ();
 		Save ();
+
+		// we generate LeaseSet at every start-up
+		CryptoPP::DH dh (i2p::crypto::elgp, i2p::crypto::elgg);
+		dh.GenerateKeyPair(m_Rnd, m_LeaseSetPrivateKey, m_LeaseSetPublicKey);
 	}	
 
 	const uint8_t * RouterContext::GetSigningPrivateKey () const 
diff --git a/RouterContext.h b/RouterContext.h
index a292b1cb..75e913a2 100644
--- a/RouterContext.h
+++ b/RouterContext.h
@@ -20,6 +20,8 @@ namespace i2p
 			i2p::data::RouterInfo& GetRouterInfo () { return m_RouterInfo; };
 			const uint8_t * GetPrivateKey () const { return m_PrivateKey; };
 			const uint8_t * GetSigningPrivateKey () const;
+			const uint8_t * GetLeaseSetPrivateKey () const { return m_LeaseSetPrivateKey; };
+			const uint8_t * GetLeaseSetPublicKey () const { return m_LeaseSetPublicKey; };
 			const i2p::data::RouterIdentity& GetRouterIdentity () const { return m_RouterInfo.GetRouterIdentity (); };
 			CryptoPP::RandomNumberGenerator& GetRandomNumberGenerator () { return m_Rnd; };	
 			
@@ -37,7 +39,8 @@ namespace i2p
 
 			i2p::data::RouterInfo m_RouterInfo;
 			CryptoPP::DSA::PrivateKey m_SigningPrivateKey;
-			uint8_t m_PrivateKey[256], m_SigningPrivateKeyStr[20];
+			uint8_t m_PrivateKey[256], m_SigningPrivateKeyStr[20], 
+				m_LeaseSetPublicKey[256], m_LeaseSetPrivateKey[256];
 			CryptoPP::AutoSeededRandomPool m_Rnd;
 	};