diff --git a/tools/ndnsec-set-default.hpp b/tools/ndnsec-set-default.hpp
index 86c831a..7003afc 100644
--- a/tools/ndnsec-set-default.hpp
+++ b/tools/ndnsec-set-default.hpp
@@ -8,86 +8,87 @@
 #ifndef NDNSEC_SET_DEFAULT_HPP
 #define NDNSEC_SET_DEFAULT_HPP
 
-int 
-ndnsec_set_default(int argc, char** argv)	
+int
+ndnsec_set_default(int argc, char** argv)
 {
   using namespace ndn;
   namespace po = boost::program_options;
 
   std::string certFileName;
-  bool setDefaultId = true;
-  bool setDefaultKey = false;
-  bool setDefaultCert = false;
+  bool isSetDefaultId = true;
+  bool isSetDefaultKey = false;
+  bool isSetDefaultCert = false;
   std::string name;
 
-  po::options_description desc("General Usage\n  ndnsec set-default [-h] [-K|C] name\nGeneral options");
-  desc.add_options()
+  po::options_description description("General Usage\n  ndnsec set-default [-h] [-k|c] name\nGeneral options");
+  description.add_options()
     ("help,h", "produce help message")
-    ("default_key,K", "set default key of the identity")
-    ("default_cert,C", "set default certificate of the key")
+    ("default_key,k", "set default key of the identity")
+    ("default_cert,c", "set default certificate of the key")
     ("name,n", po::value<std::string>(&name), "the name to set")
     ;
 
   po::positional_options_description p;
   p.add("name", 1);
   po::variables_map vm;
-  po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm);
-
-  po::notify(vm);
-
-  if (vm.count("help")) 
+  try
     {
-      std::cerr << desc << std::endl;
+      po::store(po::command_line_parser(argc, argv).options(description).positional(p).run(),
+                vm);
+      po::notify(vm);
+    }
+  catch (const std::exception& e)
+    {
+      std::cerr << "ERROR: " << e.what() << std::endl;
+      std::cerr << description << std::endl;
+      return 1;
+    }
+
+  if (vm.count("help") != 0)
+    {
+      std::cerr << description << std::endl;
       return 0;
     }
 
-  try
+  if (vm.count("name") == 0)
     {
-      KeyChain keyChain;
-
-      if (vm.count("default_key"))
-        {
-          setDefaultKey = true;
-          setDefaultId = false;
-        }
-      else if(vm.count("default_cert"))
-        {
-          setDefaultCert = true;
-          setDefaultId = false;
-        }
-
-      if (setDefaultId)
-        {
-          Name idName(name);
-          keyChain.setDefaultIdentity(idName);
-          return 0;
-        }
-      if (setDefaultKey)
-        {
-          Name keyName(name);
-          keyChain.setDefaultKeyNameForIdentity(keyName);
-          return 0;
-        }
-
-      if (setDefaultCert)
-        {
-          keyChain.setDefaultCertificateNameForKey(name);
-          return 0;
-        }
-
-      return 1;
-
-    }
-  catch(SecPublicInfo::Error& e)
-    {
-      std::cerr << e.what() << std::endl;
-      return 1;
-    }
-  catch(SecTpm::Error& e)
-    {
-      std::cerr << e.what() << std::endl;
+      std::cerr << "ERROR: name is required!" << std::endl;
+      std::cerr << description << std::endl;
       return 1;
     }
 
+  KeyChain keyChain;
+
+  if (vm.count("default_key") != 0)
+    {
+      isSetDefaultKey = true;
+      isSetDefaultId = false;
+    }
+  else if (vm.count("default_cert") != 0)
+    {
+      isSetDefaultCert = true;
+      isSetDefaultId = false;
+    }
+
+  if (isSetDefaultId)
+    {
+      Name idName(name);
+      keyChain.setDefaultIdentity(idName);
+      return 0;
+    }
+  if (isSetDefaultKey)
+    {
+      Name keyName(name);
+      keyChain.setDefaultKeyNameForIdentity(keyName);
+      return 0;
+    }
+
+  if (isSetDefaultCert)
+    {
+      keyChain.setDefaultCertificateNameForKey(name);
+      return 0;
+    }
+
+  return 1;
 }
 #endif //NDNSEC_SET_DEFAULT_HPP
