diff --git a/src/security/certificate-extension.hpp b/src/security/certificate-extension.hpp
index a1aa5b6..83653ee 100644
--- a/src/security/certificate-extension.hpp
+++ b/src/security/certificate-extension.hpp
@@ -13,7 +13,9 @@
 #include "../encoding/buffer.hpp"
 #include "../encoding/oid.hpp"
 
-namespace CryptoPP { class BufferedTransformation; }
+namespace CryptoPP {
+class BufferedTransformation;
+}
 
 namespace ndn {
 
diff --git a/src/security/certificate-subject-description.hpp b/src/security/certificate-subject-description.hpp
index 7665a3f..e8732f0 100644
--- a/src/security/certificate-subject-description.hpp
+++ b/src/security/certificate-subject-description.hpp
@@ -12,14 +12,17 @@
 #include "../common.hpp"
 #include "../encoding/oid.hpp"
 
-namespace CryptoPP { class BufferedTransformation; }
+namespace CryptoPP {
+class BufferedTransformation;
+}
 
 namespace ndn {
 
 /**
  * A CertificateSubjectDescription represents the SubjectDescription entry in a Certificate.
  */
-class CertificateSubjectDescription {
+class CertificateSubjectDescription
+{
 public:
   CertificateSubjectDescription(CryptoPP::BufferedTransformation& in)
   {
diff --git a/src/security/certificate.hpp b/src/security/certificate.hpp
index dc96879..157b878 100644
--- a/src/security/certificate.hpp
+++ b/src/security/certificate.hpp
@@ -17,7 +17,8 @@
 
 namespace ndn {
 
-class Certificate : public Data {
+class Certificate : public Data
+{
 public:
   class Error : public std::runtime_error
   {
diff --git a/src/security/conf/checker.hpp b/src/security/conf/checker.hpp
index 72ae726..6955dfe 100644
--- a/src/security/conf/checker.hpp
+++ b/src/security/conf/checker.hpp
@@ -101,16 +101,16 @@
                             interestName[INTEREST_SIG_VALUE].blockFromValue());
         return check(interest, signature, onValidated, onValidationFailed);
       }
-    catch (const Tlv::Error& e)
-      {
-        onValidationFailed(interest.shared_from_this(), "Cannot decode signature related TLVs");
-        return -1;
-      }
-    catch (const Signature::Error& e)
+    catch (Signature::Error& e)
       {
         onValidationFailed(interest.shared_from_this(), "Invalid signature");
         return -1;
       }
+    catch (Tlv::Error& e)
+      {
+        onValidationFailed(interest.shared_from_this(), "Cannot decode signature related TLVs");
+        return -1;
+      }
   }
 
 private:
@@ -147,7 +147,7 @@
                   return -1;
                 }
             }
-          catch (const SignatureSha256WithRsa::Error& e)
+          catch (SignatureSha256WithRsa::Error& e)
             {
               onValidationFailed(packet.shared_from_this(),
                                  "Cannot decode Sha256WithRsa signature!");
@@ -221,16 +221,16 @@
                             interestName[INTEREST_SIG_VALUE].blockFromValue());
         return check(interest, signature, onValidated, onValidationFailed);
       }
-    catch (const Tlv::Error& e)
-      {
-        onValidationFailed(interest.shared_from_this(), "Cannot decode signature related TLVs");
-        return -1;
-      }
-    catch (const Signature::Error& e)
+    catch (Signature::Error& e)
       {
         onValidationFailed(interest.shared_from_this(), "Invalid signature");
         return -1;
       }
+    catch (Tlv::Error& e)
+      {
+        onValidationFailed(interest.shared_from_this(), "Cannot decode signature related TLVs");
+        return -1;
+      }
   }
 
 private:
@@ -280,13 +280,13 @@
                   return -1;
                 }
             }
-          catch (const KeyLocator::Error& e)
+          catch (KeyLocator::Error& e)
             {
               onValidationFailed(packet.shared_from_this(),
                                  "KeyLocator does not have name!");
               return -1;
             }
