Index: uspace/lib/cpp/include/__bits/thread/packaged_task.hpp
===================================================================
--- uspace/lib/cpp/include/__bits/thread/packaged_task.hpp	(revision 239d25be0115eb1fffb1fda326d519514292ac92)
+++ uspace/lib/cpp/include/__bits/thread/packaged_task.hpp	(revision 4d68584bbb4b4931c099f7c499ead16bf8475e7d)
@@ -30,4 +30,5 @@
 #define LIBCPP_BITS_THREAD_PACKAGED_TASK
 
+#include <__bits/exception.hpp>
 #include <__bits/functional/function.hpp>
 #include <__bits/thread/future.hpp>
@@ -84,5 +85,7 @@
                     if (!state_->is_set())
                     {
-                        // TODO: store future_error
+                        state_->set_exception(make_exception_ptr(
+                            future_error{make_error_code(future_errc::broken_promise)}
+                        ));
                         state_->mark_set(true);
                     }
@@ -162,7 +165,7 @@
                     state_->set_value(invoke(func_, args...));
                 }
-                catch(...)
-                {
-                    // TODO: store it
+                catch(const exception& __exception)
+                {
+                    state_->set_exception(make_exception_ptr(__exception));
                 }
             }
Index: uspace/lib/cpp/include/__bits/thread/promise.hpp
===================================================================
--- uspace/lib/cpp/include/__bits/thread/promise.hpp	(revision 239d25be0115eb1fffb1fda326d519514292ac92)
+++ uspace/lib/cpp/include/__bits/thread/promise.hpp	(revision 4d68584bbb4b4931c099f7c499ead16bf8475e7d)
@@ -30,4 +30,5 @@
 #define LIBCPP_BITS_THREAD_PROMISE
 
+#include <__bits/exception.hpp>
 #include <__bits/thread/future.hpp>
 #include <__bits/thread/shared_state.hpp>
@@ -94,7 +95,10 @@
                 }
 
-                void set_exception_at_thread_exit(exception_ptr)
-                {
-                    // TODO: No exception handling, no-op at this time.
+                void set_exception_at_thread_exit(exception_ptr ptr)
+                {
+                    assert(state_);
+
+                    state_->set_exception_ptr(ptr, false);
+                    // TODO: Mark it as 'has_exception' when thread terminates.
                 }
 
@@ -117,5 +121,7 @@
                     if (!state_->is_set())
                     {
-                        // TODO: Store future_error.
+                        state_->set_exception(make_exception_ptr(
+                            future_error{make_error_code(future_errc::broken_promise)}
+                        ));
                         state_->mark_set(true);
                     }
Index: uspace/lib/cpp/include/__bits/thread/shared_state.hpp
===================================================================
--- uspace/lib/cpp/include/__bits/thread/shared_state.hpp	(revision 239d25be0115eb1fffb1fda326d519514292ac92)
+++ uspace/lib/cpp/include/__bits/thread/shared_state.hpp	(revision 4d68584bbb4b4931c099f7c499ead16bf8475e7d)
@@ -76,8 +76,8 @@
             }
 
-            void set_exception(exception_ptr ptr)
+            void set_exception(exception_ptr ptr, bool set = true)
             {
                 exception_ = ptr;
-                has_exception_ = true;
+                has_exception_ = set;
             }
 
@@ -89,5 +89,6 @@
             void throw_stored_exception() const
             {
-                // TODO: implement
+                if (has_exception_)
+                    rethrow_exception(exception_);
             }
 
@@ -266,7 +267,7 @@
                             }
                         }
-                        catch(...) // TODO: Any exception.
+                        catch(const exception& __exception)
                         {
-                            // TODO: Store it.
+                            this->set_exception(make_exception_ptr(__exception));
                         }
                     }
@@ -351,7 +352,7 @@
                     }
                 }
-                catch(...)
+                catch(const exception& __exception)
                 {
-                    // TODO: Store it.
+                    this->set_exception(make_exception_ptr(__exception));
                 }
             }
