diff --git a/include/ftl/handle.hpp b/include/ftl/handle.hpp
index 0744c914b6d15092585cdb5fdda1ef0f37bc44d7..57aeb16c5fc527b1781e3854a1c5ae51cbc6317e 100644
--- a/include/ftl/handle.hpp
+++ b/include/ftl/handle.hpp
@@ -16,6 +16,8 @@ namespace ftl {
 
 struct Handle;
 struct BaseHandler {
+    virtual ~BaseHandler() {}
+
     virtual void remove(const Handle &) = 0;
 
     virtual void removeUnsafe(const Handle &) = 0;
@@ -97,7 +99,7 @@ struct [[nodiscard]] Handle {
 template <typename ...ARGS>
 struct Handler : BaseHandler {
     Handler() {}
-    ~Handler() {
+    virtual ~Handler() {
         // Ensure all thread pool jobs are done
         while (jobs_ > 0 && ftl::pool.size() > 0) std::this_thread::sleep_for(std::chrono::milliseconds(2));
     }