diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..757923d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,26 @@
+openpower-proc-control
+*.o
+*.lo
+*.la
+*.sw*
+Makefile
+Makefile.in
+configure
+.deps
+.libs
+aclocal.m4
+ar-lib
+*-libtool
+autom4te.cache/
+compile
+config.guess
+config.h
+config.h.in
+config.log
+config.status
+config.sub
+depcomp
+install-sh
+ltmain.sh
+missing
+stamp-h1
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..28dee78
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,11 @@
+AM_DEFAULT_SOURCE_EXT = .cpp
+
+sbin_PROGRAMS = \
+	openpower-proc-control
+
+openpower_proc_control_SOURCES = \
+	proc_control.cpp \
+	p9_procedures.cpp
+
+openpower_proc_control_LDFLAGS = $(PHOSPHOR_LOGGING_LIBS)
+openpower_proc_control_CXXFLAGS = $(PHOSPHOR_LOGGING_CFLAGS)
diff --git a/bootstrap.sh b/bootstrap.sh
new file mode 100755
index 0000000..9941c73
--- /dev/null
+++ b/bootstrap.sh
@@ -0,0 +1,18 @@
+#!/bin/sh -xe
+
+AUTOCONF_FILES="Makefile.in aclocal.m4 ar-lib autom4te.cache compile \
+        config.guess config.h.in config.sub configure depcomp install-sh \
+        ltmain.sh missing *libtool test-driver"
+
+case $1 in
+    clean)
+        test -f Makefile && make maintainer-clean
+        for file in ${AUTOCONF_FILES}; do
+            find -name "$file" | xargs -r rm -rf
+        done
+        exit 0
+        ;;
+esac
+
+autoreconf -i
+echo 'Run "./configure ${CONFIGURE_FLAGS} && make"'
\ No newline at end of file
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..7abbefb
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,22 @@
+AC_PREREQ([2.69])
+AC_INIT([openpower-proc-control], [1.0], [https://github.com/openbmc/openpower-proc-control/issues])
+AC_LANG([C++])
+AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign dist-xz])
+AM_SILENT_RULES([yes])
+
+# Checks for programs
+AC_PROG_CXX
+AC_PROG_INSTALL #Checks/sets the install variable to be used
+AC_PROG_MAKE_SET
+
+# Checks for typedefs, structures, and compiler characteristics.
+AX_CXX_COMPILE_STDCXX_14([noext])
+AX_APPEND_COMPILE_FLAGS([-Wall -Werror], [CXXFLAGS])
+
+# Checks for library functions
+LT_INIT
+
+PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging],, [AC_MSG_ERROR([Could not find phosphor-logging...openbmc/phosphor-logging package required])])
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/p9_procedures.cpp b/p9_procedures.cpp
new file mode 100644
index 0000000..37a3b10
--- /dev/null
+++ b/p9_procedures.cpp
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ */
+namespace openpower
+{
+namespace p9
+{
+
+void startHost()
+{
+
+}
+
+
+void vcsWorkaround()
+{
+
+}
+
+}
+}
diff --git a/p9_procedures.hpp b/p9_procedures.hpp
new file mode 100644
index 0000000..2e7ff1a
--- /dev/null
+++ b/p9_procedures.hpp
@@ -0,0 +1,22 @@
+#pragma once
+
+namespace openpower
+{
+namespace p9
+{
+
+/**
+ * @brief Starts the self boot engine on P9 position 0 to kick off a boot.
+ * @return void
+ */
+void startHost();
+
+
+/**
+ * @brief Performs the 'VCS Workaround' on all P9s in the system.
+ * @return void
+ */
+void vcsWorkaround();
+
+}
+}
diff --git a/proc_control.cpp b/proc_control.cpp
new file mode 100644
index 0000000..8f6f86c
--- /dev/null
+++ b/proc_control.cpp
@@ -0,0 +1,74 @@
+/**
+ * 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 <algorithm>
+#include <functional>
+#include <iostream>
+#include <phosphor-logging/log.hpp>
+#include "p9_procedures.hpp"
+
+constexpr auto procedures =
+{
+    std::make_tuple("startHost", openpower::p9::startHost),
+    std::make_tuple("vcsWorkaround", openpower::p9::vcsWorkaround)
+};
+
+void usage(char** argv)
+{
+    std::cerr << "Usage: " << argv[0] << " [action]\n";
+    std::cerr << "   actions:\n";
+
+    for (const auto& p : procedures)
+    {
+        std::cerr << "     " << std::get<0>(p) << "\n";
+    }
+}
+
+int main(int argc, char** argv)
+{
+    if (argc != 2)
+    {
+        usage(argv);
+        return -1;
+    }
+
+    std::string action{argv[1]};
+
+    auto finder = [&action](const auto& p)
+    {
+        return std::get<0>(p) == action;
+    };
+    auto procedure = std::find_if(procedures.begin(), procedures.end(), finder);
+
+    if (procedure == procedures.end())
+    {
+        usage(argv);
+        return -1;
+    }
+
+    auto function = std::get<1>(*procedure);
+    try
+    {
+        function();
+    }
+    catch (std::exception& e)
+    {
+        //TODO: commit an actual error that does a callout
+        phosphor::logging::log<phosphor::logging::level::ERR>(e.what());
+        return -1;
+    }
+
+    return 0;
+}
