diff --git a/daemon/face/datagram-transport.hpp b/daemon/face/datagram-transport.hpp
index 069a9ba..2f76353 100644
--- a/daemon/face/datagram-transport.hpp
+++ b/daemon/face/datagram-transport.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -62,10 +62,10 @@
 
 protected:
   virtual void
-  doClose() DECL_OVERRIDE;
+  doClose() override;
 
   virtual void
-  doSend(Transport::Packet&& packet) DECL_OVERRIDE;
+  doSend(Transport::Packet&& packet) override;
 
   void
   handleSend(const boost::system::error_code& error,
diff --git a/daemon/face/ethernet-factory.hpp b/daemon/face/ethernet-factory.hpp
index add176e..b44c2b7 100644
--- a/daemon/face/ethernet-factory.hpp
+++ b/daemon/face/ethernet-factory.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -80,10 +80,10 @@
   createFace(const FaceUri& uri,
              ndn::nfd::FacePersistency persistency,
              const FaceCreatedCallback& onCreated,
-             const FaceCreationFailedCallback& onConnectFailed) DECL_OVERRIDE;
+             const FaceCreationFailedCallback& onConnectFailed) override;
 
   virtual std::vector<shared_ptr<const Channel>>
-  getChannels() const DECL_OVERRIDE;
+  getChannels() const override;
 
 private:
   /**
diff --git a/daemon/face/ethernet-transport.hpp b/daemon/face/ethernet-transport.hpp
index 1d41008..348cabf 100644
--- a/daemon/face/ethernet-transport.hpp
+++ b/daemon/face/ethernet-transport.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -45,7 +45,7 @@
 /**
  * \brief A multicast Transport that uses raw Ethernet II frames
  */
-class EthernetTransport DECL_CLASS_FINAL : public Transport
+class EthernetTransport final : public Transport
 {
 public:
   class Error : public std::runtime_error
@@ -66,14 +66,14 @@
 
 protected:
   virtual void
-  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) DECL_FINAL;
+  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) final;
 
   virtual void
-  doClose() DECL_FINAL;
+  doClose() final;
 
 private:
   virtual void
-  doSend(Transport::Packet&& packet) DECL_FINAL;
+  doSend(Transport::Packet&& packet) final;
 
   /**
    * @brief Allocates and initializes a libpcap context for live capture
diff --git a/daemon/face/face.hpp b/daemon/face/face.hpp
index 2b56fec..2dccbd1 100644
--- a/daemon/face/face.hpp
+++ b/daemon/face/face.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -66,7 +66,7 @@
  */
 class Face
 #ifndef WITH_TESTS
