Peer-to-peer networks have gained much attention due to their attractive features of self-organization, scalability and decentralized control. The key challenge in these networks is how to efficiently locate and retrieve the correct data. Techniques for efficient searching in peer-to-peer networks have been recently proposed; however, these handle location and routing as a single problem and impose a structure in the network by mapping the data to particular nodes. In this paper, we propose propagation and routing algorithms for a fully decentralized, self-organizing network. Our goal is to maximize the probability of finding the data, minimize peer access latencies and balance the workload among many peers. Central to our approach is the Kundali data structure that represents the set of data maintained by the peers and drives the smart routing of the search requests (queries). Kundali, for each peer, maintains a Bloom Filter based set of synopsis of the data expected to be present at each routing direction. Requests that cannot be answered locally, are propagated only to those immediately connected peers whose synopsis depict the closest match. We have implemented our algorithms in the context of a fully decentralized Internet caching service in our internal HP network. Our mechanism is inexpensive, highly scalable, resilient to node failures and with no administration cost. Experimental results validate our algorithms and show that they have good performance results. 9 Pages