diff --git a/src/mgmt/nfd/face-event-notification.cpp b/src/mgmt/nfd/face-event-notification.cpp
index a322ae9..f3ea655 100644
--- a/src/mgmt/nfd/face-event-notification.cpp
+++ b/src/mgmt/nfd/face-event-notification.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2016 Regents of the University of California.
+ * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -20,8 +20,9 @@
  */
 
 #include "face-event-notification.hpp"
-#include "encoding/tlv-nfd.hpp"
 #include "encoding/block-helpers.hpp"
+#include "encoding/encoding-buffer.hpp"
+#include "encoding/tlv-nfd.hpp"
 #include "util/concepts.hpp"
 
 namespace ndn {
@@ -34,7 +35,7 @@
               "FaceEventNotification::Error must inherit from tlv::Error");
 
 FaceEventNotification::FaceEventNotification()
-  : m_kind(static_cast<FaceEventKind>(0))
+  : m_kind(FACE_EVENT_NONE)
 {
 }
 
@@ -169,19 +170,15 @@
   return *this;
 }
 
-void
-FaceEventNotification::wireReset() const
-{
-  m_wire.reset();
-}
-
 std::ostream&
 operator<<(std::ostream& os, const FaceEventNotification& notification)
 {
   os << "FaceEventNotification(";
 
-  switch (notification.getKind())
-    {
+  switch (notification.getKind()) {
+    case FACE_EVENT_NONE:
+      os << "Kind: none, ";
+      break;
     case FACE_EVENT_CREATED:
       os << "Kind: created, ";
       break;
@@ -194,7 +191,7 @@
     case FACE_EVENT_DOWN:
       os << "Kind: down, ";
       break;
-    }
+  }
 
   os << "FaceID: " << notification.getFaceId() << ", "
      << "RemoteUri: " << notification.getRemoteUri() << ", "
diff --git a/src/mgmt/nfd/face-event-notification.hpp b/src/mgmt/nfd/face-event-notification.hpp
index 0126b64..6abfee1 100644
--- a/src/mgmt/nfd/face-event-notification.hpp
+++ b/src/mgmt/nfd/face-event-notification.hpp
@@ -23,7 +23,6 @@
 #define NDN_MGMT_NFD_FACE_EVENT_NOTIFICATION_HPP
 
 #include "face-traits.hpp"
-#include "../../encoding/block.hpp"
 
 namespace ndn {
 namespace nfd {
@@ -32,6 +31,7 @@
  * \ingroup management
  */
 enum FaceEventKind {
+  FACE_EVENT_NONE = 0,
   FACE_EVENT_CREATED = 1, ///< face created
   FACE_EVENT_DESTROYED = 2, ///< face destroyed
   FACE_EVENT_UP = 3, ///< face went UP (from DOWN state)
@@ -41,7 +41,7 @@
 /**
  * \ingroup management
  * \brief represents a Face status change notification
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Face-Status-Change-Notification
+ * \sa https://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Face-Status-Change-Notification
  */
 class FaceEventNotification : public FaceTraits<FaceEventNotification>
 {
@@ -77,14 +77,8 @@
   FaceEventNotification&
   setKind(FaceEventKind kind);
 
-protected:
-  void
-  wireReset() const override;
-
 private:
   FaceEventKind m_kind;
-
-  mutable Block m_wire;
 };
 
 std::ostream&
diff --git a/src/mgmt/nfd/face-status.cpp b/src/mgmt/nfd/face-status.cpp
index 9417e28..ea0d546 100644
--- a/src/mgmt/nfd/face-status.cpp
+++ b/src/mgmt/nfd/face-status.cpp
@@ -328,12 +328,6 @@
   return *this;
 }
 
-void
-FaceStatus::wireReset() const
-{
-  m_wire.reset();
-}
-
 bool
 operator==(const FaceStatus& a, const FaceStatus& b)
 {
diff --git a/src/mgmt/nfd/face-status.hpp b/src/mgmt/nfd/face-status.hpp
index 9bffa81..bde34b8 100644
--- a/src/mgmt/nfd/face-status.hpp
+++ b/src/mgmt/nfd/face-status.hpp
@@ -23,7 +23,6 @@
 #define NDN_MGMT_NFD_FACE_STATUS_HPP
 
 #include "face-traits.hpp"
-#include "../../encoding/block.hpp"
 #include "../../util/time.hpp"
 
 namespace ndn {
@@ -147,10 +146,6 @@
   FaceStatus&
   setNOutBytes(uint64_t nOutBytes);
 
-protected:
-  void
-  wireReset() const override;
-
 private:
   optional<time::milliseconds> m_expirationPeriod;
   uint64_t m_nInInterests;
@@ -161,8 +156,6 @@
   uint64_t m_nOutNacks;
   uint64_t m_nInBytes;
   uint64_t m_nOutBytes;
-
-  mutable Block m_wire;
 };
 
 bool
diff --git a/src/mgmt/nfd/face-traits.hpp b/src/mgmt/nfd/face-traits.hpp
index dee973c..58a9245 100644
--- a/src/mgmt/nfd/face-traits.hpp
+++ b/src/mgmt/nfd/face-traits.hpp
@@ -22,15 +22,16 @@
 #ifndef NDN_MGMT_NFD_FACE_TRAITS_HPP
 #define NDN_MGMT_NFD_FACE_TRAITS_HPP
 
-#include "../../encoding/tlv-nfd.hpp"
+#include "../../encoding/block.hpp"
+#include "../../encoding/nfd-constants.hpp"
 
 namespace ndn {
 namespace nfd {
 
-/** \ingroup management
- *  \brief providers getters and setters of face information fields
- *  \tparam C the concrete class; it must provide a wireReset() member
- *            function to clear the wire encoding when a field changes
+/**
+ * \ingroup management
+ * \brief provides getters and setters for face information fields
+ * \tparam C the concrete subclass
  */
 template<class C>
 class FaceTraits
@@ -46,18 +47,6 @@
     }
   };
 
-  FaceTraits()
-    : m_faceId(INVALID_FACE_ID)
-    , m_faceScope(FACE_SCOPE_NON_LOCAL)
-    , m_facePersistency(FACE_PERSISTENCY_PERSISTENT)
-    , m_linkType(LINK_TYPE_POINT_TO_POINT)
-    , m_flags(0x0)
-  {
-  }
-
-  virtual
-  ~FaceTraits() = default;
-
   uint64_t
   getFaceId() const
   {
@@ -67,7 +56,7 @@
   C&
   setFaceId(uint64_t faceId)
   {
-    wireReset();
+    m_wire.reset();
     m_faceId = faceId;
     return static_cast<C&>(*this);
   }
@@ -81,7 +70,7 @@
   C&
   setRemoteUri(const std::string& remoteUri)
   {
-    wireReset();
+    m_wire.reset();
     m_remoteUri = remoteUri;
     return static_cast<C&>(*this);
   }
@@ -95,7 +84,7 @@
   C&
   setLocalUri(const std::string& localUri)
   {
-    wireReset();
+    m_wire.reset();
     m_localUri = localUri;
     return static_cast<C&>(*this);
   }
@@ -109,7 +98,7 @@
   C&
   setFaceScope(FaceScope faceScope)
   {
-    wireReset();
+    m_wire.reset();
     m_faceScope = faceScope;
     return static_cast<C&>(*this);
   }
@@ -123,7 +112,7 @@
   C&
   setFacePersistency(FacePersistency facePersistency)
   {
-    wireReset();
+    m_wire.reset();
     m_facePersistency = facePersistency;
     return static_cast<C&>(*this);
   }
@@ -137,7 +126,7 @@
   C&
   setLinkType(LinkType linkType)
   {
-    wireReset();
+    m_wire.reset();
     m_linkType = linkType;
     return static_cast<C&>(*this);
   }
@@ -151,7 +140,7 @@
   C&
   setFlags(uint64_t flags)
   {
-    wireReset();
+    m_wire.reset();
     m_flags = flags;
     return static_cast<C&>(*this);
   }
@@ -162,7 +151,6 @@
     if (bit >= 64) {
       BOOST_THROW_EXCEPTION(std::out_of_range("bit must be within range [0, 64)"));
     }
-
     return m_flags & (1 << bit);
   }
 
@@ -173,7 +161,7 @@
       BOOST_THROW_EXCEPTION(std::out_of_range("bit must be within range [0, 64)"));
     }
 
-    wireReset();
+    m_wire.reset();
 
     if (value) {
       m_flags |= (1 << bit);
@@ -186,8 +174,14 @@
   }
 
 protected:
-  virtual void
-  wireReset() const = 0;
+  FaceTraits()
+    : m_faceId(INVALID_FACE_ID)
+    , m_faceScope(FACE_SCOPE_NON_LOCAL)
+    , m_facePersistency(FACE_PERSISTENCY_PERSISTENT)
+    , m_linkType(LINK_TYPE_POINT_TO_POINT)
+    , m_flags(0)
+  {
+  }
 
 protected:
   uint64_t m_faceId;
@@ -197,6 +191,8 @@
   FacePersistency  m_facePersistency;
   LinkType m_linkType;
   uint64_t m_flags;
+
+  mutable Block m_wire;
 };
 
 } // namespace nfd
