diff --git a/argument.hpp b/argument.hpp
new file mode 100644
index 0000000..c314006
--- /dev/null
+++ b/argument.hpp
@@ -0,0 +1,45 @@
+#pragma once
+
+#include <getopt.h>
+#include <map>
+#include <string>
+
+namespace phosphor
+{
+namespace fan
+{
+namespace util
+{
+
+/**
+ * Parses command line arguments.
+ * This header can be used by all fan applications, while
+ * the .cpp will need to be implemented by each of them.
+ */
+class ArgumentParser
+{
+    public:
+        ArgumentParser(int argc, char** argv);
+        ArgumentParser() = delete;
+        ArgumentParser(const ArgumentParser&) = delete;
+        ArgumentParser(ArgumentParser&&) = default;
+        ArgumentParser& operator=(const ArgumentParser&) = delete;
+        ArgumentParser& operator=(ArgumentParser&&) = default;
+        ~ArgumentParser() = default;
+        const std::string& operator[](const std::string& opt);
+
+        static void usage(char** argv);
+
+        static constexpr auto true_string = "true";
+        static const std::string empty_string;
+
+    private:
+        std::map<const std::string, std::string> arguments;
+
+        static const option options[];
+        static const char* optionstr;
+};
+
+}
+}
+}
diff --git a/control/argument.cpp b/control/argument.cpp
new file mode 100644
index 0000000..2852dee
--- /dev/null
+++ b/control/argument.cpp
@@ -0,0 +1,90 @@
+/**
+ * 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 phosphor
+{
+namespace fan
+{
+namespace util
+{
+
+ArgumentParser::ArgumentParser(int argc, char** argv)
+{
+    auto 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 : true_string);
+        }
+    }
+}
+
+const std::string& ArgumentParser::operator[](const std::string& opt)
+{
+    auto i = arguments.find(opt);
+    if (i == arguments.end())
+    {
+        return empty_string;
+    }
+    else
+    {
+        return i->second;
+    }
+}
+
+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 << "    --init               Sets fans to full speed, delays, exits\n";
+    std::cerr << "    --control            Start fan control algorithm\n";
+    std::cerr << std::flush;
+}
+
+const option ArgumentParser::options[] =
+{
+    { "init",    no_argument,  NULL,   'i' },
+    { "control",  no_argument,  NULL,   'c' },
+    { "help",   no_argument,        NULL,   'h' },
+    { 0, 0, 0, 0},
+};
+
+const char* ArgumentParser::optionstr = "ich?";
+
+const std::string ArgumentParser::empty_string = "";
+
+}
+}
+}
+// vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
