diff --git a/src/mgmt/nfd/control-parameters.cpp b/src/mgmt/nfd/control-parameters.cpp
index a414567..a489c3f 100644
--- a/src/mgmt/nfd/control-parameters.cpp
+++ b/src/mgmt/nfd/control-parameters.cpp
@@ -169,7 +169,7 @@
   val = m_wire.find(tlv::nfd::Origin);
   m_hasFields[CONTROL_PARAMETER_ORIGIN] = val != m_wire.elements_end();
   if (this->hasOrigin()) {
-    m_origin = static_cast<uint64_t>(readNonNegativeInteger(*val));
+    m_origin = static_cast<RouteOrigin>(readNonNegativeInteger(*val));
   }
 
   val = m_wire.find(tlv::nfd::Cost);
diff --git a/src/mgmt/nfd/control-parameters.hpp b/src/mgmt/nfd/control-parameters.hpp
index cd432ca..df19488 100644
--- a/src/mgmt/nfd/control-parameters.hpp
+++ b/src/mgmt/nfd/control-parameters.hpp
@@ -276,7 +276,7 @@
     return m_hasFields[CONTROL_PARAMETER_ORIGIN];
   }
 
-  uint64_t
+  RouteOrigin
   getOrigin() const
   {
     BOOST_ASSERT(this->hasOrigin());
@@ -284,7 +284,7 @@
   }
 
   ControlParameters&
