diff --git a/main.cpp b/main.cpp
index 6dbd7d6..a5758fe 100644
--- a/main.cpp
+++ b/main.cpp
@@ -85,7 +85,7 @@
     }
 
     auto ModeControlBus = sdbusplus::bus::new_default();
-    std::shared_ptr<SensorManager> mgmr;
+    SensorManager mgmr;
     std::map<int64_t, std::shared_ptr<PIDZone>> zones;
 
     // Create a manager for the ModeBus because we own it.
@@ -126,8 +126,8 @@
      * it.
      */
 
-    auto& HostSensorBus = mgmr->getHostBus();
-    auto& PassiveListeningBus = mgmr->getPassiveBus();
+    auto& HostSensorBus = mgmr.getHostBus();
+    auto& PassiveListeningBus = mgmr.getPassiveBus();
 
     std::cerr << "Starting threads\n";
 
diff --git a/pid/zone.cpp b/pid/zone.cpp
index 393f6e6..ed8cd0f 100644
--- a/pid/zone.cpp
+++ b/pid/zone.cpp
@@ -211,7 +211,7 @@
 
     for (auto& f : _fanInputs)
     {
-        auto& sensor = _mgr->getSensor(f);
+        auto& sensor = _mgr.getSensor(f);
         ReadReturn r = sensor->read();
         _cachedValuesByName[f] = r.value;
 
@@ -243,7 +243,7 @@
 
     for (auto& t : _thermalInputs)
     {
-        auto& sensor = _mgr->getSensor(t);
+        auto& sensor = _mgr.getSensor(t);
         ReadReturn r = sensor->read();
         int64_t timeout = sensor->GetTimeout();
 
@@ -319,9 +319,9 @@
     }
 }
 
-std::unique_ptr<Sensor>& PIDZone::getSensor(std::string name)
+const std::unique_ptr<Sensor>& PIDZone::getSensor(std::string name)
 {
-    return _mgr->getSensor(name);
+    return _mgr.getSensor(name);
 }
 
 bool PIDZone::manual(bool value)
