diff --git a/asio/include/asio/buffered_read_stream.hpp b/asio/include/asio/buffered_read_stream.hpp
index f58e4eb..daa6f59 100644
--- a/asio/include/asio/buffered_read_stream.hpp
+++ b/asio/include/asio/buffered_read_stream.hpp
@@ -55,6 +55,9 @@
   /// The type of the lowest layer.
   typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
 
+  /// The type of the executor associated with the object.
+  typedef typename lowest_layer_type::executor_type executor_type;
+
 #if defined(GENERATING_DOCUMENTATION)
   /// The default buffer size.
   static const std::size_t default_buffer_size = implementation_defined;
@@ -96,14 +99,21 @@
     return next_layer_.lowest_layer();
   }
 
-  /// Get the io_context associated with the object.
+  /// Get the executor associated with the object.
+  executor_type get_executor() ASIO_NOEXCEPT
+  {
+    return next_layer_.lowest_layer().get_executor();
+  }
+
+#if !defined(ASIO_NO_DEPRECATED)
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
+  /// object.
   asio::io_context& get_io_context()
   {
     return next_layer_.get_io_context();
   }
 
-#if !defined(ASIO_NO_DEPRECATED)
-  /// (Deprecated: Use get_io_context().) Get the io_context associated with the
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
   /// object.
   asio::io_context& get_io_service()
   {
diff --git a/asio/include/asio/buffered_stream.hpp b/asio/include/asio/buffered_stream.hpp
index 0e84013..516e213 100644
--- a/asio/include/asio/buffered_stream.hpp
+++ b/asio/include/asio/buffered_stream.hpp
@@ -52,6 +52,9 @@
   /// The type of the lowest layer.
   typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
 
+  /// The type of the executor associated with the object.
+  typedef typename lowest_layer_type::executor_type executor_type;
+
   /// Construct, passing the specified argument to initialise the next layer.
   template <typename Arg>
   explicit buffered_stream(Arg& a)
@@ -87,14 +90,21 @@
     return stream_impl_.lowest_layer();
   }
 
-  /// Get the io_context associated with the object.
+  /// Get the executor associated with the object.
+  executor_type get_executor() ASIO_NOEXCEPT
+  {
+    return stream_impl_.lowest_layer().get_executor();
+  }
+
+#if !defined(ASIO_NO_DEPRECATED)
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
+  /// object.
   asio::io_context& get_io_context()
   {
     return stream_impl_.get_io_context();
   }
 
-#if !defined(ASIO_NO_DEPRECATED)
-  /// (Deprecated: Use get_io_context().) Get the io_context associated with the
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
   /// object.
   asio::io_context& get_io_service()
   {
diff --git a/asio/include/asio/buffered_write_stream.hpp b/asio/include/asio/buffered_write_stream.hpp
index 0b5ef89..0fa7547 100644
--- a/asio/include/asio/buffered_write_stream.hpp
+++ b/asio/include/asio/buffered_write_stream.hpp
@@ -55,6 +55,9 @@
   /// The type of the lowest layer.
   typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
 
+  /// The type of the executor associated with the object.
+  typedef typename lowest_layer_type::executor_type executor_type;
+
 #if defined(GENERATING_DOCUMENTATION)
   /// The default buffer size.
   static const std::size_t default_buffer_size = implementation_defined;
@@ -96,14 +99,21 @@
     return next_layer_.lowest_layer();
   }
 
-  /// Get the io_context associated with the object.
+  /// Get the executor associated with the object.
+  executor_type get_executor() ASIO_NOEXCEPT
+  {
+    return next_layer_.lowest_layer().get_executor();
+  }
+
+#if !defined(ASIO_NO_DEPRECATED)
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
+  /// object.
   asio::io_context& get_io_context()
   {
     return next_layer_.get_io_context();
   }
 
