diff --git a/src/mgmt/nfd/control-command.hpp b/src/mgmt/nfd/control-command.hpp
index 7544156..1db9f13 100644
--- a/src/mgmt/nfd/control-command.hpp
+++ b/src/mgmt/nfd/control-command.hpp
@@ -144,13 +144,13 @@
 public:
   FaceCreateCommand();
 
-  virtual void
+  void
   applyDefaultsToRequest(ControlParameters& parameters) const override;
 
-  virtual void
+  void
   validateRequest(const ControlParameters& parameters) const override;
 
-  virtual void
+  void
   validateResponse(const ControlParameters& parameters) const override;
 };
 
@@ -165,17 +165,17 @@
 public:
   FaceUpdateCommand();
 
-  virtual void
+  void
   applyDefaultsToRequest(ControlParameters& parameters) const override;
 
-  virtual void
+  void
   validateRequest(const ControlParameters& parameters) const override;
 
   /**
    * \note This can only validate ControlParameters in a success response.
    *       Failure responses should be validated with validateRequest.
    */
-  virtual void
+  void
   validateResponse(const ControlParameters& parameters) const override;
 };
 
@@ -190,10 +190,10 @@
 public:
   FaceDestroyCommand();
 
-  virtual void
+  void
   validateRequest(const ControlParameters& parameters) const override;
 
-  virtual void
+  void
   validateResponse(const ControlParameters& parameters) const override;
 };
 
@@ -205,10 +205,10 @@
 class FaceLocalControlCommand : public ControlCommand
 {
 public:
-  virtual void
+  void
   validateRequest(const ControlParameters& parameters) const override;
 
-  virtual void
+  void
   validateResponse(const ControlParameters& parameters) const override;
 
 protected:
@@ -251,10 +251,10 @@
 public:
   FibAddNextHopCommand();
 
-  virtual void
+  void
   applyDefaultsToRequest(ControlParameters& parameters) const override;
 
-  virtual void
+  void
   validateResponse(const ControlParameters& parameters) const override;
 };
 
@@ -269,10 +269,10 @@
 public:
   FibRemoveNextHopCommand();
 
-  virtual void
+  void
   applyDefaultsToRequest(ControlParameters& parameters) const override;
 
-  virtual void
+  void
   validateResponse(const ControlParameters& parameters) const override;
 };
 
@@ -299,10 +299,10 @@
 public:
   StrategyChoiceUnsetCommand();
 
-  virtual void
+  void
   validateRequest(const ControlParameters& parameters) const override;
 
-  virtual void
+  void
   validateResponse(const ControlParameters& parameters) const override;
 };
 
@@ -317,10 +317,10 @@
 public:
   RibRegisterCommand();
 
-  virtual void
+  void
   applyDefaultsToRequest(ControlParameters& parameters) const override;
 
-  virtual void
+  void
   validateResponse(const ControlParameters& parameters) const override;
 };
 
@@ -335,10 +335,10 @@
 public:
   RibUnregisterCommand();
 
-  virtual void
+  void
   applyDefaultsToRequest(ControlParameters& parameters) const override;
 
-  virtual void
+  void
   validateResponse(const ControlParameters& parameters) const override;
 };
 
diff --git a/src/mgmt/nfd/control-parameters.hpp b/src/mgmt/nfd/control-parameters.hpp
index d57c75d..a798459 100644
--- a/src/mgmt/nfd/control-parameters.hpp
+++ b/src/mgmt/nfd/control-parameters.hpp
@@ -99,10 +99,10 @@
   size_t
   wireEncode(EncodingImpl<TAG>& encoder) const;
 
-  virtual Block
+  Block
   wireEncode() const final;
 
-  virtual void
+  void
   wireDecode(const Block& wire) final;
 
 public: // getters & setters
diff --git a/src/mgmt/nfd/status-dataset.hpp b/src/mgmt/nfd/status-dataset.hpp
index 9eb43d4..09c1e14 100644
--- a/src/mgmt/nfd/status-dataset.hpp
+++ b/src/mgmt/nfd/status-dataset.hpp
@@ -170,7 +170,7 @@
   FaceQueryDataset(const FaceQueryFilter& filter);
 
 private:
-  virtual void
+  void
   addParameters(Name& name) const override;
 
 private:
diff --git a/src/security/command-interest-validator.hpp b/src/security/command-interest-validator.hpp
index e789f09..c377142 100644
--- a/src/security/command-interest-validator.hpp
+++ b/src/security/command-interest-validator.hpp
@@ -88,7 +88,6 @@
      *  and causes every command Interest to be processed as initial.
      */
     time::nanoseconds timestampTtl = time::hours(1);
-
   };
 
   /** \brief error codes
@@ -129,7 +128,7 @@
    *
    *  The validation request is rejected if any step in this procedure fails.
    */
-  virtual void
+  void
   checkPolicy(const Interest& interest, int nSteps,
               const OnInterestValidated& accept,
               const OnInterestValidationFailed& reject,
@@ -139,7 +138,7 @@
    *
    *  The validation request is redirected to the inner validator.
    */
-  virtual void
+  void
   checkPolicy(const Data& data, int nSteps,
               const OnDataValidated& accept,
               const OnDataValidationFailed& reject,
diff --git a/src/security/conf/checker.hpp b/src/security/conf/checker.hpp
index c4ec3ca..0bed1a9 100644
--- a/src/security/conf/checker.hpp
+++ b/src/security/conf/checker.hpp
@@ -104,13 +104,13 @@
     }
   }
 
-  virtual int8_t
+  int8_t
   check(const Data& data) override
   {
     return check(data, data.getSignature());
   }
 
-  virtual int8_t
+  int8_t
   check(const Interest& interest) override
   {
     try {
@@ -211,13 +211,13 @@
     }
   }
 
-  virtual int8_t
+  int8_t
   check(const Data& data) override
   {
     return check(data, data.getSignature());
   }
 