-DECL_CLASS_FINAL
+final
 #endif
   : public enable_shared_from_this<Face>, noncopyable
 {
diff --git a/daemon/face/generic-link-service.hpp b/daemon/face/generic-link-service.hpp
index 8afc693..dde6990 100644
--- a/daemon/face/generic-link-service.hpp
+++ b/daemon/face/generic-link-service.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -127,23 +127,23 @@
   setOptions(const Options& options);
 
   virtual const Counters&
-  getCounters() const DECL_OVERRIDE;
+  getCounters() const override;
 
 private: // send path
   /** \brief send Interest
    */
   void
-  doSendInterest(const Interest& interest) DECL_OVERRIDE;
+  doSendInterest(const Interest& interest) override;
 
   /** \brief send Data
    */
   void
-  doSendData(const Data& data) DECL_OVERRIDE;
+  doSendData(const Data& data) override;
 
   /** \brief send Nack
    */
   void
-  doSendNack(const ndn::lp::Nack& nack) DECL_OVERRIDE;
+  doSendNack(const ndn::lp::Nack& nack) override;
 
   /** \brief encode local fields from tags onto outgoing LpPacket
    *  \param pkt LpPacket containing a complete network layer packet
@@ -171,7 +171,7 @@
   /** \brief receive Packet from Transport
    */
   void
-  doReceivePacket(Transport::Packet&& packet) DECL_OVERRIDE;
+  doReceivePacket(Transport::Packet&& packet) override;
 
   /** \brief decode incoming network-layer packet
    *  \param netPkt reassembled network-layer packet
diff --git a/daemon/face/internal-transport.hpp b/daemon/face/internal-transport.hpp
index 53bd379..61a12e7 100644
--- a/daemon/face/internal-transport.hpp
+++ b/daemon/face/internal-transport.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -59,18 +59,18 @@
                              ndn::nfd::LinkType linkType = ndn::nfd::LINK_TYPE_POINT_TO_POINT);
 
   virtual void
-  receiveFromLink(const Block& packet) DECL_OVERRIDE;
+  receiveFromLink(const Block& packet) override;
 
 protected:
   virtual void
-  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) DECL_OVERRIDE;
+  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) override;
 
   virtual void
-  doClose() DECL_OVERRIDE;
+  doClose() override;
 
 private:
   virtual void
-  doSend(Packet&& packet) DECL_OVERRIDE;
+  doSend(Packet&& packet) override;
 
 private:
   NFD_LOG_INCLASS_DECLARE();
@@ -93,28 +93,28 @@
   connectToForwarder(InternalForwarderTransport* forwarderTransport);
 
   virtual void
-  receiveFromLink(const Block& packet) DECL_OVERRIDE;
+  receiveFromLink(const Block& packet) override;
 
   virtual void
-  close() DECL_OVERRIDE
+  close() override
   {
   }
 
   virtual void
-  pause() DECL_OVERRIDE
+  pause() override
   {
   }
 
   virtual void
-  resume() DECL_OVERRIDE
+  resume() override
   {
   }
 
   virtual void
-  send(const Block& wire) DECL_OVERRIDE;
+  send(const Block& wire) override;
 
   virtual void
-  send(const Block& header, const Block& payload) DECL_OVERRIDE;
+  send(const Block& header, const Block& payload) override;
 
 private:
   NFD_LOG_INCLASS_DECLARE();
diff --git a/daemon/face/multicast-udp-transport.hpp b/daemon/face/multicast-udp-transport.hpp
index 7cd5dfe..b16ac6a 100644
--- a/daemon/face/multicast-udp-transport.hpp
+++ b/daemon/face/multicast-udp-transport.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -42,7 +42,7 @@
 /**
  * \brief A Transport that communicates on a UDP multicast group
  */
-class MulticastUdpTransport DECL_CLASS_FINAL : public DatagramTransport<boost::asio::ip::udp, Multicast>
+class MulticastUdpTransport final : public DatagramTransport<boost::asio::ip::udp, Multicast>
 {
 public:
   /**
@@ -59,14 +59,14 @@
 
 protected:
   virtual void
-  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) DECL_FINAL;
+  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) final;
 
 private:
   virtual void
-  doSend(Transport::Packet&& packet) DECL_FINAL;
+  doSend(Transport::Packet&& packet) final;
 
   virtual void
-  doClose() DECL_FINAL;
+  doClose() final;
 
 private:
   protocol::endpoint m_multicastGroup;
diff --git a/daemon/face/stream-transport.hpp b/daemon/face/stream-transport.hpp
index 1c9b720..e775fc0 100644
--- a/daemon/face/stream-transport.hpp
+++ b/daemon/face/stream-transport.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -53,13 +53,13 @@
 
 protected:
   virtual void
-  doClose() DECL_OVERRIDE;
+  doClose() override;
 
   void
   deferredClose();
 
   virtual void
-  doSend(Transport::Packet&& packet) DECL_OVERRIDE;
+  doSend(Transport::Packet&& packet) override;
 
   void
   sendFromQueue();
diff --git a/daemon/face/tcp-factory.hpp b/daemon/face/tcp-factory.hpp
index 5bf3694..126aef2 100644
--- a/daemon/face/tcp-factory.hpp
+++ b/daemon/face/tcp-factory.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -83,10 +83,10 @@
   createFace(const FaceUri& uri,
              ndn::nfd::FacePersistency persistency,
              const FaceCreatedCallback& onCreated,
-             const FaceCreationFailedCallback& onConnectFailed) DECL_OVERRIDE;
+             const FaceCreationFailedCallback& onConnectFailed) override;
 
   virtual std::vector<shared_ptr<const Channel>>
-  getChannels() const DECL_OVERRIDE;
+  getChannels() const override;
 
 PUBLIC_WITH_TESTS_ELSE_PRIVATE:
   void
diff --git a/daemon/face/tcp-transport.hpp b/daemon/face/tcp-transport.hpp
index 7ddd648..871d034 100644
--- a/daemon/face/tcp-transport.hpp
+++ b/daemon/face/tcp-transport.hpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  Regents of the University of California,
- *                     Arizona Board of Regents,
- *                     Colorado State University,
- *                     University Pierre & Marie Curie, Sorbonne University,
- *                     Washington University in St. Louis,
- *                     Beijing Institute of Technology
+ * Copyright (c) 2014-2016,  Regents of the University of California,
+ *                           Arizona Board of Regents,
+ *                           Colorado State University,
+ *                           University Pierre & Marie Curie, Sorbonne University,
+ *                           Washington University in St. Louis,
+ *                           Beijing Institute of Technology,
+ *                           The University of Memphis.
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon).
  * See AUTHORS.md for complete list of NFD authors and contributors.
@@ -20,7 +21,7 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
+ */
 
 #ifndef NFD_DAEMON_FACE_TCP_TRANSPORT_HPP
 #define NFD_DAEMON_FACE_TCP_TRANSPORT_HPP
@@ -33,7 +34,7 @@
 /**
  * \brief A Transport that communicates on a connected TCP socket
  */
-class TcpTransport DECL_CLASS_FINAL : public StreamTransport<boost::asio::ip::tcp>
+class TcpTransport final : public StreamTransport<boost::asio::ip::tcp>
 {
 public:
   TcpTransport(protocol::socket&& socket,
@@ -41,7 +42,7 @@
 
 protected:
   virtual void
-  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) DECL_FINAL;
+  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) final;
 };
 
 } // namespace face
