diff --git a/src/security/key-chain.hpp b/src/security/key-chain.hpp
index 6ac1668..d0ae51a 100644
--- a/src/security/key-chain.hpp
+++ b/src/security/key-chain.hpp
@@ -38,8 +38,8 @@
 template<class Info, class Tpm>
 class KeyChainImpl : public Info, public Tpm
 {
-  typedef typename Info::Error InfoError;
-  typedef typename Tpm::Error TpmError;
+  typedef SecPublicInfo::Error InfoError;
+  typedef SecTpm::Error TpmError;
 public:
   /**
    * @brief Create an identity by creating a pair of Key-Signing-Key (KSK) for this identity and a self-signed certificate of the KSK.
diff --git a/src/security/sec-public-info.hpp b/src/security/sec-public-info.hpp
index 1d992d0..e1e0fbe 100644
--- a/src/security/sec-public-info.hpp
+++ b/src/security/sec-public-info.hpp
@@ -365,34 +365,34 @@
   shared_ptr<IdentityCertificate> m_defaultCertificate;
 };
 
-void
+inline void
 SecPublicInfo::setDefaultIdentity(const Name& identityName)
 {
   setDefaultIdentityInternal(identityName);
   refreshDefaultCertificate();
 }
 
-void
+inline void
 SecPublicInfo::setDefaultKeyNameForIdentity(const Name& keyName)
 {
   setDefaultKeyNameForIdentityInternal(keyName);
   refreshDefaultCertificate();
 }
 
-void 
+inline void 
 SecPublicInfo::setDefaultCertificateNameForKey(const Name& certificateName)
 {
   setDefaultCertificateNameForKeyInternal(certificateName);
   refreshDefaultCertificate();
 }
 
-Name 
+inline Name 
 SecPublicInfo::getDefaultCertificateNameForIdentity(const Name& identityName)
 {
   return getDefaultCertificateNameForKey(getDefaultKeyNameForIdentity(identityName));
 }
 
-Name
+inline Name
 SecPublicInfo::getNewKeyName (const Name& identityName, bool useKsk)
 {
   std::ostringstream oss;
@@ -412,7 +412,7 @@
   return keyName;
 }
 
-Name
+inline Name
 SecPublicInfo::getDefaultCertificateName()
 {
   if(!static_cast<bool>(m_defaultCertificate))
@@ -424,7 +424,7 @@
   return m_defaultCertificate->getName();
 }
 
-void
+inline void
 SecPublicInfo::addCertificateAsKeyDefault(const IdentityCertificate& certificate)
 {
   addCertificate(certificate);
@@ -432,7 +432,7 @@
   refreshDefaultCertificate();
 }
 
-void
+inline void
 SecPublicInfo::addCertificateAsIdentityDefault(const IdentityCertificate& certificate)
 {
   addCertificate(certificate);
@@ -442,7 +442,7 @@
   refreshDefaultCertificate();
 }
 
-void
+inline void
 SecPublicInfo::addCertificateAsSystemDefault(const IdentityCertificate& certificate)
 {
   addCertificate(certificate);
@@ -454,13 +454,13 @@
   refreshDefaultCertificate();
 }
 
-shared_ptr<IdentityCertificate>
+inline shared_ptr<IdentityCertificate>
 SecPublicInfo::defaultCertificate()
 {
   return m_defaultCertificate;
 }
 
-void
+inline void
 SecPublicInfo::refreshDefaultCertificate()
 {
   try
diff --git a/src/security/sec-tpm.hpp b/src/security/sec-tpm.hpp
index 2be17d8..97547a4 100644
--- a/src/security/sec-tpm.hpp
+++ b/src/security/sec-tpm.hpp
@@ -261,7 +261,7 @@
   getImpExpPassWord(std::string& password, const std::string& prompt);
 };
 
-bool
+inline bool
 SecTpm::getImpExpPassWord(std::string& password, const std::string& prompt)
 {
   int result = false;
diff --git a/src/security/validator-regex.hpp b/src/security/validator-regex.hpp
index f80eb76..9caa380 100644
--- a/src/security/validator-regex.hpp
+++ b/src/security/validator-regex.hpp
@@ -85,11 +85,11 @@
   std::map<Name, shared_ptr<IdentityCertificate> > m_trustAnchors;
 };
 
-void 
+inline void 
 ValidatorRegex::addDataVerificationRule (shared_ptr<SecRuleRelative> rule)
 { rule->isPositive() ? m_verifyPolicies.push_back(rule) : m_mustFailVerify.push_back(rule); }
       
-void  
+inline void  
 ValidatorRegex::addTrustAnchor(shared_ptr<IdentityCertificate> certificate)
 { m_trustAnchors[certificate->getName().getPrefix(-1)] = certificate; }
 
diff --git a/tests/security/test-sec-public-info-sqlite3.cpp b/tests/security/test-sec-public-info-sqlite3.cpp
index bbbe01c..8928ebf 100644
--- a/tests/security/test-sec-public-info-sqlite3.cpp
+++ b/tests/security/test-sec-public-info-sqlite3.cpp
@@ -61,13 +61,13 @@
   BOOST_CHECK_EQUAL(keyChain.doesCertificateExist(certName4), true);
   BOOST_CHECK_EQUAL(keyChain.doesCertificateExist(certName5), true);
 
-  keyChain.deleteCertificate(certName5);
+  BOOST_REQUIRE_NO_THROW(keyChain.deleteCertificate(certName5));
   BOOST_CHECK_EQUAL(keyChain.doesCertificateExist(certName5), false);
   BOOST_CHECK_EQUAL(keyChain.doesCertificateExist(certName3), true);
   BOOST_CHECK_EQUAL(keyChain.doesCertificateExist(certName4), true);
   BOOST_CHECK_EQUAL(keyChain.doesPublicKeyExist(keyName3), true);
 
-  keyChain.deleteKey(keyName3);
+  BOOST_REQUIRE_NO_THROW(keyChain.deleteKey(keyName3));
   BOOST_CHECK_EQUAL(keyChain.doesCertificateExist(certName4), false);
   BOOST_CHECK_EQUAL(keyChain.doesCertificateExist(certName3), false);
   BOOST_CHECK_EQUAL(keyChain.doesPublicKeyExist(keyName3), false);
@@ -75,7 +75,7 @@
   BOOST_CHECK_EQUAL(keyChain.doesPublicKeyExist(keyName1), true);
   BOOST_CHECK_EQUAL(keyChain.doesIdentityExist(identity), true);
 
-  keyChain.deleteIdentity(identity);
+  BOOST_REQUIRE_NO_THROW(keyChain.deleteIdentity(identity));
   BOOST_CHECK_EQUAL(keyChain.doesCertificateExist(certName2), false);
   BOOST_CHECK_EQUAL(keyChain.doesPublicKeyExist(keyName2), false);
   BOOST_CHECK_EQUAL(keyChain.doesCertificateExist(certName1), false);
diff --git a/tools/ndnsec.cpp b/tools/ndnsec.cpp
index eb0877a..ba83dac 100644
--- a/tools/ndnsec.cpp
+++ b/tools/ndnsec.cpp
@@ -46,6 +46,12 @@
 
 int main(int argc, char** argv)
 {
+  if(argc < 1)
+    {
+      std::cerr << ndnsec_helper << std::endl;
+      return 1;
+    }
+
   std::string command(argv[1]);
   
   if(command == "help") { std::cerr << ndnsec_helper << std::endl; }
