diff --git a/mainloop.cpp b/mainloop.cpp
index 6244b91..012b993 100644
--- a/mainloop.cpp
+++ b/mainloop.cpp
@@ -20,18 +20,30 @@
 #include "sensorcache.hpp"
 #include "hwmon.hpp"
 #include "sysfs.hpp"
+#include "mainloop.hpp"
 
-int serverMain(const char* path)
+MainLoop::MainLoop(const std::string& path)
+    : _shutdown(false), _path(path)
+{
+
+}
+
+void MainLoop::shutdown() noexcept
+{
+    _shutdown = true;
+}
+
+void MainLoop::run()
 {
     // Check sysfs for available sensors.
-    auto sensors = std::make_unique<SensorSet>(path);
+    auto sensors = std::make_unique<SensorSet>(_path);
     auto sensor_cache = std::make_unique<SensorCache>();
 
     // TODO: Issue#3 - Need to make calls to the dbus sensor cache here to
     //       ensure the objects all exist?
 
     // Polling loop.
-    while (true)
+    while (!_shutdown)
     {
         // Iterate through all the sensors.
         for (auto& i : *sensors)
@@ -40,7 +52,7 @@
             {
                 // Read value from sensor.
                 int value = 0;
-                read_sysfs(make_sysfs_path(path,
+                read_sysfs(make_sysfs_path(_path,
                                            i.first.first, i.first.second,
                                            hwmon::entry::input),
                            value);
@@ -66,8 +78,6 @@
         // TODO: Issue#7 - Should probably periodically check the SensorSet
         //       for new entries.
     }
-
-    return 0;
 }
 
 // vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
diff --git a/mainloop.hpp b/mainloop.hpp
index d3a5f96..4bc08c4 100644
--- a/mainloop.hpp
+++ b/mainloop.hpp
@@ -1,3 +1,39 @@
 #pragma once
 
-int serverMain(const char* path);
+#include <string>
+
+/** @class MainLoop
+ *  @brief hwmon-readd main application loop.
+ */
+class MainLoop
+{
+    public:
+        MainLoop() = delete;
+        MainLoop(const MainLoop&) = delete;
+        MainLoop& operator=(const MainLoop&) = delete;
+        MainLoop(MainLoop&&) = default;
+        MainLoop& operator=(MainLoop&&) = default;
+        ~MainLoop() = default;
+
+        /** @brief Constructor
+         *
+         *  @param[in] path - hwmon sysfs instance to manage
+         */
+        explicit MainLoop(const std::string& path);
+
+        /** @brief Start polling loop and process dbus traffic. */
+        void run();
+
+        /** @brief Stop loop from another thread.
+         *
+         *  Typically only used by testcases.
+         */
+        void shutdown() noexcept;
+
+    private:
+
+        /** @brief Shutdown requested. */
+        volatile bool _shutdown;
+        /** @brief Path to hwmon sysfs instance. */
+        std::string _path;
+};
diff --git a/readd.cpp b/readd.cpp
index 1ac5ddc..0c611b6 100644
--- a/readd.cpp
+++ b/readd.cpp
@@ -41,7 +41,10 @@
     // Finished getting options out, so cleanup the parser.
     options.reset();
 
-    return serverMain(path.c_str());
+    MainLoop loop(path);
+    loop.run();
+
+    return 0;
 }
 
 // vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
