diff --git a/src/detail/face-impl.hpp b/src/detail/face-impl.hpp
index 187d7fa..2d23611 100644
--- a/src/detail/face-impl.hpp
+++ b/src/detail/face-impl.hpp
@@ -188,6 +188,7 @@
                  const shared_ptr<InterestFilterRecord>& filter,
                  const RegisterPrefixSuccessCallback& onSuccess,
                  const RegisterPrefixFailureCallback& onFailure,
+                 uint64_t flags,
                  const SignatureGenerator& signatureGenerator)
   {
     using namespace nfd;
@@ -199,19 +200,21 @@
        const SignatureGenerator&,
        const time::milliseconds&);
 
+    ControlParameters parameters;
+    parameters.setName(prefix);
+
     Registrator registrator, unregistrator;
     if (!m_face.m_isDirectNfdFibManagementRequested) {
       registrator = static_cast<Registrator>(&Controller::start<RibRegisterCommand>);
       unregistrator = static_cast<Registrator>(&Controller::start<RibUnregisterCommand>);
+
+      parameters.setFlags(flags);
     }
     else {
       registrator = static_cast<Registrator>(&Controller::start<FibAddNextHopCommand>);
       unregistrator = static_cast<Registrator>(&Controller::start<FibRemoveNextHopCommand>);
     }
 
-    ControlParameters parameters;
-    parameters.setName(prefix);
-
     RegisteredPrefix::Unregistrator bindedUnregistrator =
       bind(unregistrator, m_face.m_nfdController, parameters, _1, _2,
            signatureGenerator,
diff --git a/src/encoding/nfd-constants.hpp b/src/encoding/nfd-constants.hpp
new file mode 100644
index 0000000..54794bb
--- /dev/null
+++ b/src/encoding/nfd-constants.hpp
@@ -0,0 +1,50 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014 Regents of the University of California.
+ *
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
+ *
+ * ndn-cxx library is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * ndn-cxx library 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 Lesser General Public License for more details.
+ *
+ * You should have received copies of the GNU General Public License and GNU Lesser
+ * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
+ */
+
+#ifndef NDN_ENCODING_NFD_CONSTANTS_HPP
+#define NDN_ENCODING_NFD_CONSTANTS_HPP
+
+namespace ndn {
+namespace nfd {
+
+static const uint64_t INVALID_FACE_ID = std::numeric_limits<uint64_t>::max();
+
+/**
+ * \ingroup management
+ */
+enum {
+  // route origin
+  ROUTE_ORIGIN_APP      = 0,
+  ROUTE_ORIGIN_AUTOREG  = 64,
+  ROUTE_ORIGIN_CLIENT   = 65,
+  ROUTE_ORIGIN_AUTOCONF = 66,
+  ROUTE_ORIGIN_NLSR     = 128,
+  ROUTE_ORIGIN_STATIC   = 255,
+
+  // route inheritance flags
+  ROUTE_FLAG_CHILD_INHERIT = 1,
+  ROUTE_FLAG_CAPTURE       = 2
+};
+
+} // namespace nfd
+} // namespace ndn
+
+#endif // NDN_ENCODING_NFD_CONSTANTS_HPP
diff --git a/src/encoding/tlv-nfd.hpp b/src/encoding/tlv-nfd.hpp
index ba00cad..3cde88b 100644
--- a/src/encoding/tlv-nfd.hpp
+++ b/src/encoding/tlv-nfd.hpp
@@ -23,6 +23,7 @@
 #define NDN_ENCODING_TLV_NFD_HPP
 
 #include "../common.hpp"
+#include "nfd-constants.hpp"
 
 namespace ndn {
 namespace tlv {
@@ -94,13 +95,6 @@
 
 } // namespace nfd
 } // namespace tlv
-
-namespace nfd {
-
-static const uint64_t INVALID_FACE_ID = std::numeric_limits<uint64_t>::max();
-
-} // namespace nfd
-
 } // namespace ndn
 
 #endif // NDN_ENCODING_TLV_NFD_HPP
diff --git a/src/face.cpp b/src/face.cpp
index e67b9a1..79d8dc1 100644
--- a/src/face.cpp
+++ b/src/face.cpp
@@ -198,13 +198,15 @@
                         const OnInterest& onInterest,
                         const RegisterPrefixSuccessCallback& onSuccess,
                         const RegisterPrefixFailureCallback& onFailure,
-                        const IdentityCertificate& certificate)
+                        const IdentityCertificate& certificate,
+                        uint64_t flags)
 {
   shared_ptr<InterestFilterRecord> filter =
     make_shared<InterestFilterRecord>(interestFilter, onInterest);
 
   return m_impl->registerPrefix(interestFilter.getPrefix(), filter,
                                 onSuccess, onFailure,
+                                flags,
                                 certificate);
 }
 
