diff --git a/BOB.cpp b/BOB.cpp
index c77e03c3..ae300865 100644
--- a/BOB.cpp
+++ b/BOB.cpp
@@ -281,6 +281,13 @@ namespace client
 		Send (len);	
 	}
 
+	void BOBCommandSession::SendVersion ()
+	{
+		size_t len = strlen (BOB_VERSION);
+		memcpy (m_SendBuffer, BOB_VERSION, len);
+		Send (len);
+	}
+
 	void BOBCommandSession::ZapCommandHandler (const char * operand, size_t len)
 	{
 		LogPrint (eLogDebug, "BOB: zap");
@@ -416,6 +423,19 @@ namespace client
 		SendReplyOK ("quiet");
 	}	
 	
+	void BOBCommandSession::LookupCommandHandler (const char * operand, size_t len)
+	{
+		LogPrint (eLogDebug, "BOB: lookup");
+		i2p::data::IdentityEx addr;
+		if (!context.GetAddressBook ().GetAddress (operand, addr)) 
+		{
+			SendReplyError ("Address Not found");
+			return;
+		}		
+		SendReplyOK (addr.ToBase64 ().c_str ());
+	}
+
+
 	BOBCommandChannel::BOBCommandChannel (int port):
 		m_IsRunning (false), m_Thread (nullptr),
 		m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port))
@@ -436,6 +456,7 @@ namespace client
 		m_CommandHandlers[BOB_COMMAND_INHOST] = &BOBCommandSession::InhostCommandHandler;
 		m_CommandHandlers[BOB_COMMAND_INPORT] = &BOBCommandSession::InportCommandHandler;
 		m_CommandHandlers[BOB_COMMAND_QUIET] = &BOBCommandSession::QuietCommandHandler;
+		m_CommandHandlers[BOB_COMMAND_LOOKUP] = &BOBCommandSession::LookupCommandHandler;
 	}
 
 	BOBCommandChannel::~BOBCommandChannel ()
@@ -509,7 +530,7 @@ namespace client
 		if (!ecode)
 		{
 			LogPrint (eLogInfo, "New BOB command connection from ", session->GetSocket ().remote_endpoint ());
-			session->Receive ();	
+			session->SendVersion ();	
 		}
 		else
 			LogPrint (eLogError, "BOB accept error: ",  ecode.message ());
diff --git a/BOB.h b/BOB.h
index 5f7b8c2a..145e74e1 100644
--- a/BOB.h
+++ b/BOB.h
@@ -30,8 +30,10 @@ namespace client
 	const char BOB_COMMAND_OUTPORT[] = "outport";
 	const char BOB_COMMAND_INHOST[] = "inhost";	
 	const char BOB_COMMAND_INPORT[] = "inport";
-	const char BOB_COMMAND_QUIET[] = "quiet";		
+	const char BOB_COMMAND_QUIET[] = "quiet";
+	const char BOB_COMMAND_LOOKUP[] = "lookup";			
 
+	const char BOB_VERSION[] = "BOB 00.00.10\nOK\n";	
 	const char BOB_REPLY_OK[] = "OK %s\n";
 	const char BOB_REPLY_ERROR[] = "ERROR %s\n";
 
@@ -100,7 +102,7 @@ namespace client
 			void Terminate ();
 
 			boost::asio::ip::tcp::socket& GetSocket () { return m_Socket; };
-			void Receive ();
+			void SendVersion ();
 
 			// command handlers
 			void ZapCommandHandler (const char * operand, size_t len);
@@ -118,9 +120,11 @@ namespace client
 			void InhostCommandHandler (const char * operand, size_t len);
 			void InportCommandHandler (const char * operand, size_t len);			
 			void QuietCommandHandler (const char * operand, size_t len);	
+			void LookupCommandHandler (const char * operand, size_t len);
 
 		private:
 
+			void Receive ();
 			void HandleReceived (const boost::system::error_code& ecode, std::size_t bytes_transferred);
 
 			void Send (size_t len);
@@ -128,6 +132,7 @@ namespace client
 			void SendReplyOK (const char * msg);
 			void SendReplyError (const char * msg);
 
+
 		private:
 
 			BOBCommandChannel& m_Owner;