Today’s mobile devices are already equipped with multiple wireless interfaces that differ in data rates, power consumption, monetary cost, and coverage areas. Previous research has shown that intelligent policy-based switching between wireless interfaces can obtain better performance than using a single interface . We build upon this pioneering work to add the notion of user-defined policies that operate at the session layer, unlike the networkand transport-layer policies of past work. Session-layer policy definitions allow us to include a delay component (such as a deadline for data transfer) at a timescale of minutes and hours. This helps us distinguish between online and offline applications, and allows us a high degree of flexibility in network selection. For example, we can defer data transfer on currently available networks if they are too costly, and wait until a low cost network (such as a free WiFi hotsopt) becomes available for opportunistic use in the future. However, actually using multiple interfaces, which requires sessions to be maintained across interface switches, disconnections, and device shutdowns, is complex. Consequently, to be useful in practice, we believe that application writers need to be shielded from these details, while still exercising fine-grained control over network usage policies. In this paper, we describe a system that allows applications running on a mobile device to seamlessly exploit multiple heterogeneous wireless networks based on userdefined session-layer policies. We have designed, implemented, and evaluated the performance of an Opportunistic Connection Management Protocol (OCMP) that allows such applications to opportunistically communicate on multiple network interfaces, switch across interfaces, remain disconnected or powered off for arbitrarily long periods, and interoperate with legacy applications and servers. The implementation is in J2ME so that it can be run on any Java-based mobile device. Extensive policy control for interface selection is also provided to applications, along with a simple API for application developers. We explain the design, architecture, and implementation of OCMP, and illustrate its benefits through field experiments. Our results are encouraging and suggest that policy support for multi-network opportunistic communication is both achievable in current systems, and of significant practical value.