diff --git a/attn/attn_handler.cpp b/attn/attn_handler.cpp
index 0463837..ec600e5 100644
--- a/attn/attn_handler.cpp
+++ b/attn/attn_handler.cpp
@@ -1,5 +1,6 @@
 #include <libpdbg.h>
 
+#include <analyzer/analyzer_main.hpp>
 #include <phosphor-logging/log.hpp>
 #include <sdbusplus/bus.hpp>
 
@@ -157,12 +158,7 @@
     ss << "[ATTN] checkstop" << std::endl;
     log<level::INFO>(ss.str().c_str());
 
-    if (0 != rc)
-    {
-        std::stringstream ss; // log message stream
-        ss << "[ATTN] checkstop NOT handled" << std::endl;
-        log<level::INFO>(ss.str().c_str());
-    }
+    analyzer::analyzeHardware();
 
     // TODO recoverable errors?
 
diff --git a/attn/attn_handler.service b/attn/attn_handler.service
index 42bbf34..43d3db7 100644
--- a/attn/attn_handler.service
+++ b/attn/attn_handler.service
@@ -5,7 +5,7 @@
 After=mapper-wait@-xyz-openbmc_project-logging.service
 
 [Service]
-ExecStart=/usr/bin/attn_handler
+ExecStart=/usr/bin/openpower-hw-diags --daemon
 Restart=on-failure
 
 [Install]
diff --git a/attn/attn_main.cpp b/attn/attn_main.cpp
index c0e2451..492531b 100644
--- a/attn/attn_main.cpp
+++ b/attn/attn_main.cpp
@@ -1,66 +1,19 @@
-#include <libpdbg.h>
+#include <../attn/attn_monitor.hpp>
 
-#include <attn_handler.hpp>
-#include <attn_monitor.hpp>
-
-#include <algorithm>
-
-/*
- * @brief Search the command line arguments for an option
- *
- * @param i_begin   command line args vector begin
- * @param i_end     command line args vector end
- * @param i_option  configuration option to look for
- *
- * @return true = option found on command line
- */
-bool getCliOption(char** i_begin, char** i_end, const std::string& i_option)
+namespace attn
 {
-    return (i_end != std::find(i_begin, i_end, i_option));
-}
-
-/*
- * @brief Search the command line arguments for a setting value
- *
- * @param i_begin   command line args vector begin
- * @param i_end     command line args vectory end
- * @param i_setting configuration setting to look for
- *
- * @return value of the setting or 0 if setting not found or value not given
- */
-char* getCliSetting(char** i_begin, char** i_end, const std::string& i_setting)
-{
-    char** value = std::find(i_begin, i_end, i_setting);
-    if (value != i_end && ++value != i_end)
-    {
-        return *value;
-    }
-    return 0; // nullptr
-}
 
 /**
  * @brief Attention handler application main()
- *
- * This is the main interface to the Attention handler application, it will
- * initialize the libgpd targets and start a gpio mointor.
- *
- * Command line arguments:
- *
- *  breakpoints - enables breakpoint special attn handling
- *
- * @return 0 = success
  */
-int main(int argc, char* argv[])
+int attnDaemon(bool i_breakpoints)
 {
-    int rc = 0; // return code
+    int rc = 0; // assume success
 
     gpiod_line* line; // gpio line to monitor
 
     boost::asio::io_service io; // async io monitoring service
 
-    // initialize pdbg targets
-    pdbg_targets_init(nullptr);
-
     // GPIO line configuration (falling edge, active low)
     struct gpiod_line_request_config config
     {
@@ -76,16 +29,15 @@
     }
     else
     {
-        // Check command line args for breakpoint handling enable option
-        bool bp_enable = getCliOption(argv, argv + argc, "-breakpoints");
-
         // Creating a vector of one gpio to monitor
         std::vector<std::unique_ptr<attn::AttnMonitor>> gpios;
-        gpios.push_back(
-            std::make_unique<attn::AttnMonitor>(line, config, io, bp_enable));
+        gpios.push_back(std::make_unique<attn::AttnMonitor>(line, config, io,
+                                                            i_breakpoints));
 
         io.run(); // start GPIO monitor
     }
 
     return rc;
 }
+
+} // namespace attn
diff --git a/attn/attn_main.hpp b/attn/attn_main.hpp
new file mode 100644
index 0000000..4403b45
--- /dev/null
+++ b/attn/attn_main.hpp
@@ -0,0 +1,18 @@
+#pragma once
+
+namespace attn
+{
+
+/**
+ * @brief Load the attention handler as a gpio monitor
+ *
+ * Request the attention gpio for monitoring and attach the attention handler
+ * as the gpio event handler.
+ *
+ * @param i_breakpoints     enables breakpoint special attn handling
+ *
+ * @return 0 == success
+ */
+int attnDaemon(bool i_breakpoints);
+
+} // namespace attn
diff --git a/attn/meson.build b/attn/meson.build
index c715dce..dfa1ce9 100644
--- a/attn/meson.build
+++ b/attn/meson.build
@@ -28,8 +28,10 @@
         dependency('systemd').get_pkgconfig_variable(
             'systemdsystemunitdir')
 )
-executable('attn_handler',
+
+attn = static_library('attn_handler',
            'attn_main.cpp', 'attn_handler.cpp', 'attn_monitor.cpp',
+           include_directories : incdir,
            dependencies : [whole_archive, libpdbg,
                            no_whole_archive, sdbusplus, libgpiod],
            cpp_args : boost_args,
