diff --git a/src/manager.cpp b/src/manager.cpp
index 09b24dab0d2ef913396952e26462156b1c65e4c4..c4e35c8ccee5beeae786a8eaea79fe1521d105e2 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -1657,21 +1657,25 @@ Manager::ioContext() const
 }
 
 void
-Manager::addTask(std::function<bool()>&& task)
+Manager::addTask(std::function<bool()>&& task, const char* filename, uint32_t linum)
 {
-    pimpl_->scheduler_.scheduleAtFixedRate(std::move(task), std::chrono::milliseconds(30));
+    pimpl_->scheduler_.scheduleAtFixedRate(std::move(task), std::chrono::milliseconds(30),
+                                           filename, linum);
 }
 
 std::shared_ptr<Task>
-Manager::scheduleTask(std::function<void()>&& task, std::chrono::steady_clock::time_point when)
+Manager::scheduleTask(std::function<void()>&& task, std::chrono::steady_clock::time_point when,
+                      const char* filename, uint32_t linum)
 {
-    return pimpl_->scheduler_.schedule(std::move(task), when);
+    return pimpl_->scheduler_.schedule(std::move(task), when, filename, linum);
 }
 
 std::shared_ptr<Task>
-Manager::scheduleTaskIn(std::function<void()>&& task, std::chrono::steady_clock::duration timeout)
+Manager::scheduleTaskIn(std::function<void()>&& task, std::chrono::steady_clock::duration timeout,
+                        const char* filename, uint32_t linum)
 {
-    return pimpl_->scheduler_.scheduleIn(std::move(task), timeout);
+    return pimpl_->scheduler_.scheduleIn(std::move(task), timeout,
+                                         filename, linum);
 }
 
 // Must be invoked periodically by a timer from the main event loop
diff --git a/src/manager.h b/src/manager.h
index f560e570fe767391f696d8cdedab7c4d324a56f2..046dc522accf7987a88e035c56e1379c04b8ab94 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -47,6 +47,8 @@
 #include <string>
 #include <vector>
 
+#include "trace-tools.h"
+
 namespace asio {
 class io_context;
 }
@@ -785,11 +787,19 @@ public:
 
     std::shared_ptr<asio::io_context> ioContext() const;
 
-    void addTask(std::function<bool()>&& task);
+    void addTask(std::function<bool()>&& task,
+                 const char *filename=CURRENT_FILENAME(),
+                 uint32_t linum=CURRENT_LINE());
+
     std::shared_ptr<Task> scheduleTask(std::function<void()>&& task,
-                                       std::chrono::steady_clock::time_point when);
+                                       std::chrono::steady_clock::time_point when,
+                                       const char* filename=CURRENT_FILENAME(),
+                                       uint32_t linum=CURRENT_LINE());
+
     std::shared_ptr<Task> scheduleTaskIn(std::function<void()>&& task,
-                                         std::chrono::steady_clock::duration timeout);
+                                         std::chrono::steady_clock::duration timeout,
+                                         const char* filename=CURRENT_FILENAME(),
+                                         uint32_t linum=CURRENT_LINE());
 
     std::map<std::string, std::string> getNearbyPeers(const std::string& accountID);
 
@@ -884,9 +894,12 @@ private:
 // Helper to install a callback to be called once by the main event loop
 template<typename Callback>
 static void
-runOnMainThread(Callback&& cb)
+runOnMainThread(Callback&& cb,
+                const char *filename=CURRENT_FILENAME(),
+                uint32_t linum=CURRENT_LINE())
 {
-    Manager::instance().scheduler().run([cb = std::forward<Callback>(cb)]() mutable { cb(); });
+    Manager::instance().scheduler().run([cb = std::forward<Callback>(cb)]() mutable { cb(); },
+                                        filename, linum);
 }
 
 } // namespace jami