diff --git a/.gitignore b/.gitignore
index 1f4edce..f05e3a1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,3 +24,5 @@
 ltmain.sh
 missing
 stamp-h1
+witherspoon-pseq-monitor
+xyz/openbmc_project/Power/Fault/
diff --git a/Makefile.am b/Makefile.am
index 37f0039..c1a90ed 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -32,4 +32,4 @@
 	@mkdir -p `dirname $@`
 	$(SDBUSPLUSPLUS) -r $(srcdir) error exception-cpp xyz.openbmc_project.Power.Fault > $@
 
-SUBDIRS = .
+SUBDIRS = . power-sequencer
diff --git a/configure.ac b/configure.ac
index 0de3990..ed31491 100644
--- a/configure.ac
+++ b/configure.ac
@@ -32,5 +32,5 @@
 LT_INIT # Required for systemd linking
 
 # Create configured output
-AC_CONFIG_FILES([Makefile])
+AC_CONFIG_FILES([Makefile power-sequencer/Makefile])
 AC_OUTPUT
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;
+}