-          catch (const SignatureSha256WithRsa::Error& e)
+          catch (SignatureSha256WithRsa::Error& e)
             {
               onValidationFailed(packet.shared_from_this(),
                                  "Cannot decode signature!");
diff --git a/src/security/conf/filter.hpp b/src/security/conf/filter.hpp
index 7d5b833..4145222 100644
--- a/src/security/conf/filter.hpp
+++ b/src/security/conf/filter.hpp
@@ -207,7 +207,7 @@
           {
             return shared_ptr<RegexNameFilter>(new RegexNameFilter(regexString));
           }
-        catch (const Regex::Error& e)
+        catch (Regex::Error& e)
           {
             throw Error("Wrong filter.regex: " + regexString);
           }
diff --git a/src/security/conf/key-locator-checker.hpp b/src/security/conf/key-locator-checker.hpp
index 5785c59..e040d80 100644
--- a/src/security/conf/key-locator-checker.hpp
+++ b/src/security/conf/key-locator-checker.hpp
@@ -107,7 +107,7 @@
         failInfo = "KeyLocatorChecker failed!";
         return false;
       }
-    catch (const KeyLocator::Error& e)
+    catch (KeyLocator::Error& e)
       {
         failInfo = "KeyLocator does not have name";
         return false;
@@ -141,7 +141,7 @@
         failInfo = "KeyLocatorChecker failed!";
         return false;
       }
-    catch (const KeyLocator::Error& e)
+    catch (KeyLocator::Error& e)
       {
         failInfo = "KeyLocator does not have name";
         return false;
@@ -182,7 +182,7 @@
         failInfo = "KeyLocatorChecker failed!";
         return false;
       }
-    catch (const KeyLocator::Error& e)
+    catch (KeyLocator::Error& e)
       {
         failInfo = "KeyLocator does not have name";
         return false;
@@ -277,7 +277,7 @@
             return shared_ptr<RegexKeyLocatorNameChecker>
               (new RegexKeyLocatorNameChecker(regexString));
           }
-        catch (const Regex::Error& e)
+        catch (Regex::Error& e)
           {
             throw Error("Invalid checker.key-locator.regex: " + regexString);
           }
@@ -344,7 +344,7 @@
                                               kRegex, kExpand,
                                               relation));
           }
-        catch (const Regex::Error& e)
+        catch (Regex::Error& e)
           {
             throw Error("Invalid regex for key-locator.hyper-relation");
           }
