diff --git a/Makefile.am b/Makefile.am
index ca14c0a..cc7f110 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -43,7 +43,7 @@
 	firmware_handler.cpp \
 	file_handler.cpp \
 	internal/sys.cpp \
-	verify.cpp
+	verify_systemd.cpp
 
 if ENABLE_LPC_BRIDGE
 libfirmwareblob_common_la_SOURCES += lpc_handler.cpp
diff --git a/firmware_handler.cpp b/firmware_handler.cpp
index c2e935a..5f9a089 100644
--- a/firmware_handler.cpp
+++ b/firmware_handler.cpp
@@ -18,6 +18,7 @@
 
 #include "image_handler.hpp"
 #include "util.hpp"
+#include "verify.hpp"
 
 #include <algorithm>
 #include <cstdint>
diff --git a/main.cpp b/main.cpp
index b4681a6..fc690b8 100644
--- a/main.cpp
+++ b/main.cpp
@@ -25,6 +25,7 @@
 #include "pci_handler.hpp"
 #include "util.hpp"
 #include "verify.hpp"
+#include "verify_systemd.hpp"
 
 #include <cstdint>
 #include <memory>
@@ -100,7 +101,7 @@
 
     auto handler = blobs::FirmwareBlobHandler::CreateFirmwareBlobHandler(
         blobs::supportedFirmware, blobs::supportedTransports,
-        blobs::Verification::CreateDefaultVerification(
+        blobs::SystemdVerification::CreateVerification(
             sdbusplus::bus::new_default(), VERIFY_STATUS_FILENAME,
             VERIFY_DBUS_SERVICE));
 
diff --git a/verify.hpp b/verify.hpp
index 0f67a20..3a77338 100644
--- a/verify.hpp
+++ b/verify.hpp
@@ -1,26 +1,10 @@
 #pragma once
 
-#include "config.h"
-
 #include "status.hpp"
 
 #include <memory>
 #include <string>
 
-#if HAVE_SDBUSPLUS
-#include <sdbusplus/bus.hpp>
-#else
-namespace sdbusplus
-{
-namespace bus
-{
-class bus
-{
-};
-} // namespace bus
-} // namespace sdbusplus
-#endif
-
 namespace blobs
 {
 
@@ -43,50 +27,4 @@
     virtual VerifyCheckResponses checkVerificationState() = 0;
 };
 
-/**
- * Representation of what is used for verification.  Currently, this reduces the
- * chance of error by using an object instead of two strings to control the
- * verification step, however, it leaves room for a future possibility out
- * something wholly configurable.
- */
-class Verification : public VerificationInterface
-{
-  public:
-    /**
-     * Create a default Verification object that uses systemd to trigger the
-     * process.
-     *
-     * @param[in] bus - an sdbusplus handler for a bus to use.
-     * @param[in] path - the path to check for verification status.
-     * @param[in[ service - the systemd service to start to trigger
-     * verification.
-     */
-    static std::unique_ptr<VerificationInterface>
-        CreateDefaultVerification(sdbusplus::bus::bus&& bus,
-                                  const std::string& path,
-                                  const std::string& service);
-
-    Verification(sdbusplus::bus::bus&& bus, const std::string& path,
-                 const std::string& service) :
-        bus(std::move(bus)),
-        checkPath(path), triggerService(service)
-    {
-    }
-
-    ~Verification() = default;
-    Verification(const Verification&) = delete;
-    Verification& operator=(const Verification&) = delete;
-    Verification(Verification&&) = default;
-    Verification& operator=(Verification&&) = default;
-
-    bool triggerVerification() override;
-    void abortVerification() override;
-    VerifyCheckResponses checkVerificationState() override;
-
-  private:
-    sdbusplus::bus::bus bus;
-    const std::string checkPath;
-    const std::string triggerService;
-};
-
 } // namespace blobs
diff --git a/verify.cpp b/verify_systemd.cpp
similarity index 87%
rename from verify.cpp
rename to verify_systemd.cpp
index 5023bf8..fd29918 100644
--- a/verify.cpp
+++ b/verify_systemd.cpp
@@ -14,9 +14,10 @@
  * limitations under the License.
  */
 
-#include "verify.hpp"
+#include "verify_systemd.hpp"
 
 #include "status.hpp"
+#include "verify.hpp"
 
 #include <fstream>
 #include <memory>
@@ -28,14 +29,14 @@
 {
 
 std::unique_ptr<VerificationInterface>
-    Verification::CreateDefaultVerification(sdbusplus::bus::bus&& bus,
+    SystemdVerification::CreateVerification(sdbusplus::bus::bus&& bus,
                                             const std::string& path,
                                             const std::string& service)
 {
-    return std::make_unique<Verification>(std::move(bus), path, service);
+    return std::make_unique<SystemdVerification>(std::move(bus), path, service);
 }
 
-bool Verification::triggerVerification()
+bool SystemdVerification::triggerVerification()
 {
     static constexpr auto systemdService = "org.freedesktop.systemd1";
     static constexpr auto systemdRoot = "/org/freedesktop/systemd1";
@@ -61,12 +62,12 @@
     return true;
 }
 
-void Verification::abortVerification()
+void SystemdVerification::abortVerification()
 {
     /* TODO: Implement this. */
 }
 
-VerifyCheckResponses Verification::checkVerificationState()
+VerifyCheckResponses SystemdVerification::checkVerificationState()
 {
     VerifyCheckResponses result = VerifyCheckResponses::other;
 
diff --git a/verify_systemd.hpp b/verify_systemd.hpp
new file mode 100644
index 0000000..60acbc6
--- /dev/null
+++ b/verify_systemd.hpp
@@ -0,0 +1,57 @@
+#pragma once
+
+#include "status.hpp"
+#include "verify.hpp"
+
+#include <memory>
+#include <sdbusplus/bus.hpp>
+#include <string>
+
+namespace blobs
+{
+
+/**
+ * Representation of what is used for verification.  Currently, this reduces the
+ * chance of error by using an object instead of two strings to control the
+ * verification step, however, it leaves room for a future possibility out
+ * something wholly configurable.
+ */
+class SystemdVerification : public VerificationInterface
+{
+  public:
+    /**
+     * Create a default Verification object that uses systemd to trigger the
+     * process.
+     *
+     * @param[in] bus - an sdbusplus handler for a bus to use.
+     * @param[in] path - the path to check for verification status.
+     * @param[in[ service - the systemd service to start to trigger
+     * verification.
+     */
+    static std::unique_ptr<VerificationInterface>
+        CreateVerification(sdbusplus::bus::bus&& bus, const std::string& path,
+                           const std::string& service);
+
+    SystemdVerification(sdbusplus::bus::bus&& bus, const std::string& path,
+                        const std::string& service) :
+        bus(std::move(bus)),
+        checkPath(path), triggerService(service)
+    {
+    }
+
+    ~SystemdVerification() = default;
+    SystemdVerification(const SystemdVerification&) = delete;
+    SystemdVerification& operator=(const SystemdVerification&) = delete;
+    SystemdVerification(SystemdVerification&&) = default;
+    SystemdVerification& operator=(SystemdVerification&&) = default;
+
+    bool triggerVerification() override;
+    void abortVerification() override;
+    VerifyCheckResponses checkVerificationState() override;
+
+  private:
+    sdbusplus::bus::bus bus;
+    const std::string checkPath;
+    const std::string triggerService;
+};
+} // namespace blobs