-#if !defined(ASIO_NO_DEPRECATED)
-  /// (Deprecated: Use get_io_context().) Get the io_context associated with the
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
   /// object.
   asio::io_context& get_io_service()
   {
diff --git a/asio/include/asio/ssl/stream.hpp b/asio/include/asio/ssl/stream.hpp
index 207bba3..015066b 100644
--- a/asio/include/asio/ssl/stream.hpp
+++ b/asio/include/asio/ssl/stream.hpp
@@ -80,6 +80,9 @@
   /// The type of the lowest layer.
   typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
 
+  /// The type of the executor associated with the object.
+  typedef typename lowest_layer_type::executor_type executor_type;
+
 #if defined(ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
   /// Construct a stream.
   /**
@@ -112,19 +115,34 @@
   {
   }
 
-  /// Get the io_context associated with the object.
+  /// Get the executor associated with the object.
   /**
-   * This function may be used to obtain the io_context object that the stream
+   * This function may be used to obtain the executor object that the stream
    * uses to dispatch handlers for asynchronous operations.
    *
-   * @return A reference to the io_context object that stream will use to
-   * dispatch handlers. Ownership is not transferred to the caller.
+   * @return A copy of the executor that stream will use to dispatch handlers.
    */
+  executor_type get_executor() ASIO_NOEXCEPT
+  {
+    return next_layer_.lowest_layer().get_executor();
+  }
+
+#if !defined(ASIO_NO_DEPRECATED)
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
+  /// object.
   asio::io_context& get_io_context()
   {
     return next_layer_.lowest_layer().get_io_context();
   }
 
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
+  /// object.
+  asio::io_context& get_io_service()
+  {
+    return next_layer_.lowest_layer().get_io_service();
+  }
+#endif // !defined(ASIO_NO_DEPRECATED)
+
   /// Get the underlying implementation in the native type.
   /**
    * This function may be used to obtain the underlying implementation of the
diff --git a/asio/src/examples/cpp03/windows/transmit_file.cpp b/asio/src/examples/cpp03/windows/transmit_file.cpp
index 9ea2853..24502a0 100644
--- a/asio/src/examples/cpp03/windows/transmit_file.cpp
+++ b/asio/src/examples/cpp03/windows/transmit_file.cpp
@@ -28,7 +28,7 @@
     random_access_handle& file, Handler handler)
 {
   // Construct an OVERLAPPED-derived object to contain the handler.
-  overlapped_ptr overlapped(socket.get_io_context(), handler);
+  overlapped_ptr overlapped(socket.get_executor().context(), handler);
 
   // Initiate the TransmitFile operation.
   BOOL ok = ::TransmitFile(socket.native_handle(),
@@ -119,7 +119,7 @@
   void start_accept()
   {
     connection::pointer new_connection =
-      connection::create(acceptor_.get_io_context(), filename_);
+      connection::create(acceptor_.get_executor().context(), filename_);
 
     acceptor_.async_accept(new_connection->socket(),
         boost::bind(&server::handle_accept, this, new_connection,
diff --git a/asio/src/tests/unit/buffered_read_stream.cpp b/asio/src/tests/unit/buffered_read_stream.cpp
index 06047c2..b4cb4fd 100644
--- a/asio/src/tests/unit/buffered_read_stream.cpp
+++ b/asio/src/tests/unit/buffered_read_stream.cpp
@@ -78,9 +78,17 @@
     stream_type stream1(ioc);
     stream_type stream2(ioc, 1024);
 
+    stream_type::executor_type ex = stream1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = stream1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = stream1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     stream_type::lowest_layer_type& lowest_layer = stream1.lowest_layer();
     (void)lowest_layer;
 
diff --git a/asio/src/tests/unit/buffered_stream.cpp b/asio/src/tests/unit/buffered_stream.cpp
index a55a2a5..3d5f479 100644
--- a/asio/src/tests/unit/buffered_stream.cpp
+++ b/asio/src/tests/unit/buffered_stream.cpp
@@ -82,9 +82,17 @@
     stream_type stream1(ioc);
     stream_type stream2(ioc, 1024, 1024);
 
+    stream_type::executor_type ex = stream1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = stream1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = stream1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     stream_type::lowest_layer_type& lowest_layer = stream1.lowest_layer();
     (void)lowest_layer;
 
diff --git a/asio/src/tests/unit/buffered_write_stream.cpp b/asio/src/tests/unit/buffered_write_stream.cpp
index cf3a819..a9731e0 100644
--- a/asio/src/tests/unit/buffered_write_stream.cpp
+++ b/asio/src/tests/unit/buffered_write_stream.cpp
@@ -78,9 +78,17 @@
     stream_type stream1(ioc);
     stream_type stream2(ioc, 1024);
 
+    stream_type::executor_type ex = stream1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = stream1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = stream1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     stream_type::lowest_layer_type& lowest_layer = stream1.lowest_layer();
     (void)lowest_layer;
 
diff --git a/asio/src/tests/unit/generic/datagram_protocol.cpp b/asio/src/tests/unit/generic/datagram_protocol.cpp
index 58da16a..bb2c39b 100644
--- a/asio/src/tests/unit/generic/datagram_protocol.cpp
+++ b/asio/src/tests/unit/generic/datagram_protocol.cpp
@@ -94,9 +94,17 @@
 
     // basic_io_object functions.
 
+    dp::socket::executor_type ex = socket1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = socket1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = socket1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // basic_socket functions.
 
     dp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer();
diff --git a/asio/src/tests/unit/generic/raw_protocol.cpp b/asio/src/tests/unit/generic/raw_protocol.cpp
index 0ba8c11..b3d72f0 100644
--- a/asio/src/tests/unit/generic/raw_protocol.cpp
+++ b/asio/src/tests/unit/generic/raw_protocol.cpp
@@ -94,9 +94,17 @@
 
     // basic_io_object functions.
 
+    rp::socket::executor_type ex = socket1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = socket1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = socket1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // basic_socket functions.
 
     rp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer();
diff --git a/asio/src/tests/unit/generic/seq_packet_protocol.cpp b/asio/src/tests/unit/generic/seq_packet_protocol.cpp
index a2ba7be..da19165 100644
--- a/asio/src/tests/unit/generic/seq_packet_protocol.cpp
+++ b/asio/src/tests/unit/generic/seq_packet_protocol.cpp
@@ -90,9 +90,17 @@
 
     // basic_io_object functions.
 
+    spp::socket::executor_type ex = socket1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = socket1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = socket1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // basic_socket functions.
 
     spp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer();
diff --git a/asio/src/tests/unit/generic/stream_protocol.cpp b/asio/src/tests/unit/generic/stream_protocol.cpp
index 4a93f26..16711c5 100644
--- a/asio/src/tests/unit/generic/stream_protocol.cpp
+++ b/asio/src/tests/unit/generic/stream_protocol.cpp
@@ -104,9 +104,17 @@
 
     // basic_io_object functions.
 
+    sp::socket::executor_type ex = socket1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = socket1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = socket1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // basic_socket functions.
 
     sp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer();
diff --git a/asio/src/tests/unit/is_read_buffered.cpp b/asio/src/tests/unit/is_read_buffered.cpp
index ee23478..f4ca5c9 100644
--- a/asio/src/tests/unit/is_read_buffered.cpp
+++ b/asio/src/tests/unit/is_read_buffered.cpp
@@ -31,6 +31,8 @@
 
   typedef test_stream lowest_layer_type;
 
+  typedef io_context_type::executor_type executor_type;
+
   test_stream(asio::io_context& io_context)
     : io_context_(io_context)
   {
diff --git a/asio/src/tests/unit/is_write_buffered.cpp b/asio/src/tests/unit/is_write_buffered.cpp
index 3b26c27..206a8a5 100644
--- a/asio/src/tests/unit/is_write_buffered.cpp
+++ b/asio/src/tests/unit/is_write_buffered.cpp
@@ -31,6 +31,8 @@
 
   typedef test_stream lowest_layer_type;
 
+  typedef io_context_type::executor_type executor_type;
+
   test_stream(asio::io_context& io_context)
     : io_context_(io_context)
   {
diff --git a/asio/src/tests/unit/serial_port.cpp b/asio/src/tests/unit/serial_port.cpp
index 6171afc..0a7f041 100644
--- a/asio/src/tests/unit/serial_port.cpp
+++ b/asio/src/tests/unit/serial_port.cpp
@@ -86,9 +86,17 @@
 
     // basic_io_object functions.
 
+    serial_port::executor_type ex = port1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = port1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = port1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // basic_serial_port functions.
 
     serial_port::lowest_layer_type& lowest_layer = port1.lowest_layer();
diff --git a/asio/src/tests/unit/signal_set.cpp b/asio/src/tests/unit/signal_set.cpp
index c0356d2..88b983a 100644
--- a/asio/src/tests/unit/signal_set.cpp
+++ b/asio/src/tests/unit/signal_set.cpp
@@ -52,9 +52,17 @@
 
     // basic_io_object functions.
 
+    signal_set::executor_type ex = set1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = set1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = set1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // basic_signal_set functions.
 
     set1.add(1);
diff --git a/asio/src/tests/unit/ssl/stream.cpp b/asio/src/tests/unit/ssl/stream.cpp
index 2020283..bac2c23 100644
--- a/asio/src/tests/unit/ssl/stream.cpp
+++ b/asio/src/tests/unit/ssl/stream.cpp
@@ -77,9 +77,17 @@
 
     // basic_io_object functions.
 
+    ssl::stream<ip::tcp::socket>::executor_type ex = stream1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = stream1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = stream1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // ssl::stream functions.
 
     SSL* ssl1 = stream1.native_handle();
