diff --git a/src/bin/tut1.rs b/src/bin/tut1.rs
deleted file mode 100644
index 83596ad..0000000
--- a/src/bin/tut1.rs
+++ /dev/null
@@ -1,43 +0,0 @@
-// Structs, Borrowing
-
-#![allow(dead_code)]
-
-use rust_tutorial::*;
-
-fn greet_person_1(p: Person) {
-    println!("Hello {} ({})!", p.name, p.age);
-}
-
-fn greet_person_2(p: &Person) {
-    println!("Hello {} ({})!", p.name, p.age);
-}
-
-fn birthday(p: &mut Person) {
-    p.age += 1;
-}
-
-fn main() {
-    // -- Struct instantiation --
-    let mut p = Person {
-        age: 30,
-        name: "Mary".to_string(),
-    };
-
-    // -- Borrowing --
-    //greet_person_1(p);
-    //greet_person_1(p);
-
-    greet_person_2(&p);
-    greet_person_2(&p);
-
-    birthday(&mut p);
-
-    greet_person_2(&p);
-
-    // -- Traits --
-    println!("p = {}", p.to_string());
-
-    // -- Debugging --
-    let x = dbg!(100 + 2) + 3;
-    println!("Hello, world!  100 + 2 + 3 = {}", x);
-}
diff --git a/src/bin/tut1a.rs b/src/bin/tut1a.rs
new file mode 100644
index 0000000..62b70d1
--- /dev/null
+++ b/src/bin/tut1a.rs
@@ -0,0 +1,20 @@
+// Structs, Borrowing
+
+#![allow(dead_code)]
+
+use rust_tutorial::*;
+
+fn greet_person(p: Person) {
+    println!("Hello {} ({})!", p.name, p.age);
+}
+
+fn main() {
+    // -- Struct instantiation --
+    let p = Person {
+        age: dbg!(20 + 10),
+        name: "Mary".to_string(),
+    };
+
+    //greet_person(p);
+    //greet_person(p);
+}
diff --git a/src/bin/tut1b.rs b/src/bin/tut1b.rs
new file mode 100644
index 0000000..9bd5e92
--- /dev/null
+++ b/src/bin/tut1b.rs
@@ -0,0 +1,21 @@
+// Structs, Borrowing
+
+#![allow(dead_code)]
+
+use rust_tutorial::*;
+
+fn greet_person(p: &Person) {
+    println!("Hello {} ({})!", p.name, p.age);
+}
+
+fn main() {
+    // -- Struct instantiation --
+    let p = Person {
+        age: 30,
+        name: "Mary".to_string(),
+    };
+
+    // -- Borrowing --
+    greet_person(&p);
+    greet_person(&p);
+}
diff --git a/src/bin/tut1c.rs b/src/bin/tut1c.rs
new file mode 100644
index 0000000..c8bd848
--- /dev/null
+++ b/src/bin/tut1c.rs
@@ -0,0 +1,28 @@
+// Structs, Borrowing
+
+#![allow(dead_code)]
+
+use rust_tutorial::*;
+
+fn greet_person(p: &Person) {
+    println!("Hello {} ({})!", p.name, p.age);
+}
+
+fn birthday(p: &mut Person) {
+    p.age += 1;
+}
+
+fn main() {
+    // -- Struct instantiation --
+    let mut p = Person {
+        age: 30,
+        name: "Mary".to_string(),
+    };
+
+    greet_person(&p);
+    greet_person(&p);
+
+    birthday(&mut p);
+
+    greet_person(&p);
+}
diff --git a/src/bin/tut1d.rs b/src/bin/tut1d.rs
new file mode 100644
index 0000000..4c7e54a
--- /dev/null
+++ b/src/bin/tut1d.rs
@@ -0,0 +1,31 @@
+// Structs, Borrowing
+
+#![allow(dead_code)]
+
+use rust_tutorial::*;
+
+fn greet_person(p: &Person) {
+    println!("Hello {} ({})!", p.name, p.age);
+}
+
+fn birthday(p: &mut Person) {
+    p.age += 1;
+}
+
+fn main() {
+    // -- Struct instantiation --
+    let mut p = Person {
+        age: 30,
+        name: "Mary".to_string(),
+    };
+
+    greet_person(&p);
+    greet_person(&p);
+
+    birthday(&mut p);
+
+    greet_person(&p);
+
+    // -- Traits --
+    println!("p = {}", p.to_string());
+}
diff --git a/src/bin/tut1e.rs b/src/bin/tut1e.rs
new file mode 100644
index 0000000..ec02b68
--- /dev/null
+++ b/src/bin/tut1e.rs
@@ -0,0 +1,25 @@
+// Structs, Borrowing
+
+#![allow(dead_code)]
+
+use rust_tutorial::*;
+
+pub struct Department<'a> {
+    pub boss: &'a Person
+}
+
+fn make_person(name: &str, age: i32) -> Person {
+    let p = Person { name: name.to_string(), age };
+    p
+}
+
+fn birthday(p: &mut Person) {
+    p.age += 1;
+}
+
+fn main() {
+    let mut p = make_person("Mr. P", 30);
+    let dept_1 = Department { boss: &p };
+    //birthday(&mut p);
+    println!("{}", dept_1.boss.to_string());
+}
diff --git a/src/bin/tut2.rs b/src/bin/tut2.rs
index 702b870..a308ee0 100644
--- a/src/bin/tut2.rs
+++ b/src/bin/tut2.rs
@@ -1,3 +1,5 @@
+// Fearless Abstraction
+
 #![allow(dead_code)]
 #![allow(unused_imports)]
 
