diff --git a/blog/post/2015-08-18-multiboot-kernel.md b/blog/post/2015-08-18-multiboot-kernel.md
index 1199ae65..dd157007 100644
--- a/blog/post/2015-08-18-multiboot-kernel.md
+++ b/blog/post/2015-08-18-multiboot-kernel.md
@@ -12,7 +12,7 @@ This post explains how to create a minimal x86 operating system kernel. In fact,
[Rust]: http://www.rust-lang.org/
-
+
I tried to explain everything in detail and to keep the code as simple as possible. If you have any questions, suggestions or other issues, please leave a comment or [create an issue] on Github. The source code is available in a [repository][source code], too.
diff --git a/blog/post/2015-08-25-entering-longmode.md b/blog/post/2015-08-25-entering-longmode.md
index 03d76276..9cc9c732 100644
--- a/blog/post/2015-08-25-entering-longmode.md
+++ b/blog/post/2015-08-25-entering-longmode.md
@@ -16,7 +16,7 @@ In the [previous post] we created a minimal multiboot kernel. It just prints `OK
[protected mode]: https://en.wikipedia.org/wiki/Protected_mode
[long mode]: https://en.wikipedia.org/wiki/Long_mode
-
+
I tried to explain everything in detail and to keep the code as simple as possible. If you have any questions, suggestions, or issues, please leave a comment or [create an issue] on Github. The source code is available in a [repository][source code], too.
diff --git a/blog/post/2015-09-02-set-up-rust.md b/blog/post/2015-09-02-set-up-rust.md
index 3072fd73..b07358a1 100644
--- a/blog/post/2015-09-02-set-up-rust.md
+++ b/blog/post/2015-09-02-set-up-rust.md
@@ -15,7 +15,7 @@ In the previous posts we created a [minimal Multiboot kernel][multiboot post] an
[long mode post]: {{% relref "2015-08-25-entering-longmode.md" %}}
[Rust]: https://www.rust-lang.org/
-
+
This blog post tries to set up Rust step-by-step and point out the different problems. If you have any questions, problems, or suggestions please [file an issue] or create a comment at the bottom. The code from this post is in a [Github repository], too.
diff --git a/blog/post/2015-10-23-printing-to-screen.md b/blog/post/2015-10-23-printing-to-screen.md
index 7e33ef3d..c1772a97 100644
--- a/blog/post/2015-10-23-printing-to-screen.md
+++ b/blog/post/2015-10-23-printing-to-screen.md
@@ -14,7 +14,7 @@ In the [previous post] we switched from assembly to [Rust], a systems programmin
[raw pointers]: https://doc.rust-lang.org/book/raw-pointers.html
[formatting macros]: https://doc.rust-lang.org/std/fmt/#related-macros
-
+
This post uses recent unstable features, so you need an up-to-date nighly compiler. If you have any questions, problems, or suggestions please [file an issue] or create a comment at the bottom. The code from this post is also available on [Github][code repository].
diff --git a/blog/post/2015-11-15-allocating-frames.md b/blog/post/2015-11-15-allocating-frames.md
index 910deae1..8ab0b082 100644
--- a/blog/post/2015-11-15-allocating-frames.md
+++ b/blog/post/2015-11-15-allocating-frames.md
@@ -5,7 +5,7 @@ date = "2015-11-15"
In this post we create an allocator that provides free physical frames for a future paging module. To get the required information about available and used memory we use the Multiboot information structure. Additionally, we improve the `panic` handler to print the corresponding message and source line.
-
+
The full source code is available on [Github][source repo]. Feel free to open issues there if you have any problems or improvements. You can also leave a comment at the bottom.
diff --git a/blog/post/2015-12-09-modifying-page-tables.md b/blog/post/2015-12-09-modifying-page-tables.md
index bd07e8e2..e6026e5c 100644
--- a/blog/post/2015-12-09-modifying-page-tables.md
+++ b/blog/post/2015-12-09-modifying-page-tables.md
@@ -6,7 +6,7 @@ date = "2015-12-09"
In this post we will create a paging module, which allows us to access and modify the 4-level page table. We will explore recursive page table mapping and use some Rust features to make it safe. Finally we will create functions to translate virtual addresses and to map and unmap pages.
-
+
You can find the source code and this post itself on [Github][source repository]. Please file an issue there if you have any problems or improvement suggestions. There is also a comment section at the end of this page. Note that this post requires a current Rust nightly.
diff --git a/blog/post/2016-01-01-remap-the-kernel.md b/blog/post/2016-01-01-remap-the-kernel.md
index 76601bc9..6c10aa5b 100644
--- a/blog/post/2016-01-01-remap-the-kernel.md
+++ b/blog/post/2016-01-01-remap-the-kernel.md
@@ -6,7 +6,7 @@ updated = "2016-03-06"
In this post we will create a new page table to map the kernel sections correctly. Therefor we will extend the paging module to support modifications of _inactive_ page tables as well. Then we will switch to the new table and secure our kernel stack by creating a guard page.
-
+
As always, you can find the source code on [Github]. Don't hesitate to file issues there if you have any problems or improvement suggestions. There is also a comment section at the end of this page. Note that this post requires a current Rust nightly.
diff --git a/blog/post/2016-04-11-kernel-heap.md b/blog/post/2016-04-11-kernel-heap.md
index 96d77504..4e89f119 100644
--- a/blog/post/2016-04-11-kernel-heap.md
+++ b/blog/post/2016-04-11-kernel-heap.md
@@ -10,7 +10,7 @@ In the previous posts we have created a [frame allocator] and a [page table modu
[alloc]: https://doc.rust-lang.org/nightly/alloc/index.html
[collections]: https://doc.rust-lang.org/nightly/collections/index.html
-
+
As always, you can find the complete source code on [Github]. Please file [issues] for any problems, questions, or improvement suggestions. There is also a comment section at the end of this page.
diff --git a/blog/post/2016-05-28-catching-exceptions.md b/blog/post/2016-05-28-catching-exceptions.md
index a52a7d21..e9dfd3ae 100644
--- a/blog/post/2016-05-28-catching-exceptions.md
+++ b/blog/post/2016-05-28-catching-exceptions.md
@@ -6,7 +6,7 @@ updated = "2016-06-25"
In this post, we start exploring exceptions. We set up an interrupt descriptor table and add handler functions. At the end of this post, our kernel will be able to catch divide-by-zero faults.
-
+
As always, the complete source code is on [Github]. Please file [issues] for any problems, questions, or improvement suggestions. There is also a comment section at the end of this page.
@@ -328,7 +328,7 @@ The method does not need to modify the IDT, so it takes `self` by immutable refe
Then we pass a pointer to our `ptr` structure to the `lidt` function, which calls the `lidt` assembly instruction in order to reload the IDT register. We need an unsafe block here, because the `lidt` assumes that the specified handler addresses are valid.
-### Safety
+#### Safety
But can we really guarantee that handler addresses are always valid? Let's see:
- The `Idt::new` function creates a new table populated with non-present entries. There's no way to set these entries to present from outside of this module, so this function is fine.
@@ -361,7 +361,7 @@ Well, we construct an IDT _on the stack_ and load it. It is perfectly valid unti
Now imagine that the `cause_page_fault` function declared an array of pointers instead. If the present was coincidentally set, the CPU would jump to some random pointer and interpret random memory as code. This would be a clear violation of memory safety.
-### Fixing the load method
+#### Fixing the load method
So how do we fix it? We could make the load function itself `unsafe` and push the unsafety to the caller. However, there is a much better solution in this case. In order to see it, we formulate the requirement for the `load` method:
> The referenced IDT must be valid until a new IDT is loaded.
@@ -432,7 +432,7 @@ error: references in statics may only refer to immutable values [E0017]
```
The reason is that the Rust compiler is not able to evaluate the value of the `static` at compile time. Maybe it will work someday when `const` functions become more powerful. But until then, we have to find another solution.
-### Lazy Statics to the Rescue
+#### Lazy Statics to the Rescue
Fortunately the `lazy_static` macro exists. Instead of evaluating a `static` at compile time, the macro performs the initialization when the `static` is referenced the first time. Thus, we can do almost everything in the initialization block and are even able to read runtime values.
With `lazy_static`, we can define our IDT without problems:
@@ -552,7 +552,7 @@ pub extern "C" fn rust_main(...) {
```
Now the output ends on the `guard page` line. No `EXCEPTION` message and no `It did not crash` message either. What's happening?
-### Debugging
+#### Debugging
Let's debug it using [GDB]. It is a console debugger and works with nearly everything, including QEMU. To make QEMU listen for a debugger connection, we start it with the `-s` flag:
[GDB]: https://www.gnu.org/software/gdb/