diff --git a/daemon/face/udp-factory.hpp b/daemon/face/udp-factory.hpp
index 9c851bd..bda8ac5 100644
--- a/daemon/face/udp-factory.hpp
+++ b/daemon/face/udp-factory.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -150,10 +150,10 @@
   createFace(const FaceUri& uri,
              ndn::nfd::FacePersistency persistency,
              const FaceCreatedCallback& onCreated,
-             const FaceCreationFailedCallback& onConnectFailed) DECL_OVERRIDE;
+             const FaceCreationFailedCallback& onConnectFailed) override;
 
   virtual std::vector<shared_ptr<const Channel>>
-  getChannels() const DECL_OVERRIDE;
+  getChannels() const override;
 
 PUBLIC_WITH_TESTS_ELSE_PRIVATE:
   void
diff --git a/daemon/face/unicast-udp-transport.hpp b/daemon/face/unicast-udp-transport.hpp
index ab7adf2..80cd70b 100644
--- a/daemon/face/unicast-udp-transport.hpp
+++ b/daemon/face/unicast-udp-transport.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -35,7 +35,7 @@
 /**
  * \brief A Transport that communicates on a unicast UDP socket
  */
-class UnicastUdpTransport DECL_CLASS_FINAL : public DatagramTransport<boost::asio::ip::udp, Unicast>
+class UnicastUdpTransport final : public DatagramTransport<boost::asio::ip::udp, Unicast>
 {
 public:
   UnicastUdpTransport(protocol::socket&& socket,
@@ -44,7 +44,7 @@
 
 protected:
   virtual void
-  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) DECL_FINAL;
+  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) final;
 
 private:
   void
