diff --git a/asio/include/asio/basic_socket_streambuf.hpp b/asio/include/asio/basic_socket_streambuf.hpp
index d9300a2..b413c19 100644
--- a/asio/include/asio/basic_socket_streambuf.hpp
+++ b/asio/include/asio/basic_socket_streambuf.hpp
@@ -46,9 +46,9 @@
 //     init_buffers();
 //     this->basic_socket<Protocol, StreamSocketService>::close(ec_);
 //     typedef typename Protocol::resolver resolver_type;
-//     typedef typename resolver_type::query resolver_query;
-//     resolver_query query(x1, ..., xn);
-//     resolve_and_connect(query);
+//     resolver_type resolver(detail::socket_streambuf_base::io_service_);
+//     connect_to_endpoints(
+//         resolver.resolve(x1, ..., xn, ec_));
 //     return !ec_ ? this : 0;
 //   }
 // This macro should only persist within this file.
@@ -62,9 +62,9 @@
     init_buffers(); \
     this->basic_socket<Protocol, StreamSocketService>::close(ec_); \
     typedef typename Protocol::resolver resolver_type; \
-    typedef typename resolver_type::query resolver_query; \
-    resolver_query query(ASIO_VARIADIC_BYVAL_ARGS(n)); \
-    resolve_and_connect(query); \
+    resolver_type resolver(detail::socket_streambuf_base::io_service_); \
+    connect_to_endpoints( \
+        resolver.resolve(ASIO_VARIADIC_BYVAL_ARGS(n), ec_)); \
     return !ec_ ? this : 0; \
   } \
   /**/
@@ -212,9 +212,8 @@
     init_buffers();
     this->basic_socket<Protocol, StreamSocketService>::close(ec_);
     typedef typename Protocol::resolver resolver_type;
-    typedef typename resolver_type::query resolver_query;
-    resolver_query query(x...);
-    resolve_and_connect(query);
+    resolver_type resolver(detail::socket_streambuf_base::io_service_);
+    connect_to_endpoints(resolver.resolve(x..., ec_));
     return !ec_ ? this : 0;
   }
 #else
@@ -518,16 +517,13 @@
       setp(&put_buffer_[0], &put_buffer_[0] + put_buffer_.size());
   }
 
