diff --git a/src/mgmt/nfd/control-command.cpp b/src/mgmt/nfd/control-command.cpp
index 556a0ed..07e8b17 100644
--- a/src/mgmt/nfd/control-command.cpp
+++ b/src/mgmt/nfd/control-command.cpp
@@ -275,11 +275,11 @@
 {
   m_requestValidator
     .required(CONTROL_PARAMETER_NAME)
-    .optional(CONTROL_PARAMETER_N_CS_ENTRIES);
+    .optional(CONTROL_PARAMETER_COUNT);
   m_responseValidator
     .required(CONTROL_PARAMETER_NAME)
     .optional(CONTROL_PARAMETER_CAPACITY)
-    .required(CONTROL_PARAMETER_N_CS_ENTRIES);
+    .required(CONTROL_PARAMETER_COUNT);
 }
 
 void
@@ -287,8 +287,8 @@
 {
   this->ControlCommand::validateRequest(parameters);
 
-  if (parameters.hasNCsEntries() && parameters.getNCsEntries() == 0) {
-    BOOST_THROW_EXCEPTION(ArgumentError("NCsEntries must be positive"));
+  if (parameters.hasCount() && parameters.getCount() == 0) {
+    BOOST_THROW_EXCEPTION(ArgumentError("Count must be positive"));
   }
 }
 
diff --git a/src/mgmt/nfd/control-parameters.cpp b/src/mgmt/nfd/control-parameters.cpp
index c0377c5..65360a5 100644
--- a/src/mgmt/nfd/control-parameters.cpp
+++ b/src/mgmt/nfd/control-parameters.cpp
@@ -52,20 +52,19 @@
   size_t totalLength = 0;
 
   if (this->hasDefaultCongestionThreshold()) {
-    totalLength += prependNonNegativeIntegerBlock(encoder,
-                   tlv::nfd::DefaultCongestionThreshold, m_defaultCongestionThreshold);
+    totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::DefaultCongestionThreshold,
+                                                  m_defaultCongestionThreshold);
   }
   if (this->hasBaseCongestionMarkingInterval()) {
-    totalLength += prependNonNegativeIntegerBlock(encoder,
-                   tlv::nfd::BaseCongestionMarkingInterval, m_baseCongestionMarkingInterval.count());
+    totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::BaseCongestionMarkingInterval,
+                                                  m_baseCongestionMarkingInterval.count());
   }
   if (this->hasFacePersistency()) {
-    totalLength += prependNonNegativeIntegerBlock(encoder,
-                   tlv::nfd::FacePersistency, m_facePersistency);
+    totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FacePersistency, m_facePersistency);
   }
   if (this->hasExpirationPeriod()) {
-    totalLength += prependNonNegativeIntegerBlock(encoder,
-                   tlv::nfd::ExpirationPeriod, m_expirationPeriod.count());
+    totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::ExpirationPeriod,
+                                                  m_expirationPeriod.count());
   }
   if (this->hasStrategy()) {
     totalLength += prependNestedBlock(encoder, tlv::nfd::Strategy, m_strategy);
@@ -76,8 +75,8 @@
   if (this->hasFlags()) {
     totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Flags, m_flags);
   }
-  if (this->hasNCsEntries()) {
-    totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NCsEntries, m_nCsEntries);
+  if (this->hasCount()) {
+    totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Count, m_count);
   }
   if (this->hasCapacity()) {
     totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Capacity, m_capacity);
@@ -176,10 +175,10 @@
     m_capacity = readNonNegativeInteger(*val);
   }
 
-  val = m_wire.find(tlv::nfd::NCsEntries);
-  m_hasFields[CONTROL_PARAMETER_N_CS_ENTRIES] = val != m_wire.elements_end();
-  if (this->hasNCsEntries()) {
-    m_nCsEntries = readNonNegativeInteger(*val);
+  val = m_wire.find(tlv::nfd::Count);
+  m_hasFields[CONTROL_PARAMETER_COUNT] = val != m_wire.elements_end();
+  if (this->hasCount()) {
+    m_count = readNonNegativeInteger(*val);
   }
 
   val = m_wire.find(tlv::nfd::Flags);
@@ -337,8 +336,8 @@
     os << "Capacity: " << parameters.getCapacity() << ", ";
   }
 
-  if (parameters.hasNCsEntries()) {
-    os << "NCsEntries: " << parameters.getNCsEntries() << ", ";
+  if (parameters.hasCount()) {
+    os << "Count: " << parameters.getCount() << ", ";
   }
 
   if (parameters.hasFlags()) {
diff --git a/src/mgmt/nfd/control-parameters.hpp b/src/mgmt/nfd/control-parameters.hpp
index 7005e9d..c325e0b 100644
--- a/src/mgmt/nfd/control-parameters.hpp
+++ b/src/mgmt/nfd/control-parameters.hpp
@@ -41,7 +41,7 @@
   CONTROL_PARAMETER_ORIGIN,
   CONTROL_PARAMETER_COST,
   CONTROL_PARAMETER_CAPACITY,
-  CONTROL_PARAMETER_N_CS_ENTRIES,
+  CONTROL_PARAMETER_COUNT,
   CONTROL_PARAMETER_FLAGS,
   CONTROL_PARAMETER_MASK,
   CONTROL_PARAMETER_STRATEGY,
@@ -60,7 +60,7 @@
   "Origin",
   "Cost",
   "Capacity",
-  "NCsEntries",
+  "Count",
   "Flags",
   "Mask",
   "Strategy",
@@ -316,32 +316,32 @@
   }
 
   bool
-  hasNCsEntries() const
+  hasCount() const
   {
-    return m_hasFields[CONTROL_PARAMETER_N_CS_ENTRIES];
+    return m_hasFields[CONTROL_PARAMETER_COUNT];
   }
 
   uint64_t
-  getNCsEntries() const
+  getCount() const
   {
-    BOOST_ASSERT(this->hasNCsEntries());
-    return m_nCsEntries;
+    BOOST_ASSERT(this->hasCount());
+    return m_count;
   }
 
   ControlParameters&
-  setNCsEntries(uint64_t nCsEntries)
+  setCount(uint64_t count)
   {
     m_wire.reset();
-    m_nCsEntries = nCsEntries;
-    m_hasFields[CONTROL_PARAMETER_N_CS_ENTRIES] = true;
+    m_count = count;
+    m_hasFields[CONTROL_PARAMETER_COUNT] = true;
     return *this;
   }
 
   ControlParameters&
-  unsetNCsEntries()
+  unsetCount()
   {
     m_wire.reset();
-    m_hasFields[CONTROL_PARAMETER_N_CS_ENTRIES] = false;
+    m_hasFields[CONTROL_PARAMETER_COUNT] = false;
     return *this;
   }
 
@@ -607,7 +607,7 @@
   RouteOrigin         m_origin;
   uint64_t            m_cost;
   uint64_t            m_capacity;
-  uint64_t            m_nCsEntries;
+  uint64_t            m_count;
   uint64_t            m_flags;
   uint64_t            m_mask;
   Name                m_strategy;
