diff --git a/HTTPServer.cpp b/HTTPServer.cpp
index f7f15cc1..b92c786e 100644
--- a/HTTPServer.cpp
+++ b/HTTPServer.cpp
@@ -311,28 +311,41 @@ namespace util
 	{
 		i2p::data::IdentHash destination;
 		std::string fullAddress;
-		if (address.find (".i2p") != std::string::npos)
-		{	
-			auto addr = i2p::data::netdb.FindAddress(address);
-			if (!addr) 
-			{
-				LogPrint ("Unknown address ", address);
-				SendReply ("" + itoopieImage + "
Unknown address " + address + "");
-				return;
-			}	
-			destination = *addr;
-			fullAddress = address;
-		}
-		else
-		{	
-			if (i2p::data::Base32ToByteStream (address.c_str (), address.length (), (uint8_t *)destination, 32) != 32)
+		if (address.find(".b32.i2p") != std::string::npos)
+		{
+			if (i2p::data::Base32ToByteStream(address.c_str(), address.length() - strlen(".b32.i2p"), (uint8_t *)destination, 32) != 32)
 			{
 				LogPrint ("Invalid Base32 address ", address);
 				SendReply ("" + itoopieImage + "
Invalid Base32 address");
 				return;
 			}
-			fullAddress = address + ".b32.i2p";
-		}	
+			fullAddress = address;
+		}
+		else
+		{
+			if (address.find(".i2p") != std::string::npos)
+			{
+				auto addr = i2p::data::netdb.FindAddress(address);
+				if (!addr)
+				{
+					LogPrint ("Unknown address ", address);
+					SendReply ("" + itoopieImage + "
Unknown address " + address + "");
+					return;
+				}
+				destination = *addr;
+				fullAddress = address;
+			}
+			else
+			{
+				if (i2p::data::Base32ToByteStream(address.c_str(), address.length(), (uint8_t *)destination, 32) != 32)
+				{
+					LogPrint("Invalid Base32 address ", address);
+					SendReply("" + itoopieImage + "
Invalid Base32 address");
+					return;
+				}
+				fullAddress = address + ".b32.i2p";
+			}
+		}
 			
 		auto leaseSet = i2p::data::netdb.FindLeaseSet (destination);
 		if (!leaseSet || !leaseSet->HasNonExpiredLeases ())