diff --git a/daemon/face/face.cpp b/daemon/face/face.cpp
index 0974cf2..0dd8169 100644
--- a/daemon/face/face.cpp
+++ b/daemon/face/face.cpp
@@ -34,7 +34,7 @@
   , m_remoteUri(remoteUri)
   , m_localUri(localUri)
   , m_isLocal(isLocal)
-  , m_isOnDemand(false)
+  , m_persistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT)
   , m_isMultiAccess(isMultiAccess)
   , m_isFailed(false)
 {
@@ -102,8 +102,7 @@
         .setLocalUri(getLocalUri().toString())
         .setFaceScope(isLocal() ? ndn::nfd::FACE_SCOPE_LOCAL
                                 : ndn::nfd::FACE_SCOPE_NON_LOCAL)
-        .setFacePersistency(isOnDemand() ? ndn::nfd::FACE_PERSISTENCY_ON_DEMAND
-                                         : ndn::nfd::FACE_PERSISTENCY_PERSISTENT)
+        .setFacePersistency(getPersistency())
         .setLinkType(isMultiAccess() ? ndn::nfd::LINK_TYPE_MULTI_ACCESS
                                      : ndn::nfd::LINK_TYPE_POINT_TO_POINT);
 }
diff --git a/daemon/face/face.hpp b/daemon/face/face.hpp
index 58deb3d..a5923d2 100644
--- a/daemon/face/face.hpp
+++ b/daemon/face/face.hpp
@@ -128,10 +128,10 @@
   bool
   isLocal() const;
 
-  /** \brief Get whether face is created on demand or explicitly via FaceManagement protocol
+  /** \brief Get the persistency setting
    */
-  bool
-  isOnDemand() const;
+  ndn::nfd::FacePersistency
+  getPersistency() const;
 
   /** \brief Get whether packets sent by this face may reach multiple peers
    */
@@ -171,7 +171,7 @@
 
 PUBLIC_WITH_TESTS_ELSE_PROTECTED:
   void
-  setOnDemand(bool isOnDemand);
+  setPersistency(ndn::nfd::FacePersistency persistency);
 
 protected:
   bool
@@ -202,7 +202,7 @@
   const FaceUri m_remoteUri;
   const FaceUri m_localUri;
   const bool m_isLocal;
-  bool m_isOnDemand;
+  ndn::nfd::FacePersistency m_persistency;
   const bool m_isMultiAccess;
   bool m_isFailed;
 
@@ -240,16 +240,16 @@
   return m_isLocal;
 }
 
-inline bool
-Face::isOnDemand() const
+inline ndn::nfd::FacePersistency
+Face::getPersistency() const
 {
-  return m_isOnDemand;
+  return m_persistency;
 }
 
 inline void
-Face::setOnDemand(bool isOnDemand)
+Face::setPersistency(ndn::nfd::FacePersistency persistency)
 {
-  m_isOnDemand = isOnDemand;
+  m_persistency = persistency;
 }
 
 inline bool
diff --git a/daemon/face/stream-face.hpp b/daemon/face/stream-face.hpp
index 94c339a..d08c1d5 100644
--- a/daemon/face/stream-face.hpp
+++ b/daemon/face/stream-face.hpp
@@ -120,7 +120,7 @@
 {
   NFD_LOG_FACE_INFO("Creating face");
 
-  this->setOnDemand(isOnDemand);
+  this->setPersistency(isOnDemand ? ndn::nfd::FACE_PERSISTENCY_ON_DEMAND : ndn::nfd::FACE_PERSISTENCY_PERSISTENT);
   StreamFaceValidator<T, FaceBase>::validateSocket(m_socket);
 
   m_socket.async_receive(boost::asio::buffer(m_inputBuffer, ndn::MAX_NDN_PACKET_SIZE),
diff --git a/daemon/face/udp-channel.cpp b/daemon/face/udp-channel.cpp
index c0d0d3c..81cf401 100644
--- a/daemon/face/udp-channel.cpp
+++ b/daemon/face/udp-channel.cpp
@@ -98,9 +98,10 @@
   auto it = m_channelFaces.find(remoteEndpoint);
   if (it != m_channelFaces.end()) {
     // we already have a face for this endpoint, just reuse it
-    if (!isOnDemand)
-      // only on-demand -> non-on-demand transition is allowed
-      it->second->setOnDemand(false);
+    if (!isOnDemand) {
+      // only on-demand -> persistent transition is allowed
+      it->second->setPersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT);
+    }
     return {false, it->second};
   }
 
diff --git a/daemon/face/udp-face.cpp b/daemon/face/udp-face.cpp
index a854cc4..20b57cf 100644
--- a/daemon/face/udp-face.cpp
+++ b/daemon/face/udp-face.cpp
@@ -44,7 +44,7 @@
   , m_idleTimeout(idleTimeout)
   , m_lastIdleCheck(time::steady_clock::now())
 {
-  this->setOnDemand(isOnDemand);
+  this->setPersistency(isOnDemand ? ndn::nfd::FACE_PERSISTENCY_ON_DEMAND : ndn::nfd::FACE_PERSISTENCY_PERSISTENT);
 
 #ifdef __linux__
   //
@@ -66,7 +66,7 @@
   }
 #endif
 
-  if (this->isOnDemand() && m_idleTimeout > time::seconds::zero()) {
+  if (this->getPersistency() == ndn::nfd::FACE_PERSISTENCY_ON_DEMAND && m_idleTimeout > time::seconds::zero()) {
     m_closeIfIdleEvent = scheduler::schedule(m_idleTimeout, bind(&UdpFace::closeIfIdle, this));
   }
 }
@@ -76,7 +76,7 @@
 {
   auto status = DatagramFace::getFaceStatus();
 
-  if (isOnDemand()) {
+  if (this->getPersistency() == ndn::nfd::FACE_PERSISTENCY_ON_DEMAND) {
     time::milliseconds left = m_idleTimeout;
     left -= time::duration_cast<time::milliseconds>(time::steady_clock::now() - m_lastIdleCheck);
 
@@ -97,7 +97,7 @@
 {
   // Face can be switched from on-demand to non-on-demand mode
   // (non-on-demand -> on-demand transition is not allowed)
-  if (isOnDemand()) {
+  if (this->getPersistency() == ndn::nfd::FACE_PERSISTENCY_ON_DEMAND) {
     if (!hasBeenUsedRecently()) {
       NFD_LOG_FACE_INFO("Closing for inactivity");
       close();
diff --git a/daemon/face/websocket-face.cpp b/daemon/face/websocket-face.cpp
index 4c781c3..3b94e6e 100644
--- a/daemon/face/websocket-face.cpp
+++ b/daemon/face/websocket-face.cpp
@@ -38,7 +38,7 @@
   , m_closed(false)
 {
   NFD_LOG_FACE_INFO("Creating face");
-  this->setOnDemand(true);
+  this->setPersistency(ndn::nfd::FACE_PERSISTENCY_ON_DEMAND);
 }
 
 void
