diff --git a/attn/attn_main.cpp b/attn/attn_main.cpp
index e4766f0..c0e2451 100644
--- a/attn/attn_main.cpp
+++ b/attn/attn_main.cpp
@@ -3,15 +3,54 @@
 #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)
+{
+    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 main(int argc, char* argv[])
 {
     int rc = 0; // return code
 
@@ -37,9 +76,13 @@
     }
     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));
+        gpios.push_back(
+            std::make_unique<attn::AttnMonitor>(line, config, io, bp_enable));
 
         io.run(); // start GPIO monitor
     }
