diff --git a/tools/ndnsec/delete.hpp b/tools/ndnsec/delete.hpp
index 629440f..bd871bc 100644
--- a/tools/ndnsec/delete.hpp
+++ b/tools/ndnsec/delete.hpp
@@ -32,12 +32,13 @@
   using namespace ndn;
   namespace po = boost::program_options;
 
-  // bool deleteId = true;
   bool isDeleteKey = false;
   bool isDeleteCert = false;
   std::string name;
 
-  po::options_description description("General Usage\n  ndnsec delete [-h] [-k|c] name\nGeneral options");
+  po::options_description description("General Usage\n"
+                                      "ndnsec delete [-h] [-k|c] name\n"
+                                      "General options");
   description.add_options()
     ("help,h", "produce help message")
     ("delete-key,k", "(Optional) delete a key if specified.")
@@ -53,57 +54,78 @@
   p.add("name", 1);
 
   po::variables_map vm;
-  try
-    {
-      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;
-    }
+  try {
+    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 2;
+  }
 
-  if (vm.count("help") != 0)
-    {
-      std::cerr << description << std::endl;;
-      return 0;
-    }
+  if (vm.count("help") != 0) {
+    std::cerr << description << std::endl;;
+    return 0;
+  }
 
-  if (vm.count("name") == 0)
-    {
-      std::cerr << "ERROR: name must be specified" << std::endl;
-      std::cerr << description << std::endl;
-      return 1;
-    }
+  if (vm.count("name") == 0) {
+    std::cerr << "ERROR: name must be specified" << std::endl;
+    std::cerr << description << std::endl;
+    return 2;
+  }
 
   if (vm.count("delete-cert") != 0 || vm.count("delete-cert2") != 0)
-    {
-      isDeleteCert = true;
-      // deleteId = false;
-    }
+    isDeleteCert = true;
+
   else if (vm.count("delete-key") != 0 || vm.count("delete-key2") != 0)
-    {
-      isDeleteKey = true;
-      // deleteId = false;
-    }
+    isDeleteKey = true;
 
   KeyChain keyChain;
 
-  if (isDeleteCert)
-    {
+  try {
+    if (isDeleteCert) {
+      if (!keyChain.doesCertificateExist(name)) {
+        std::cerr << "ERROR: Certificate does not exist: " << name << std::endl;
+        return 1;
+      }
+
       keyChain.deleteCertificate(name);
+      std::cerr << "OK: Delete certificate: " << name << std::endl;
     }
-  else if (isDeleteKey)
-    {
+    else if (isDeleteKey) {
+      if (!keyChain.doesPublicKeyExist(name) &&
+          !keyChain.doesKeyExistInTpm(name, KEY_CLASS_PRIVATE)) {
+        std::cerr << "ERROR: Key does not exist: " << name << std::endl;
+        return 1;
+      }
+
       keyChain.deleteKey(name);
+      std::cerr << "OK: Delete key: " << name << std::endl;
     }
-  else
-    {
+    else {
+      if (!keyChain.doesIdentityExist(name)) {
+        std::cerr << "ERROR: Identity does not exist: " << name << std::endl;
+        return 1;
+      }
+
       keyChain.deleteIdentity(name);
+      std::cerr << "OK: Delete identity: " << name << std::endl;
     }
+  }
+  catch (const SecPublicInfo::Error& e) {
+    std::cerr << "ERROR: Cannot delete the item: " << e.what() << std::endl;
+    return 2;
+  }
+  catch (const SecTpm::Error& e) {
+    std::cerr << "ERROR: Cannot delete the item: " << e.what() << std::endl;
+    return 2;
+  }
+  catch (const KeyChain::Error& e) {
+    std::cerr << "ERROR: " << e.what() << std::endl;
+    return 2;
+  }
 
   return 0;
 }