@@ -212,13 +214,15 @@
 Face::setInterestFilter(const InterestFilter& interestFilter,
                         const OnInterest& onInterest,
                         const RegisterPrefixFailureCallback& onFailure,
-                        const IdentityCertificate& certificate)
+                        const IdentityCertificate& certificate,
+                        uint64_t flags)
 {
   shared_ptr<InterestFilterRecord> filter =
     make_shared<InterestFilterRecord>(interestFilter, onInterest);
 
   return m_impl->registerPrefix(interestFilter.getPrefix(), filter,
                                 RegisterPrefixSuccessCallback(), onFailure,
+                                flags,
                                 certificate);
 }
 
@@ -227,13 +231,15 @@
                         const OnInterest& onInterest,
                         const RegisterPrefixSuccessCallback& onSuccess,
                         const RegisterPrefixFailureCallback& onFailure,
-                        const Name& identity)
+                        const Name& identity,
+                        uint64_t flags)
 {
   shared_ptr<InterestFilterRecord> filter =
     make_shared<InterestFilterRecord>(interestFilter, onInterest);
 
   return m_impl->registerPrefix(interestFilter.getPrefix(), filter,
                                 onSuccess, onFailure,
+                                flags,
                                 identity);
 }
 
@@ -241,13 +247,15 @@
 Face::setInterestFilter(const InterestFilter& interestFilter,
                         const OnInterest& onInterest,
                         const RegisterPrefixFailureCallback& onFailure,
-                        const Name& identity)
+                        const Name& identity,
+                        uint64_t flags)
 {
   shared_ptr<InterestFilterRecord> filter =
     make_shared<InterestFilterRecord>(interestFilter, onInterest);
 
   return m_impl->registerPrefix(interestFilter.getPrefix(), filter,
                                 RegisterPrefixSuccessCallback(), onFailure,
+                                flags,
                                 identity);
 }
 
@@ -268,10 +276,12 @@
 Face::registerPrefix(const Name& prefix,
                      const RegisterPrefixSuccessCallback& onSuccess,
                      const RegisterPrefixFailureCallback& onFailure,
-                     const IdentityCertificate& certificate)
+                     const IdentityCertificate& certificate,
+                     uint64_t flags)
 {
   return m_impl->registerPrefix(prefix, shared_ptr<InterestFilterRecord>(),
                                 onSuccess, onFailure,
+                                flags,
                                 certificate);
 }
 
@@ -279,14 +289,15 @@
 Face::registerPrefix(const Name& prefix,
                      const RegisterPrefixSuccessCallback& onSuccess,
                      const RegisterPrefixFailureCallback& onFailure,
-                     const Name& identity)
+                     const Name& identity,
+                     uint64_t flags)
 {
   return m_impl->registerPrefix(prefix, shared_ptr<InterestFilterRecord>(),
                                 onSuccess, onFailure,
+                                flags,
                                 identity);
 }
 
-
 void
 Face::unsetInterestFilter(const RegisteredPrefixId* registeredPrefixId)
 {
diff --git a/src/face.hpp b/src/face.hpp
index 9427b03..974aa69 100644
--- a/src/face.hpp
+++ b/src/face.hpp
@@ -238,6 +238,7 @@
    * @param onInterest     A callback to be called when a matching interest is received
    * @param onSuccess      A callback to be called when prefixRegister command succeeds
    * @param onFailure      A callback to be called when prefixRegister command fails
+   * @param flags          (optional) RIB flags (not used when direct FIB management is requested)
    * @param certificate    (optional) A certificate under which the prefix registration
    *                       command interest is signed.  When omitted, a default certificate
    *                       of the default identity is used to sign the registration command
@@ -250,7 +251,8 @@
                     const OnInterest& onInterest,
                     const RegisterPrefixSuccessCallback& onSuccess,
                     const RegisterPrefixFailureCallback& onFailure,
-                    const IdentityCertificate& certificate = IdentityCertificate());
+                    const IdentityCertificate& certificate = IdentityCertificate(),
+                    uint64_t flags = nfd::ROUTE_FLAG_CHILD_INHERIT);
 
   /**
    * @brief Set InterestFilter to dispatch incoming matching interest to onInterest
@@ -265,6 +267,7 @@
    * @param interestFilter Interest filter (prefix part will be registered with the forwarder)
    * @param onInterest     A callback to be called when a matching interest is received
    * @param onFailure      A callback to be called when prefixRegister command fails
+   * @param flags          (optional) RIB flags (not used when direct FIB management is requested)
    * @param certificate    (optional) A certificate under which the prefix registration
    *                       command interest is signed.  When omitted, a default certificate
    *                       of the default identity is used to sign the registration command
@@ -276,7 +279,8 @@
   setInterestFilter(const InterestFilter& interestFilter,
                     const OnInterest& onInterest,
                     const RegisterPrefixFailureCallback& onFailure,
-                    const IdentityCertificate& certificate = IdentityCertificate());
+                    const IdentityCertificate& certificate = IdentityCertificate(),
+                    uint64_t flags = nfd::ROUTE_FLAG_CHILD_INHERIT);
 
   /**
    * @brief Set InterestFilter to dispatch incoming matching interest to onInterest
@@ -294,6 +298,7 @@
    * @param onFailure      A callback to be called when prefixRegister command fails
    * @param identity       A signing identity. A command interest is signed under the default
    *                       certificate of this identity
+   * @param flags          (optional) RIB flags (not used when direct FIB management is requested)
    *
    * @return Opaque registered prefix ID which can be used with removeRegisteredPrefix
    */
@@ -302,7 +307,8 @@
                     const OnInterest& onInterest,
                     const RegisterPrefixSuccessCallback& onSuccess,
                     const RegisterPrefixFailureCallback& onFailure,
-                    const Name& identity);
+                    const Name& identity,
+                    uint64_t flags = nfd::ROUTE_FLAG_CHILD_INHERIT);
 
   /**
    * @brief Set InterestFilter to dispatch incoming matching interest to onInterest
@@ -319,6 +325,7 @@
    * @param onFailure      A callback to be called when prefixRegister command fails
    * @param identity       A signing identity. A command interest is signed under the default
    *                       certificate of this identity
+   * @param flags          (optional) RIB flags (not used when direct FIB management is requested)
    *
    * @return Opaque registered prefix ID which can be used with removeRegisteredPrefix
    */
@@ -326,7 +333,8 @@
   setInterestFilter(const InterestFilter& interestFilter,
                     const OnInterest& onInterest,
                     const RegisterPrefixFailureCallback& onFailure,
-                    const Name& identity);
+                    const Name& identity,
+                    uint64_t flags = nfd::ROUTE_FLAG_CHILD_INHERIT);
 
   /**
    * @brief Set InterestFilter to dispatch incoming matching interest to onInterest callback
@@ -358,6 +366,7 @@
    * @param certificate (optional) A certificate under which the prefix registration
    *                    command interest is signed.  When omitted, a default certificate
    *                    of the default identity is used to sign the registration command
+   * @param flags       (optional) RIB flags (not used when direct FIB management is requested)
    *
    * @return The registered prefix ID which can be used with unregisterPrefix
    */
@@ -365,7 +374,8 @@
   registerPrefix(const Name& prefix,
                  const RegisterPrefixSuccessCallback& onSuccess,
                  const RegisterPrefixFailureCallback& onFailure,
-                 const IdentityCertificate& certificate = IdentityCertificate());
+                 const IdentityCertificate& certificate = IdentityCertificate(),
+                 uint64_t flags = nfd::ROUTE_FLAG_CHILD_INHERIT);
 
   /**
    * @brief Register prefix with the connected NDN forwarder and call onInterest when a matching
@@ -380,6 +390,7 @@
    * @param onFailure A callback to be called when prefixRegister command fails
    * @param identity  A signing identity. A command interest is signed under the default
    *                  certificate of this identity
+   * @param flags     (optional) RIB flags (not used when direct FIB management is requested)
    *
    * @return The registered prefix ID which can be used with unregisterPrefix
    */
@@ -387,8 +398,8 @@
   registerPrefix(const Name& prefix,
                  const RegisterPrefixSuccessCallback& onSuccess,
                  const RegisterPrefixFailureCallback& onFailure,
-                 const Name& identity);
-
+                 const Name& identity,
+                 uint64_t flags = nfd::ROUTE_FLAG_CHILD_INHERIT);
 
   /**
    * @brief Remove the registered prefix entry with the registeredPrefixId
diff --git a/src/management/nfd-control-command.hpp b/src/management/nfd-control-command.hpp
index 252812c..3a4ad80 100644
--- a/src/management/nfd-control-command.hpp
+++ b/src/management/nfd-control-command.hpp
@@ -455,24 +455,6 @@
 
 /**
  * \ingroup management
- */
-enum {
-  // route origin
-  ROUTE_ORIGIN_APP      = 0,
-  ROUTE_ORIGIN_AUTOREG  = 64,
-  ROUTE_ORIGIN_CLIENT   = 65,
-  ROUTE_ORIGIN_AUTOCONF = 66,
-  ROUTE_ORIGIN_NLSR     = 128,
-  ROUTE_ORIGIN_STATIC   = 255,
-
-  // route inheritance flags
-  ROUTE_FLAG_CHILD_INHERIT = 1,
-  ROUTE_FLAG_CAPTURE       = 2
-};
-
-
-/**
- * \ingroup management
  * \brief represents a rib/register command
  * \sa http://redmine.named-data.net/projects/nfd/wiki/RibMgmt#Register-a-route
  */
