diff --git a/helpdata.cpp b/helpdata.cpp
index f88ee07..3dccf22 100644
--- a/helpdata.cpp
+++ b/helpdata.cpp
@@ -20,7 +20,7 @@ namespace QuasarAppUtils {
 namespace Help {
 
 static int MAX_LENGTH = -1;
-static int SectionMargin = 3;
+static int SectionMargin = 2;
 
 #define EXPANDER(COUNT, ITEM) QString(COUNT, ITEM).toStdString()
 #define SPACES(X) EXPANDER(X, ' ')
@@ -43,7 +43,7 @@ void print(const QString& key, const QString& value, int keyLength) {
     QString expander(keyLength + SectionMargin, ' ');
     auto words = value.split(" ");
 
-    int currentLength = keyLength;
+    int currentLength = std::max(keyLength, key.size());
     for (const auto& word : words) {
         if (currentLength + 2 + word.size() < WIDTH) {
             std::cout << " " << word.toStdString();
@@ -66,6 +66,8 @@ void print(const QuasarAppUtils::Help::Options &oprionsList) {
             maxLength = line.key().size();
     }
 
+    maxLength = std::min(WIDTH / 3, maxLength);
+
     for (auto line = oprionsList.begin(); line != oprionsList.end(); ++line) {
         print(line.key(), line.value(), maxLength + SectionMargin);
         std::cout << std::endl;
diff --git a/optiondata.cpp b/optiondata.cpp
index b72ed5b..35cf1ea 100644
--- a/optiondata.cpp
+++ b/optiondata.cpp
@@ -75,6 +75,17 @@ bool OptionData::isDepricated() const {
 }
 
 Help::Options OptionData::toHelp() const {
-    return {{{names().join(" / ") + " " + arguments()}, {description() + " " + example()}}};
+    QString left = names().join(" / ") + " " + arguments();
+
+    QString right = description();
+    if (example().size()) {
+        right += " Example: " + example();
+    }
+
+    return {{left, {right}}};
+}
+
+bool OptionData::isValid() const {
+    return names().size();
 }
 }
diff --git a/params.cpp b/params.cpp
index d6ae249..81a4ac1 100644
--- a/params.cpp
+++ b/params.cpp
@@ -25,6 +25,7 @@ QMap<QString, QString> Params::params = QMap<QString, QString>();
 QString Params::appPath = "";
 QString Params::appName = "";
 Help::Section Params::userHelp = {};
+OptionsDataList Params::inputOptions = {};
 
 
 bool Params::isEndable(const QString& key) {
@@ -73,8 +74,33 @@ bool Params::isDebugBuild() {
 #endif
 }
 
-void Params::showHelp() {
-    Help::print(userHelp);
+void Params::showHelp(const QString &option) {
+    if (userHelp.contains(option))
+        Help::print(userHelp.value(option));
+    else
+        Help::print(userHelp);
+}
+
+void Params::showHelpForInputOptions() {
+    Help::print(getHelpOfInputOptions());
+}
+
+Help::Section Params::getHelpOfInputOptions() {
+
+    if (inputOptions.size() <= 1 ) {
+        return {};
+    }
+
+    Help::Options help;
+    for (const auto &optionData: qAsConst(inputOptions) ) {
+        help.unite(optionData.toHelp());
+    }
+
+    return Help::Section{{"Information about using options", help}};
+}
+
+const Help::Section &Params::getHelp() {
+    return userHelp;
 }
 
 const QMap<QString, QString>& Params::getUserParamsMap() {
@@ -102,6 +128,7 @@ OptionsDataList Params::availableArguments() {
             OptionData{
                 {"-verbose"}, "(level 1 - 3)", "Shows debug log"
             }
+
         },
         {
             "Base Options",
@@ -224,27 +251,11 @@ bool Params::parseParams(const QStringList &paramsArray, const OptionsDataList &
     for (int i = 0 ; i < paramsArray.size(); ++i) {
 
         auto optionData = availableOptions.value(paramsArray[i], {{}});
-
-        if (!optionData.isValid()) {
-            QuasarAppUtils::Params::log("You use wrong option name, please check the help before run your commnad.",
-                                        QuasarAppUtils::Error);
+        if (options.size() && !checkOption(optionData, paramsArray[i])) {
             return false;
         }
 
-        if (optionData.isDepricated()) {
-
-
-
-            if (optionData.isRemoved()) {
-                QuasarAppUtils::Params::log(optionData.depricatedMsg(),
-                                            QuasarAppUtils::Error);
-                return false;
-            }
-
-            QuasarAppUtils::Params::log(optionData.depricatedMsg(),
-                                        QuasarAppUtils::Warning);
-
-        }
+        inputOptions.insert(paramsArray[i], optionData);
 
         if (paramsArray[i][0] == '-') {
             if (i < (paramsArray.size() - 1) && paramsArray[i + 1][0] != '-') {
@@ -288,6 +299,33 @@ void Params::printWorkingOptions() {
                                 QuasarAppUtils::Debug);
 }
 
+bool Params::checkOption(const OptionData& optionData, const QString& rawOptionName) {
+
+    if (!optionData.isValid()) {
+        QuasarAppUtils::Params::log(QString("The '%0' option not exists!"
+                                    " You use wrong option name, please check the help before run your commnad.").arg(
+                                    rawOptionName),
+                                    QuasarAppUtils::Error);
+        return false;
+    }
+
+    if (optionData.isDepricated()) {
+
+
+
+        if (optionData.isRemoved()) {
+            QuasarAppUtils::Params::log(optionData.depricatedMsg(),
+                                        QuasarAppUtils::Error);
+            return false;
+        }
+
+        QuasarAppUtils::Params::log(optionData.depricatedMsg(),
+                                    QuasarAppUtils::Warning);
+    }
+
+    return true;
+}
+
 void Params::parseAvailableOptions(const OptionsDataList &availableOptionsListIn,
                                    OptionsDataList *availableOptionsListOut,
                                    Help::Section *helpOut) {
@@ -295,6 +333,8 @@ void Params::parseAvailableOptions(const OptionsDataList &availableOptionsListIn
     if (!(availableOptionsListOut && helpOut))
         return;
 
+    helpOut->clear();
+
     QHash<QString, Help::Options> options;
     for (auto it = availableOptionsListIn.begin(); it != availableOptionsListIn.end(); ++it) {
 
diff --git a/params.h b/params.h
index 1dc3e82..7ac1f0b 100644
--- a/params.h
+++ b/params.h
@@ -53,24 +53,30 @@ public:
      * @brief parseParams Parse input data of started application.
      * @param argc Count of arguments.
      * @param argv Array of arguments.
+     * @param options This is list of the available options for parse. See the OptionData class for more inforamtion.
+     *  If you skip thi argument then QuasarAppLib will not check input options.
      * @return true if all arguments read successful else false.
      */
-    static bool parseParams(const int argc, const char *argv[], const OptionsDataList& options);
+    static bool parseParams(const int argc, const char *argv[], const OptionsDataList& options = {});
 
     /**
      * @brief parseParams Parse input data of started application.
      * @param argc Count of arguments.
      * @param argv Array of arguments.
+     * @param options This is list of the available options for parse. See the OptionData class for more inforamtion.
+     *  If you skip thi argument then QuasarAppLib will not check input options.
      * @return true if all arguments read successful else false.
      */
-    static bool parseParams(int argc, char *argv[], const OptionsDataList& options);
+    static bool parseParams(int argc, char *argv[], const OptionsDataList& options = {});
 
     /**
      * @brief parseParams Parse input data of started application.
      * @param paramsArray Arguments.
+     * @param options This is list of the available options for parse. See the OptionData class for more inforamtion.
+     *  If you skip thi argument then QuasarAppLib will not check input options.
      * @return true if all arguments read successful else false.
      */
-    static bool parseParams(const QStringList& paramsArray, const OptionsDataList& options);
+    static bool parseParams(const QStringList& paramsArray, const OptionsDataList& options = {});
 
     /**
      * @brief getArg return string value of a @a key if key is exits else return a @a def value.
@@ -138,8 +144,34 @@ public:
 
     /**
      * @brief showHelp This method shows all help message.
+     * @param option This is option key that needed show a help message.
      */
-    static void showHelp();
+    static void showHelp(const QString& option = "");
+
+    /**
+     * @brief showHelpForInputOptions This method show help for each input option.
+     * @note Befor using of this method invoke the parseParams method. This is needed for generate the help message.
+     *
+     * **Example:**
+     *
+     * ```bash
+     * myTool help option1 -option2 argumets
+     * ```
+     */
+    static void showHelpForInputOptions();
+
+    /**
+     * @brief getHelpOfInputOptions This method return help abut input options only. Exept help and h options.
+     * @return help abut input options only. Exept help and h options.
+     */
+    static Help::Section getHelpOfInputOptions();
+
+    /**
+     * @brief getHelp This method return options help page.
+     * @note Befor using of this method invoke the parseParams method. This is needed for generate the help message.
+     * @return help of available options.
+     */
+    static const Help::Section& getHelp();
 
     /**
      * @brief getUserParamsMap This method return const reference to the parsed arguments map.
@@ -182,6 +214,13 @@ private:
      */
     static void printWorkingOptions();
 
+    /**
+     * @brief checkOption return tru if the option is supported
+     * @param option checked option
+     * @return true if option is supported
+     */
+    static bool checkOption(const OptionData &option, const QString &rawOptionName);
+
     /**
      * @brief parseAvailableOptions This is private method for parsing availabel options.
      * @param availableOptionsListIn input data of the available options.
@@ -194,6 +233,8 @@ private:
 
 
     static QMap<QString, QString> params;
+    static OptionsDataList inputOptions;
+
     static Help::Section userHelp;
     static QString appPath;
     static QString appName;