diff --git a/util.cpp b/util.cpp
new file mode 100644
index 00000000..1f000f50
--- /dev/null
+++ b/util.cpp
@@ -0,0 +1,45 @@
+#include "util.h"
+
+namespace i2p
+{
+namespace util
+{
+std::map<std::string, std::string> mapArgs;
+
+void ParseArguments(int argc, const char* const argv[])
+{
+	mapArgs.clear();
+    for (int i = 1; i < argc; i++)
+    {
+    	std::string strKey (argv[i]);
+    	std::string strValue;
+    	size_t has_data = strKey.find('=');
+    	if (has_data != std::string::npos)
+    	{
+    		strValue = strKey.substr(has_data+1);
+    		strKey = strKey.substr(0, has_data);
+    	}
+    	if (strKey[0] != '-')
+    		break;
+
+        mapArgs[strKey] = strValue;
+    }
+}
+
+int GetIntArg(const std::string& strArg, int nDefault)
+{
+    if (mapArgs.count(strArg))
+        return atoi(mapArgs[strArg].c_str());
+    return nDefault;
+}
+
+std::string GetStringArg(const std::string& strArg, std::string nDefault)
+{
+    if (mapArgs.count(strArg))
+        return mapArgs[strArg];
+    return nDefault;
+}
+
+
+} // Namespace end
+}
diff --git a/util.h b/util.h
new file mode 100644
index 00000000..ef015ded
--- /dev/null
+++ b/util.h
@@ -0,0 +1,19 @@
+#ifndef UTIL_H
+#define UTIL_H
+
+#include <map>
+#include <string>
+
+namespace i2p
+{
+namespace util
+{
+	extern std::map<std::string, std::string> mapArgs;
+	void ParseArguments(int argc, const char* const argv[]);
+	int GetIntArg(const std::string& strArg, int nDefault);
+
+}
+}
+
+
+#endif