Index: uspace/lib/cpp/include/impl/thread.hpp
===================================================================
--- uspace/lib/cpp/include/impl/thread.hpp	(revision 4fe4ea621ef8746f43a02d11efbfa7e5478577dd)
+++ uspace/lib/cpp/include/impl/thread.hpp	(revision 063e062604ab59b030969252305538f035d60251)
@@ -34,11 +34,11 @@
 #include <ostream>
 
+extern "C" {
+    #include <fibril.h>
+    #include <fibril_synch.h>
+}
+
 namespace std
 {
-    extern "C" {
-        #include <fibril.h>
-        #include <fibril_synch.h>
-    }
-
     namespace aux
     {
@@ -200,5 +200,5 @@
             (*callable)();
 
-            if (callable->detached()) // No thread owns the wrapper.
+            if (callable->detached())
                 delete callable;
 
Index: uspace/lib/cpp/src/thread.cpp
===================================================================
--- uspace/lib/cpp/src/thread.cpp	(revision 4fe4ea621ef8746f43a02d11efbfa7e5478577dd)
+++ uspace/lib/cpp/src/thread.cpp	(revision 063e062604ab59b030969252305538f035d60251)
@@ -39,17 +39,11 @@
     thread::~thread()
     {
-        // TODO: Change this to std::terminate when implemented.
         if (joinable())
         {
-            if (joinable_wrapper_ && !joinable_wrapper_->detached())
-            {
-                joinable_wrapper_->join();
-                delete joinable_wrapper_;
-            }
+            // TODO: call std::terminate
+        }
 
-            // TODO: this crashes :(
-            /* fibril_teardown((fibril_t*)id_, false); */
-            /* std::abort(); */
-        }
+        if (joinable_wrapper_ && !joinable_wrapper_->detached())
+            delete joinable_wrapper_;
     }
 
@@ -62,4 +56,9 @@
     thread& thread::operator=(thread&& other) noexcept
     {
+        if (joinable())
+        {
+            // TODO: call std::terminate
+        }
+
         id_ = other.id_;
         other.id_ = fid_t{};
@@ -80,5 +79,5 @@
     void thread::join()
     {
-        if (joinable_wrapper_)
+        if (joinable() && joinable_wrapper_)
             joinable_wrapper_->join();
     }
