diff --git a/native/dicttoolkit/NativeFileList.mk b/native/dicttoolkit/NativeFileList.mk
index d2c8c3a..9a547b0 100644
--- a/native/dicttoolkit/NativeFileList.mk
+++ b/native/dicttoolkit/NativeFileList.mk
@@ -39,5 +39,6 @@
     $(addprefix offdevice_intermediate_dict/, \
         offdevice_intermediate_dict_test.cpp) \
     $(addprefix utils/, \
+        arguments_parser_test.cpp \
         command_utils_test.cpp \
         utf8_utils_test.cpp)
diff --git a/native/dicttoolkit/src/utils/arguments_parser.cpp b/native/dicttoolkit/src/utils/arguments_parser.cpp
index 039dae3..52cc7b2 100644
--- a/native/dicttoolkit/src/utils/arguments_parser.cpp
+++ b/native/dicttoolkit/src/utils/arguments_parser.cpp
@@ -16,18 +16,32 @@
 
 #include "utils/arguments_parser.h"
 
+#include <unordered_set>
+
 namespace latinime {
 namespace dicttoolkit {
 
 const int ArgumentSpec::UNLIMITED_COUNT = -1;
 
 bool ArgumentsParser::validateSpecs() const {
+    std::unordered_set<std::string> argumentNameSet;
     for (size_t i = 0; i < mArgumentSpecs.size() ; ++i) {
-        if (mArgumentSpecs[i].getMinCount() != mArgumentSpecs[i].getMaxCount()
-                && i != mArgumentSpecs.size() - 1) {
-            AKLOGE("Variable length argument must be at the end.");
+        if (mArgumentSpecs[i].getMinCount() == 0 && mArgumentSpecs[i].getMaxCount() == 0) {
+            AKLOGE("minCount = maxCount = 0 for %s.", mArgumentSpecs[i].getName().c_str());
             return false;
         }
+        if (mArgumentSpecs[i].getMinCount() != mArgumentSpecs[i].getMaxCount()
+                && i != mArgumentSpecs.size() - 1) {
+            AKLOGE("Variable length argument must be at the end.",
+                    mArgumentSpecs[i].getName().c_str()v  );
+            return false;
+        }
+        if (argumentNameSet.count(mArgumentSpecs[i].getName()) > 0) {
+            AKLOGE("Multiple arguments have the same name \"%s\".",
+                    mArgumentSpecs[i].getName().c_str());
+            return false;
+        }
+        argumentNameSet.insert(mArgumentSpecs[i].getName());
     }
     return true;
 }
diff --git a/native/dicttoolkit/src/utils/arguments_parser.h b/native/dicttoolkit/src/utils/arguments_parser.h
index be2dd87..510a872 100644
--- a/native/dicttoolkit/src/utils/arguments_parser.h
+++ b/native/dicttoolkit/src/utils/arguments_parser.h
@@ -97,8 +97,8 @@
 
 class ArgumentsParser {
  public:
-    ArgumentsParser(std::unordered_map<std::string, OptionSpec> &&optionSpecs,
-            std::vector<ArgumentSpec> &&argumentSpecs)
+    ArgumentsParser(const std::unordered_map<std::string, OptionSpec> &&optionSpecs,
+            const std::vector<ArgumentSpec> &&argumentSpecs)
             : mOptionSpecs(std::move(optionSpecs)), mArgumentSpecs(std::move(argumentSpecs)) {}
 
     const ArgumentsAndOptions parseArguments(const int argc, char **argv) const;
diff --git a/native/dicttoolkit/tests/utils/arguments_parser_test.cpp b/native/dicttoolkit/tests/utils/arguments_parser_test.cpp
new file mode 100644
index 0000000..e79425b
--- /dev/null
+++ b/native/dicttoolkit/tests/utils/arguments_parser_test.cpp
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * 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 "utils/arguments_parser.h"
+
+#include <gtest/gtest.h>
+
+namespace latinime {
+namespace dicttoolkit {
+namespace {
+
+TEST(ArgumentsParserTests, TestValitadeSpecs) {
+    {
+        std::unordered_map<std::string, OptionSpec> optionSpecs;
+        std::vector<ArgumentSpec> argumentSpecs;
+        EXPECT_TRUE(
+                ArgumentsParser(std::move(optionSpecs), std::move(argumentSpecs)).validateSpecs());
+    }
+    {
+        std::unordered_map<std::string, OptionSpec> optionSpecs;
+        optionSpecs["a"] = OptionSpec::keyValueOption("valueName", "default", "description");
+        const std::vector<ArgumentSpec> argumentSpecs = {
+            ArgumentSpec::singleArgument("name", "description"),
+            ArgumentSpec::variableLengthArguments("name2", 0 /* minCount */,  1 /* maxCount */,
+                    "description2")
+        };
+        EXPECT_TRUE(
+                ArgumentsParser(std::move(optionSpecs), std::move(argumentSpecs)).validateSpecs());
+    }
+    {
+        const std::vector<ArgumentSpec> argumentSpecs = {
+            ArgumentSpec::variableLengthArguments("name", 0 /* minCount */,  0 /* maxCount */,
+                    "description")
+        };
+        EXPECT_FALSE(ArgumentsParser(std::unordered_map<std::string, OptionSpec>(),
+                std::move(argumentSpecs)).validateSpecs());
+    }
+    {
+        const std::vector<ArgumentSpec> argumentSpecs = {
+            ArgumentSpec::singleArgument("name", "description"),
+            ArgumentSpec::variableLengthArguments("name", 0 /* minCount */,  1 /* maxCount */,
+                    "description")
+        };
+        EXPECT_FALSE(ArgumentsParser(std::unordered_map<std::string, OptionSpec>(),
+                std::move(argumentSpecs)).validateSpecs());
+    }
+    {
+        const std::vector<ArgumentSpec> argumentSpecs = {
+            ArgumentSpec::variableLengthArguments("name", 0 /* minCount */,  1 /* maxCount */,
+                    "description"),
+            ArgumentSpec::singleArgument("name2", "description2")
+        };
+        EXPECT_FALSE(ArgumentsParser(std::unordered_map<std::string, OptionSpec>(),
+                std::move(argumentSpecs)).validateSpecs());
+    }
+}
+
+} // namespace
+} // namespace dicttoolkit
+} // namespace latinime
