diff --git a/async-message-passing/src/main.rs b/async-message-passing/src/main.rs
index 087b3bb..287023c 100644
--- a/async-message-passing/src/main.rs
+++ b/async-message-passing/src/main.rs
@@ -1,11 +1,11 @@
-use std::{pin::Pin, time::Duration};
+use std::{pin::Pin, pin::pin, time::Duration};
 
 fn main() {
     trpl::run(async {
         let (tx, mut rx) = trpl::channel();
 
         let tx1 = tx.clone();
-        let tx1_fut = async move {
+        let tx1_fut = pin!(async move {
             let vals = vec![
                 String::from("hi"),
                 String::from("from"),
@@ -17,15 +17,15 @@ fn main() {
                 tx1.send(val).unwrap();
                 trpl::sleep(Duration::from_millis(500)).await;
             }
-        };
+        });
 
-        let rx_fut = async {
+        let rx_fut = pin!(async {
             while let Some(value) = rx.recv().await {
                 println!("received '{value}'");
             }
-        };
+        });
 
-        let tx_fut = async move {
+        let tx_fut = pin!(async move {
             let vals = vec![
                 String::from("more"),
                 String::from("messages"),
@@ -37,10 +37,10 @@ fn main() {
                 tx.send(val).unwrap();
                 trpl::sleep(Duration::from_millis(1500)).await;
             }
-        };
+        });
 
-        let futures: Vec<Pin<Box<dyn Future<Output = ()>>>> =
-            vec![Box::pin(tx1_fut), Box::pin(rx_fut), Box::pin(tx_fut)];
+        let futures: Vec<Pin<&mut dyn Future<Output = ()>>> =
+            vec![tx1_fut, rx_fut, tx_fut];
 
         trpl::join_all(futures).await;
     });