diff --git a/.gitignore b/.gitignore
index 29204d6567b48016c04211c07f63c1e25313ff02..eda9f7d42bc76e4cba0057cd9a928deaecbfec6b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,7 @@
 .gdb_history
 Cargo.lock
 target/
+*.swp
+tags
+klee/tasks.txt
+output/
diff --git a/examples/panic3.rs b/examples/panic3.rs
index da3ac12448fef95a84e6387a1db2f3a455f71474..7351386740ecfa3f2c0e9dab4795f33bbe5f3cf6 100644
--- a/examples/panic3.rs
+++ b/examples/panic3.rs
@@ -73,13 +73,13 @@ fn idle() -> ! {
 // with a non atomic data type (u64), amounting to sequential reads
 // (which are 32 bit on the ARM Cortex M).
 //
-// However the framework analysis is clever enought to realize that the tasks
+// However the framework analysis is clever enough to realize that the tasks
 // `EXTI1` and `EXTI2` can never preempt each other, hence we can
-// can access the data without "claiming" the resouce.
+// can access the data without "claiming" the resource.
 //
-// Access is done by "dereferencing" `*r.X`, and we can now assert the
-// the value to be `*r.X`. However, as tasks operetate concurrently,
-// (without knowlegde on other tasks in the system), our analysis here
+// Access is done by "dereferencing" `*r.X`, and we can now assert
+// the value to be `*r.X`. However, as tasks operate concurrently,
+// (without knowledge on other tasks in the system), our analysis here
 // marks `X` as a (implicitly) symbolic.
 //
 // Compile and run the example in KLEE.
@@ -94,9 +94,9 @@ fn idle() -> ! {
 // ["EXTI1", "EXTI2"]
 //
 // In this case EXTI => task 0, EXTI2 = task 1, but they might be swapped
-// due to the underlyind data structure being an (unordered) hash-map.
+// due to the underlying data structure being an (unordered) hash-map.
 //
-// Now uncomment the code in `exiti2` and comment out the assertion in `exti1`.
+// Now uncomment the code in `exti2` and comment out the assertion in `exti1`.
 //
 // Run the KLEE tool and find the failing assertion.
 //
diff --git a/examples/panic4.rs b/examples/panic4.rs
index a6e1a7bc326181b2e20fd1d7cfcedb2076ee9ece..4340ca704c0d033b5eaf01b5b4ca6e754b487b2a 100644
--- a/examples/panic4.rs
+++ b/examples/panic4.rs
@@ -48,10 +48,10 @@ fn exti1(t: &mut Threshold, mut r: EXTI1::Resources) {
 }
 
 fn exti2(t: &mut Threshold, r: EXTI2::Resources) {
-    // k_assume(*r.X > _ && *r.X < _); // pre-contition on X
+    // k_assume(*r.X > _ && *r.X < _); // pre-condition on X
     let b = r.A[*r.X as usize];
     *r.I = b;
-    // as we don't change X post-condtiton is trivially true
+    // as we don't change X post-condition is trivially true
 }
 
 // The `init` function
@@ -91,7 +91,7 @@ fn idle() -> ! {
 // You should not change the code, just enable the contacts
 // The `_` should be filled with concrete values
 //
-// Can you find a type invariant that satisfies BOTH pre- and post-condtitons
+// Can you find a type invariant that satisfies BOTH pre- and post-conditions
 // at the same time.
 //
 // If not, why is that not possible?