diff --git a/exercises/threads/threads1.rs b/exercises/threads/threads1.rs
index f31b317..1adef48 100644
--- a/exercises/threads/threads1.rs
+++ b/exercises/threads/threads1.rs
@@ -4,7 +4,13 @@
 // 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 :)
+// you've got it :) 
+// Why 6 lines, you ask? because the program will spawn one new thread that will increment
+// the Jobstatus on 250ms intervals. At the same time, our original thread will check
+// the Jobstatus at 500ms intervals. So, this count should be ~0 on the first iteration of
+// the `while` loop; ~2 on the second iteration; ~4 on the third iteration; finally, 
+// ~10 on the sixth. Why? Because by the time our main thread peeks at the JobStatus counter,
+// our second spawned thread will have already run two incremental operations on it.
 
 // I AM NOT DONE
 
@@ -17,14 +23,19 @@ struct JobStatus {
 }
 
 fn main() {
+    // TODO: Change the line below
     let status = Arc::new(JobStatus { jobs_completed: 0 });
     let status_shared = status.clone();
+    // The code below spawns a single new thread that will run a for-loop code block 10 times.
     thread::spawn(move || {
         for _ in 0..10 {
             thread::sleep(Duration::from_millis(250));
+            // TODO: change the line below
             status_shared.jobs_completed += 1;
         }
     });
+    // The code below will check the count on JobStatus on 500ms intervals.
+    // TODO: Change the line below
     while status.jobs_completed < 10 {
         println!("waiting... ");
         thread::sleep(Duration::from_millis(500));