diff --git a/src/security/encryption-manager.hpp b/src/security/encryption-manager.hpp
index a6f319b..f4f43b5 100644
--- a/src/security/encryption-manager.hpp
+++ b/src/security/encryption-manager.hpp
@@ -13,7 +13,8 @@
 
 namespace ndn {
 
-class EncryptionManager {
+class EncryptionManager
+{
 public:
   virtual ~EncryptionManager()
   {
diff --git a/src/security/public-key.hpp b/src/security/public-key.hpp
index 7774755..4a8f16a 100644
--- a/src/security/public-key.hpp
+++ b/src/security/public-key.hpp
@@ -16,7 +16,8 @@
 
 namespace ndn {
 
-class PublicKey {
+class PublicKey
+{
 public:
   class Error : public std::runtime_error
   {
diff --git a/src/security/sec-public-info-memory.hpp b/src/security/sec-public-info-memory.hpp
index 2ecdc43..4cbceac 100644
--- a/src/security/sec-public-info-memory.hpp
+++ b/src/security/sec-public-info-memory.hpp
@@ -17,7 +17,8 @@
  * @brief SecPublicInfoMemory extends SecPublicInfo and implements its methods to store identity,
  *        public key and certificate objects in memory.
  */
-class SecPublicInfoMemory : public SecPublicInfo {
+class SecPublicInfoMemory : public SecPublicInfo
+{
 public:
   class Error : public SecPublicInfo::Error
   {
@@ -104,7 +105,8 @@
 
 
 private:
-  class KeyRecord {
+  class KeyRecord
+  {
   public:
     KeyRecord(KeyType keyType, const PublicKey& key)
     : m_keyType(keyType), m_key(key)
diff --git a/src/security/sec-public-info-sqlite3.hpp b/src/security/sec-public-info-sqlite3.hpp
index 6241817..4f5115f 100644
--- a/src/security/sec-public-info-sqlite3.hpp
+++ b/src/security/sec-public-info-sqlite3.hpp
@@ -16,7 +16,8 @@
 
 namespace ndn {
 
-class SecPublicInfoSqlite3 : public SecPublicInfo {
+class SecPublicInfoSqlite3 : public SecPublicInfo
+{
 public:
   class Error : public SecPublicInfo::Error
   {
diff --git a/src/security/sec-public-info.hpp b/src/security/sec-public-info.hpp
index 99b4f57..ee32d05 100644
--- a/src/security/sec-public-info.hpp
+++ b/src/security/sec-public-info.hpp
@@ -23,7 +23,8 @@
  * It specify interfaces related to public information, such as identity, public keys and
  * certificates.
  */
-class SecPublicInfo {
+class SecPublicInfo
+{
 public:
   class Error : public std::runtime_error
   {
diff --git a/src/security/sec-tpm-file.cpp b/src/security/sec-tpm-file.cpp
index 5238ca4..ba3cca8 100644
--- a/src/security/sec-tpm-file.cpp
+++ b/src/security/sec-tpm-file.cpp
@@ -25,7 +25,8 @@
 
 namespace ndn {
 
-class SecTpmFile::Impl {
+class SecTpmFile::Impl
+{
 public:
   Impl(const string& dir)
   {
@@ -123,7 +124,7 @@
           throw Error("Unsupported key type!");
         }
     }
-  catch (const CryptoPP::Exception& e)
+  catch (CryptoPP::Exception& e)
     {
       throw Error(e.what());
     }
@@ -158,7 +159,7 @@
                  true,
                  new Base64Decoder(new FileSink(os)));
     }
-  catch (const CryptoPP::Exception& e)
+  catch (CryptoPP::Exception& e)
     {
       throw Error(e.what());
     }
@@ -191,7 +192,7 @@
                    new Base64Encoder(new FileSink(keyFileName.c_str())));
       return true;
     }
-  catch (const CryptoPP::Exception& e)
+  catch (CryptoPP::Exception& e)
     {
       return false;
     }
@@ -211,7 +212,7 @@
                    new Base64Encoder(new FileSink(keyFileName.c_str())));
       return true;
     }
-  catch (const CryptoPP::Exception& e)
+  catch (CryptoPP::Exception& e)
     {
       return false;
     }
@@ -258,7 +259,7 @@
           throw Error("Unsupported digest algorithm!");
         }
     }
-  catch (const CryptoPP::Exception& e)
+  catch (CryptoPP::Exception& e)
     {
       throw Error(e.what());
     }
@@ -294,7 +295,7 @@
 
   //       return os.buf();
   //     }
-  //     catch (const CryptoPP::Exception& e){
+  //     catch (CryptoPP::Exception& e){
   //       throw Error(e.what());
   //     }
   //   }
@@ -321,7 +322,7 @@
   //     // 	StringSource(data, dataLength, true, new StreamTransformationFilter(decryptor,new FileSink(os)));
   //     // 	return os.buf();
 
-  //     // }catch (const CryptoPP::Exception& e){
+  //     // }catch (CryptoPP::Exception& e){
   //     // 	throw Error(e.what());
   //     // }
   //   }
@@ -357,7 +358,7 @@
   //         StringSource(data, dataLength, true, new PK_EncryptorFilter(rng, encryptor, new FileSink(os)));
   //         return os.buf();
   //       }
-  //     catch (const CryptoPP::Exception& e){
+  //     catch (CryptoPP::Exception& e){
   //       throw Error(e.what());
   //     }
   //   }
@@ -383,7 +384,7 @@
   //     // 	OBufferStream os;
   //     // 	StringSource(data, dataLength, true, new StreamTransformationFilter(encryptor, new FileSink(os)));
   //     // 	return os.buf();
-  //     // }catch (const CryptoPP::Exception& e){
+  //     // }catch (CryptoPP::Exception& e){
   //     // 	throw Error(e.what());
   //     // }
   //   }
@@ -420,7 +421,7 @@
   //   default:
   //     throw Error("Unsupported symmetric key type!");
   //   }
-  // }catch (const CryptoPP::Exception& e){
+  // }catch (CryptoPP::Exception& e){
   //   throw Error(e.what());
   // }
 }
@@ -462,7 +463,7 @@
       rng.GenerateBlock(res, size);
       return true;
     }
-  catch (const CryptoPP::Exception& e)
+  catch (CryptoPP::Exception& e)
     {
       return false;
     }
diff --git a/src/security/sec-tpm-memory.cpp b/src/security/sec-tpm-memory.cpp
index 3475aa4..393a217 100644
--- a/src/security/sec-tpm-memory.cpp
+++ b/src/security/sec-tpm-memory.cpp
@@ -20,7 +20,8 @@
 /**
  * RsaPrivateKey is a simple class to hold an RSA private key.
  */
-class SecTpmMemory::RsaPrivateKey {
+class SecTpmMemory::RsaPrivateKey
+{
 public:
   RsaPrivateKey(const uint8_t* keyDer, size_t keyDerLength)
   {
@@ -175,7 +176,7 @@
       rng.GenerateBlock(res, size);
       return true;
     }
-  catch (const CryptoPP::Exception& e)
+  catch (CryptoPP::Exception& e)
     {
       return false;
     }
diff --git a/src/security/sec-tpm-memory.hpp b/src/security/sec-tpm-memory.hpp
index 61b1c8a..eb1613d 100644
--- a/src/security/sec-tpm-memory.hpp
+++ b/src/security/sec-tpm-memory.hpp
@@ -20,7 +20,8 @@
  *
  * You should initialize by calling setKeyPairForKeyName.
  */
-class SecTpmMemory : public SecTpm {
+class SecTpmMemory : public SecTpm
+{
 public:
   class Error : public SecTpm::Error
   {
diff --git a/src/security/sec-tpm-osx.cpp b/src/security/sec-tpm-osx.cpp
index d06cefe..fd21439 100644
--- a/src/security/sec-tpm-osx.cpp
+++ b/src/security/sec-tpm-osx.cpp
@@ -28,12 +28,14 @@
 
 namespace ndn {
 
-class SecTpmOsx::Impl {
+class SecTpmOsx::Impl
+{
 public:
   Impl()
     : m_passwordSet(false)
     , m_inTerminal(false)
-  {}
+  {
+  }
 
   /**
    * @brief Convert NDN name of a key to internal name of the key.
diff --git a/src/security/sec-tpm-osx.hpp b/src/security/sec-tpm-osx.hpp
index d6637ef..1a5bd1f 100644
--- a/src/security/sec-tpm-osx.hpp
+++ b/src/security/sec-tpm-osx.hpp
@@ -13,7 +13,8 @@
 
 namespace ndn {
 
-class SecTpmOsx : public SecTpm {
+class SecTpmOsx : public SecTpm
+{
 public:
   class Error : public SecTpm::Error
   {
diff --git a/src/security/sec-tpm.hpp b/src/security/sec-tpm.hpp
index 15f1770..14b5756 100644
--- a/src/security/sec-tpm.hpp
+++ b/src/security/sec-tpm.hpp
@@ -22,7 +22,8 @@
  *
  * It specifies the interfaces of private/secret key related operations.
  */
-class SecTpm {
+class SecTpm
+{
 public:
   class Error : public std::runtime_error
   {
diff --git a/src/security/signature-sha256-with-rsa.hpp b/src/security/signature-sha256-with-rsa.hpp
index 7e19a1e..f809709 100644
--- a/src/security/signature-sha256-with-rsa.hpp
+++ b/src/security/signature-sha256-with-rsa.hpp
@@ -15,8 +15,19 @@
 /**
  * Representing of SHA256-with-RSA signature in a data packet.
  */
-class SignatureSha256WithRsa : public Signature {
+class SignatureSha256WithRsa : public Signature
+{
 public:
+  class Error : public Signature::Error
+  {
+  public:
+    explicit
+    Error(const std::string& what)
+      : Signature::Error(what)
+    {
+    }
+  };
+
   SignatureSha256WithRsa()
   {
     m_info = Block(Tlv::SignatureInfo);
@@ -30,7 +41,7 @@
     : Signature(signature)
   {
     if (getType() != Signature::Sha256WithRsa)
-      throw Signature::Error("Incorrect signature type");
+      throw Error("Incorrect signature type");
 
     m_info.parse();
     Block::element_const_iterator i = m_info.find(Tlv::KeyLocator);
diff --git a/src/security/signature-sha256.hpp b/src/security/signature-sha256.hpp
index 8ef37a8..9200ac5 100644
--- a/src/security/signature-sha256.hpp
+++ b/src/security/signature-sha256.hpp
@@ -15,8 +15,19 @@
 /**
  * Representing of SHA256 signature in a data packet.
  */
-class SignatureSha256 : public Signature {
+class SignatureSha256 : public Signature
+{
 public:
+  class Error : public Signature::Error
+  {
+  public:
+    explicit
+    Error(const std::string& what)
+      : Signature::Error(what)
+    {
+    }
+  };
+
   SignatureSha256()
   {
     m_info = Block(Tlv::SignatureInfo);
@@ -29,7 +40,7 @@
     : Signature(signature)
   {
     if (getType() != Signature::Sha256)
-      throw Signature::Error("Incorrect signature type");
+      throw Error("Incorrect signature type");
   }
 };
 
diff --git a/src/security/validation-request.hpp b/src/security/validation-request.hpp
index 8846636..b525c27 100644
--- a/src/security/validation-request.hpp
+++ b/src/security/validation-request.hpp
@@ -27,7 +27,8 @@
                       const std::string&)> OnDataValidationFailed;
 
 
-class ValidationRequest {
+class ValidationRequest
+{
 public:
   ValidationRequest(const Interest& interest,
                     const OnDataValidated& onValidated,
diff --git a/src/security/validator-config.cpp b/src/security/validator-config.cpp
index 77d3354..4b430ce 100644
--- a/src/security/validator-config.cpp
+++ b/src/security/validator-config.cpp
@@ -70,7 +70,7 @@
     {
       boost::property_tree::read_info(input, tree);
     }
-  catch (const boost::property_tree::info_parser_error& error)
+  catch (boost::property_tree::info_parser_error& error)
     {
       std::stringstream msg;
       msg << "Failed to parse configuration file";
diff --git a/src/security/validator-null.hpp b/src/security/validator-null.hpp
index f389d4c..1bb6d01 100644
--- a/src/security/validator-null.hpp
+++ b/src/security/validator-null.hpp
@@ -13,7 +13,8 @@
 
 namespace ndn {
 
-class ValidatorNull : public Validator {
+class ValidatorNull : public Validator
+{
 public:
   virtual
   ~ValidatorNull()
diff --git a/src/security/validator-regex.cpp b/src/security/validator-regex.cpp
index 1eea45e..e9558c6 100644
--- a/src/security/validator-regex.cpp
+++ b/src/security/validator-regex.cpp
@@ -152,13 +152,13 @@
                   return;
                 }
             }
-          catch (const SignatureSha256WithRsa::Error& e)
+          catch (SignatureSha256WithRsa::Error& e)
             {
               return onValidationFailed(data.shared_from_this(),
                                         "Not SignatureSha256WithRsa signature: " +
                                         data.getName().toUri());
             }
-          catch (const KeyLocator::Error& e)
+          catch (KeyLocator::Error& e)
             {
               return onValidationFailed(data.shared_from_this(),
                                         "Key Locator is not a name: " +
diff --git a/src/security/validator.cpp b/src/security/validator.cpp
index 338ef9f..7f97926 100644
--- a/src/security/validator.cpp
+++ b/src/security/validator.cpp
@@ -142,7 +142,7 @@
           }
         }
     }
-  catch (const Signature::Error& e)
+  catch (Signature::Error& e)
     {
       return false;
     }
@@ -180,11 +180,11 @@
           }
         }
     }
-  catch (const Signature::Error& e)
+  catch (Signature::Error& e)
     {
       return false;
     }
-  catch (const Block::Error& e)
+  catch (Block::Error& e)
     {
       return false;
     }
@@ -209,7 +209,7 @@
           }
         }
     }
-  catch (const Signature::Error& e)
+  catch (Signature::Error& e)
     {
       return false;
     }
@@ -237,7 +237,7 @@
                                     sig.getValue().value(),
                                     sig.getValue().value_size());
     }
-  catch (const CryptoPP::Exception& e)
+  catch (CryptoPP::Exception& e)
     {
       return false;
     }
@@ -264,7 +264,7 @@
       else
         return false;
     }
-  catch (const CryptoPP::Exception& e)
+  catch (CryptoPP::Exception& e)
     {
       return false;
     }
diff --git a/src/security/validator.hpp b/src/security/validator.hpp
index 43ab01a..38a8db2 100644
--- a/src/security/validator.hpp
+++ b/src/security/validator.hpp
@@ -24,7 +24,8 @@
  *
  * The Validator class provides the interfaces for packet validation.
  */
-class Validator {
+class Validator
+{
 public:
   class Error : public std::runtime_error
   {