-  setOrigin(uint64_t origin)
+  setOrigin(RouteOrigin origin)
   {
     m_wire.reset();
     m_origin = origin;
@@ -526,7 +526,7 @@
   std::string         m_uri;
   std::string         m_localUri;
   LocalControlFeature m_localControlFeature;
-  uint64_t            m_origin;
+  RouteOrigin         m_origin;
   uint64_t            m_cost;
   uint64_t            m_flags;
   uint64_t            m_mask;
diff --git a/src/mgmt/nfd/rib-entry.cpp b/src/mgmt/nfd/rib-entry.cpp
index 315b4bd..619fd5e 100644
--- a/src/mgmt/nfd/rib-entry.cpp
+++ b/src/mgmt/nfd/rib-entry.cpp
@@ -36,7 +36,7 @@
 
 Route::Route()
   : m_faceId(INVALID_FACE_ID)
-  , m_origin(0)
+  , m_origin(ROUTE_ORIGIN_APP)
   , m_cost(0)
   , m_flags(ROUTE_FLAG_CHILD_INHERIT)
 {
@@ -56,7 +56,7 @@
 }
 
 Route&
-Route::setOrigin(uint64_t origin)
+Route::setOrigin(RouteOrigin origin)
 {
   m_origin = origin;
   m_wire.reset();
@@ -159,7 +159,7 @@
   }
 
   if (val != m_wire.elements_end() && val->type() == tlv::nfd::Origin) {
-    m_origin = readNonNegativeInteger(*val);
+    m_origin = static_cast<RouteOrigin>(readNonNegativeInteger(*val));
     ++val;
   }
   else {
diff --git a/src/mgmt/nfd/rib-entry.hpp b/src/mgmt/nfd/rib-entry.hpp
index 8b82238..e515e64 100644
--- a/src/mgmt/nfd/rib-entry.hpp
+++ b/src/mgmt/nfd/rib-entry.hpp
@@ -66,17 +66,14 @@
   Route&
   setFaceId(uint64_t faceId);
 
-  uint64_t
+  RouteOrigin
   getOrigin() const
   {
     return m_origin;
   }
 
-  /** @brief set Origin
-   *  @param origin a code defined in ndn::nfd::RouteOrigin
-   */
   Route&
-  setOrigin(uint64_t origin);
+  setOrigin(RouteOrigin origin);
 
   uint64_t
   getCost() const
@@ -93,9 +90,6 @@
     return m_flags;
   }
 
-  /** @brief set route inheritance flags
-   *  @param flags a bitwise OR'ed code from ndn::nfd::RouteFlags
-   */
   Route&
   setFlags(uint64_t flags);
 
@@ -129,7 +123,7 @@
 
 private:
   uint64_t m_faceId;
-  uint64_t m_origin;
+  RouteOrigin m_origin;
   uint64_t m_cost;
   uint64_t m_flags;
   optional<time::milliseconds> m_expirationPeriod;
diff --git a/src/util/dummy-client-face.cpp b/src/util/dummy-client-face.cpp
index f84d997..af1f702 100644
--- a/src/util/dummy-client-face.cpp
+++ b/src/util/dummy-client-face.cpp
@@ -199,7 +199,7 @@
 
     nfd::ControlParameters params(interest.getName().get(-5).blockFromValue());
     params.setFaceId(1);
-    params.setOrigin(0);
+    params.setOrigin(nfd::ROUTE_ORIGIN_APP);
     if (interest.getName().get(3) == name::Component("register")) {
       params.setCost(0);
     }
diff --git a/tests/unit-tests/mgmt/nfd/control-command.t.cpp b/tests/unit-tests/mgmt/nfd/control-command.t.cpp
index f812088..6e60ad2 100644
--- a/tests/unit-tests/mgmt/nfd/control-command.t.cpp
+++ b/tests/unit-tests/mgmt/nfd/control-command.t.cpp
@@ -333,7 +333,7 @@
 
   command.applyDefaultsToRequest(p1);
   BOOST_REQUIRE(p1.hasOrigin());
-  BOOST_CHECK_EQUAL(p1.getOrigin(), static_cast<uint64_t>(ROUTE_ORIGIN_APP));
+  BOOST_CHECK_EQUAL(p1.getOrigin(), ROUTE_ORIGIN_APP);
   BOOST_REQUIRE(p1.hasCost());
   BOOST_CHECK_EQUAL(p1.getCost(), 0);
   BOOST_REQUIRE(p1.hasFlags());
diff --git a/tests/unit-tests/mgmt/nfd/control-parameters.t.cpp b/tests/unit-tests/mgmt/nfd/control-parameters.t.cpp
index 96d8519..30db9ed 100644
--- a/tests/unit-tests/mgmt/nfd/control-parameters.t.cpp
+++ b/tests/unit-tests/mgmt/nfd/control-parameters.t.cpp
@@ -133,17 +133,17 @@
   ControlParameters parameters;
   parameters.setName("ndn:/example")
             .setFaceId(4)
-            .setOrigin(128)
+            .setOrigin(ROUTE_ORIGIN_NLSR)
             .setCost(6)
             .setFlags(0x01)
-            .setExpirationPeriod(time::milliseconds(1800000));
+            .setExpirationPeriod(time::minutes(30));
 
   Block wire = parameters.wireEncode();
 
   ControlParameters decoded(wire);
   BOOST_CHECK_EQUAL(decoded.getName(), Name("ndn:/example"));
   BOOST_CHECK_EQUAL(decoded.getFaceId(), 4);
-  BOOST_CHECK_EQUAL(decoded.getOrigin(), 128);
+  BOOST_CHECK_EQUAL(decoded.getOrigin(), ROUTE_ORIGIN_NLSR);
   BOOST_CHECK_EQUAL(decoded.getCost(), 6);
   BOOST_CHECK_EQUAL(decoded.getFlags(), 0x01);
   BOOST_CHECK_EQUAL(decoded.getExpirationPeriod(), time::milliseconds(1800000));
diff --git a/tests/unit-tests/mgmt/nfd/rib-entry.t.cpp b/tests/unit-tests/mgmt/nfd/rib-entry.t.cpp
index 28e4fd7..15c14d1 100644
--- a/tests/unit-tests/mgmt/nfd/rib-entry.t.cpp
+++ b/tests/unit-tests/mgmt/nfd/rib-entry.t.cpp
@@ -37,9 +37,9 @@
 {
   return Route()
       .setFaceId(1)
-      .setOrigin(128)
+      .setOrigin(ROUTE_ORIGIN_NLSR)
       .setCost(100)
-      .setFlags(ndn::nfd::ROUTE_FLAG_CAPTURE);
+      .setFlags(ROUTE_FLAG_CAPTURE);
 }
 
 static RibEntry
@@ -125,9 +125,9 @@
   RibEntry entry1 = makeRibEntry();
   entry1.addRoute(Route()
                   .setFaceId(2)
-                  .setOrigin(0)
+                  .setOrigin(ROUTE_ORIGIN_APP)
                   .setCost(32)
-                  .setFlags(ndn::nfd::ROUTE_FLAG_CHILD_INHERIT)
+                  .setFlags(ROUTE_FLAG_CHILD_INHERIT)
                   .setExpirationPeriod(time::seconds(5)));
   const Block& wire = entry1.wireEncode();
 
@@ -208,7 +208,7 @@
 {
   Route route;
   BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(route),
-                    "Route(FaceId: 0, Origin: 0, Cost: 0, Flags: 0x1, ExpirationPeriod: infinite)");
+                    "Route(FaceId: 0, Origin: app, Cost: 0, Flags: 0x1, ExpirationPeriod: infinite)");
 
   RibEntry entry;
   BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(entry),
@@ -219,14 +219,14 @@
   entry = makeRibEntry();
   entry.addRoute(Route()
                  .setFaceId(2)
-                 .setOrigin(0)
+                 .setOrigin(ROUTE_ORIGIN_STATIC)
                  .setCost(32)
-                 .setFlags(ndn::nfd::ROUTE_FLAG_CHILD_INHERIT));
+                 .setFlags(ROUTE_FLAG_CHILD_INHERIT));
   BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(entry),
                     "RibEntry(Prefix: /hello/world,\n"
-                    "         Routes: [Route(FaceId: 1, Origin: 128, Cost: 100, Flags: 0x2, "
+                    "         Routes: [Route(FaceId: 1, Origin: nlsr, Cost: 100, Flags: 0x2, "
                     "ExpirationPeriod: 10000 milliseconds),\n"
-                    "                  Route(FaceId: 2, Origin: 0, Cost: 32, Flags: 0x1, "
+                    "                  Route(FaceId: 2, Origin: static, Cost: 32, Flags: 0x1, "
                     "ExpirationPeriod: infinite)]\n"
                     "         )");
 }
