diff --git a/exercises/threads/threads1.rs b/exercises/threads/threads1.rs
index f31b317..d86cb3c 100644
--- a/exercises/threads/threads1.rs
+++ b/exercises/threads/threads1.rs
@@ -1,10 +1,7 @@
 // threads1.rs
 // Make this compile! Execute `rustlings hint threads1` for hints :)
-// The idea is the thread spawned on line 22 is completing jobs while the main thread is
-// monitoring progress until 10 jobs are completed. Because of the difference between the
-// spawned threads' sleep time, and the waiting threads sleep time, when you see 6 lines
-// of "waiting..." and the program ends without timing out when running,
-// you've got it :)
+// The idea is the threads spawned on line 20 are completing jobs while the main thread is
+// monitoring progress until 10 jobs are completed.
 
 // I AM NOT DONE
 
@@ -18,15 +15,18 @@ struct JobStatus {
 
 fn main() {
     let status = Arc::new(JobStatus { jobs_completed: 0 });
-    let status_shared = status.clone();
-    thread::spawn(move || {
-        for _ in 0..10 {
-            thread::sleep(Duration::from_millis(250));
-            status_shared.jobs_completed += 1;
-        }
-    });
+    for i in 1..=10 {
+        let status_ref = Arc::clone(&status);
+        thread::spawn(move || {
+            thread::sleep(Duration::from_millis(250 * i));
+            status_ref.jobs_completed += 1;
+        });
+    }
     while status.jobs_completed < 10 {
-        println!("waiting... ");
+        println!("waiting for {} jobs ({} jobs running)... ", 
+            (10 - status.jobs_completed), 
+            (Arc::strong_count(&status) - 1) // subtract one for refrence in _this_ thread
+        );
         thread::sleep(Duration::from_millis(500));
     }
 }