@@ -6,7 +8,7 @@
 /// Run this to see the disassembly of `compute_sum_of_squares_{1,2}`:
 ///
 /// ```bash
-/// cargo objdump --bin tut2 --release -- -d | awk -v RS= '/^tut2::compute_sum_of_squares/'
+/// cargo objdump --bin tut3 --release -- -d | awk -v RS= '/^([[:xdigit:]]+ )?tut2::compute_sum_of_squares/'
 /// ```
 
 #[inline(never)]
diff --git a/src/bin/tut3.rs b/src/bin/tut3.rs
index a1005a0..84c11bf 100644
--- a/src/bin/tut3.rs
+++ b/src/bin/tut3.rs
@@ -1,4 +1,4 @@
-// Generic Programming
+// Generic Programming: Static Polymorphism
 
 #![allow(dead_code)]
 #![allow(unused_imports)]
@@ -8,7 +8,7 @@
 /// Run this to see the disassembly of `compute_sum_of_squares_{1,2}`:
 ///
 /// ```bash
-/// cargo objdump --bin tut2 --release -- -d | awk -v RS= '/^tut2::compute_sum_of_squares/'
+/// cargo objdump --bin tut3 --release -- -d | awk -v RS= '/^([[:xdigit:]]+ )?tut3::compute_sum_of_squares/'
 /// ```
 
 #[inline(never)]
diff --git a/src/bin/tut4.rs b/src/bin/tut4.rs
index f743435..2894eb6 100644
--- a/src/bin/tut4.rs
+++ b/src/bin/tut4.rs
@@ -1,9 +1,27 @@
-// Fearless Concurrency
+// Generic Programming: Dynamic Polymorphism
 
 #![allow(dead_code)]
 #![allow(unused_imports)]
 
 use rust_tutorial::*;
 
+fn stringify_all(xs: Vec<&dyn ToString>) -> String {
+    let strings: Vec<String> =
+        xs.iter().map(|x| x.to_string()).collect();
+
+    strings.join(", ")
+}
+
 fn main() {
+    let mut stringlike_things: Vec<&dyn ToString> = Vec::new();
+
+    let x1 = "abc";
+    let x2 = 100;
+    let x3 = Person { age: 30, name: "Mary".to_string() };
+
+    stringlike_things.push(&x1);
+    stringlike_things.push(&x2);
+    stringlike_things.push(&x3);
+
+    println!("{}", stringify_all(stringlike_things));
 }
diff --git a/src/bin/tut5.rs b/src/bin/tut5.rs
new file mode 100644
index 0000000..d2e2936
--- /dev/null
+++ b/src/bin/tut5.rs
@@ -0,0 +1,31 @@
+// Fearless Concurrency
+
+#![allow(dead_code)]
+#![allow(unused_imports)]
+
+use rust_tutorial::*;
+
+use std::sync::{Mutex, Arc};
+use std::thread;
+
+fn main() {
+    let counter = Arc::new(Mutex::new(0));
+    let mut workers = vec![];
+
+    for _ in 0..10 {
+        let counter = Arc::clone(&counter);
+
+        let worker = thread::spawn(move || {
+            let mut num = counter.lock().unwrap();
+            *num += 1;
+        });
+
+        workers.push(worker);
+    }
+
+    for worker in workers {
+        worker.join().unwrap();
+    }
+
+    println!("Result: {}", *counter.lock().unwrap());
+}