diff --git a/daemon/face/unix-stream-channel.hpp b/daemon/face/unix-stream-channel.hpp
index fbddbe2..8bd87d8 100644
--- a/daemon/face/unix-stream-channel.hpp
+++ b/daemon/face/unix-stream-channel.hpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  Regents of the University of California,
- *                     Arizona Board of Regents,
- *                     Colorado State University,
- *                     University Pierre & Marie Curie, Sorbonne University,
- *                     Washington University in St. Louis,
- *                     Beijing Institute of Technology
+ * Copyright (c) 2014-2016,  Regents of the University of California,
+ *                           Arizona Board of Regents,
+ *                           Colorado State University,
+ *                           University Pierre & Marie Curie, Sorbonne University,
+ *                           Washington University in St. Louis,
+ *                           Beijing Institute of Technology,
+ *                           The University of Memphis.
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon).
  * See AUTHORS.md for complete list of NFD authors and contributors.
@@ -20,7 +21,7 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
+ */
 
 #ifndef NFD_DAEMON_FACE_UNIX_STREAM_CHANNEL_HPP
 #define NFD_DAEMON_FACE_UNIX_STREAM_CHANNEL_HPP
@@ -59,7 +60,7 @@
   explicit
   UnixStreamChannel(const unix_stream::Endpoint& endpoint);
 
-  ~UnixStreamChannel() DECL_OVERRIDE;
+  ~UnixStreamChannel() override;
 
   /**
    * \brief Enable listening on the local endpoint, accept connections,
diff --git a/daemon/face/unix-stream-factory.hpp b/daemon/face/unix-stream-factory.hpp
index 43fe553..2f899b6 100644
--- a/daemon/face/unix-stream-factory.hpp
+++ b/daemon/face/unix-stream-factory.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -67,10 +67,10 @@
   createFace(const FaceUri& uri,
              ndn::nfd::FacePersistency persistency,
              const FaceCreatedCallback& onCreated,
-             const FaceCreationFailedCallback& onConnectFailed) DECL_OVERRIDE;
+             const FaceCreationFailedCallback& onConnectFailed) override;
 
   virtual std::vector<shared_ptr<const Channel>>
-  getChannels() const DECL_OVERRIDE;
+  getChannels() const override;
 
 private:
   /**
diff --git a/daemon/face/unix-stream-transport.hpp b/daemon/face/unix-stream-transport.hpp
index 30e8e98..e72c01f 100644
--- a/daemon/face/unix-stream-transport.hpp
+++ b/daemon/face/unix-stream-transport.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -38,7 +38,7 @@
 /**
  * \brief A Transport that communicates on a stream-oriented Unix domain socket
  */
-class UnixStreamTransport DECL_CLASS_FINAL : public StreamTransport<boost::asio::local::stream_protocol>
+class UnixStreamTransport final : public StreamTransport<boost::asio::local::stream_protocol>
 {
 public:
   explicit
@@ -46,7 +46,7 @@
 
 protected:
   virtual void
-  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) DECL_FINAL;
+  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) final;
 };
 
 } // namespace face
diff --git a/daemon/face/websocket-factory.hpp b/daemon/face/websocket-factory.hpp
index 87947ba..110c026 100644
--- a/daemon/face/websocket-factory.hpp
+++ b/daemon/face/websocket-factory.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -80,10 +80,10 @@
   createFace(const FaceUri& uri,
              ndn::nfd::FacePersistency persistency,
              const FaceCreatedCallback& onCreated,
-             const FaceCreationFailedCallback& onConnectFailed) DECL_OVERRIDE;
+             const FaceCreationFailedCallback& onConnectFailed) override;
 
   virtual std::vector<shared_ptr<const Channel>>
-  getChannels() const DECL_OVERRIDE;
+  getChannels() const override;
 
 private:
   /**
diff --git a/daemon/face/websocket-transport.hpp b/daemon/face/websocket-transport.hpp
index 192c626..ea67ea2 100644
--- a/daemon/face/websocket-transport.hpp
+++ b/daemon/face/websocket-transport.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -51,8 +51,8 @@
 
 /** \brief A Transport that communicates on a WebSocket connection
  */
-class WebSocketTransport DECL_CLASS_FINAL : public Transport
-                                          , protected virtual WebSocketTransportCounters
+class WebSocketTransport final : public Transport
+                               , protected virtual WebSocketTransportCounters
 {
 public:
   /** \brief counters provided by WebSocketTransport
@@ -64,7 +64,7 @@
                      time::milliseconds pingInterval);
 
   virtual const Counters&
-  getCounters() const DECL_OVERRIDE;
+  getCounters() const override;
 
   /** \brief Translates a message into a Block
    *         and delivers it to the link service
@@ -80,14 +80,14 @@
 
 protected:
   virtual void
-  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) DECL_FINAL;
+  beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) final;
 
   virtual void
-  doClose() DECL_FINAL;
+  doClose() final;
 
 private:
   virtual void
-  doSend(Transport::Packet&& packet) DECL_FINAL;
+  doSend(Transport::Packet&& packet) final;
 
   void
   schedulePing();
diff --git a/daemon/fw/access-strategy.hpp b/daemon/fw/access-strategy.hpp
index 5fadc85..2df13ad 100644
--- a/daemon/fw/access-strategy.hpp
+++ b/daemon/fw/access-strategy.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -59,11 +59,11 @@
   afterReceiveInterest(const Face& inFace,
                        const Interest& interest,
                        shared_ptr<fib::Entry> fibEntry,
-                       shared_ptr<pit::Entry> pitEntry) DECL_OVERRIDE;
+                       shared_ptr<pit::Entry> pitEntry) override;
 
   virtual void
   beforeSatisfyInterest(shared_ptr<pit::Entry> pitEntry,
-                        const Face& inFace, const Data& data) DECL_OVERRIDE;
+                        const Face& inFace, const Data& data) override;
 
 private: // StrategyInfo
   /** \brief StrategyInfo on PIT entry
diff --git a/daemon/fw/best-route-strategy.hpp b/daemon/fw/best-route-strategy.hpp
index 7ec64ff..6214f30 100644
--- a/daemon/fw/best-route-strategy.hpp
+++ b/daemon/fw/best-route-strategy.hpp
@@ -1,12 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014,  Regents of the University of California,
- *                      Arizona Board of Regents,
- *                      Colorado State University,
- *                      University Pierre & Marie Curie, Sorbonne University,
- *                      Washington University in St. Louis,
- *                      Beijing Institute of Technology,
- *                      The University of Memphis
+ * Copyright (c) 2014-2016,  Regents of the University of California,
+ *                           Arizona Board of Regents,
+ *                           Colorado State University,
+ *                           University Pierre & Marie Curie, Sorbonne University,
+ *                           Washington University in St. Louis,
+ *                           Beijing Institute of Technology,
+ *                           The University of Memphis.
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon).
  * See AUTHORS.md for complete list of NFD authors and contributors.
@@ -54,7 +54,7 @@
   afterReceiveInterest(const Face& inFace,
                        const Interest& interest,
                        shared_ptr<fib::Entry> fibEntry,
-                       shared_ptr<pit::Entry> pitEntry) DECL_OVERRIDE;
+                       shared_ptr<pit::Entry> pitEntry) override;
 
 public:
   static const Name STRATEGY_NAME;
diff --git a/daemon/fw/best-route-strategy2.hpp b/daemon/fw/best-route-strategy2.hpp
index 8985586..0be6490 100644
--- a/daemon/fw/best-route-strategy2.hpp
+++ b/daemon/fw/best-route-strategy2.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -57,12 +57,12 @@
   virtual void
   afterReceiveInterest(const Face& inFace, const Interest& interest,
                        shared_ptr<fib::Entry> fibEntry,
-                       shared_ptr<pit::Entry> pitEntry) DECL_OVERRIDE;
+                       shared_ptr<pit::Entry> pitEntry) override;
 
   virtual void
   afterReceiveNack(const Face& inFace, const lp::Nack& nack,
                    shared_ptr<fib::Entry> fibEntry,
-                   shared_ptr<pit::Entry> pitEntry) DECL_OVERRIDE;
+                   shared_ptr<pit::Entry> pitEntry) override;
 
 public:
   static const Name STRATEGY_NAME;
diff --git a/daemon/fw/broadcast-strategy.hpp b/daemon/fw/broadcast-strategy.hpp
index c923a04..bbfd0c6 100644
--- a/daemon/fw/broadcast-strategy.hpp
+++ b/daemon/fw/broadcast-strategy.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -43,7 +43,7 @@
   afterReceiveInterest(const Face& inFace,
                        const Interest& interest,
                        shared_ptr<fib::Entry> fibEntry,
-                       shared_ptr<pit::Entry> pitEntry) DECL_OVERRIDE;
+                       shared_ptr<pit::Entry> pitEntry) override;
 
 public:
   static const Name STRATEGY_NAME;
diff --git a/daemon/fw/client-control-strategy.hpp b/daemon/fw/client-control-strategy.hpp
index 85a6e3b..402b54f 100644
--- a/daemon/fw/client-control-strategy.hpp
+++ b/daemon/fw/client-control-strategy.hpp
@@ -1,12 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014,  Regents of the University of California,
- *                      Arizona Board of Regents,
- *                      Colorado State University,
- *                      University Pierre & Marie Curie, Sorbonne University,
- *                      Washington University in St. Louis,
- *                      Beijing Institute of Technology,
- *                      The University of Memphis
+ * Copyright (c) 2014-2016,  Regents of the University of California,
+ *                           Arizona Board of Regents,
+ *                           Colorado State University,
+ *                           University Pierre & Marie Curie, Sorbonne University,
+ *                           Washington University in St. Louis,
+ *                           Beijing Institute of Technology,
+ *                           The University of Memphis.
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon).
  * See AUTHORS.md for complete list of NFD authors and contributors.
@@ -49,7 +49,7 @@
   afterReceiveInterest(const Face& inFace,
                        const Interest& interest,
                        shared_ptr<fib::Entry> fibEntry,
-                       shared_ptr<pit::Entry> pitEntry) DECL_OVERRIDE;
+                       shared_ptr<pit::Entry> pitEntry) override;
 
 public:
   static const Name STRATEGY_NAME;
diff --git a/daemon/fw/multicast-strategy.hpp b/daemon/fw/multicast-strategy.hpp
index 77075c3..ef3ba16 100644
--- a/daemon/fw/multicast-strategy.hpp
+++ b/daemon/fw/multicast-strategy.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -42,7 +42,7 @@
   afterReceiveInterest(const Face& inFace,
                        const Interest& interest,
                        shared_ptr<fib::Entry> fibEntry,
-                       shared_ptr<pit::Entry> pitEntry) DECL_OVERRIDE;
+                       shared_ptr<pit::Entry> pitEntry) override;
 
 public:
   static const Name STRATEGY_NAME;
diff --git a/daemon/fw/ncc-strategy.hpp b/daemon/fw/ncc-strategy.hpp
index e9fb94e..9e58494 100644
--- a/daemon/fw/ncc-strategy.hpp
+++ b/daemon/fw/ncc-strategy.hpp
@@ -45,11 +45,11 @@
   afterReceiveInterest(const Face& inFace,
                        const Interest& interest,
                        shared_ptr<fib::Entry> fibEntry,
-                       shared_ptr<pit::Entry> pitEntry) DECL_OVERRIDE;
+                       shared_ptr<pit::Entry> pitEntry) override;
 
   virtual void
   beforeSatisfyInterest(shared_ptr<pit::Entry> pitEntry,
-                        const Face& inFace, const Data& data) DECL_OVERRIDE;
+                        const Face& inFace, const Data& data) override;
 
 PUBLIC_WITH_TESTS_ELSE_PROTECTED:
   /// StrategyInfo on measurements::Entry
diff --git a/daemon/fw/retx-suppression-exponential.hpp b/daemon/fw/retx-suppression-exponential.hpp
index 4909417..a2fbe7b 100644
--- a/daemon/fw/retx-suppression-exponential.hpp
+++ b/daemon/fw/retx-suppression-exponential.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -54,7 +54,7 @@
    */
   virtual Result
   decide(const Face& inFace, const Interest& interest,
-         pit::Entry& pitEntry) const DECL_OVERRIDE;
+         pit::Entry& pitEntry) const override;
 
 public:
   /** \brief StrategyInfo on pit::Entry
diff --git a/daemon/fw/retx-suppression-fixed.hpp b/daemon/fw/retx-suppression-fixed.hpp
index 0f0ca19..95baae1 100644
--- a/daemon/fw/retx-suppression-fixed.hpp
+++ b/daemon/fw/retx-suppression-fixed.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -45,7 +45,7 @@
    */
   virtual Result
   decide(const Face& inFace, const Interest& interest,
-         pit::Entry& pitEntry) const DECL_OVERRIDE;
+         pit::Entry& pitEntry) const override;
 
 public:
   static const time::milliseconds DEFAULT_MIN_RETX_INTERVAL;