-  virtual int8_t
+  int8_t
   check(const Interest& interest) override
   {
     try {
diff --git a/src/security/pib-memory.hpp b/src/security/pib-memory.hpp
index 1a859ce..50da3dd 100644
--- a/src/security/pib-memory.hpp
+++ b/src/security/pib-memory.hpp
@@ -51,76 +51,76 @@
 
 public: // TpmLocator management
 
-  virtual void
+  void
   setTpmLocator(const std::string& tpmLocator) override;
 
-  virtual std::string
+  std::string
   getTpmLocator() const override;
 
 public: // Identity management
 
-  virtual bool
+  bool
   hasIdentity(const Name& identity) const override;
 
-  virtual void
+  void
   addIdentity(const Name& identity) override;
 
-  virtual void
+  void
   removeIdentity(const Name& identity) override;
 
-  virtual std::set<Name>
+  std::set<Name>
   getIdentities() const override;
 
-  virtual void
+  void
   setDefaultIdentity(const Name& identityName) override;
 
-  virtual Name
+  Name
   getDefaultIdentity() const override;
 
 public: // Key management
 
-  virtual bool
+  bool
   hasKey(const Name& identity, const name::Component& keyId) const override;
 
-  virtual void
+  void
   addKey(const Name& identity, const name::Component& keyId, const v1::PublicKey& publicKey) override;
 
-  virtual void
+  void
   removeKey(const Name& identity, const name::Component& keyId) override;
 
-  virtual v1::PublicKey
+  v1::PublicKey
   getKeyBits(const Name& identity, const name::Component& keyId) const override;
 
-  virtual std::set<name::Component>
+  std::set<name::Component>
   getKeysOfIdentity(const Name& identity) const override;
 
-  virtual void
+  void
   setDefaultKeyOfIdentity(const Name& identity, const name::Component& keyId) override;
 
-  virtual name::Component
+  name::Component
   getDefaultKeyOfIdentity(const Name& identity) const override;
 
 public: // Certificate management
 
-  virtual bool
+  bool
   hasCertificate(const Name& certName) const override;
 
-  virtual void
+  void
   addCertificate(const v1::IdentityCertificate& certificate) override;
 
-  virtual void
+  void
   removeCertificate(const Name& certName) override;
 
-  virtual v1::IdentityCertificate
+  v1::IdentityCertificate
   getCertificate(const Name& certName) const override;
 
-  virtual std::set<Name>
+  std::set<Name>
   getCertificatesOfKey(const Name& identity, const name::Component& keyId) const override;
 
-  virtual void
+  void
   setDefaultCertificateOfKey(const Name& identity, const name::Component& keyId, const Name& certName) override;
 
-  virtual v1::IdentityCertificate
+  v1::IdentityCertificate
   getDefaultCertificateOfKey(const Name& identity, const name::Component& keyId) const override;
 
 private: // Key management
diff --git a/src/security/pib-sqlite3.hpp b/src/security/pib-sqlite3.hpp
index f8665c5..9093957 100644
--- a/src/security/pib-sqlite3.hpp
+++ b/src/security/pib-sqlite3.hpp
@@ -60,77 +60,77 @@
 
 public: // TpmLocator management
 
-  virtual void
+  void
   setTpmLocator(const std::string& tpmLocator) final;
 
-  virtual std::string
+  std::string
   getTpmLocator() const final;
 
 public: // Identity management
 
-  virtual bool
+  bool
   hasIdentity(const Name& identity) const final;
 
-  virtual void
+  void
   addIdentity(const Name& identity) final;
 
-  virtual void
+  void
   removeIdentity(const Name& identity) final;
 
-  virtual std::set<Name>
+  std::set<Name>
   getIdentities() const final;
 
-  virtual void
+  void
   setDefaultIdentity(const Name& identityName) final;
 
-  virtual Name
+  Name
   getDefaultIdentity() const final;
 
 public: // Key management
 
-  virtual bool
+  bool
   hasKey(const Name& identity, const name::Component& keyId) const final;
 
-  virtual void
+  void
   addKey(const Name& identity, const name::Component& keyId, const v1::PublicKey& publicKey) final;
 
-  virtual void
+  void
   removeKey(const Name& identity, const name::Component& keyId) final;
 
-  virtual v1::PublicKey
+  v1::PublicKey
   getKeyBits(const Name& identity, const name::Component& keyId) const final;
 
-  virtual std::set<name::Component>
+  std::set<name::Component>
   getKeysOfIdentity(const Name& identity) const final;
 
-  virtual void
+  void
   setDefaultKeyOfIdentity(const Name& identity, const name::Component& keyId) final;
 
-  virtual name::Component
+  name::Component
   getDefaultKeyOfIdentity(const Name& identity) const final;
 
 public: // Certificate Management
 
-  virtual bool
+  bool
   hasCertificate(const Name& certName) const final;
 
-  virtual void
+  void
   addCertificate(const v1::IdentityCertificate& certificate) final;
 
-  virtual void
+  void
   removeCertificate(const Name& certName) final;
 
-  virtual v1::IdentityCertificate
+  v1::IdentityCertificate
   getCertificate(const Name& certName) const final;
 
-  virtual std::set<Name>
+  std::set<Name>
   getCertificatesOfKey(const Name& identity, const name::Component& keyId) const final;
 
-  virtual void
+  void
   setDefaultCertificateOfKey(const Name& identity, const name::Component& keyId,
                              const Name& certName) final;
 
-  virtual v1::IdentityCertificate
+  v1::IdentityCertificate
   getDefaultCertificateOfKey(const Name& identity, const name::Component& keyId) const final;
 
 private:
diff --git a/src/security/transform/base64-decode.hpp b/src/security/transform/base64-decode.hpp
index cfd5876..0ef0a46 100644
--- a/src/security/transform/base64-decode.hpp
+++ b/src/security/transform/base64-decode.hpp
@@ -49,7 +49,7 @@
   /**
    * @brief Read partial transformation results into output buffer and write them into next module.
    */
-  virtual void
+  void
   preTransform() final;
 
   /**
@@ -57,7 +57,7 @@
    *
    * @return number of bytes that have been accepted by the converter
    */
-  virtual size_t
+  size_t
   convert(const uint8_t* buf, size_t size) final;
 
   /**
@@ -65,7 +65,7 @@
    *
    * This method with read all decoding results from the converter and write them into next module.
    */
-  virtual void
+  void
   finalize() final;
 
   /**
diff --git a/src/security/transform/base64-encode.hpp b/src/security/transform/base64-encode.hpp
index ac9c664..7e9d99d 100644
--- a/src/security/transform/base64-encode.hpp
+++ b/src/security/transform/base64-encode.hpp
@@ -46,14 +46,14 @@
   /**
    * @brief Read partial transformation result (if exists) from BIO
    */
-  virtual void
+  void
   preTransform() final;
 
   /**
-   * @brief Encode @data into base64 format.
+   * @brief Encode @p data into base64 format.
    * @return The number of input bytes that have been accepted by the converter.
    */
-  virtual size_t
+  size_t
   convert(const uint8_t* data, size_t dataLen) final;
 
   /**
@@ -61,7 +61,7 @@
    *
    * This method with read all encoding results from the converter and write them into next module.
    */
-  virtual void
+  void
   finalize() final;
 
   /**
diff --git a/src/security/transform/block-cipher.hpp b/src/security/transform/block-cipher.hpp
index dd67858..885bd43 100644
--- a/src/security/transform/block-cipher.hpp
+++ b/src/security/transform/block-cipher.hpp
@@ -56,7 +56,7 @@
   /**
    * @brief Read partial transformation result (if exists) from BIO
    */
-  virtual void
+  void
   preTransform() final;
 
   /**
@@ -64,13 +64,13 @@
    *
    * @return number of bytes that are actually accepted
    */
-  virtual size_t
+  size_t
   convert(const uint8_t* data, size_t dataLen) final;
 
   /**
    * @brief Finalize the encryption
    */
-  virtual void
+  void
   finalize() final;
 
   /**
diff --git a/src/security/transform/bool-sink.hpp b/src/security/transform/bool-sink.hpp
index 12e62c9..d7d02e3 100644
--- a/src/security/transform/bool-sink.hpp
+++ b/src/security/transform/bool-sink.hpp
@@ -49,13 +49,13 @@
    *
    * @return the same value as @p size.
    */
-  virtual size_t
+  size_t
   doWrite(const uint8_t* buf, size_t size) final;
 
   /**
    * @brief Finalize sink processing
    */
-  virtual void
+  void
   doEnd() final;
 
 private:
diff --git a/src/security/transform/buffer-source.hpp b/src/security/transform/buffer-source.hpp
index 0833a0f..c091d98 100644
--- a/src/security/transform/buffer-source.hpp
+++ b/src/security/transform/buffer-source.hpp
@@ -62,7 +62,7 @@
   /**
    * @brief Write the whole buffer into the next module.
    */
-  virtual void
+  void
   doPump() final;
 
 private:
diff --git a/src/security/transform/digest-filter.hpp b/src/security/transform/digest-filter.hpp
index 935899f..952c4a7 100644
--- a/src/security/transform/digest-filter.hpp
+++ b/src/security/transform/digest-filter.hpp
@@ -47,13 +47,13 @@
    *
    * @return The number of bytes that have been accepted
    */
-  virtual size_t
+  size_t
   convert(const uint8_t* buf, size_t size) final;
 
   /**
    * @brief Finalize digest calculation and write the digest into next module.
    */
-  virtual void
+  void
   finalize() final;
 
 private:
diff --git a/src/security/transform/hex-decode.hpp b/src/security/transform/hex-decode.hpp
index 77d477d..5601ca4 100644
--- a/src/security/transform/hex-decode.hpp
+++ b/src/security/transform/hex-decode.hpp
@@ -50,13 +50,13 @@
    *
    * @return number of input bytes that are accepted
    */
-  virtual size_t
+  size_t
   convert(const uint8_t* buf, size_t size) final;
 
   /**
    * @throws Error if pending byte exists.
    */
-  virtual void
+  void
   finalize() final;
 
   /**
diff --git a/src/security/transform/hex-encode.hpp b/src/security/transform/hex-encode.hpp
index 95fc6e8..14a9b41 100644
--- a/src/security/transform/hex-encode.hpp
+++ b/src/security/transform/hex-encode.hpp
@@ -51,7 +51,7 @@
    *
    * @return The number of input bytes that have been accepted by the converter.
    */
-  virtual size_t
+  size_t
   convert(const uint8_t* data, size_t dataLen) final;
 
   /**
diff --git a/src/security/transform/hmac-filter.hpp b/src/security/transform/hmac-filter.hpp
index 5409952..0cec1fd 100644
--- a/src/security/transform/hmac-filter.hpp
+++ b/src/security/transform/hmac-filter.hpp
@@ -48,13 +48,13 @@
    *
    * @return The number of bytes that are actually accepted
    */
-  virtual size_t
+  size_t
   convert(const uint8_t* buf, size_t size) final;
 
   /**
    * @brief Finalize HMAC calculation and write the HMAC into next module.
    */
-  virtual void
+  void
   finalize() final;
 
 private:
diff --git a/src/security/transform/signer-filter.hpp b/src/security/transform/signer-filter.hpp
index 8db11f3..dc4ffff 100644
--- a/src/security/transform/signer-filter.hpp
+++ b/src/security/transform/signer-filter.hpp
@@ -47,13 +47,13 @@
    *
    * @return The number of bytes that are actually accepted
    */
-  virtual size_t
+  size_t
   convert(const uint8_t* buf, size_t size) final;
 
   /**
    * @brief Finalize signing and write the signature into next module.
    */
-  virtual void
+  void
   finalize() final;
 
 private:
diff --git a/src/security/transform/step-source.hpp b/src/security/transform/step-source.hpp
index 76388f7..a017fc6 100644
--- a/src/security/transform/step-source.hpp
+++ b/src/security/transform/step-source.hpp
@@ -68,9 +68,8 @@
    *
    * use write() and end() method explicitly to input data.
    */
-  virtual void
+  void
   doPump() final;
-
 };
 
 typedef StepSource stepSource;
diff --git a/src/security/transform/stream-sink.hpp b/src/security/transform/stream-sink.hpp
index ed41cbd..f384dc4 100644
--- a/src/security/transform/stream-sink.hpp
+++ b/src/security/transform/stream-sink.hpp
@@ -47,13 +47,13 @@
    *
    * @return number of bytes that have been written into the stream
    */
-  virtual size_t
+  size_t
   doWrite(const uint8_t* buf, size_t size) final;
 
   /**
    * @brief Finalize sink processing
    */
-  virtual void
+  void
   doEnd() final;
 
 private:
diff --git a/src/security/transform/stream-source.hpp b/src/security/transform/stream-source.hpp
index b818fe7..5dcefdd 100644
--- a/src/security/transform/stream-source.hpp
+++ b/src/security/transform/stream-source.hpp
@@ -49,7 +49,7 @@
   /**
    * @brief Read bytes from the input stream until EOF is reached and write them into the next module.
    */
-  virtual void
+  void
   doPump() final;
 
 public:
diff --git a/src/security/transform/strip-space.hpp b/src/security/transform/strip-space.hpp
index 7cc4dc8..d0e50aa 100644
--- a/src/security/transform/strip-space.hpp
+++ b/src/security/transform/strip-space.hpp
@@ -44,7 +44,7 @@
   StripSpace(const char* whitespaces = DEFAULT_WHITESPACES);
 
 private:
-  virtual size_t
+  size_t
   convert(const uint8_t* buf, size_t buflen) final;
 
 private:
diff --git a/src/security/transform/transform-base.hpp b/src/security/transform/transform-base.hpp
index 94fd43c..a06f0b1 100644
--- a/src/security/transform/transform-base.hpp
+++ b/src/security/transform/transform-base.hpp
@@ -222,7 +222,7 @@
   /**
    * @brief Abstraction of data processing in an intermediate module
    */
-  virtual size_t
+  size_t
   doWrite(const uint8_t* data, size_t dataLen) final;
 
   /**
@@ -230,7 +230,7 @@
    *
    * This method will not return until all transformation result is written into next module
    */
-  virtual void
+  void
   doEnd() final;
 
   /**
diff --git a/src/security/transform/verifier-filter.hpp b/src/security/transform/verifier-filter.hpp
index ee69f03..7fed9fc 100644
--- a/src/security/transform/verifier-filter.hpp
+++ b/src/security/transform/verifier-filter.hpp
@@ -49,13 +49,13 @@
    *
    * @return The number of bytes that are actually written
    */
-  virtual size_t
+  size_t
   convert(const uint8_t* buf, size_t size) final;
 
   /**
    * @brief Finalize verification and write the result (single byte) into next module.
    */
-  virtual void
+  void
   finalize() final;
 
 private:
diff --git a/src/security/validator-config.hpp b/src/security/validator-config.hpp
index a477325..2a5fac9 100644
--- a/src/security/validator-config.hpp
+++ b/src/security/validator-config.hpp
@@ -90,14 +90,14 @@
   isEmpty();
 
 protected:
-  virtual void
+  void
   checkPolicy(const Data& data,
               int nSteps,
               const OnDataValidated& onValidated,
               const OnDataValidationFailed& onValidationFailed,
               std::vector<shared_ptr<ValidationRequest>>& nextSteps) override;
 
-  virtual void
+  void
   checkPolicy(const Interest& interest,
               int nSteps,
               const OnInterestValidated& onValidated,
diff --git a/src/transport/tcp-transport.hpp b/src/transport/tcp-transport.hpp
index eb7878b..57004bc 100644
--- a/src/transport/tcp-transport.hpp
+++ b/src/transport/tcp-transport.hpp
@@ -49,25 +49,25 @@
   explicit
   TcpTransport(const std::string& host, const std::string& port = "6363");
 
-  ~TcpTransport();
+  ~TcpTransport() override;
 
-  virtual void
+  void
   connect(boost::asio::io_service& ioService,
           const ReceiveCallback& receiveCallback) override;
 
-  virtual void
+  void
   close() override;
 
-  virtual void
+  void
   pause() override;
 
-  virtual void
+  void
   resume() override;
 
-  virtual void
+  void
   send(const Block& wire) override;
 
-  virtual void
+  void
   send(const Block& header, const Block& payload) override;
 
   /** \brief Create transport with parameters defined in URI
diff --git a/src/transport/unix-transport.hpp b/src/transport/unix-transport.hpp
index 99d8688..ec73488 100644
--- a/src/transport/unix-transport.hpp
+++ b/src/transport/unix-transport.hpp
@@ -46,25 +46,25 @@
   explicit
   UnixTransport(const std::string& unixSocket);
 
-  ~UnixTransport();
+  ~UnixTransport() override;
 
-  virtual void
+  void
   connect(boost::asio::io_service& ioService,
           const ReceiveCallback& receiveCallback) override;
 
-  virtual void
+  void
   close() override;
 
-  virtual void
+  void
   pause() override;
 
-  virtual void
+  void
   resume() override;
 
-  virtual void
+  void
   send(const Block& wire) override;
 
-  virtual void
+  void
   send(const Block& header, const Block& payload) override;
 
   /** \brief Create transport with parameters defined in URI
diff --git a/src/util/dummy-client-face.cpp b/src/util/dummy-client-face.cpp
index 911d3bb..f6150b3 100644
--- a/src/util/dummy-client-face.cpp
+++ b/src/util/dummy-client-face.cpp
@@ -43,28 +43,28 @@
     }
   }
 
-  virtual void
+  void
   close() override
   {
   }
 
-  virtual void
+  void
   pause() override
   {
   }
 
-  virtual void
+  void
   resume() override
   {
   }
 
-  virtual void
+  void
   send(const Block& wire) override
   {
     onSendBlock(wire);
   }
 
-  virtual void
+  void
   send(const Block& header, const Block& payload) override
   {
     EncodingBuffer encoder(header.size() + payload.size(), header.size() + payload.size());
diff --git a/src/util/dummy-client-face.hpp b/src/util/dummy-client-face.hpp
index 7d661a7..41d843e 100644
--- a/src/util/dummy-client-face.hpp
+++ b/src/util/dummy-client-face.hpp
@@ -111,7 +111,7 @@
   void
   enableRegistrationReply();
 
-  virtual void
+  void
   doProcessEvents(const time::milliseconds& timeout, bool keepThread) override;
 
 public:
diff --git a/src/util/face-uri.cpp b/src/util/face-uri.cpp
index acdbc11..fea4e16 100644
--- a/src/util/face-uri.cpp
+++ b/src/util/face-uri.cpp
@@ -241,7 +241,7 @@
 class IpHostCanonizeProvider : public CanonizeProvider
 {
 public:
-  virtual std::set<std::string>
+  std::set<std::string>
   getSchemes() const override
   {
     std::set<std::string> schemes;
@@ -251,7 +251,7 @@
     return schemes;
   }
 
-  virtual bool
+  bool
   isCanonical(const FaceUri& faceUri) const override
   {
     if (faceUri.getPort().empty()) {
@@ -276,7 +276,7 @@
            this->checkAddress(addr).first;
   }
 
-  virtual void
+  void
   canonize(const FaceUri& faceUri,
            const FaceUri::CanonizeSuccessCallback& onSuccess,
            const FaceUri::CanonizeFailureCallback& onFailure,
@@ -402,7 +402,7 @@
   }
 
 protected:
-  virtual std::pair<bool, std::string>
+  std::pair<bool, std::string>
   checkAddress(const dns::IpAddress& ipAddress) const override
   {
     if (ipAddress.is_multicast()) {
@@ -415,7 +415,7 @@
 class EtherCanonizeProvider : public CanonizeProvider
 {
 public:
-  virtual std::set<std::string>
+  std::set<std::string>
   getSchemes() const override
   {
     std::set<std::string> schemes;
@@ -423,7 +423,7 @@
     return schemes;
   }
 
-  virtual bool
+  bool
   isCanonical(const FaceUri& faceUri) const override
   {
     if (!faceUri.getPort().empty()) {
@@ -437,7 +437,7 @@
     return addr.toString() == faceUri.getHost();
   }
 
-  virtual void
+  void
   canonize(const FaceUri& faceUri,
            const FaceUri::CanonizeSuccessCallback& onSuccess,
            const FaceUri::CanonizeFailureCallback& onFailure,
@@ -458,13 +458,13 @@
 class UdpDevCanonizeProvider : public CanonizeProvider
 {
 public:
-  virtual std::set<std::string>
+  std::set<std::string>
   getSchemes() const override
   {
     return {"udp4+dev", "udp6+dev"};
   }
 
-  virtual bool
+  bool
   isCanonical(const FaceUri& faceUri) const override
   {
     if (faceUri.getPort().empty()) {
@@ -476,7 +476,7 @@
     return true;
   }
 
-  virtual void
+  void
   canonize(const FaceUri& faceUri,
            const FaceUri::CanonizeSuccessCallback& onSuccess,
            const FaceUri::CanonizeFailureCallback& onFailure,
diff --git a/src/util/in-memory-storage-fifo.hpp b/src/util/in-memory-storage-fifo.hpp
index 3710284..2bc1880 100644
--- a/src/util/in-memory-storage-fifo.hpp
+++ b/src/util/in-memory-storage-fifo.hpp
@@ -47,18 +47,18 @@
   /** @brief Removes one Data packet from in-memory storage based on FIFO
    *  @return{ whether the Data was removed }
    */
-  virtual bool
+  bool
   evictItem() override;
 
   /** @brief Update the entry after a entry is successfully inserted, add it to the cleanupIndex
    */
-  virtual void
+  void
   afterInsert(InMemoryStorageEntry* entry) override;
 
   /** @brief Update the entry or other data structures before a entry is successfully erased,
    *  erase it from the cleanupIndex
    */
-  virtual void
+  void
   beforeErase(InMemoryStorageEntry* entry) override;
 
 private:
diff --git a/src/util/in-memory-storage-lfu.hpp b/src/util/in-memory-storage-lfu.hpp
index d866a29..8a21d4c 100644
--- a/src/util/in-memory-storage-lfu.hpp
+++ b/src/util/in-memory-storage-lfu.hpp
@@ -51,24 +51,24 @@
    *  frequently accessed Data packet
    *  @return{ whether the Data was removed }
    */
-  virtual bool
+  bool
   evictItem() override;
 
   /** @brief Update the entry when the entry is returned by the find() function,
    *  increment the frequency according to LFU
    */
-  virtual void
+  void
   afterAccess(InMemoryStorageEntry* entry) override;
 
   /** @brief Update the entry after a entry is successfully inserted, add it to the cleanupIndex
    */
-  virtual void
+  void
   afterInsert(InMemoryStorageEntry* entry) override;
 
   /** @brief Update the entry or other data structures before a entry is successfully erased,
    *  erase it from the cleanupIndex
    */
-  virtual void
+  void
   beforeErase(InMemoryStorageEntry* entry) override;
 
 private:
diff --git a/src/util/in-memory-storage-lru.hpp b/src/util/in-memory-storage-lru.hpp
index 4787398..48b79a8 100644
--- a/src/util/in-memory-storage-lru.hpp
+++ b/src/util/in-memory-storage-lru.hpp
@@ -49,24 +49,24 @@
    *  recently accessed Data packet
    *  @return{ whether the Data was removed }
    */
-  virtual bool
+  bool
   evictItem() override;
 
   /** @brief Update the entry when the entry is returned by the find() function,
    *  update the last used time according to LRU
    */
-  virtual void
+  void
   afterAccess(InMemoryStorageEntry* entry) override;
 
   /** @brief Update the entry after a entry is successfully inserted, add it to the cleanupIndex
    */
-  virtual void
+  void
   afterInsert(InMemoryStorageEntry* entry) override;
 
   /** @brief Update the entry or other data structures before a entry is successfully erased,
    *  erase it from the cleanupIndex
    */
-  virtual void
+  void
   beforeErase(InMemoryStorageEntry* entry) override;
 
 private:
diff --git a/src/util/in-memory-storage-persistent.hpp b/src/util/in-memory-storage-persistent.hpp
index 3265f52..7e1a977 100644
--- a/src/util/in-memory-storage-persistent.hpp
+++ b/src/util/in-memory-storage-persistent.hpp
@@ -45,7 +45,7 @@
    *
    *  @return false
    */
-  virtual bool
+  bool
   evictItem() override;
 };
 
diff --git a/src/util/indented-stream.hpp b/src/util/indented-stream.hpp
index 31e5839..32b60e8 100644
--- a/src/util/indented-stream.hpp
+++ b/src/util/indented-stream.hpp
@@ -56,7 +56,6 @@
 public:
   IndentedStream(std::ostream& os, const std::string& indent);
 
-  virtual
   ~IndentedStream() override;
 
 private:
@@ -66,7 +65,7 @@
   public:
     StreamBuf(std::ostream& os, const std::string& indent);
 
-    virtual int
+    int
     sync() override;
 
   private:
diff --git a/src/util/notification-subscriber.hpp b/src/util/notification-subscriber.hpp
index bc7345c..9b86fe1 100644
--- a/src/util/notification-subscriber.hpp
+++ b/src/util/notification-subscriber.hpp
@@ -190,13 +190,13 @@
   signal::Signal<NotificationSubscriber, Notification> onNotification;
 
 private:
-  virtual bool
+  bool
   hasSubscriber() const override
   {
     return !onNotification.isEmpty();
   }
 
-  virtual bool
+  bool
   decodeAndDeliver(const Data& data) override
   {
     Notification notification;
diff --git a/src/util/time-unit-test-clock.hpp b/src/util/time-unit-test-clock.hpp
index 253e1e7..f099b84 100644
--- a/src/util/time-unit-test-clock.hpp
+++ b/src/util/time-unit-test-clock.hpp
@@ -89,13 +89,13 @@
   setNow(const nanoseconds& timeSinceEpoch);
 
 public: // CustomClock<BaseClock>
-  virtual std::string
+  std::string
   getSince() const override;
 
-  virtual typename BaseClock::time_point
+  typename BaseClock::time_point
   getNow() const override;
 
-  virtual boost::posix_time::time_duration
+  boost::posix_time::time_duration
   toPosixDuration(const typename BaseClock::duration& duration) const override;
 
 private:
