diff --git a/daemon/face/face-flags.hpp b/daemon/face/face-flags.hpp
deleted file mode 100644
index 1451a27..0000000
--- a/daemon/face/face-flags.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/* -*- 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
- *
- * This file is part of NFD (Named Data Networking Forwarding Daemon).
- * See AUTHORS.md for complete list of NFD authors and contributors.
- *
- * NFD is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * 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_MGMT_FACE_FLAGS_HPP
-#define NFD_DAEMON_MGMT_FACE_FLAGS_HPP
-
-#include "face/face.hpp"
-#include <ndn-cxx/management/nfd-face-flags.hpp>
-
-namespace nfd {
-
-inline uint64_t
-getFaceFlags(const Face& face)
-{
-  uint64_t flags = 0;
-  if (face.isLocal()) {
-    flags |= ndn::nfd::FACE_IS_LOCAL;
-  }
-  if (face.isOnDemand()) {
-    flags |= ndn::nfd::FACE_IS_ON_DEMAND;
-  }
-  return flags;
-}
-
-} // namespace nfd
-
-#endif // NFD_DAEMON_MGMT_FACE_FLAGS_HPP
diff --git a/daemon/face/face.cpp b/daemon/face/face.cpp
index bbf2a08..f3757ff 100644
--- a/daemon/face/face.cpp
+++ b/daemon/face/face.cpp
@@ -24,7 +24,6 @@
  */
 
 #include "face.hpp"
-#include "face-flags.hpp"
 #include "core/logger.hpp"
 
 namespace nfd {
@@ -125,19 +124,44 @@
   this->onFail.clear();
 }
 
+template<typename FaceTraits>
+void
+Face::copyStatusTo(FaceTraits& traits) const
+{
+  traits.setFaceId(getId())
+    .setRemoteUri(getRemoteUri().toString())
+    .setLocalUri(getLocalUri().toString());
+
+  if (isLocal()) {
+    traits.setFaceScope(ndn::nfd::FACE_SCOPE_LOCAL);
+  }
+  else {
+    traits.setFaceScope(ndn::nfd::FACE_SCOPE_NON_LOCAL);
+  }
+
+  if (isOnDemand()) {
+    traits.setFacePersistency(ndn::nfd::FACE_PERSISTENCY_ON_DEMAND);
+  }
+  else {
+    traits.setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT);
+  }
+}
+
+template void
+Face::copyStatusTo<ndn::nfd::FaceStatus>(ndn::nfd::FaceStatus&) const;
+
+template void
+Face::copyStatusTo<ndn::nfd::FaceEventNotification>(ndn::nfd::FaceEventNotification&) const;
+
 ndn::nfd::FaceStatus
 Face::getFaceStatus() const
 {
   ndn::nfd::FaceStatus status;
-  status.setFaceId(getId())
-    .setRemoteUri(getRemoteUri().toString())
-    .setLocalUri(getLocalUri().toString())
-    .setFlags(getFaceFlags(*this));
+  copyStatusTo(status);
 
   this->getCounters().copyTo(status);
 
   return status;
 }
 
-
 } //namespace nfd
diff --git a/daemon/face/face.hpp b/daemon/face/face.hpp
index 52c0894..8234102 100644
--- a/daemon/face/face.hpp
+++ b/daemon/face/face.hpp
@@ -32,6 +32,7 @@
 #include "face-counters.hpp"
 
 #include <ndn-cxx/management/nfd-face-status.hpp>
+#include <ndn-cxx/management/nfd-face-event-notification.hpp>
 
 namespace nfd {
 
@@ -163,6 +164,12 @@
   const FaceUri&
   getLocalUri() const;
 
+  /** \return FaceTraits data structure filled with the current FaceTraits status
+   */
+  template<typename FaceTraits>
+  void
+  copyStatusTo(FaceTraits& traits) const;
+
   /** \return FaceStatus data structure filled with the current Face status
    */
   virtual ndn::nfd::FaceStatus
@@ -202,7 +209,6 @@
   friend class FaceTable;
 };
 