@@ -344,7 +344,7 @@
 std::map<int64_t, std::shared_ptr<PIDZone>> BuildZones(
             std::map<int64_t, PIDConf>& ZonePids,
             std::map<int64_t, struct zone>& ZoneConfigs,
-            std::shared_ptr<SensorManager> mgr,
+            SensorManager& mgr,
             sdbusplus::bus::bus& ModeControlBus)
 {
     std::map<int64_t, std::shared_ptr<PIDZone>> zones;
@@ -446,7 +446,7 @@
 
 std::map<int64_t, std::shared_ptr<PIDZone>> BuildZonesFromConfig(
             std::string& path,
-            std::shared_ptr<SensorManager> mgr,
+            SensorManager& mgr,
             sdbusplus::bus::bus& ModeControlBus)
 {
     using namespace libconfig;
diff --git a/pid/zone.hpp b/pid/zone.hpp
index c7b52c7..1cf517c 100644
--- a/pid/zone.hpp
+++ b/pid/zone.hpp
@@ -34,7 +34,7 @@
         PIDZone(int64_t zone,
                 float minThermalRpm,
                 float failSafePercent,
-                std::shared_ptr<SensorManager> mgr,
+                const SensorManager& mgr,
                 sdbusplus::bus::bus& bus,
                 const char* objPath,
                 bool defer)
@@ -64,7 +64,7 @@
         float getFailSafePercent(void) const;
         float getMinThermalRpmSetPt(void) const;
 
-        std::unique_ptr<Sensor>& getSensor(std::string name);
+        const std::unique_ptr<Sensor>& getSensor(std::string name);
         void determineMaxRPMRequest(void);
         void updateFanTelemetry(void);
         void updateSensors(void);
@@ -106,7 +106,7 @@
         std::vector<std::string> _fanInputs;
         std::vector<std::string> _thermalInputs;
         std::map<std::string, double> _cachedValuesByName;
-        std::shared_ptr<SensorManager> _mgr;
+        const SensorManager& _mgr;
 
         std::vector<std::unique_ptr<PIDController>> _fans;
         std::vector<std::unique_ptr<PIDController>> _thermals;
@@ -115,10 +115,10 @@
 std::map<int64_t, std::shared_ptr<PIDZone>> BuildZones(
             std::map<int64_t, PIDConf>& ZonePids,
             std::map<int64_t, struct zone>& ZoneConfigs,
-            std::shared_ptr<SensorManager> mgmr,
+            SensorManager& mgmr,
             sdbusplus::bus::bus& ModeControlBus);
 
 std::map<int64_t, std::shared_ptr<PIDZone>> BuildZonesFromConfig(
             std::string& path,
-            std::shared_ptr<SensorManager> mgmr,
+            SensorManager& mgmr,
             sdbusplus::bus::bus& ModeControlBus);
diff --git a/sensors/builder.cpp b/sensors/builder.cpp
index 2786141..4654e51 100644
--- a/sensors/builder.cpp
+++ b/sensors/builder.cpp
@@ -15,6 +15,8 @@
  */
 
 #include <iostream>
+#include <map>
+#include <string>
 
 /* Configuration. */
 #include "conf.hpp"
@@ -33,12 +35,12 @@
 
 static constexpr bool deferSignals = true;
 
-std::shared_ptr<SensorManager> BuildSensors(
+SensorManager BuildSensors(
     const std::map<std::string, struct sensor>& config)
 {
-    auto mgmr = std::make_shared<SensorManager>();
-    auto& HostSensorBus = mgmr->getHostBus();
-    auto& PassiveListeningBus = mgmr->getPassiveBus();
+    SensorManager mgmr;
+    auto& HostSensorBus = mgmr.getHostBus();
+    auto& PassiveListeningBus = mgmr.getPassiveBus();
 
     for (auto& it : config)
     {
@@ -110,7 +112,7 @@
                               info->timeout,
                               std::move(ri),
                               std::move(wi));
-            mgmr->addSensor(info->type, name, std::move(sensor));
+            mgmr.addSensor(info->type, name, std::move(sensor));
         }
         else if (info->type == "temp" || info->type == "margin")
         {
@@ -133,7 +135,7 @@
                                   HostSensorBus,
                                   info->readpath.c_str(),
                                   deferSignals);
-                mgmr->addSensor(info->type, name, std::move(sensor));
+                mgmr.addSensor(info->type, name, std::move(sensor));
             }
             else
             {
@@ -143,7 +145,7 @@
                                   info->timeout,
                                   std::move(ri),
                                   std::move(wi));
-                mgmr->addSensor(info->type, name, std::move(sensor));
+                mgmr.addSensor(info->type, name, std::move(sensor));
             }
         }
     }
diff --git a/sensors/builder.hpp b/sensors/builder.hpp
index 2849c71..edb30c3 100644
--- a/sensors/builder.hpp
+++ b/sensors/builder.hpp
@@ -1,7 +1,6 @@
 #pragma once
 
 #include <map>
-#include <memory>
 #include <string>
 
 #include "sensors/manager.hpp"
@@ -10,6 +9,6 @@
 /**
  * Build the sensors and associate them with a SensorManager.
  */
