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
