diff --git a/README.md b/README.md
index a3c4331b7e2457bddb1e956f6dd0368e795ddf41..53a380c2f3cf703d375fc1597df18863a0cb55dd 100644
--- a/README.md
+++ b/README.md
@@ -8,4 +8,10 @@ Its main purpose was to provide the audience with enough information about Rust
 * [Design Principles](./design-principles/): Contains slides describing the general design principles of the Rust language and how it relates to other languages.
 * [Ecosystem](./ecosystem/): Contains slides describing the Rust ecosystem, including how the language is developed, which tools are available and who uses Rust today.
 * [Pros/Cons](./pros-cons/): Contains slides listing several reasons for and against Rust that one should be aware of.
-* [Unsafe](./unsafe-rust/): Contains slides introducing unsafe Rust and myths around it. This part is accompanied by the code in the other directories.
+* [Unsafe](./unsafe-rust/): Contains slides introducing unsafe Rust and myths around it. This part is accompanied by the code in the other directories:
+
+    - ["Pointer dereference"](./ptr-deref/): Contains an example of the kinds of behavior unsafe Rust allows without incurring undefined behavior.
+    - ["No unsafe, no bugs"](./no-unsafe-no-bugs/): Contains an example of a safe Rust program that nevertheless contains a data race-based bug.
+    - ["Safe means safe"](./safe-means-safe/): Contains an example of a safe Rust program with `#[forbid(unsafe_code)]` that nevertheless contains unsafe code under the hood.
+    - ["Unsafe Rust is C++"](./unsafe-rust-is-cpp/): Contains an example of an unsafe program that is correct under C++ semantics but results in undefined behavior in Rust.
+    - ["Enforcing invariants"](./enforcing-invariants/): Contains an example on how to power-use the safe-unsafe boundary to guarantee that methods can only be safely applied; this example is a very simplified version of two-watched literal lists in SAT solving.