-  template <typename ResolverQuery>
-  void resolve_and_connect(const ResolverQuery& query)
+  template <typename EndpointSequence>
+  void connect_to_endpoints(const EndpointSequence& endpoints)
   {
-    typedef typename Protocol::resolver resolver_type;
-    typedef typename resolver_type::iterator iterator_type;
-    resolver_type resolver(detail::socket_streambuf_base::io_service_);
-    iterator_type i = resolver.resolve(query, ec_);
     if (!ec_)
     {
-      iterator_type end;
+      typename EndpointSequence::iterator i = endpoints.begin();
+      typename EndpointSequence::iterator end = endpoints.end();
       ec_ = asio::error::host_not_found;
       while (ec_ && i != end)
       {
diff --git a/asio/include/asio/connect.hpp b/asio/include/asio/connect.hpp
index 6956c36..7d0bab3 100644
--- a/asio/include/asio/connect.hpp
+++ b/asio/include/asio/connect.hpp
@@ -128,6 +128,7 @@
     typename enable_if<is_endpoint_sequence<
         EndpointSequence>::value>::type* = 0);
 
+#if !defined(ASIO_NO_DEPRECATED)
 /// (Deprecated.) Establishes a socket connection by trying each endpoint in a
 /// sequence.
 /**
@@ -184,6 +185,7 @@
 Iterator connect(basic_socket<Protocol, SocketService>& s,
     Iterator begin, asio::error_code& ec,
     typename enable_if<!is_endpoint_sequence<Iterator>::value>::type* = 0);
+#endif // !defined(ASIO_NO_DEPRECATED)
 
 /// Establishes a socket connection by trying each endpoint in a sequence.
 /**
@@ -379,6 +381,7 @@
     typename enable_if<is_endpoint_sequence<
         EndpointSequence>::value>::type* = 0);
 
+#if !defined(ASIO_NO_DEPRECATED)
 /// (Deprecated.) Establishes a socket connection by trying each endpoint in a
 /// sequence.
 /**
@@ -460,6 +463,7 @@
 Iterator connect(basic_socket<Protocol, SocketService>& s, Iterator begin,
     ConnectCondition connect_condition, asio::error_code& ec,
     typename enable_if<!is_endpoint_sequence<Iterator>::value>::type* = 0);
+#endif // !defined(ASIO_NO_DEPRECATED)
 
 /// Establishes a socket connection by trying each endpoint in a sequence.
 /**
@@ -670,6 +674,7 @@
     typename enable_if<is_endpoint_sequence<
         EndpointSequence>::value>::type* = 0);
 
+#if !defined(ASIO_NO_DEPRECATED)
 /// (Deprecated.) Asynchronously establishes a socket connection by trying each
 /// endpoint in a sequence.
 /**
@@ -712,6 +717,7 @@
 async_connect(basic_socket<Protocol, SocketService>& s,
     Iterator begin, ASIO_MOVE_ARG(IteratorConnectHandler) handler,
     typename enable_if<!is_endpoint_sequence<Iterator>::value>::type* = 0);
+#endif // !defined(ASIO_NO_DEPRECATED)
 
 /// Asynchronously establishes a socket connection by trying each endpoint in a
 /// sequence.
@@ -875,6 +881,7 @@
     typename enable_if<is_endpoint_sequence<
         EndpointSequence>::value>::type* = 0);
 
+#if !defined(ASIO_NO_DEPRECATED)
 /// (Deprecated.) Asynchronously establishes a socket connection by trying each
 /// endpoint in a sequence.
 /**
@@ -929,6 +936,7 @@
     ConnectCondition connect_condition,
     ASIO_MOVE_ARG(IteratorConnectHandler) handler,
     typename enable_if<!is_endpoint_sequence<Iterator>::value>::type* = 0);
+#endif // !defined(ASIO_NO_DEPRECATED)
 
 /// Asynchronously establishes a socket connection by trying each endpoint in a
 /// sequence.
diff --git a/asio/include/asio/impl/connect.hpp b/asio/include/asio/impl/connect.hpp
index 9ca8be5..471460d 100644
--- a/asio/include/asio/impl/connect.hpp
+++ b/asio/include/asio/impl/connect.hpp
@@ -68,6 +68,7 @@
   return ec ? typename Protocol::endpoint() : *iter;
 }
 
+#if !defined(ASIO_NO_DEPRECATED)
 template <typename Protocol, typename SocketService, typename Iterator>
 Iterator connect(basic_socket<Protocol, SocketService>& s, Iterator begin,
     typename enable_if<!is_endpoint_sequence<Iterator>::value>::type*)
@@ -85,6 +86,7 @@
 {
   return connect(s, begin, Iterator(), detail::default_connect_condition(), ec);
 }
+#endif // !defined(ASIO_NO_DEPRECATED)
 
 template <typename Protocol, typename SocketService, typename Iterator>
 Iterator connect(basic_socket<Protocol, SocketService>& s,
@@ -130,6 +132,7 @@
   return ec ? typename Protocol::endpoint() : *iter;
 }
 
+#if !defined(ASIO_NO_DEPRECATED)
 template <typename Protocol, typename SocketService,
     typename Iterator, typename ConnectCondition>
 Iterator connect(basic_socket<Protocol, SocketService>& s,
@@ -151,6 +154,7 @@
 {
   return connect(s, begin, Iterator(), connect_condition, ec);
 }
+#endif // !defined(ASIO_NO_DEPRECATED)
 
 template <typename Protocol, typename SocketService,
     typename Iterator, typename ConnectCondition>
@@ -654,6 +658,7 @@
   return init.result.get();
 }
 
+#if !defined(ASIO_NO_DEPRECATED)
 template <typename Protocol, typename SocketService,
     typename Iterator, typename IteratorConnectHandler>
 inline ASIO_INITFN_RESULT_TYPE(IteratorConnectHandler,
@@ -678,6 +683,7 @@
 
   return init.result.get();
 }
+#endif // !defined(ASIO_NO_DEPRECATED)
 
 template <typename Protocol, typename SocketService,
     typename Iterator, typename IteratorConnectHandler>
@@ -732,6 +738,7 @@
   return init.result.get();
 }
 
+#if !defined(ASIO_NO_DEPRECATED)
 template <typename Protocol, typename SocketService, typename Iterator,
     typename ConnectCondition, typename IteratorConnectHandler>
 inline ASIO_INITFN_RESULT_TYPE(IteratorConnectHandler,
@@ -757,6 +764,7 @@
 
   return init.result.get();
 }
+#endif // !defined(ASIO_NO_DEPRECATED)
 
 template <typename Protocol, typename SocketService, typename Iterator,
     typename ConnectCondition, typename IteratorConnectHandler>
diff --git a/asio/include/asio/ip/basic_resolver.hpp b/asio/include/asio/ip/basic_resolver.hpp
index 7b9f291..68e97e9 100644
--- a/asio/include/asio/ip/basic_resolver.hpp
+++ b/asio/include/asio/ip/basic_resolver.hpp
@@ -54,11 +54,13 @@
   /// The endpoint type.
   typedef typename InternetProtocol::endpoint endpoint_type;
 
+#if !defined(ASIO_NO_DEPRECATED)
   /// (Deprecated.) The query type.
   typedef basic_resolver_query<InternetProtocol> query;
 
   /// (Deprecated.) The iterator type.
   typedef basic_resolver_iterator<InternetProtocol> iterator;
+#endif // !defined(ASIO_NO_DEPRECATED)
 
   /// The results type.
   typedef basic_resolver_results<InternetProtocol> results_type;
@@ -86,6 +88,7 @@
     return this->get_service().cancel(this->get_implementation());
   }
 
+#if !defined(ASIO_NO_DEPRECATED)
   /// (Deprecated.) Perform forward resolution of a query to a list of entries.
   /**
    * This function is used to resolve a query into a list of endpoint entries.
@@ -123,6 +126,7 @@
   {
     return this->get_service().resolve(this->get_implementation(), q, ec);
   }
+#endif // !defined(ASIO_NO_DEPRECATED)
 
   /// Perform forward resolution of a query to a list of entries.
   /**
@@ -242,7 +246,7 @@
       resolver_base::flags resolve_flags)
   {
     asio::error_code ec;
-    query q(host, service, resolve_flags);
+    basic_resolver_query<protocol_type> q(host, service, resolve_flags);
     results_type r = this->get_service().resolve(
         this->get_implementation(), q, ec);
     asio::detail::throw_error(ec, "resolve");
@@ -289,7 +293,7 @@
   results_type resolve(const std::string& host, const std::string& service,
       resolver_base::flags resolve_flags, asio::error_code& ec)
   {
-    query q(host, service, resolve_flags);
+    basic_resolver_query<protocol_type> q(host, service, resolve_flags);
     return this->get_service().resolve(this->get_implementation(), q, ec);
   }
 
@@ -421,7 +425,8 @@
       const std::string& service, resolver_base::flags resolve_flags)
   {
     asio::error_code ec;
-    query q(protocol, host, service, resolve_flags);
+    basic_resolver_query<protocol_type> q(
+        protocol, host, service, resolve_flags);
     results_type r = this->get_service().resolve(
         this->get_implementation(), q, ec);
     asio::detail::throw_error(ec, "resolve");
@@ -472,10 +477,12 @@
       const std::string& service, resolver_base::flags resolve_flags,
       asio::error_code& ec)
   {
-    query q(protocol, host, service, resolve_flags);
+    basic_resolver_query<protocol_type> q(
+        protocol, host, service, resolve_flags);
     return this->get_service().resolve(this->get_implementation(), q, ec);
   }
 
+#if !defined(ASIO_NO_DEPRECATED)
   /// (Deprecated.) Asynchronously perform forward resolution of a query to a
   /// list of entries.
   /**
@@ -513,6 +520,7 @@
     return this->get_service().async_resolve(this->get_implementation(), q,
         ASIO_MOVE_CAST(ResolveHandler)(handler));
   }
+#endif // !defined(ASIO_NO_DEPRECATED)
 
   /// Asynchronously perform forward resolution of a query to a list of entries.
   /**
@@ -624,7 +632,7 @@
     ASIO_RESOLVE_HANDLER_CHECK(
         ResolveHandler, handler, results_type) type_check;
 
-    query q(host, service, resolve_flags);
+    basic_resolver_query<protocol_type> q(host, service, resolve_flags);
     return this->get_service().async_resolve(this->get_implementation(), q,
         ASIO_MOVE_CAST(ResolveHandler)(handler));
   }
@@ -745,7 +753,8 @@
     ASIO_RESOLVE_HANDLER_CHECK(
         ResolveHandler, handler, results_type) type_check;
 
-    query q(protocol, host, service, resolve_flags);
+    basic_resolver_query<protocol_type> q(
+        protocol, host, service, resolve_flags);
     return this->get_service().async_resolve(this->get_implementation(), q,
         ASIO_MOVE_CAST(ResolveHandler)(handler));
   }
diff --git a/asio/include/asio/ip/basic_resolver_results.hpp b/asio/include/asio/ip/basic_resolver_results.hpp
index 2697b3a..001fad2 100644
--- a/asio/include/asio/ip/basic_resolver_results.hpp
+++ b/asio/include/asio/ip/basic_resolver_results.hpp
@@ -48,7 +48,11 @@
  */
 template <typename InternetProtocol>
 class basic_resolver_results
+#if !defined(ASIO_NO_DEPRECATED)
   : public basic_resolver_iterator<InternetProtocol>
+#else // !defined(ASIO_NO_DEPRECATED)
+  : private basic_resolver_iterator<InternetProtocol>
+#endif // !defined(ASIO_NO_DEPRECATED)
 {
 public:
   /// The protocol type associated with the results.
diff --git a/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp b/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp
index 5c0c88c..f189ebc 100644
--- a/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp
+++ b/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp
@@ -32,7 +32,7 @@
     udp::socket s(io_service, udp::endpoint(udp::v4(), 0));
 
     udp::resolver resolver(io_service);
-    udp::resolver::iterator iterator =
+    udp::resolver::results_type endpoints =
       resolver.resolve(udp::v4(), argv[1], argv[2]);
 
     using namespace std; // For strlen.
@@ -40,7 +40,7 @@
     char request[max_length];
     std::cin.getline(request, max_length);
     size_t request_length = strlen(request);
-    s.send_to(asio::buffer(request, request_length), *iterator);
+    s.send_to(asio::buffer(request, request_length), *endpoints.begin());
 
     char reply[max_length];
     udp::endpoint sender_endpoint;
diff --git a/asio/src/examples/cpp03/icmp/ping.cpp b/asio/src/examples/cpp03/icmp/ping.cpp
index 257fc94..fdee664 100644
--- a/asio/src/examples/cpp03/icmp/ping.cpp
+++ b/asio/src/examples/cpp03/icmp/ping.cpp
@@ -28,7 +28,7 @@
     : resolver_(io_service), socket_(io_service, icmp::v4()),
       timer_(io_service), sequence_number_(0), num_replies_(0)
   {
-    destination_ = *resolver_.resolve(icmp::v4(), destination, "");
+    destination_ = *resolver_.resolve(icmp::v4(), destination, "").begin();
 
     start_send();
     start_receive();
diff --git a/asio/src/examples/cpp03/porthopper/client.cpp b/asio/src/examples/cpp03/porthopper/client.cpp
index 832183f..a5952de 100644
--- a/asio/src/examples/cpp03/porthopper/client.cpp
+++ b/asio/src/examples/cpp03/porthopper/client.cpp
@@ -41,7 +41,7 @@
 
     // Determine the location of the server.
     tcp::resolver resolver(io_service);
-    tcp::endpoint remote_endpoint = *resolver.resolve(host_name, port);
+    tcp::endpoint remote_endpoint = *resolver.resolve(host_name, port).begin();
 
     // Establish the control connection to the server.
     tcp::socket control_socket(io_service);
diff --git a/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp b/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp
index 9f9054b..668d3e0 100644
--- a/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp
+++ b/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp
@@ -92,11 +92,12 @@
   }
 
   // Called by the user of the client class to initiate the connection process.
-  // The endpoint iterator will have been obtained using a tcp::resolver.
-  void start(tcp::resolver::iterator endpoint_iter)
+  // The endpoints will have been obtained using a tcp::resolver.
+  void start(tcp::resolver::results_type endpoints)
   {
     // Start the connect actor.
-    start_connect(endpoint_iter);
+    endpoints_ = endpoints;
+    start_connect(endpoints_.begin());
 
     // Start the deadline actor. You will note that we're not setting any
     // particular deadline here. Instead, the connect and input actors will
@@ -117,9 +118,9 @@
   }
 
 private:
-  void start_connect(tcp::resolver::iterator endpoint_iter)
+  void start_connect(tcp::resolver::results_type::iterator endpoint_iter)
   {
-    if (endpoint_iter != tcp::resolver::iterator())
+    if (endpoint_iter != endpoints_.end())
     {
       std::cout << "Trying " << endpoint_iter->endpoint() << "...\n";
 
@@ -139,7 +140,7 @@
   }
 
   void handle_connect(const asio::error_code& ec,
-      tcp::resolver::iterator endpoint_iter)
+      tcp::resolver::results_type::iterator endpoint_iter)
   {
     if (stopped_)
       return;
@@ -273,6 +274,7 @@
 
 private:
   bool stopped_;
+  tcp::resolver::results_type endpoints_;
   tcp::socket socket_;
   asio::streambuf input_buffer_;
   deadline_timer deadline_;
diff --git a/asio/src/examples/cpp11/echo/blocking_udp_echo_client.cpp b/asio/src/examples/cpp11/echo/blocking_udp_echo_client.cpp
index d02c59a..136ca34 100644
--- a/asio/src/examples/cpp11/echo/blocking_udp_echo_client.cpp
+++ b/asio/src/examples/cpp11/echo/blocking_udp_echo_client.cpp
@@ -32,13 +32,14 @@
     udp::socket s(io_service, udp::endpoint(udp::v4(), 0));
 
     udp::resolver resolver(io_service);
-    udp::endpoint endpoint = *resolver.resolve(udp::v4(), argv[1], argv[2]);
+    udp::resolver::results_type endpoints =
+      resolver.resolve(udp::v4(), argv[1], argv[2]);
 
     std::cout << "Enter message: ";
     char request[max_length];
     std::cin.getline(request, max_length);
     size_t request_length = std::strlen(request);
-    s.send_to(asio::buffer(request, request_length), endpoint);
+    s.send_to(asio::buffer(request, request_length), *endpoints.begin());
 
     char reply[max_length];
     udp::endpoint sender_endpoint;
diff --git a/asio/src/tests/performance/client.cpp b/asio/src/tests/performance/client.cpp
index 25231ef..13b3a57 100644
--- a/asio/src/tests/performance/client.cpp
+++ b/asio/src/tests/performance/client.cpp
@@ -255,7 +255,7 @@
 
     asio::ip::tcp::resolver r(ios);
     asio::ip::tcp::resolver::results_type endpoints =
-      r.resolve(asio::ip::tcp::resolver::query(host, port));
+      r.resolve(host, port);
 
     client c(ios, endpoints, block_size, session_count, timeout);
 
