diff --git a/examples/dll_and_executable/CMakeLists.txt b/examples/dll_and_executable/CMakeLists.txt
index 2016df7..05f53e7 100644
--- a/examples/dll_and_executable/CMakeLists.txt
+++ b/examples/dll_and_executable/CMakeLists.txt
@@ -13,9 +13,9 @@
 
 include_directories("../../doctest/")
 
-add_library(dll_1 SHARED dll.cpp)
+add_library(dll SHARED dll.cpp)
 
 add_executable(${PROJECT_NAME} main.cpp)
-target_link_libraries(${PROJECT_NAME} dll_1)
+target_link_libraries(${PROJECT_NAME} dll)
 
 add_test(NAME ${PROJECT_NAME} COMMAND $<TARGET_FILE:${PROJECT_NAME}>)
diff --git a/examples/hello_world/main.cpp b/examples/hello_world/main.cpp
index fbc59af..53fbc71 100644
--- a/examples/hello_world/main.cpp
+++ b/examples/hello_world/main.cpp
@@ -1,8 +1,12 @@
 #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
 #include "doctest.h"
 
-#include <cstdio>
+static int factorial(int number) { return number <= 1 ? number : factorial(number - 1) * number; }
 
-TEST_CASE("the only test") {
-    printf("Hello world!\n");
+TEST_CASE("testing the factorial function") {
+    CHECK(factorial(0) == 1);
+    CHECK(factorial(1) == 1);
+    CHECK(factorial(2) == 2);
+    CHECK(factorial(3) == 6);
+    CHECK(factorial(10) == 3628800);
 }
diff --git a/examples/range_based_execution/run.py b/examples/range_based_execution/run.py
index d29de5c..ec4f05d 100644
--- a/examples/range_based_execution/run.py
+++ b/examples/range_based_execution/run.py
@@ -2,16 +2,26 @@
 
 import sys
 import math
+import string
 import multiprocessing
 import subprocess
 
-if len(sys.argv) != 2:
+if len(sys.argv) < 2:
     print("supply the path to the doctest executable as the first argument!")
-    sys.exit(0)
+    sys.exit(1)
 
 # get the number of tests in the doctest executable
-result = subprocess.Popen([sys.argv[1], "-count"], stdout = subprocess.PIPE).communicate()[0]
-num_tests = int(result.rsplit(' ', 1)[-1])
+num_tests = 0
+
+program_with_args = [sys.argv[1], "-count"]
+for i in range(2, len(sys.argv)):
+    program_with_args.append(sys.argv[i])
+
+result = subprocess.Popen(program_with_args, stdout = subprocess.PIPE).communicate()[0]
+result = result.splitlines(True)
+for line in result:
+    if line.startswith("[doctest] number of tests passing the current filters:"):
+        num_tests = int(line.rsplit(' ', 1)[-1])
 
 # calculate the ranges
 cores = multiprocessing.cpu_count()
@@ -25,7 +35,8 @@
 
 # the worker callback that runs the executable for the given range of tests
 def worker((first, last)):
-    subprocess.Popen([sys.argv[1], "-first=%s -last=%s" % (first, last)])
+    program_with_args = [sys.argv[1], "-first=" + str(first), "-last=" + str(last)]
+    subprocess.Popen(program_with_args)
 
 # run the tasks on a pool
 if __name__ == '__main__':
diff --git a/examples/stringification/CMakeLists.txt b/examples/stringification/CMakeLists.txt
index 4d62381..5ce5ce1 100644
--- a/examples/stringification/CMakeLists.txt
+++ b/examples/stringification/CMakeLists.txt
@@ -9,4 +9,4 @@
 
 add_executable(${PROJECT_NAME} main.cpp)
 
-add_test(NAME ${PROJECT_NAME} COMMAND $<TARGET_FILE:${PROJECT_NAME}> -dt-no-exitcode=1)
+add_test(NAME ${PROJECT_NAME} COMMAND $<TARGET_FILE:${PROJECT_NAME}>)
diff --git a/examples/subcases_and_bdd/CMakeLists.txt b/examples/subcases_and_bdd/CMakeLists.txt
new file mode 100644
index 0000000..5ce5ce1
--- /dev/null
+++ b/examples/subcases_and_bdd/CMakeLists.txt
@@ -0,0 +1,12 @@
+cmake_minimum_required(VERSION 2.8)
+
+get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
+project(${PROJECT_NAME})
+
+include(../../scripts/common.cmake)
+
+include_directories("../../doctest/")
+
+add_executable(${PROJECT_NAME} main.cpp)
+
+add_test(NAME ${PROJECT_NAME} COMMAND $<TARGET_FILE:${PROJECT_NAME}>)
diff --git a/examples/subcases_and_bdd/main.cpp b/examples/subcases_and_bdd/main.cpp
new file mode 100644
index 0000000..1cf4b3b
--- /dev/null
+++ b/examples/subcases_and_bdd/main.cpp
@@ -0,0 +1,70 @@
+#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
+#include "doctest.h"
+
+#include <iostream>
+#include <vector>
+using namespace std;
+
+TEST_CASE("lots of nested subcases") {
+    cout << endl << "root" << endl;
+    SUBCASE("") {
+        cout << "1" << endl;
+        SUBCASE("") { cout << "1.1" << endl; }
+    }
+    SUBCASE("") {   
+        cout << "2" << endl;
+        SUBCASE("") { cout << "2.1" << endl; }
+        SUBCASE("") {
+            cout << "2.2" << endl;
+            SUBCASE("") {
+                cout << "2.2.1" << endl;
+                SUBCASE("") { cout << "2.2.1.1" << endl; }
+                SUBCASE("") { cout << "2.2.1.2" << endl; }
+            }
+        }
+        SUBCASE("") { cout << "2.3" << endl; }
+        SUBCASE("") { cout << "2.4" << endl; }
+    }
+}
+
+SCENARIO("vectors can be sized and resized") {
+    GIVEN("A vector with some items") {
+        std::vector<int> v(5);
+
+        REQUIRE(v.size() == 5u);
+        REQUIRE(v.capacity() >= 5u);
+
+        WHEN("the size is increased") {
+            v.resize(10u);
+
+            THEN("the size and capacity change") {
+                CHECK(v.size() == 20u);
+                CHECK(v.capacity() >= 10u);
+            }
+        }
+        WHEN("the size is reduced") {
+            v.resize(0);
+
+            THEN("the size changes but not capacity") {
+                CHECK(v.size() == 0u);
+                CHECK(v.capacity() >= 5u);
+            }
+        }
+        WHEN("more capacity is reserved") {
+            v.reserve(10);
+
+            THEN("the capacity changes but not the size") {
+                CHECK(v.size() == 5u);
+                CHECK(v.capacity() >= 10u);
+            }
+        }
+        WHEN("less capacity is reserved") {
+            v.reserve(0);
+
+            THEN("neither size nor capacity are changed") {
+                CHECK(v.size() == 10u);
+                CHECK(v.capacity() >= 5u);
+            }
+        }
+    }
+}
\ No newline at end of file