diff --git a/daemon/mgmt/nfd-manager-base.hpp b/daemon/mgmt/nfd-manager-base.hpp
index 4104fbe..6273624 100644
--- a/daemon/mgmt/nfd-manager-base.hpp
+++ b/daemon/mgmt/nfd-manager-base.hpp
@@ -70,7 +70,7 @@
   authorize(const Name& prefix, const Interest& interest,
             const ndn::mgmt::ControlParameters* params,
             ndn::mgmt::AcceptContinuation accept,
-            ndn::mgmt::RejectContinuation reject) DECL_OVERRIDE;
+            ndn::mgmt::RejectContinuation reject) override;
 
 private:
   CommandValidator& m_validator;
diff --git a/daemon/table/cs-policy-lru.hpp b/daemon/table/cs-policy-lru.hpp
index bea845c..81f65bb 100644
--- a/daemon/table/cs-policy-lru.hpp
+++ b/daemon/table/cs-policy-lru.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -72,19 +72,19 @@
 
 private:
   virtual void
-  doAfterInsert(iterator i) DECL_OVERRIDE;
+  doAfterInsert(iterator i) override;
 
   virtual void
-  doAfterRefresh(iterator i) DECL_OVERRIDE;
+  doAfterRefresh(iterator i) override;
 
   virtual void
