diff --git a/src/shared/algorithms/AirBrakes/AirBrakesPI.cpp b/src/shared/algorithms/AirBrakes/AirBrakesPI.cpp
index 4e4f868ee05ffbb16f48237b13e0344296217544..2e438d5c3bb961ae30e4def4cc492e0367462ad8 100644
--- a/src/shared/algorithms/AirBrakes/AirBrakesPI.cpp
+++ b/src/shared/algorithms/AirBrakes/AirBrakesPI.cpp
@@ -27,9 +27,11 @@
 #include <utils/Constants.h>
 
 #include <limits>
+#include <utils/ModuleManager/ModuleManager.hpp>
 
 #include "drivers/timer/TimestampTimer.h"
 #include "utils/Debug.h"
+
 using namespace std;
 
 namespace Boardcore
@@ -101,7 +103,8 @@ void AirBrakesPI::chooseTrajectory(TrajectoryPoint currentPosition)
 
     chosenTrajectory = &(trajectorySet.trajectories[trjIndexMin]);
 
-    Logger::getInstance().log(AirBrakesChosenTrajectory{trjIndexMin});
+    ModuleManager::getInstance().get<Logger>()->log(
+        AirBrakesChosenTrajectory{trjIndexMin});
 }
 
 TrajectoryPoint AirBrakesPI::getSetpoint(TrajectoryPoint currentPosition)
diff --git a/src/shared/diagnostic/LogSink.h b/src/shared/diagnostic/LogSink.h
index c06917f36c5edf7869f92b7240815ff1a89322a9..0f44ba9f6da1aa1a943092c604375f0a4a908b06 100644
--- a/src/shared/diagnostic/LogSink.h
+++ b/src/shared/diagnostic/LogSink.h
@@ -88,13 +88,10 @@ protected:
 class FileLogSinkBuffered : public FileLogSink
 {
 public:
-    FileLogSinkBuffered() : logger(Logger::getInstance()) {}
+    FileLogSinkBuffered() {}
 
 protected:
     void logImpl(const std::string& l) override;
-
-private:
-    Logger& logger;
 };
 
 }  // namespace Boardcore
diff --git a/src/shared/diagnostic/PrintLogger.cpp b/src/shared/diagnostic/PrintLogger.cpp
index 0aa1c4e5b527173dcb3a703ceff92b5a40548b35..cb3bb59f6300d30e056e6679578bc8b16114e003 100644
--- a/src/shared/diagnostic/PrintLogger.cpp
+++ b/src/shared/diagnostic/PrintLogger.cpp
@@ -22,6 +22,8 @@
 
 #include "PrintLogger.h"
 
+#include <utils/ModuleManager/ModuleManager.hpp>
+
 using miosix::Lock;
 
 namespace Boardcore
@@ -75,7 +77,7 @@ void FileLogSinkBuffered::logImpl(const string& l)
     Lock<FastMutex> lock(mutex);
     LoggingString s;
     strncpy(s.logString, l.c_str(), MAX_LOG_STRING_SIZE - 1);
-    logger.log(s);
+    ModuleManager::getInstance().get<Logger>()->log(s);
 }
 
 PrintLogger PrintLogger::getChild(const string& name)
diff --git a/src/shared/diagnostic/StackLogger.h b/src/shared/diagnostic/StackLogger.h
index c7998375a081783a35ca8044110ebff2b1e31e3e..1c55b449f9529187238e6f5c024635cc1ce09fff 100644
--- a/src/shared/diagnostic/StackLogger.h
+++ b/src/shared/diagnostic/StackLogger.h
@@ -27,6 +27,7 @@
 #include <logger/Logger.h>
 
 #include <map>
+#include <utils/ModuleManager/ModuleManager.hpp>
 
 #include "StackData.h"
 
@@ -74,7 +75,7 @@ public:
             Lock<FastMutex> l(mutex);
             for (auto it = stacks.begin(); it != stacks.end(); it++)
             {
-                Logger::getInstance().log(it->second);
+                ModuleManager::getInstance().get<Logger>()->log(it->second);
             }
         }
     }
diff --git a/src/shared/logger/Logger.h b/src/shared/logger/Logger.h
index 088b91fe28fbdf6f5c34df079003bbbb612f5c6c..dd9632c9ecd252aaf4197a4e095eb73c176c474e 100644
--- a/src/shared/logger/Logger.h
+++ b/src/shared/logger/Logger.h
@@ -22,7 +22,6 @@
 
 #pragma once
 
-#include <Singleton.h>
 #include <miosix.h>
 #include <stdint.h>
 
@@ -31,6 +30,7 @@
 #include <queue>
 #include <string>
 #include <type_traits>
+#include <utils/ModuleManager/ModuleManager.hpp>
 
 #include "LoggerStats.h"
 
@@ -51,10 +51,8 @@ enum class LoggerResult
 /**
  * @brief Buffered logger. Needs to be started before it can be used.
  */
-class Logger : public Singleton<Logger>
+class Logger : public Module
 {
-    friend class Singleton<Logger>;
-
 public:
     /**
      * @brief Call this function to start the logger.
@@ -132,9 +130,9 @@ public:
         return maxFilenameNumber;
     }
 
-private:
     Logger();
 
+private:
     static std::string getFileName(int logNumber);
 
     static void packThreadLauncher(void *argv);
diff --git a/src/shared/scheduler/TaskScheduler.h b/src/shared/scheduler/TaskScheduler.h
index 6496eb9bf57c065ac76dcd00505da13495ae5b48..ef8300c05f4aca1e8cabc3676ee361a246542b09 100644
--- a/src/shared/scheduler/TaskScheduler.h
+++ b/src/shared/scheduler/TaskScheduler.h
@@ -33,6 +33,7 @@
 #include <list>
 #include <map>
 #include <queue>
+#include <utils/ModuleManager/ModuleManager.hpp>
 
 #include "TaskSchedulerData.h"
 
@@ -57,7 +58,7 @@ namespace Boardcore
  *    TaskScheduler.add(magic_std::function, 150);
  *
  */
-class TaskScheduler : public ActiveObject
+class TaskScheduler : public ActiveObject, public Module
 {
 public:
     using function_t = std::function<void()>;