-
 inline bool
 Face::isLocal() const
 {
diff --git a/daemon/mgmt/face-manager.cpp b/daemon/mgmt/face-manager.cpp
index b31f841..5b7c08d 100644
--- a/daemon/mgmt/face-manager.cpp
+++ b/daemon/mgmt/face-manager.cpp
@@ -29,7 +29,6 @@
 #include "core/face-uri.hpp"
 #include "core/network-interface.hpp"
 #include "fw/face-table.hpp"
-#include "face/face-flags.hpp"
 #include "face/tcp-factory.hpp"
 #include "face/udp-factory.hpp"
 #include "core/config-file.hpp"
@@ -1030,11 +1029,8 @@
 FaceManager::onAddFace(shared_ptr<Face> face)
 {
   ndn::nfd::FaceEventNotification notification;
-  notification.setKind(ndn::nfd::FACE_EVENT_CREATED)
-              .setFaceId(face->getId())
-              .setRemoteUri(face->getRemoteUri().toString())
-              .setLocalUri(face->getLocalUri().toString())
-              .setFlags(getFaceFlags(*face));
+  notification.setKind(ndn::nfd::FACE_EVENT_CREATED);
+  face->copyStatusTo(notification);
 
   m_notificationStream.postNotification(notification);
 }
@@ -1043,16 +1039,12 @@
 FaceManager::onRemoveFace(shared_ptr<Face> face)
 {
   ndn::nfd::FaceEventNotification notification;
-  notification.setKind(ndn::nfd::FACE_EVENT_DESTROYED)
-              .setFaceId(face->getId())
-              .setRemoteUri(face->getRemoteUri().toString())
-              .setLocalUri(face->getLocalUri().toString())
-              .setFlags(getFaceFlags(*face));
+  notification.setKind(ndn::nfd::FACE_EVENT_DESTROYED);
+  face->copyStatusTo(notification);
 
   m_notificationStream.postNotification(notification);
 }
 
-
 bool
 FaceManager::extractLocalControlParameters(const Interest& request,
                                            ControlParameters& parameters,
diff --git a/tests/daemon/face/face-flags.cpp b/tests/daemon/face/face-flags.cpp
deleted file mode 100644
index 764d2b6..0000000
--- a/tests/daemon/face/face-flags.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- 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
- *
- * This file is part of NFD (Named Data Networking Forwarding Daemon).
- * See AUTHORS.md for complete list of NFD authors and contributors.
- *
- * NFD is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * 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/>.
- **/
-
-#include "face/face-flags.hpp"
-
-#include "tests/test-common.hpp"
-#include "tests/daemon/face/dummy-face.hpp"
-
-namespace nfd {
-namespace tests {
-
-BOOST_FIXTURE_TEST_SUITE(FaceFaceFlags, BaseFixture)
-
-template<typename DummyFaceBase>
-class DummyOnDemandFace : public DummyFaceBase
-{
-public:
-  DummyOnDemandFace()
-  {
-    this->setOnDemand(true);
-  }
-};
-
-BOOST_AUTO_TEST_CASE(Get)
-{
-  DummyFace face1;
-  BOOST_CHECK_EQUAL(getFaceFlags(face1), 0);
-
-  DummyLocalFace face2;
-  BOOST_CHECK_EQUAL(getFaceFlags(face2), static_cast<uint64_t>(ndn::nfd::FACE_IS_LOCAL));
-
-  DummyOnDemandFace<DummyFace> face3;
-  BOOST_CHECK_EQUAL(getFaceFlags(face3), static_cast<uint64_t>(ndn::nfd::FACE_IS_ON_DEMAND));
-
-  DummyOnDemandFace<DummyLocalFace> face4;
-  BOOST_CHECK_EQUAL(getFaceFlags(face4), static_cast<uint64_t>(ndn::nfd::FACE_IS_LOCAL |
-                                         ndn::nfd::FACE_IS_ON_DEMAND));
-
-}
-
-BOOST_AUTO_TEST_SUITE_END()
-
-} // namespace tests
-} // namespace nfd
diff --git a/tests/daemon/mgmt/face-manager.cpp b/tests/daemon/mgmt/face-manager.cpp
index 855c7bd..608ea95 100644
--- a/tests/daemon/mgmt/face-manager.cpp
+++ b/tests/daemon/mgmt/face-manager.cpp
@@ -1493,6 +1493,9 @@
     BOOST_CHECK_EQUAL(notification.getFaceId(), expectedFaceEvent.getFaceId());
     BOOST_CHECK_EQUAL(notification.getRemoteUri(), expectedFaceEvent.getRemoteUri());
     BOOST_CHECK_EQUAL(notification.getLocalUri(), expectedFaceEvent.getLocalUri());
+    BOOST_CHECK_EQUAL(notification.getFaceScope(), expectedFaceEvent.getFaceScope());
+    BOOST_CHECK_EQUAL(notification.getFacePersistency(), expectedFaceEvent.getFacePersistency());
+    BOOST_CHECK_EQUAL(notification.getLinkType(), expectedFaceEvent.getLinkType());
   }
 
   bool
diff --git a/tests/daemon/mgmt/face-status-publisher-common.hpp b/tests/daemon/mgmt/face-status-publisher-common.hpp
index b2a485e..e2f19f1 100644
--- a/tests/daemon/mgmt/face-status-publisher-common.hpp
+++ b/tests/daemon/mgmt/face-status-publisher-common.hpp
@@ -29,7 +29,6 @@
 #include "mgmt/face-status-publisher.hpp"
 #include "mgmt/app-face.hpp"
 #include "mgmt/internal-face.hpp"
-#include "face/face-flags.hpp"
 #include "fw/forwarder.hpp"
 
 #include "tests/test-common.hpp"
@@ -135,7 +134,28 @@
     BOOST_CHECK_EQUAL(status.getFaceId(), reference->getId());
     BOOST_CHECK_EQUAL(status.getRemoteUri(), reference->getRemoteUri().toString());
     BOOST_CHECK_EQUAL(status.getLocalUri(), reference->getLocalUri().toString());
-    BOOST_CHECK_EQUAL(status.getFlags(), getFaceFlags(*reference));
+
+    if (reference->isLocal()) {
+      BOOST_CHECK_EQUAL(status.getFaceScope(), ndn::nfd::FACE_SCOPE_LOCAL);
+    }
+    else {
+      BOOST_CHECK_EQUAL(status.getFaceScope(), ndn::nfd::FACE_SCOPE_NON_LOCAL);
+    }
+
+    if (reference->isOnDemand()) {
+      BOOST_CHECK_EQUAL(status.getFacePersistency(), ndn::nfd::FACE_PERSISTENCY_ON_DEMAND);
+    }
+    else {
+      BOOST_CHECK_EQUAL(status.getFacePersistency(), ndn::nfd::FACE_PERSISTENCY_PERSISTENT);
+    }
+
+    if (reference->isMultiAccess()) {
+      BOOST_CHECK_EQUAL(status.getLinkType(), ndn::nfd::LINK_TYPE_MULTI_ACCESS);
+    }
+    else {
+      BOOST_CHECK_EQUAL(status.getLinkType(), ndn::nfd::LINK_TYPE_POINT_TO_POINT);
+    }
+
     BOOST_CHECK_EQUAL(status.getNInInterests(), counters.getNInInterests());
     BOOST_CHECK_EQUAL(status.getNInDatas(), counters.getNInDatas());
     BOOST_CHECK_EQUAL(status.getNOutInterests(), counters.getNOutInterests());