-  doBeforeErase(iterator i) DECL_OVERRIDE;
+  doBeforeErase(iterator i) override;
 
   virtual void
-  doBeforeUse(iterator i) DECL_OVERRIDE;
+  doBeforeUse(iterator i) override;
 
   virtual void
-  evictEntries() DECL_OVERRIDE;
+  evictEntries() override;
 
 private:
   /** \brief moves an entry to the end of queue
diff --git a/daemon/table/cs-policy-priority-fifo.hpp b/daemon/table/cs-policy-priority-fifo.hpp
index 0078c71..c453990 100644
--- a/daemon/table/cs-policy-priority-fifo.hpp
+++ b/daemon/table/cs-policy-priority-fifo.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California,
+ * Copyright (c) 2014-2016,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -83,19 +83,19 @@
 
 private:
   virtual void
-  doAfterInsert(iterator i) DECL_OVERRIDE;
+  doAfterInsert(iterator i) override;
 
   virtual void
-  doAfterRefresh(iterator i) DECL_OVERRIDE;
+  doAfterRefresh(iterator i) override;
 
   virtual void
-  doBeforeErase(iterator i) DECL_OVERRIDE;
+  doBeforeErase(iterator i) override;
 
   virtual void
-  doBeforeUse(iterator i) DECL_OVERRIDE;
+  doBeforeUse(iterator i) override;
 
   virtual void
-  evictEntries() DECL_OVERRIDE;
+  evictEntries() override;
 
 private:
   /** \brief evicts one entry
@@ -126,11 +126,11 @@
   EntryInfoMapFifo m_entryInfoMap;
 };
 
-} // namespace priorityfifo
+} // namespace priority_fifo
 
 using priority_fifo::PriorityFifoPolicy;
 
 } // namespace cs
 } // namespace nfd
 
-#endif // NFD_DAEMON_TABLE_CS_POLICY_FIFO_HPP
\ No newline at end of file
+#endif // NFD_DAEMON_TABLE_CS_POLICY_FIFO_HPP