-std::shared_ptr<SensorManager> BuildSensors(
+SensorManager BuildSensors(
     const std::map<std::string, struct sensor>& config);
 
diff --git a/sensors/builderconfig.cpp b/sensors/builderconfig.cpp
index b3507ae..f1d95a0 100644
--- a/sensors/builderconfig.cpp
+++ b/sensors/builderconfig.cpp
@@ -16,6 +16,8 @@
 
 #include <iostream>
 #include <libconfig.h++>
+#include <string>
+#include <unordered_map>
 
 /* Configuration. */
 #include "conf.hpp"
@@ -28,7 +30,7 @@
  * parsing.  I should just ditch the compile-time version to reduce the
  * probability of sync bugs.
  */
-std::shared_ptr<SensorManager> BuildSensorsFromConfig(const std::string& path)
+SensorManager BuildSensorsFromConfig(const std::string& path)
 {
     using namespace libconfig;
 
diff --git a/sensors/builderconfig.hpp b/sensors/builderconfig.hpp
index 078f484..0948c69 100644
--- a/sensors/builderconfig.hpp
+++ b/sensors/builderconfig.hpp
@@ -1,6 +1,5 @@
 #pragma once
 
-#include <memory>
 #include <string>
 
 #include "sensors/manager.hpp"
@@ -9,4 +8,4 @@
  * Given a configuration file, parsable by libconfig++, parse it and then pass
  * the information onto BuildSensors.
  */
-std::shared_ptr<SensorManager> BuildSensorsFromConfig(const std::string& path);
+SensorManager BuildSensorsFromConfig(const std::string& path);
diff --git a/sensors/manager.hpp b/sensors/manager.hpp
index a3e7420..d37787a 100644
--- a/sensors/manager.hpp
+++ b/sensors/manager.hpp
@@ -17,15 +17,26 @@
 class SensorManager
 {
     public:
-        SensorManager()
-            : _passiveListeningBus(std::move(sdbusplus::bus::new_default())),
-              _hostSensorBus(std::move(sdbusplus::bus::new_default()))
+        SensorManager(sdbusplus::bus::bus&& pass, sdbusplus::bus::bus&& host)
+            : _passiveListeningBus(std::move(pass)),
+              _hostSensorBus(std::move(host))
         {
-            // Create a manager for the sensor root because we own it.
-            static constexpr auto SensorRoot = "/xyz/openbmc_project/extsensors";
+            // manager gets its interface from the bus. :D
             sdbusplus::server::manager::manager(_hostSensorBus, SensorRoot);
         }
 
+        SensorManager()
+            : SensorManager(std::move(sdbusplus::bus::new_default()),
+                            std::move(sdbusplus::bus::new_default()))
+        {
+        }
+
+        ~SensorManager() = default;
+        SensorManager(const SensorManager&) = delete;
+        SensorManager& operator=(const SensorManager&) = delete;
+        SensorManager(SensorManager&&) = default;
+        SensorManager& operator=(SensorManager&&) = default;
+
         /*
          * Add a Sensor to the Manager.
          */
@@ -35,7 +46,7 @@
             std::unique_ptr<Sensor> sensor);
 
         // TODO(venture): Should implement read/write by name.
-        std::unique_ptr<Sensor>& getSensor(std::string name)
+        const std::unique_ptr<Sensor>& getSensor(const std::string& name) const
         {
             return _sensorMap.at(name);
         }
@@ -56,5 +67,7 @@
 
         sdbusplus::bus::bus _passiveListeningBus;
         sdbusplus::bus::bus _hostSensorBus;
+
+        static constexpr auto SensorRoot = "/xyz/openbmc_project/extsensors";
 };
 
diff --git a/test/Makefile.am b/test/Makefile.am
index ea93a96..738ab91 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -12,5 +12,9 @@
 	$(PHOSPHOR_DBUS_INTERFACES_LIBS)
 
 # Run all 'check' test programs
-check_PROGRAMS =
+check_PROGRAMS = sensor_manager_unittest
 TESTS = $(check_PROGRAMS)
+
+# Until libconfig is mocked out or replaced, include it.
+sensor_manager_unittest_SOURCES = sensor_manager_unittest.cpp
+sensor_manager_unittest_LDADD = $(top_builddir)/sensors/manager.o
diff --git a/test/sensor_manager_unittest.cpp b/test/sensor_manager_unittest.cpp
new file mode 100644
index 0000000..17ccffa
--- /dev/null
+++ b/test/sensor_manager_unittest.cpp
@@ -0,0 +1,28 @@
+#include "sensors/manager.hpp"
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include <sdbusplus/test/sdbus_mock.hpp>
+
+using ::testing::_;
+using ::testing::IsNull;
+using ::testing::Return;
+using ::testing::StrEq;
+
+TEST(SensorManagerTest, BoringConstructorTest) {
+    // Build a boring SensorManager.
+
+    sdbusplus::SdBusMock sdbus_mock_passive, sdbus_mock_host;
+    auto bus_mock_passive = sdbusplus::get_mocked_new(&sdbus_mock_passive);
+    auto bus_mock_host = sdbusplus::get_mocked_new(&sdbus_mock_host);
+
+    EXPECT_CALL(sdbus_mock_host,
+                sd_bus_add_object_manager(
+                    IsNull(),
+                    _,
+                    StrEq("/xyz/openbmc_project/extsensors")))
+    .WillOnce(Return(0));
+
+    SensorManager s(std::move(bus_mock_passive), std::move(bus_mock_host));
+    // Success
+}
