diff --git a/power-sequencer/Makefile.am b/power-sequencer/Makefile.am
new file mode 100644
index 0000000..2aed038
--- /dev/null
+++ b/power-sequencer/Makefile.am
@@ -0,0 +1,20 @@
+AM_DEFAULT_SOURCE_EXT = .cpp
+AM_CPPFLAGS = -I$(top_srcdir)
+
+sbin_PROGRAMS = \
+	witherspoon-pseq-monitor
+
+witherspoon_pseq_monitor_SOURCES = \
+	argument.cpp \
+	main.cpp
+
+witherspoon_pseq_monitor_LDADD = \
+	$(top_builddir)/libpower.la \
+	$(PHOSPHOR_LOGGING_LIBS) \
+	${PHOSPHOR_DBUS_INTERFACES_LIBS} \
+	$(SDBUSPLUS_LIBS)
+
+witherspoon_pseq_monitor_CXXFLAGS = \
+	$(PHOSPHOR_LOGGING_CFLAGS) \
+	${PHOSPHOR_DBUS_INTERFACES_CFLAGS} \
+	$(SDBUSPLUS_CFLAGS)
diff --git a/power-sequencer/argument.cpp b/power-sequencer/argument.cpp
new file mode 100644
index 0000000..d668de1
--- /dev/null
+++ b/power-sequencer/argument.cpp
@@ -0,0 +1,86 @@
+/**
+ * Copyright © 2017 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <iostream>
+#include <iterator>
+#include <algorithm>
+#include "argument.hpp"
+
+namespace witherspoon
+{
+namespace power
+{
+
+void ArgumentParser::usage(char** argv)
+{
+    std::cerr << "Usage: " << argv[0] << " [options]\n";
+    std::cerr << "Options:\n";
+    std::cerr << "    --help                Print this menu\n";
+    std::cerr << "    --action=<action>     Action: pgood-monitor\n";
+    std::cerr << "    --interval=<interval> Time to allow PGOOD to come up\n";
+    std::cerr << std::flush;
+}
+
+const option ArgumentParser::options[] =
+{
+    {"action",   required_argument, NULL, 'a'},
+    {"interval", required_argument, NULL, 'i'},
+    {"help",     no_argument,       NULL, 'h'},
+    {0, 0, 0, 0},
+};
+
+const char* ArgumentParser::optionStr = "a:i:h?";
+ArgumentParser::ArgumentParser(int argc, char** argv)
+{
+    int option = 0;
+    while (-1 != (option = getopt_long(argc, argv, optionStr, options, NULL)))
+    {
+        if ((option == '?') || (option == 'h'))
+        {
+            usage(argv);
+            exit(-1);
+        }
+
+        auto i = &options[0];
+        while ((i->val != option) && (i->val != 0))
+        {
+            ++i;
+        }
+
+        if (i->val)
+        {
+            arguments[i->name] = (i->has_arg ? optarg : trueString);
+        }
+    }
+}
+
+const std::string& ArgumentParser::operator[](const std::string& opt)
+{
+    auto i = arguments.find(opt);
+    if (i == arguments.end())
+    {
+        return emptyString;
+    }
+    else
+    {
+        return i->second;
+    }
+}
+
+const std::string ArgumentParser::trueString = "true";
+const std::string ArgumentParser::emptyString = "";
+
+}
+}
diff --git a/power-sequencer/main.cpp b/power-sequencer/main.cpp
new file mode 100644
index 0000000..889340e
--- /dev/null
+++ b/power-sequencer/main.cpp
@@ -0,0 +1,44 @@
+/**
+ * Copyright © 2017 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <chrono>
+#include <iostream>
+#include "argument.hpp"
+
+using namespace witherspoon::power;
+
+int main(int argc, char** argv)
+{
+    ArgumentParser args{argc, argv};
+    auto action = args["action"];
+
+    if (action != "pgood-monitor")
+    {
+        std::cerr << "Invalid action\n";
+        args.usage(argv);
+        exit(EXIT_FAILURE);
+    }
+
+    auto i = strtoul(args["interval"].c_str(), nullptr, 10);
+    if (i == 0)
+    {
+        std::cerr << "Invalid interval value\n";
+        exit(EXIT_FAILURE);
+    }
+
+    std::chrono::seconds interval{i};
+
+    return EXIT_SUCCESS;
+}
