diff --git a/tools/ndnsec-delete.hpp b/tools/ndnsec-delete.hpp
index 2536344..bdce78f 100644
--- a/tools/ndnsec-delete.hpp
+++ b/tools/ndnsec-delete.hpp
@@ -10,89 +10,86 @@
 
 #include "ndnsec-util.hpp"
 
-int 
-ndnsec_delete(int argc, char** argv)	
+int
+ndnsec_delete(int argc, char** argv)
 {
   using namespace ndn;
   namespace po = boost::program_options;
 
   // bool deleteId = true;
-  bool deleteKey = false;
-  bool deleteCert = false;
+  bool isDeleteKey = false;
+  bool isDeleteCert = false;
   std::string name;
 
-  po::options_description desc("General Usage\n  ndnsec delete [-h] [-K|C] name\nGeneral options");
-  desc.add_options()
+  po::options_description description("General Usage\n  ndnsec delete [-h] [-k|c] name\nGeneral options");
+  description.add_options()
     ("help,h", "produce help message")
-    ("delete_key,K", "(Optional) delete a key if specified.")
-    ("delete_cert,C", "(Optional) delete a certificate if specified.")
+    ("delete-key,k", "(Optional) delete a key if specified.")
+    ("delete-key2,K", "(Optional) delete a key if specified.")
+    ("delete-cert,c", "(Optional) delete a certificate if specified.")
+    ("delete-cert2,C", "(Optional) delete a certificate if specified.")
     ("name,n", po::value<std::string>(&name), "By default, it refers to an identity."
-     "If -K is specified, it refers to a key."
-     "If -C is specified, it refers to a certificate.");
+     "If -k is specified, it refers to a key."
+     "If -c is specified, it refers to a certificate.");
     ;
 
   po::positional_options_description p;
   p.add("name", 1);
-  
+
   po::variables_map vm;
   try
     {
-      po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm);
+      po::store(po::command_line_parser(argc, argv).options(description).positional(p).run(),
+                vm);
       po::notify(vm);
     }
-  catch (std::exception &e)
+  catch (const std::exception& e)
     {
       std::cerr << "ERROR: " << e.what() << std::endl;
+      std::cerr << description << std::endl;
       return 1;
     }
 
-  if (vm.count("help")) 
+  if (vm.count("help") != 0)
     {
-      std::cerr << desc << std::endl;;
+      std::cerr << description << std::endl;;
       return 0;
     }
 
-  if(vm.count("delete_cert"))
+  if (vm.count("name") == 0)
     {
-      deleteCert = true;
-      // deleteId = false;
+      std::cerr << "ERROR: name must be specified" << std::endl;
+      std::cerr << description << std::endl;
+      return 1;
     }
-  else if(vm.count("delete_key"))
-    {
-      deleteKey = true;
-      // deleteId = false;
-    }
-  
-  try
-    {
-      KeyChain keyChain;
 
-      if(deleteCert)
-        {
-          keyChain.deleteCertificate(name);
-        }
-      else if(deleteKey)
-        {
-          keyChain.deleteKey(name);
-        }
-      else
-        {
-          keyChain.deleteIdentity(name);
-        }
-      
-      return 0;
-      
-    }
-  catch(SecPublicInfo::Error& e)
+  if (vm.count("delete-cert") != 0 || vm.count("delete-cert2") != 0)
     {
-      std::cerr << e.what() << std::endl;
-      return 1;
+      isDeleteCert = true;
+      // deleteId = false;
     }
-  catch(SecTpm::Error& e)
+  else if (vm.count("delete-key") != 0 || vm.count("delete-key2") != 0)
     {
-      std::cerr << e.what() << std::endl;
-      return 1;
+      isDeleteKey = true;
+      // deleteId = false;
     }
+
+  KeyChain keyChain;
+
+  if (isDeleteCert)
+    {
+      keyChain.deleteCertificate(name);
+    }
+  else if (isDeleteKey)
+    {
+      keyChain.deleteKey(name);
+    }
+  else
+    {
+      keyChain.deleteIdentity(name);
+    }
+
+  return 0;
 }
 
 #endif //NDNSEC_DELETE_HPP
