mgmt: move management/nfd-* to mgmt/nfd/

refs #3760

Change-Id: Ib4bde3412b5c39b9f4f46113199cebe78704505e
diff --git a/src/management/nfd-channel-status.cpp b/src/management/nfd-channel-status.cpp
deleted file mode 100644
index b53d198..0000000
--- a/src/management/nfd-channel-status.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2015 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.
- */
-
-#include "nfd-channel-status.hpp"
-#include "encoding/tlv-nfd.hpp"
-#include "encoding/block-helpers.hpp"
-#include "util/concepts.hpp"
-
-namespace ndn {
-namespace nfd {
-
-//BOOST_CONCEPT_ASSERT((boost::EqualityComparable<ChannelStatus>));
-BOOST_CONCEPT_ASSERT((WireEncodable<ChannelStatus>));
-BOOST_CONCEPT_ASSERT((WireDecodable<ChannelStatus>));
-static_assert(std::is_base_of<tlv::Error, ChannelStatus::Error>::value,
-              "ChannelStatus::Error must inherit from tlv::Error");
-
-ChannelStatus::ChannelStatus()
-{
-}
-
-ChannelStatus::ChannelStatus(const Block& payload)
-{
-  this->wireDecode(payload);
-}
-
-template<encoding::Tag TAG>
-size_t
-ChannelStatus::wireEncode(EncodingImpl<TAG>& encoder) const
-{
-  size_t totalLength = 0;
-
-  totalLength += encoder.prependByteArrayBlock(tlv::nfd::LocalUri,
-                 reinterpret_cast<const uint8_t*>(m_localUri.c_str()), m_localUri.size());
-
-  totalLength += encoder.prependVarNumber(totalLength);
-  totalLength += encoder.prependVarNumber(tlv::nfd::ChannelStatus);
-  return totalLength;
-}
-
-template size_t
-ChannelStatus::wireEncode<encoding::EncoderTag>(EncodingImpl<encoding::EncoderTag>&) const;
-
-template size_t
-ChannelStatus::wireEncode<encoding::EstimatorTag>(EncodingImpl<encoding::EstimatorTag>&) const;
-
-const Block&
-ChannelStatus::wireEncode() const
-{
-  if (m_wire.hasWire())
-    return m_wire;
-
-  EncodingEstimator estimator;
-  size_t estimatedSize = wireEncode(estimator);
-
-  EncodingBuffer buffer(estimatedSize, 0);
-  wireEncode(buffer);
-
-  m_wire = buffer.block();
-  return m_wire;
-}
-
-void
-ChannelStatus::wireDecode(const Block& block)
-{
-  if (block.type() != tlv::nfd::ChannelStatus) {
-    BOOST_THROW_EXCEPTION(Error("Expecting ChannelStatus block"));
-  }
-  m_wire = block;
-  m_wire.parse();
-  Block::element_const_iterator val = m_wire.elements_begin();
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::LocalUri) {
-    m_localUri.assign(reinterpret_cast<const char*>(val->value()), val->value_size());
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("Missing required LocalUri field"));
-  }
-}
-
-ChannelStatus&
-ChannelStatus::setLocalUri(const std::string localUri)
-{
-  m_wire.reset();
-  m_localUri = localUri;
-  return *this;
-}
-
-} // namespace nfd
-} // namespace ndn
diff --git a/src/management/nfd-channel-status.hpp b/src/management/nfd-channel-status.hpp
index 422de2b..524d9f9 100644
--- a/src/management/nfd-channel-status.hpp
+++ b/src/management/nfd-channel-status.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,64 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_CHANNEL_STATUS_HPP
-#define NDN_MANAGEMENT_NFD_CHANNEL_STATUS_HPP
-
-#include "../encoding/block.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/**
- * @ingroup management
- * @brief represents NFD Channel Status dataset
- * @sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Channel-Dataset
+/** \file
+ *  \deprecated Use mgmt/nfd/channel-status.hpp
  */
-class ChannelStatus
-{
-public:
-  class Error : public tlv::Error
-  {
-  public:
-    explicit
-    Error(const std::string& what)
-      : tlv::Error(what)
-    {
-    }
-  };
-
-  ChannelStatus();
-
-  explicit
-  ChannelStatus(const Block& payload);
-
-  template<encoding::Tag TAG>
-  size_t
-  wireEncode(EncodingImpl<TAG>& encoder) const;
-
-  const Block&
-  wireEncode() const;
-
-  void
-  wireDecode(const Block& wire);
-
-public: // getters & setters
-  const std::string&
-  getLocalUri() const
-  {
-    return m_localUri;
-  }
-
-  ChannelStatus&
-  setLocalUri(const std::string localUri);
-
-private:
-  std::string m_localUri;
-
-  mutable Block m_wire;
-};
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_CHANNEL_STATUS_HPP
+#include "../mgmt/nfd/channel-status.hpp"
diff --git a/src/management/nfd-command-options.cpp b/src/management/nfd-command-options.cpp
deleted file mode 100644
index 6794483..0000000
--- a/src/management/nfd-command-options.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2016 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.
- */
-
-#include "nfd-command-options.hpp"
-
-#ifdef NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_KEEP_DEPRECATED_SIGNING_PARAMS
-#include "../security/v1/identity-certificate.hpp"
-#include "../security/signing-helpers.hpp"
-#endif // NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_KEEP_DEPRECATED_SIGNING_PARAMS
-
-namespace ndn {
-namespace nfd {
-
-const time::milliseconds CommandOptions::DEFAULT_TIMEOUT(10000);
-const Name CommandOptions::DEFAULT_PREFIX("ndn:/localhost/nfd");
-
-CommandOptions::CommandOptions()
-  : m_timeout(DEFAULT_TIMEOUT)
-  , m_prefix(DEFAULT_PREFIX)
-{
-}
-
-CommandOptions&
-CommandOptions::setTimeout(const time::milliseconds& timeout)
-{
-  if (timeout <= time::milliseconds::zero()) {
-    BOOST_THROW_EXCEPTION(std::out_of_range("Timeout must be positive"));
-  }
-
-  m_timeout = timeout;
-  return *this;
-}
-
-CommandOptions&
-CommandOptions::setPrefix(const Name& prefix)
-{
-  m_prefix = prefix;
-  return *this;
-}
-
-CommandOptions&
-CommandOptions::setSigningInfo(const security::SigningInfo& signingInfo)
-{
-  m_signingInfo = signingInfo;
-  return *this;
-}
-
-#ifdef NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_KEEP_DEPRECATED_SIGNING_PARAMS
-
-CommandOptions::SigningParamsKind
-CommandOptions::getSigningParamsKind() const
-{
-  switch (m_signingInfo.getSignerType()) {
-  case security::SigningInfo::SIGNER_TYPE_NULL:
-    return SIGNING_PARAMS_DEFAULT;
-  case security::SigningInfo::SIGNER_TYPE_ID:
-    return SIGNING_PARAMS_IDENTITY;
-  case security::SigningInfo::SIGNER_TYPE_CERT:
-    return SIGNING_PARAMS_CERTIFICATE;
-  default:
-    BOOST_THROW_EXCEPTION(std::out_of_range("SigningInfo::SignerType is not convertible to "
-                                            "CommandOptions::SigningParamsKind"));
-  }
-}
-
-const Name&
-CommandOptions::getSigningIdentity() const
-{
-  BOOST_ASSERT(m_signingInfo.getSignerType() == security::SigningInfo::SIGNER_TYPE_ID);
-  return m_signingInfo.getSignerName();
-}
-
-const Name&
-CommandOptions::getSigningCertificate() const
-{
-  BOOST_ASSERT(m_signingInfo.getSignerType() == security::SigningInfo::SIGNER_TYPE_CERT);
-  return m_signingInfo.getSignerName();
-}
-
-CommandOptions&
-CommandOptions::setSigningDefault()
-{
-  m_signingInfo = security::SigningInfo();
-  return *this;
-}
-
-CommandOptions&
-CommandOptions::setSigningIdentity(const Name& identityName)
-{
-  m_signingInfo = security::signingByIdentity(identityName);
-  return *this;
-}
-
-static security::SigningInfo
-makeSigningInfoFromIdentityCertificate(const Name& certificateName)
-{
-  // A valid IdentityCertificate has at least 4 name components,
-  // as it follows `<...>/KEY/<...>/<key-id>/ID-CERT/<version>` naming model.
-  if (certificateName.size() < 4) {
-    BOOST_THROW_EXCEPTION(std::invalid_argument("Certificate is invalid"));
-  }
-
-  return security::signingByCertificate(certificateName);
-}
-
-CommandOptions&
-CommandOptions::setSigningCertificate(const Name& certificateName)
-{
-  m_signingInfo = makeSigningInfoFromIdentityCertificate(certificateName);
-  return *this;
-}
-
-CommandOptions&
-CommandOptions::setSigningCertificate(const security::v1::IdentityCertificate& certificate)
-{
-  m_signingInfo = makeSigningInfoFromIdentityCertificate(certificate.getName());
-  return *this;
-}
-
-#endif // NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_KEEP_DEPRECATED_SIGNING_PARAMS
-
-} // namespace nfd
-} // namespace ndn
diff --git a/src/management/nfd-command-options.hpp b/src/management/nfd-command-options.hpp
index 4ca0a6b..7cf8c77 100644
--- a/src/management/nfd-command-options.hpp
+++ b/src/management/nfd-command-options.hpp
@@ -19,178 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_HPP
-#define NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_HPP
-
-#include "../security/signing-info.hpp"
-
-#define NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_KEEP_DEPRECATED_SIGNING_PARAMS
-
-namespace ndn {
-
-namespace security {
-namespace v1 {
-class IdentityCertificate;
-} // namespace v1
-} // namespace security
-
-namespace nfd {
-
-/** \ingroup management
- *  \brief contains options for ControlCommand execution
- *  \note This type is intentionally copyable
+/** \file
+ *  \deprecated Use mgmt/nfd/command-options.hpp
  */
-class CommandOptions
-{
-public:
-  /** \brief constructs CommandOptions
-   *  \post getTimeout() == DEFAULT_TIMEOUT
-   *  \post getPrefix() == DEFAULT_PREFIX
-   *  \post getSigningInfo().getSignerType() == SIGNER_TYPE_NULL
-   */
-  CommandOptions();
-
-  /** \return command timeout
-   */
-  const time::milliseconds&
-  getTimeout() const
-  {
-    return m_timeout;
-  }
-
-  /** \brief sets command timeout
-   *  \param timeout the new command timeout, must be positive
-   *  \throw std::out_of_range if timeout is non-positive
-   *  \return self
-   */
-  CommandOptions&
-  setTimeout(const time::milliseconds& timeout);
-
-  /** \return command prefix
-   */
-  const Name&
-  getPrefix() const
-  {
-    return m_prefix;
-  }
-
-  /** \brief sets command prefix
-   *  \return self
-   */
-  CommandOptions&
-  setPrefix(const Name& prefix);
-
-  /** \return signing parameters
-   */
-  const security::SigningInfo&
-  getSigningInfo() const
-  {
-    return m_signingInfo;
-  }
-
-  /** \brief sets signing parameters
-   *  \return self
-   */
-  CommandOptions&
-  setSigningInfo(const security::SigningInfo& signingInfo);
-
-#ifdef NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_KEEP_DEPRECATED_SIGNING_PARAMS
-public: // signing parameters
-  /** \deprecated use getSigningInfo and setSigningInfo
-   *  \brief indicates the selection of signing parameters
-   */
-  enum SigningParamsKind {
-    /** \brief picks the default signing identity and certificate
-     */
-    SIGNING_PARAMS_DEFAULT,
-    /** \brief picks the default certificate of a specific identity Name
-     */
-    SIGNING_PARAMS_IDENTITY,
-    /** \brief picks a specific identity certificate
-     */
-    SIGNING_PARAMS_CERTIFICATE
-  };
-
-  /** \deprecated use getSigningInfo and setSigningInfo
-   *  \return selection of signing parameters
-   */
-  DEPRECATED(
-  SigningParamsKind
-  getSigningParamsKind() const);
-
-  /** \deprecated use getSigningInfo and setSigningInfo
-   *  \return identity Name
-   *  \pre getSigningParamsKind() == SIGNING_PARAMS_IDENTITY
-   */
-  DEPRECATED(
-  const Name&
-  getSigningIdentity() const);
-
-  /** \deprecated use getSigningInfo and setSigningInfo
-   *  \return certificate Name
-   *  \pre getSigningParamsKind() == SIGNING_PARAMS_CERTIFICATE
-   */
-  DEPRECATED(
-  const Name&
-  getSigningCertificate() const);
-
-  /** \deprecated use getSigningInfo and setSigningInfo
-   *  \brief chooses to use default identity and certificate
-   *  \post getSigningParamsKind() == SIGNING_PARAMS_DEFAULT
-   *  \return self
-   */
-  DEPRECATED(
-  CommandOptions&
-  setSigningDefault());
-
-  /** \deprecated use getSigningInfo and setSigningInfo
-   *  \brief chooses to use a specific identity and its default certificate
-   *  \post getSigningParamsKind() == SIGNING_PARAMS_IDENTITY
-   *  \post getIdentityName() == identityName
-   *  \return self
-   */
-  DEPRECATED(
-  CommandOptions&
-  setSigningIdentity(const Name& identityName));
-
-  /** \deprecated use getSigningInfo and setSigningInfo
-   *  \brief chooses to use a specific identity certificate
-   *  \param certificateName identity certificate Name
-   *  \throw std::invalid_argument if certificateName is invalid
-   *  \post getSigningParamsKind() == SIGNING_PARAMS_CERTIFICATE
-   *  \post getSigningCertificate() == certificateName
-   *  \return self
-   */
-  DEPRECATED(
-  CommandOptions&
-  setSigningCertificate(const Name& certificateName));
-
-  /** \deprecated use getSigningInfo and setSigningInfo
-   *  \brief chooses to use a specific identity certificate
-   *  \details This is equivalent to .setIdentityCertificate(certificate.getName())
-   */
-  DEPRECATED(
-  CommandOptions&
-  setSigningCertificate(const security::v1::IdentityCertificate& certificate));
-
-#endif // NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_KEEP_DEPRECATED_SIGNING_PARAMS
-
-public:
-  /** \brief gives the default command timeout: 10000ms
-   */
-  static const time::milliseconds DEFAULT_TIMEOUT;
-
-  /** \brief gives the default command prefix: ndn:/localhost/nfd
-   */
-  static const Name DEFAULT_PREFIX;
-
-private:
-  time::milliseconds m_timeout;
-  Name m_prefix;
-  security::SigningInfo m_signingInfo;
-};
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_HPP
+#include "../mgmt/nfd/command-options.hpp"
diff --git a/src/management/nfd-control-command.cpp b/src/management/nfd-control-command.cpp
deleted file mode 100644
index 45c2a08..0000000
--- a/src/management/nfd-control-command.cpp
+++ /dev/null
@@ -1,422 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2016 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.
- */
-
-#include "nfd-control-command.hpp"
-#include "nfd-command-options.hpp" // only used in deprecated functions
-
-namespace ndn {
-namespace nfd {
-
-ControlCommand::ControlCommand(const std::string& module, const std::string& verb)
-  : m_module(module)
-  , m_verb(verb)
-{
-}
-
-ControlCommand::~ControlCommand() = default;
-
-void
-ControlCommand::validateRequest(const ControlParameters& parameters) const
-{
-  m_requestValidator.validate(parameters);
-}
-
-void
-ControlCommand::applyDefaultsToRequest(ControlParameters& parameters) const
-{
-}
-
-void
-ControlCommand::validateResponse(const ControlParameters& parameters) const
-{
-  m_responseValidator.validate(parameters);
-}
-
-void
-ControlCommand::applyDefaultsToResponse(ControlParameters& parameters) const
-{
-}
-
-Name
-ControlCommand::getRequestName(const Name& commandPrefix,
-                               const ControlParameters& parameters) const
-{
-  this->validateRequest(parameters);
-
-  Name name = commandPrefix;
-  name.append(m_module).append(m_verb);
-  name.append(parameters.wireEncode());
-  return name;
-}
-
-ControlCommand::FieldValidator::FieldValidator()
-  : m_required(CONTROL_PARAMETER_UBOUND)
-  , m_optional(CONTROL_PARAMETER_UBOUND)
-{
-}
-
-void
-ControlCommand::FieldValidator::validate(const ControlParameters& parameters) const
-{
-  const std::vector<bool>& presentFields = parameters.getPresentFields();
-
-  for (size_t i = 0; i < CONTROL_PARAMETER_UBOUND; ++i) {
-    bool isPresent = presentFields[i];
-    if (m_required[i]) {
-      if (!isPresent) {
-        BOOST_THROW_EXCEPTION(ArgumentError(CONTROL_PARAMETER_FIELD[i] + " is required but "
-                                            "missing"));
-      }
-    }
-    else if (isPresent && !m_optional[i]) {
-      BOOST_THROW_EXCEPTION(ArgumentError(CONTROL_PARAMETER_FIELD[i] + " is forbidden but "
-                                          "present"));
-    }
-  }
-}
-
-FaceCreateCommand::FaceCreateCommand()
-  : ControlCommand("faces", "create")
-{
-  m_requestValidator
-    .required(CONTROL_PARAMETER_URI)
-    .optional(CONTROL_PARAMETER_FACE_PERSISTENCY)
-    .optional(CONTROL_PARAMETER_FLAGS)
-    .optional(CONTROL_PARAMETER_MASK);
-  m_responseValidator
-    .required(CONTROL_PARAMETER_FACE_ID)
-    .required(CONTROL_PARAMETER_FACE_PERSISTENCY)
-    .optional(CONTROL_PARAMETER_FLAGS)
-    .optional(CONTROL_PARAMETER_URI);
-}
-
-void
-FaceCreateCommand::applyDefaultsToRequest(ControlParameters& parameters) const
-{
-  parameters.setFaceId(0);
-
-  if (!parameters.hasFacePersistency()) {
-    parameters.setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERSISTENT);
-  }
-}
-
-void
-FaceCreateCommand::validateRequest(const ControlParameters& parameters) const
-{
-  this->ControlCommand::validateRequest(parameters);
-
-  if (parameters.hasFlags() != parameters.hasMask()) {
-    BOOST_THROW_EXCEPTION(ArgumentError("Flags must be accompanied by Mask"));
-  }
-}
-
-void
-FaceCreateCommand::validateResponse(const ControlParameters& parameters) const
-{
-  this->ControlCommand::validateResponse(parameters);
-
-  if (parameters.getFaceId() == 0) {
-    BOOST_THROW_EXCEPTION(ArgumentError("FaceId must not be zero"));
-  }
-}
-
-FaceUpdateCommand::FaceUpdateCommand()
-  : ControlCommand("faces", "update")
-{
-  m_requestValidator
-    .optional(CONTROL_PARAMETER_FACE_ID)
-    .optional(CONTROL_PARAMETER_FACE_PERSISTENCY)
-    .optional(CONTROL_PARAMETER_FLAGS)
-    .optional(CONTROL_PARAMETER_MASK);
-  m_responseValidator
-    .required(CONTROL_PARAMETER_FACE_ID)
-    .required(CONTROL_PARAMETER_FACE_PERSISTENCY)
-    .required(CONTROL_PARAMETER_FLAGS);
-}
-
-void
-FaceUpdateCommand::applyDefaultsToRequest(ControlParameters& parameters) const
-{
-  if (!parameters.hasFaceId()) {
-    parameters.setFaceId(0);
-  }
-}
-
-void
-FaceUpdateCommand::validateRequest(const ControlParameters& parameters) const
-{
-  this->ControlCommand::validateRequest(parameters);
-
-  if (parameters.hasFlags() != parameters.hasMask()) {
-    BOOST_THROW_EXCEPTION(ArgumentError("Flags must be accompanied by Mask"));
-  }
-}
-
-void
-FaceUpdateCommand::validateResponse(const ControlParameters& parameters) const
-{
-  this->ControlCommand::validateResponse(parameters);
-
-  if (parameters.getFaceId() == 0) {
-    BOOST_THROW_EXCEPTION(ArgumentError("FaceId must not be zero"));
-  }
-}
-
-FaceDestroyCommand::FaceDestroyCommand()
-  : ControlCommand("faces", "destroy")
-{
-  m_requestValidator
-    .required(CONTROL_PARAMETER_FACE_ID);
-  m_responseValidator = m_requestValidator;
-}
-
-void
-FaceDestroyCommand::validateRequest(const ControlParameters& parameters) const
-{
-  this->ControlCommand::validateRequest(parameters);
-
-  if (parameters.getFaceId() == 0) {
-    BOOST_THROW_EXCEPTION(ArgumentError("FaceId must not be zero"));
-  }
-}
-
-void
-FaceDestroyCommand::validateResponse(const ControlParameters& parameters) const
-{
-  this->validateRequest(parameters);
-}
-
-FaceLocalControlCommand::FaceLocalControlCommand(const std::string& verb)
-  : ControlCommand("faces", verb)
-{
-  m_requestValidator
-    .required(CONTROL_PARAMETER_LOCAL_CONTROL_FEATURE);
-  m_responseValidator = m_requestValidator;
-}
-
-void
-FaceLocalControlCommand::validateRequest(const ControlParameters& parameters) const
-{
-  this->ControlCommand::validateRequest(parameters);
-
-  switch (parameters.getLocalControlFeature()) {
-    case LOCAL_CONTROL_FEATURE_INCOMING_FACE_ID:
-    case LOCAL_CONTROL_FEATURE_NEXT_HOP_FACE_ID:
-      break;
-    default:
-      BOOST_THROW_EXCEPTION(ArgumentError("LocalControlFeature is invalid"));
-  }
-}
-
-void
-FaceLocalControlCommand::validateResponse(const ControlParameters& parameters) const
-{
-  this->validateRequest(parameters);
-}
-
-FaceEnableLocalControlCommand::FaceEnableLocalControlCommand()
-  : FaceLocalControlCommand("enable-local-control")
-{
-}
-
-FaceDisableLocalControlCommand::FaceDisableLocalControlCommand()
-  : FaceLocalControlCommand("disable-local-control")
-{
-}
-
-FibAddNextHopCommand::FibAddNextHopCommand()
-  : ControlCommand("fib", "add-nexthop")
-{
-  m_requestValidator
-    .required(CONTROL_PARAMETER_NAME)
-    .optional(CONTROL_PARAMETER_FACE_ID)
-    .optional(CONTROL_PARAMETER_COST);
-  m_responseValidator
-    .required(CONTROL_PARAMETER_NAME)
-    .required(CONTROL_PARAMETER_FACE_ID)
-    .required(CONTROL_PARAMETER_COST);
-}
-
-void
-FibAddNextHopCommand::applyDefaultsToRequest(ControlParameters& parameters) const
-{
-  if (!parameters.hasFaceId()) {
-    parameters.setFaceId(0);
-  }
-  if (!parameters.hasCost()) {
-    parameters.setCost(0);
-  }
-}
-
-void
-FibAddNextHopCommand::validateResponse(const ControlParameters& parameters) const
-{
-  this->ControlCommand::validateResponse(parameters);
-
-  if (parameters.getFaceId() == 0) {
-    BOOST_THROW_EXCEPTION(ArgumentError("FaceId must not be zero"));
-  }
-}
-
-FibRemoveNextHopCommand::FibRemoveNextHopCommand()
-  : ControlCommand("fib", "remove-nexthop")
-{
-  m_requestValidator
-    .required(CONTROL_PARAMETER_NAME)
-    .optional(CONTROL_PARAMETER_FACE_ID);
-  m_responseValidator
-    .required(CONTROL_PARAMETER_NAME)
-    .required(CONTROL_PARAMETER_FACE_ID);
-}
-
-void
-FibRemoveNextHopCommand::applyDefaultsToRequest(ControlParameters& parameters) const
-{
-  if (!parameters.hasFaceId()) {
-    parameters.setFaceId(0);
-  }
-}
-
-void
-FibRemoveNextHopCommand::validateResponse(const ControlParameters& parameters) const
-{
-  this->ControlCommand::validateResponse(parameters);
-
-  if (parameters.getFaceId() == 0) {
-    BOOST_THROW_EXCEPTION(ArgumentError("FaceId must not be zero"));
-  }
-}
-
-StrategyChoiceSetCommand::StrategyChoiceSetCommand()
-  : ControlCommand("strategy-choice", "set")
-{
-  m_requestValidator
-    .required(CONTROL_PARAMETER_NAME)
-    .required(CONTROL_PARAMETER_STRATEGY);
-  m_responseValidator = m_requestValidator;
-}
-
-StrategyChoiceUnsetCommand::StrategyChoiceUnsetCommand()
-  : ControlCommand("strategy-choice", "unset")
-{
-  m_requestValidator
-    .required(CONTROL_PARAMETER_NAME);
-  m_responseValidator = m_requestValidator;
-}
-
-void
-StrategyChoiceUnsetCommand::validateRequest(const ControlParameters& parameters) const
-{
-  this->ControlCommand::validateRequest(parameters);
-
-  if (parameters.getName().size() == 0) {
-    BOOST_THROW_EXCEPTION(ArgumentError("Name must not be ndn:/"));
-  }
-}
-
-void
-StrategyChoiceUnsetCommand::validateResponse(const ControlParameters& parameters) const
-{
-  this->validateRequest(parameters);
-}
-
-RibRegisterCommand::RibRegisterCommand()
-  : ControlCommand("rib", "register")
-{
-  m_requestValidator
-    .required(CONTROL_PARAMETER_NAME)
-    .optional(CONTROL_PARAMETER_FACE_ID)
-    .optional(CONTROL_PARAMETER_ORIGIN)
-    .optional(CONTROL_PARAMETER_COST)
-    .optional(CONTROL_PARAMETER_FLAGS)
-    .optional(CONTROL_PARAMETER_EXPIRATION_PERIOD);
-  m_responseValidator
-    .required(CONTROL_PARAMETER_NAME)
-    .required(CONTROL_PARAMETER_FACE_ID)
-    .required(CONTROL_PARAMETER_ORIGIN)
-    .required(CONTROL_PARAMETER_COST)
-    .required(CONTROL_PARAMETER_FLAGS)
-    .optional(CONTROL_PARAMETER_EXPIRATION_PERIOD);
-}
-
-void
-RibRegisterCommand::applyDefaultsToRequest(ControlParameters& parameters) const
-{
-  if (!parameters.hasFaceId()) {
-    parameters.setFaceId(0);
-  }
-  if (!parameters.hasOrigin()) {
-    parameters.setOrigin(ROUTE_ORIGIN_APP);
-  }
-  if (!parameters.hasCost()) {
-    parameters.setCost(0);
-  }
-  if (!parameters.hasFlags()) {
-    parameters.setFlags(ROUTE_FLAG_CHILD_INHERIT);
-  }
-}
-
-void
-RibRegisterCommand::validateResponse(const ControlParameters& parameters) const
-{
-  this->ControlCommand::validateResponse(parameters);
-
-  if (parameters.getFaceId() == 0) {
-    BOOST_THROW_EXCEPTION(ArgumentError("FaceId must not be zero"));
-  }
-}
-
-RibUnregisterCommand::RibUnregisterCommand()
-  : ControlCommand("rib", "unregister")
-{
-  m_requestValidator
-    .required(CONTROL_PARAMETER_NAME)
-    .optional(CONTROL_PARAMETER_FACE_ID)
-    .optional(CONTROL_PARAMETER_ORIGIN);
-  m_responseValidator
-    .required(CONTROL_PARAMETER_NAME)
-    .required(CONTROL_PARAMETER_FACE_ID)
-    .required(CONTROL_PARAMETER_ORIGIN);
-}
-
-void
-RibUnregisterCommand::applyDefaultsToRequest(ControlParameters& parameters) const
-{
-  if (!parameters.hasFaceId()) {
-    parameters.setFaceId(0);
-  }
-  if (!parameters.hasOrigin()) {
-    parameters.setOrigin(ROUTE_ORIGIN_APP);
-  }
-}
-
-void
-RibUnregisterCommand::validateResponse(const ControlParameters& parameters) const
-{
-  this->ControlCommand::validateResponse(parameters);
-
-  if (parameters.getFaceId() == 0) {
-    BOOST_THROW_EXCEPTION(ArgumentError("FaceId must not be zero"));
-  }
-}
-
-} // namespace nfd
-} // namespace ndn
diff --git a/src/management/nfd-control-command.hpp b/src/management/nfd-control-command.hpp
index 169d837..393e174 100644
--- a/src/management/nfd-control-command.hpp
+++ b/src/management/nfd-control-command.hpp
@@ -19,330 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_CONTROL_COMMAND_HPP
-#define NDN_MANAGEMENT_NFD_CONTROL_COMMAND_HPP
-
-#include "nfd-control-parameters.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/**
- * \ingroup management
- * \brief base class of NFD ControlCommand
- * \sa http://redmine.named-data.net/projects/nfd/wiki/ControlCommand
+/** \file
+ *  \deprecated Use mgmt/nfd/control-command.hpp
  */
-class ControlCommand : noncopyable
-{
-public:
-  /** \brief represents an error in ControlParameters
-   */
-  class ArgumentError : public std::invalid_argument
-  {
-  public:
-    explicit
-    ArgumentError(const std::string& what)
-      : std::invalid_argument(what)
-    {
-    }
-  };
-
-  virtual
-  ~ControlCommand();
-
-  /** \brief validate request parameters
-   *  \throw ArgumentError if parameters are invalid
-   */
-  virtual void
-  validateRequest(const ControlParameters& parameters) const;
-
-  /** \brief apply default values to missing fields in request
-   */
-  virtual void
-  applyDefaultsToRequest(ControlParameters& parameters) const;
-
-  /** \brief validate response parameters
-   *  \throw ArgumentError if parameters are invalid
-   */
-  virtual void
-  validateResponse(const ControlParameters& parameters) const;
-
-  /** \brief apply default values to missing fields in response
-   */
-  virtual void
-  applyDefaultsToResponse(ControlParameters& parameters) const;
-
-  /** \brief construct the Name for a request Interest
-   *  \throw ArgumentError if parameters are invalid
-   */
-  Name
-  getRequestName(const Name& commandPrefix, const ControlParameters& parameters) const;
-
-protected:
-  ControlCommand(const std::string& module, const std::string& verb);
-
-  class FieldValidator
-  {
-  public:
-    FieldValidator();
-
-    /** \brief declare a required field
-     */
-    FieldValidator&
-    required(ControlParameterField field)
-    {
-      m_required[field] = true;
-      return *this;
-    }
-
-    /** \brief declare an optional field
-     */
-    FieldValidator&
-    optional(ControlParameterField field)
-    {
-      m_optional[field] = true;
-      return *this;
-    }
-
-    /** \brief verify that all required fields are present,
-     *         and all present fields are either required or optional
-     *  \throw ArgumentError
-     */
-    void
-    validate(const ControlParameters& parameters) const;
-
-  private:
-    std::vector<bool> m_required;
-    std::vector<bool> m_optional;
-  };
-
-protected:
-  /** \brief FieldValidator for request ControlParameters
-   *
-   *  Constructor of subclass should populate this validator.
-   */
-  FieldValidator m_requestValidator;
-  /** \brief FieldValidator for response ControlParameters
-   *
-   *  Constructor of subclass should populate this validator.
-   */
-  FieldValidator m_responseValidator;
-
-private:
-  name::Component m_module;
-  name::Component m_verb;
-};
-
-
-/**
- * \ingroup management
- * \brief represents a faces/create command
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Create-a-face
- */
-class FaceCreateCommand : public ControlCommand
-{
-public:
-  FaceCreateCommand();
-
-  virtual void
-  applyDefaultsToRequest(ControlParameters& parameters) const override;
-
-  virtual void
-  validateRequest(const ControlParameters& parameters) const override;
-
-  virtual void
-  validateResponse(const ControlParameters& parameters) const override;
-};
-
-
-/**
- * \ingroup management
- * \brief represents a faces/update command
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Update-a-face
- */
-class FaceUpdateCommand : public ControlCommand
-{
-public:
-  FaceUpdateCommand();
-
-  virtual void
-  applyDefaultsToRequest(ControlParameters& parameters) const override;
-
-  virtual void
-  validateRequest(const ControlParameters& parameters) const override;
-
-  /**
-   * \note This can only validate ControlParameters in a success response.
-   *       Failure responses should be validated with validateRequest.
-   */
-  virtual void
-  validateResponse(const ControlParameters& parameters) const override;
-};
-
-
-/**
- * \ingroup management
- * \brief represents a faces/destroy command
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Destroy-a-face
- */
-class FaceDestroyCommand : public ControlCommand
-{
-public:
-  FaceDestroyCommand();
-
-  virtual void
-  validateRequest(const ControlParameters& parameters) const override;
-
-  virtual void
-  validateResponse(const ControlParameters& parameters) const override;
-};
-
-
-/**
- * \ingroup management
- * \brief Base class for faces/[*]-local-control commands
- */
-class FaceLocalControlCommand : public ControlCommand
-{
-public:
-  virtual void
-  validateRequest(const ControlParameters& parameters) const override;
-
-  virtual void
-  validateResponse(const ControlParameters& parameters) const override;
-
-protected:
-  explicit
-  FaceLocalControlCommand(const std::string& verb);
-};
-
-
-/**
- * \ingroup management
- * \brief represents a faces/enable-local-control command
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Enable-a-LocalControlHeader-feature
- */
-class FaceEnableLocalControlCommand : public FaceLocalControlCommand
-{
-public:
-  FaceEnableLocalControlCommand();
-};
-
-
-/**
- * \ingroup management
- * \brief represents a faces/disable-local-control command
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Disable-a-LocalControlHeader-feature
- */
-class FaceDisableLocalControlCommand : public FaceLocalControlCommand
-{
-public:
-  FaceDisableLocalControlCommand();
-};
-
-
-/**
- * \ingroup management
- * \brief represents a fib/add-nexthop command
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FibMgmt#Add-a-nexthop
- */
-class FibAddNextHopCommand : public ControlCommand
-{
-public:
-  FibAddNextHopCommand();
-
-  virtual void
-  applyDefaultsToRequest(ControlParameters& parameters) const override;
-
-  virtual void
-  validateResponse(const ControlParameters& parameters) const override;
-};
-
-
-/**
- * \ingroup management
- * \brief represents a fib/remove-nexthop command
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FibMgmt#Remove-a-nexthop
- */
-class FibRemoveNextHopCommand : public ControlCommand
-{
-public:
-  FibRemoveNextHopCommand();
-
-  virtual void
-  applyDefaultsToRequest(ControlParameters& parameters) const override;
-
-  virtual void
-  validateResponse(const ControlParameters& parameters) const override;
-};
-
-
-/**
- * \ingroup management
- * \brief represents a strategy-choice/set command
- * \sa http://redmine.named-data.net/projects/nfd/wiki/StrategyChoice#Set-the-strategy-for-a-namespace
- */
-class StrategyChoiceSetCommand : public ControlCommand
-{
-public:
-  StrategyChoiceSetCommand();
-};
-
-
-/**
- * \ingroup management
- * \brief represents a strategy-choice/set command
- * \sa http://redmine.named-data.net/projects/nfd/wiki/StrategyChoice#Unset-the-strategy-for-a-namespace
- */
-class StrategyChoiceUnsetCommand : public ControlCommand
-{
-public:
-  StrategyChoiceUnsetCommand();
-
-  virtual void
-  validateRequest(const ControlParameters& parameters) const override;
-
-  virtual void
-  validateResponse(const ControlParameters& parameters) const override;
-};
-
-
-/**
- * \ingroup management
- * \brief represents a rib/register command
- * \sa http://redmine.named-data.net/projects/nfd/wiki/RibMgmt#Register-a-route
- */
-class RibRegisterCommand : public ControlCommand
-{
-public:
-  RibRegisterCommand();
-
-  virtual void
-  applyDefaultsToRequest(ControlParameters& parameters) const override;
-
-  virtual void
-  validateResponse(const ControlParameters& parameters) const override;
-};
-
-
-/**
- * \ingroup management
- * \brief represents a rib/unregister command
- * \sa http://redmine.named-data.net/projects/nfd/wiki/RibMgmt#Unregister-a-route
- */
-class RibUnregisterCommand : public ControlCommand
-{
-public:
-  RibUnregisterCommand();
-
-  virtual void
-  applyDefaultsToRequest(ControlParameters& parameters) const override;
-
-  virtual void
-  validateResponse(const ControlParameters& parameters) const override;
-};
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_CONTROL_COMMAND_HPP
+#include "../mgmt/nfd/control-command.hpp"
diff --git a/src/management/nfd-control-parameters.cpp b/src/management/nfd-control-parameters.cpp
deleted file mode 100644
index f68ca26..0000000
--- a/src/management/nfd-control-parameters.cpp
+++ /dev/null
@@ -1,335 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2016 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.
- */
-
-#include "nfd-control-parameters.hpp"
-#include "encoding/tlv-nfd.hpp"
-#include "encoding/block-helpers.hpp"
-#include "util/concepts.hpp"
-
-namespace ndn {
-namespace nfd {
-
-//BOOST_CONCEPT_ASSERT((boost::EqualityComparable<ControlParameters>));
-BOOST_CONCEPT_ASSERT((WireEncodable<ControlParameters>));
-BOOST_CONCEPT_ASSERT((WireDecodable<ControlParameters>));
-static_assert(std::is_base_of<tlv::Error, ControlParameters::Error>::value,
-              "ControlParameters::Error must inherit from tlv::Error");
-
-ControlParameters::ControlParameters()
-  : m_hasFields(CONTROL_PARAMETER_UBOUND)
-{
-}
-
-ControlParameters::ControlParameters(const Block& block)
-  : m_hasFields(CONTROL_PARAMETER_UBOUND)
-{
-  wireDecode(block);
-}
-
-template<encoding::Tag TAG>
-size_t
-ControlParameters::wireEncode(EncodingImpl<TAG>& encoder) const
-{
-  size_t totalLength = 0;
-
-  if (this->hasFacePersistency()) {
-    totalLength += prependNonNegativeIntegerBlock(encoder,
-                   tlv::nfd::FacePersistency, m_facePersistency);
-  }
-  if (this->hasExpirationPeriod()) {
-    totalLength += prependNonNegativeIntegerBlock(encoder,
-                   tlv::nfd::ExpirationPeriod, m_expirationPeriod.count());
-  }
-  if (this->hasStrategy()) {
-    totalLength += prependNestedBlock(encoder, tlv::nfd::Strategy, m_strategy);
-  }
-  if (this->hasMask()) {
-    totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Mask, m_mask);
-  }
-  if (this->hasFlags()) {
-    totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Flags, m_flags);
-  }
-  if (this->hasCost()) {
-    totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Cost, m_cost);
-  }
-  if (this->hasOrigin()) {
-    totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Origin, m_origin);
-  }
-  if (this->hasLocalControlFeature()) {
-    totalLength += prependNonNegativeIntegerBlock(encoder,
-                   tlv::nfd::LocalControlFeature, m_localControlFeature);
-  }
-  if (this->hasUri()) {
-    size_t valLength = encoder.prependByteArray(
-                       reinterpret_cast<const uint8_t*>(m_uri.c_str()), m_uri.size());
-    totalLength += valLength;
-    totalLength += encoder.prependVarNumber(valLength);
-    totalLength += encoder.prependVarNumber(tlv::nfd::Uri);
-  }
-  if (this->hasFaceId()) {
-    totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceId, m_faceId);
-  }
-  if (this->hasName()) {
-    totalLength += m_name.wireEncode(encoder);
-  }
-
-  totalLength += encoder.prependVarNumber(totalLength);
-  totalLength += encoder.prependVarNumber(tlv::nfd::ControlParameters);
-  return totalLength;
-}
-
-template size_t
-ControlParameters::wireEncode<encoding::EncoderTag>(EncodingImpl<encoding::EncoderTag>&) const;
-
-template size_t
-ControlParameters::wireEncode<encoding::EstimatorTag>(EncodingImpl<encoding::EstimatorTag>&) const;
-
-Block
-ControlParameters::wireEncode() const
-{
-  if (m_wire.hasWire())
-    return m_wire;
-
-  EncodingEstimator estimator;
-  size_t estimatedSize = wireEncode(estimator);
-
-  EncodingBuffer buffer(estimatedSize, 0);
-  wireEncode(buffer);
-
-  m_wire = buffer.block();
-  return m_wire;
-}
-
-void
-ControlParameters::wireDecode(const Block& block)
-{
-  if (block.type() != tlv::nfd::ControlParameters) {
-    BOOST_THROW_EXCEPTION(Error("Expecting TLV-TYPE ControlParameters"));
-  }
-  m_wire = block;
-  m_wire.parse();
-  Block::element_const_iterator val;
-
-  val = m_wire.find(tlv::Name);
-  m_hasFields[CONTROL_PARAMETER_NAME] = val != m_wire.elements_end();
-  if (this->hasName()) {
-    m_name.wireDecode(*val);
-  }
-
-  val = m_wire.find(tlv::nfd::FaceId);
-  m_hasFields[CONTROL_PARAMETER_FACE_ID] = val != m_wire.elements_end();
-  if (this->hasFaceId()) {
-    m_faceId = static_cast<uint64_t>(readNonNegativeInteger(*val));
-  }
-
-  val = m_wire.find(tlv::nfd::Uri);
-  m_hasFields[CONTROL_PARAMETER_URI] = val != m_wire.elements_end();
-  if (this->hasUri()) {
-    m_uri.assign(reinterpret_cast<const char*>(val->value()), val->value_size());
-  }
-
-  val = m_wire.find(tlv::nfd::LocalControlFeature);
-  m_hasFields[CONTROL_PARAMETER_LOCAL_CONTROL_FEATURE] = val != m_wire.elements_end();
-  if (this->hasLocalControlFeature()) {
-    m_localControlFeature = static_cast<LocalControlFeature>(readNonNegativeInteger(*val));
-  }
-
-  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));
-  }
-
-  val = m_wire.find(tlv::nfd::Cost);
-  m_hasFields[CONTROL_PARAMETER_COST] = val != m_wire.elements_end();
-  if (this->hasCost()) {
-    m_cost = static_cast<uint64_t>(readNonNegativeInteger(*val));
-  }
-
-  val = m_wire.find(tlv::nfd::Flags);
-  m_hasFields[CONTROL_PARAMETER_FLAGS] = val != m_wire.elements_end();
-  if (this->hasFlags()) {
-    m_flags = static_cast<uint64_t>(readNonNegativeInteger(*val));
-  }
-
-  val = m_wire.find(tlv::nfd::Mask);
-  m_hasFields[CONTROL_PARAMETER_MASK] = val != m_wire.elements_end();
-  if (this->hasMask()) {
-    m_mask = static_cast<uint64_t>(readNonNegativeInteger(*val));
-  }
-
-  val = m_wire.find(tlv::nfd::Strategy);
-  m_hasFields[CONTROL_PARAMETER_STRATEGY] = val != m_wire.elements_end();
-  if (this->hasStrategy()) {
-    val->parse();
-    if (val->elements().empty()) {
-      BOOST_THROW_EXCEPTION(Error("Expecting Strategy/Name"));
-    }
-    else {
-      m_strategy.wireDecode(*val->elements_begin());
-    }
-  }
-
-  val = m_wire.find(tlv::nfd::ExpirationPeriod);
-  m_hasFields[CONTROL_PARAMETER_EXPIRATION_PERIOD] = val != m_wire.elements_end();
-  if (this->hasExpirationPeriod()) {
-    m_expirationPeriod = time::milliseconds(readNonNegativeInteger(*val));
-  }
-
-  val = m_wire.find(tlv::nfd::FacePersistency);
-  m_hasFields[CONTROL_PARAMETER_FACE_PERSISTENCY] = val != m_wire.elements_end();
-  if (this->hasFacePersistency()) {
-    m_facePersistency = static_cast<FacePersistency>(readNonNegativeInteger(*val));
-  }
-}
-
-bool
-ControlParameters::hasFlagBit(size_t bit) const
-{
-  if (bit >= 64) {
-    BOOST_THROW_EXCEPTION(std::out_of_range("bit must be within range [0, 64)"));
-  }
-
-  if (!hasMask()) {
-    return false;
-  }
-
-  return getMask() & (1 << bit);
-}
-
-bool
-ControlParameters::getFlagBit(size_t bit) const
-{
-  if (bit >= 64) {
-    BOOST_THROW_EXCEPTION(std::out_of_range("bit must be within range [0, 64)"));
-  }
-
-  if (!hasFlags()) {
-    return false;
-  }
-
-  return getFlags() & (1 << bit);
-}
-
-ControlParameters&
-ControlParameters::setFlagBit(size_t bit, bool value, bool wantMask/* = true*/)
-{
-  if (bit >= 64) {
-    BOOST_THROW_EXCEPTION(std::out_of_range("bit must be within range [0, 64)"));
-  }
-
-  uint64_t flags = hasFlags() ? getFlags() : 0;
-  if (value) {
-    flags |= (1 << bit);
-  }
-  else {
-    flags &= ~(1 << bit);
-  }
-  setFlags(flags);
-
-  if (wantMask) {
-    uint64_t mask = hasMask() ? getMask() : 0;
-    mask |= (1 << bit);
-    setMask(mask);
-  }
-
-  return *this;
-}
-
-ControlParameters&
-ControlParameters::unsetFlagBit(size_t bit)
-{
-  if (bit >= 64) {
-    BOOST_THROW_EXCEPTION(std::out_of_range("bit must be within range [0, 64)"));
-  }
-
-  uint64_t mask = hasMask() ? getMask() : 0;
-  mask &= ~(1 << bit);
-  if (mask == 0) {
-    unsetMask();
-    unsetFlags();
-  }
-  else {
-    setMask(mask);
-  }
-
-  return *this;
-}
-
-std::ostream&
-operator<<(std::ostream& os, const ControlParameters& parameters)
-{
-  os << "ControlParameters(";
-
-  if (parameters.hasName()) {
-    os << "Name: " << parameters.getName() << ", ";
-  }
-
-  if (parameters.hasFaceId()) {
-    os << "FaceId: " << parameters.getFaceId() << ", ";
-  }
-
-  if (parameters.hasUri()) {
-    os << "Uri: " << parameters.getUri() << ", ";
-  }
-
-  if (parameters.hasLocalControlFeature()) {
-    os << "LocalControlFeature: " << parameters.getLocalControlFeature() << ", ";
-  }
-
-  if (parameters.hasOrigin()) {
-    os << "Origin: " << parameters.getOrigin() << ", ";
-  }
-
-  if (parameters.hasCost()) {
-    os << "Cost: " << parameters.getCost() << ", ";
-  }
-
-  if (parameters.hasFlags()) {
-    std::ios_base::fmtflags osFlags = os.flags();
-    os << "Flags: " << std::showbase << std::hex << parameters.getFlags() << ", ";
-    os.flags(osFlags);
-  }
-
-  if (parameters.hasMask()) {
-    std::ios_base::fmtflags osFlags = os.flags();
-    os << "Mask: " << std::showbase << std::hex << parameters.getMask() << ", ";
-    os.flags(osFlags);
-  }
-
-  if (parameters.hasStrategy()) {
-    os << "Strategy: " << parameters.getStrategy() << ", ";
-  }
-
-  if (parameters.hasExpirationPeriod()) {
-    os << "ExpirationPeriod: " << parameters.getExpirationPeriod() << ", ";
-  }
-
-  if (parameters.hasFacePersistency()) {
-    os << "FacePersistency: " << parameters.getFacePersistency() << ", ";
-  }
-
-  os << ")";
-  return os;
-}
-
-} // namespace nfd
-} // namespace ndn
diff --git a/src/management/nfd-control-parameters.hpp b/src/management/nfd-control-parameters.hpp
index 92f40b8..a22bc6f 100644
--- a/src/management/nfd-control-parameters.hpp
+++ b/src/management/nfd-control-parameters.hpp
@@ -19,496 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_CONTROL_PARAMETERS_HPP
-#define NDN_MANAGEMENT_NFD_CONTROL_PARAMETERS_HPP
-
-#include "../encoding/nfd-constants.hpp"
-#include "../name.hpp"
-#include "../util/time.hpp"
-#include "../mgmt/control-parameters.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/**
- * \ingroup management
+/** \file
+ *  \deprecated Use mgmt/nfd/control-parameters.hpp
  */
-enum ControlParameterField {
-  CONTROL_PARAMETER_NAME,
-  CONTROL_PARAMETER_FACE_ID,
-  CONTROL_PARAMETER_URI,
-  CONTROL_PARAMETER_LOCAL_CONTROL_FEATURE,
-  CONTROL_PARAMETER_ORIGIN,
-  CONTROL_PARAMETER_COST,
-  CONTROL_PARAMETER_FLAGS,
-  CONTROL_PARAMETER_MASK,
-  CONTROL_PARAMETER_STRATEGY,
-  CONTROL_PARAMETER_EXPIRATION_PERIOD,
-  CONTROL_PARAMETER_FACE_PERSISTENCY,
-  CONTROL_PARAMETER_UBOUND
-};
-
-const std::string CONTROL_PARAMETER_FIELD[CONTROL_PARAMETER_UBOUND] = {
-  "Name",
-  "FaceId",
-  "Uri",
-  "LocalControlFeature",
-  "Origin",
-  "Cost",
-  "Flags",
-  "Mask",
-  "Strategy",
-  "ExpirationPeriod",
-  "FacePersistency"
-};
-
-/**
- * \ingroup management
- * \deprecated use Flags+Mask fields instead
- */
-enum LocalControlFeature {
-  LOCAL_CONTROL_FEATURE_INCOMING_FACE_ID = 1,
-  LOCAL_CONTROL_FEATURE_NEXT_HOP_FACE_ID = 2
-};
-
-/**
- * \ingroup management
- * \brief represents parameters in a ControlCommand request or response
- * \sa http://redmine.named-data.net/projects/nfd/wiki/ControlCommand#ControlParameters
- * \details This type is copyable because it's an abstraction of a TLV type.
- */
-class ControlParameters : public ndn::mgmt::ControlParameters
-{
-public:
-  class Error : public tlv::Error
-  {
-  public:
-    explicit
-    Error(const std::string& what)
-      : tlv::Error(what)
-    {
-    }
-  };
-
-  ControlParameters();
-
-  explicit
-  ControlParameters(const Block& block);
-
-  template<encoding::Tag TAG>
-  size_t
-  wireEncode(EncodingImpl<TAG>& encoder) const;
-
-  virtual Block
-  wireEncode() const final;
-
-  virtual void
-  wireDecode(const Block& wire) final;
-
-public: // getters & setters
-  bool
-  hasName() const
-  {
-    return m_hasFields[CONTROL_PARAMETER_NAME];
-  }
-
-  const Name&
-  getName() const
-  {
-    BOOST_ASSERT(this->hasName());
-    return m_name;
-  }
-
-  ControlParameters&
-  setName(const Name& name)
-  {
-    m_wire.reset();
-    m_name = name;
-    m_hasFields[CONTROL_PARAMETER_NAME] = true;
-    return *this;
-  }
-
-  ControlParameters&
-  unsetName()
-  {
-    m_wire.reset();
-    m_hasFields[CONTROL_PARAMETER_NAME] = false;
-    return *this;
-  }
-
-  bool
-  hasFaceId() const
-  {
-    return m_hasFields[CONTROL_PARAMETER_FACE_ID];
-  }
-
-  uint64_t
-  getFaceId() const
-  {
-    BOOST_ASSERT(this->hasFaceId());
-    return m_faceId;
-  }
-
-  ControlParameters&
-  setFaceId(uint64_t faceId)
-  {
-    m_wire.reset();
-    m_faceId = faceId;
-    m_hasFields[CONTROL_PARAMETER_FACE_ID] = true;
-    return *this;
-  }
-
-  ControlParameters&
-  unsetFaceId()
-  {
-    m_wire.reset();
-    m_hasFields[CONTROL_PARAMETER_FACE_ID] = false;
-    return *this;
-  }
-
-  bool
-  hasUri() const
-  {
-    return m_hasFields[CONTROL_PARAMETER_URI];
-  }
-
-  const std::string&
-  getUri() const
-  {
-    BOOST_ASSERT(this->hasUri());
-    return m_uri;
-  }
-
-  ControlParameters&
-  setUri(const std::string& uri)
-  {
-    m_wire.reset();
-    m_uri = uri;
-    m_hasFields[CONTROL_PARAMETER_URI] = true;
-    return *this;
-  }
-
-  ControlParameters&
-  unsetUri()
-  {
-    m_wire.reset();
-    m_hasFields[CONTROL_PARAMETER_URI] = false;
-    return *this;
-  }
-
-  /**
-   * \deprecated use Flags+Mask fields instead
-   */
-  bool
-  hasLocalControlFeature() const
-  {
-    return m_hasFields[CONTROL_PARAMETER_LOCAL_CONTROL_FEATURE];
-  }
-
-  /**
-   * \deprecated use Flags+Mask fields instead
-   */
-  LocalControlFeature
-  getLocalControlFeature() const
-  {
-    BOOST_ASSERT(this->hasLocalControlFeature());
-    return m_localControlFeature;
-  }
-
-  /**
-   * \deprecated use Flags+Mask fields instead
-   */
-  ControlParameters&
-  setLocalControlFeature(LocalControlFeature localControlFeature)
-  {
-    m_wire.reset();
-    m_localControlFeature = localControlFeature;
-    m_hasFields[CONTROL_PARAMETER_LOCAL_CONTROL_FEATURE] = true;
-    return *this;
-  }
-
-  /**
-   * \deprecated use Flags+Mask fields instead
-   */
-  ControlParameters&
-  unsetLocalControlFeature()
-  {
-    m_wire.reset();
-    m_hasFields[CONTROL_PARAMETER_LOCAL_CONTROL_FEATURE] = false;
-    return *this;
-  }
-
-  bool
-  hasOrigin() const
-  {
-    return m_hasFields[CONTROL_PARAMETER_ORIGIN];
-  }
-
-  uint64_t
-  getOrigin() const
-  {
-    BOOST_ASSERT(this->hasOrigin());
-    return m_origin;
-  }
-
-  ControlParameters&
-  setOrigin(uint64_t origin)
-  {
-    m_wire.reset();
-    m_origin = origin;
-    m_hasFields[CONTROL_PARAMETER_ORIGIN] = true;
-    return *this;
-  }
-
-  ControlParameters&
-  unsetOrigin()
-  {
-    m_wire.reset();
-    m_hasFields[CONTROL_PARAMETER_ORIGIN] = false;
-    return *this;
-  }
-
-  bool
-  hasCost() const
-  {
-    return m_hasFields[CONTROL_PARAMETER_COST];
-  }
-
-  uint64_t
-  getCost() const
-  {
-    BOOST_ASSERT(this->hasCost());
-    return m_cost;
-  }
-
-  ControlParameters&
-  setCost(uint64_t cost)
-  {
-    m_wire.reset();
-    m_cost = cost;
-    m_hasFields[CONTROL_PARAMETER_COST] = true;
-    return *this;
-  }
-
-  ControlParameters&
-  unsetCost()
-  {
-    m_wire.reset();
-    m_hasFields[CONTROL_PARAMETER_COST] = false;
-    return *this;
-  }
-
-  bool
-  hasFlags() const
-  {
-    return m_hasFields[CONTROL_PARAMETER_FLAGS];
-  }
-
-  uint64_t
-  getFlags() const
-  {
-    BOOST_ASSERT(this->hasFlags());
-    return m_flags;
-  }
-
-  ControlParameters&
-  setFlags(uint64_t flags)
-  {
-    m_wire.reset();
-    m_flags = flags;
-    m_hasFields[CONTROL_PARAMETER_FLAGS] = true;
-    return *this;
-  }
-
-  ControlParameters&
-  unsetFlags()
-  {
-    m_wire.reset();
-    m_hasFields[CONTROL_PARAMETER_FLAGS] = false;
-    return *this;
-  }
-
-  bool
-  hasMask() const
-  {
-    return m_hasFields[CONTROL_PARAMETER_MASK];
-  }
-
-  uint64_t
-  getMask() const
-  {
-    BOOST_ASSERT(this->hasMask());
-    return m_mask;
-  }
-
-  ControlParameters&
-  setMask(uint64_t mask)
-  {
-    m_wire.reset();
-    m_mask = mask;
-    m_hasFields[CONTROL_PARAMETER_MASK] = true;
-    return *this;
-  }
-
-  ControlParameters&
-  unsetMask()
-  {
-    m_wire.reset();
-    m_hasFields[CONTROL_PARAMETER_MASK] = false;
-    return *this;
-  }
-
-  bool
-  hasStrategy() const
-  {
-    return m_hasFields[CONTROL_PARAMETER_STRATEGY];
-  }
-
-  const Name&
-  getStrategy() const
-  {
-    BOOST_ASSERT(this->hasStrategy());
-    return m_strategy;
-  }
-
-  ControlParameters&
-  setStrategy(const Name& strategy)
-  {
-    m_wire.reset();
-    m_strategy = strategy;
-    m_hasFields[CONTROL_PARAMETER_STRATEGY] = true;
-    return *this;
-  }
-
-  ControlParameters&
-  unsetStrategy()
-  {
-    m_wire.reset();
-    m_hasFields[CONTROL_PARAMETER_STRATEGY] = false;
-    return *this;
-  }
-
-  bool
-  hasExpirationPeriod() const
-  {
-    return m_hasFields[CONTROL_PARAMETER_EXPIRATION_PERIOD];
-  }
-
-  const time::milliseconds&
-  getExpirationPeriod() const
-  {
-    BOOST_ASSERT(this->hasExpirationPeriod());
-    return m_expirationPeriod;
-  }
-
-  ControlParameters&
-  setExpirationPeriod(const time::milliseconds& expirationPeriod)
-  {
-    m_wire.reset();
-    m_expirationPeriod = expirationPeriod;
-    m_hasFields[CONTROL_PARAMETER_EXPIRATION_PERIOD] = true;
-    return *this;
-  }
-
-  ControlParameters&
-  unsetExpirationPeriod()
-  {
-    m_wire.reset();
-    m_hasFields[CONTROL_PARAMETER_EXPIRATION_PERIOD] = false;
-    return *this;
-  }
-
-  bool
-  hasFacePersistency() const
-  {
-    return m_hasFields[CONTROL_PARAMETER_FACE_PERSISTENCY];
-  }
-
-  FacePersistency
-  getFacePersistency() const
-  {
-    BOOST_ASSERT(this->hasFacePersistency());
-    return m_facePersistency;
-  }
-
-  ControlParameters&
-  setFacePersistency(FacePersistency persistency)
-  {
-    m_wire.reset();
-    m_facePersistency = persistency;
-    m_hasFields[CONTROL_PARAMETER_FACE_PERSISTENCY] = true;
-    return *this;
-  }
-
-  ControlParameters&
-  unsetFacePersistency()
-  {
-    m_wire.reset();
-    m_hasFields[CONTROL_PARAMETER_FACE_PERSISTENCY] = false;
-    return *this;
-  }
-
-  const std::vector<bool>&
-  getPresentFields() const
-  {
-    return m_hasFields;
-  }
-
-public: // Flags and Mask helpers
-  /**
-   * \return whether bit is enabled in Mask
-   * \param bit bit position within range [0, 64) (least significant bit is 0)
-   */
-  bool
-  hasFlagBit(size_t bit) const;
-
-  /**
-   * \return bit at a position in Flags
-   * \param bit bit position within range [0, 64) (least significant bit is 0)
-   */
-  bool
-  getFlagBit(size_t bit) const;
-
-  /**
-   * \brief set a bit in Flags
-   * \param bit bit position within range [0, 64) (least significant bit is 0)
-   * \param value new value in Flags
-   * \param wantMask if true, enable the bit in Mask
-   */
-  ControlParameters&
-  setFlagBit(size_t bit, bool value, bool wantMask = true);
-
-  /**
-   * \brief disable a bit in Mask
-   * \param bit bit position within range [0, 64) (least significant bit is 0)
-   * \post If all bits are disabled, Flags and Mask fields are deleted.
-   */
-  ControlParameters&
-  unsetFlagBit(size_t bit);
-
-private: // fields
-  std::vector<bool>   m_hasFields;
-
-  Name                m_name;
-  uint64_t            m_faceId;
-  std::string         m_uri;
-  LocalControlFeature m_localControlFeature;
-  uint64_t            m_origin;
-  uint64_t            m_cost;
-  uint64_t            m_flags;
-  uint64_t            m_mask;
-  Name                m_strategy;
-  time::milliseconds  m_expirationPeriod;
-  FacePersistency     m_facePersistency;
-
-private:
-  mutable Block m_wire;
-};
-
-std::ostream&
-operator<<(std::ostream& os, const ControlParameters& parameters);
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_CONTROL_PARAMETERS_HPP
+#include "../mgmt/nfd/control-parameters.hpp"
diff --git a/src/management/nfd-control-response.hpp b/src/management/nfd-control-response.hpp
index 44f2007..74e38f3 100644
--- a/src/management/nfd-control-response.hpp
+++ b/src/management/nfd-control-response.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,17 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_CONTROL_RESPONSE_HPP
-#define NDN_MANAGEMENT_CONTROL_RESPONSE_HPP
-
-#include "../mgmt/dispatcher.hpp"
-
-namespace ndn {
-namespace nfd {
-
-typedef ndn::mgmt::ControlResponse ControlResponse;
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_CONTROL_RESPONSE_HPP
+/** \file
+ *  \deprecated Use mgmt/nfd/control-response.hpp
+ */
+#include "../mgmt/nfd/control-response.hpp"
diff --git a/src/management/nfd-controller.cpp b/src/management/nfd-controller.cpp
deleted file mode 100644
index b395d6b..0000000
--- a/src/management/nfd-controller.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2016 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.
- */
-
-#include "nfd-controller.hpp"
-#include "../face.hpp"
-#include "../security/key-chain.hpp"
-#include "../util/segment-fetcher.hpp"
-
-namespace ndn {
-namespace nfd {
-
-using ndn::util::SegmentFetcher;
-
-const uint32_t Controller::ERROR_TIMEOUT = 10060; // WinSock ESAETIMEDOUT
-const uint32_t Controller::ERROR_NACK = 10800; // 10000 + TLV-TYPE of Nack header
-const uint32_t Controller::ERROR_VALIDATION = 10021; // 10000 + TLS1_ALERT_DECRYPTION_FAILED
-const uint32_t Controller::ERROR_SERVER = 500;
-const uint32_t Controller::ERROR_LBOUND = 400;
-ValidatorNull Controller::s_validatorNull;
-
-Controller::Controller(Face& face, KeyChain& keyChain, Validator& validator)
-  : m_face(face)
-  , m_keyChain(keyChain)
-  , m_validator(validator)
-{
-}
-
-void
-Controller::startCommand(const shared_ptr<ControlCommand>& command,
-                         const ControlParameters& parameters,
-                         const CommandSucceedCallback& onSuccess1,
-                         const CommandFailCallback& onFailure1,
-                         const CommandOptions& options)
-{
-  const CommandSucceedCallback& onSuccess = onSuccess1 ?
-    onSuccess1 : [] (const ControlParameters&) {};
-  const CommandFailCallback& onFailure = onFailure1 ?
-    onFailure1 : [] (const ControlResponse&) {};
-
-  Name requestName = command->getRequestName(options.getPrefix(), parameters);
-  Interest interest(requestName);
-  interest.setInterestLifetime(options.getTimeout());
-  m_keyChain.sign(interest, options.getSigningInfo());
-
-  m_face.expressInterest(interest,
-    [=] (const Interest&, const Data& data) {
-      this->processCommandResponse(data, command, onSuccess, onFailure);
-    },
-    [=] (const Interest&, const lp::Nack&) {
-      onFailure(ControlResponse(Controller::ERROR_NACK, "network Nack received"));
-    },
-    [=] (const Interest&) {
-      onFailure(ControlResponse(Controller::ERROR_TIMEOUT, "request timed out"));
-    });
-}
-
-void
-Controller::processCommandResponse(const Data& data,
-                                   const shared_ptr<ControlCommand>& command,
-                                   const CommandSucceedCallback& onSuccess,
-                                   const CommandFailCallback& onFailure)
-{
-  m_validator.validate(data,
-    [=] (const shared_ptr<const Data>& data) {
-      this->processValidatedCommandResponse(*data, command, onSuccess, onFailure);
-    },
-    [=] (const shared_ptr<const Data>&, const std::string& msg) {
-      onFailure(ControlResponse(ERROR_VALIDATION, msg));
-    }
-  );
-}
-
-void
-Controller::processValidatedCommandResponse(const Data& data,
-                                            const shared_ptr<ControlCommand>& command,
-                                            const CommandSucceedCallback& onSuccess,
-                                            const CommandFailCallback& onFailure)
-{
-  ControlResponse response;
-  try {
-    response.wireDecode(data.getContent().blockFromValue());
-  }
-  catch (const tlv::Error& e) {
-    onFailure(ControlResponse(ERROR_SERVER, e.what()));
-    return;
-  }
-
-  uint32_t code = response.getCode();
-  if (code >= ERROR_LBOUND) {
-    onFailure(response);
-    return;
-  }
-
-  ControlParameters parameters;
-  try {
-    parameters.wireDecode(response.getBody());
-  }
-  catch (const tlv::Error& e) {
-    onFailure(ControlResponse(ERROR_SERVER, e.what()));
-    return;
-  }
-
-  try {
-    command->validateResponse(parameters);
-  }
-  catch (const ControlCommand::ArgumentError& e) {
-    onFailure(ControlResponse(ERROR_SERVER, e.what()));
-    return;
-  }
-
-  onSuccess(parameters);
-}
-
-void
-Controller::fetchDataset(const Name& prefix,
-                         const std::function<void(const ConstBufferPtr&)>& processResponse,
-                         const DatasetFailCallback& onFailure,
-                         const CommandOptions& options)
-{
-  Interest baseInterest(prefix);
-  baseInterest.setInterestLifetime(options.getTimeout());
-
-  SegmentFetcher::fetch(m_face, baseInterest, m_validator, processResponse,
-                        bind(&Controller::processDatasetFetchError, this, onFailure, _1, _2));
-}
-
-void
-Controller::processDatasetFetchError(const DatasetFailCallback& onFailure,
-                                     uint32_t code, std::string msg)
-{
-  switch (static_cast<SegmentFetcher::ErrorCode>(code)) {
-    // It's intentional to cast as SegmentFetcher::ErrorCode, and to not have a 'default' clause.
-    // This forces the switch statement to handle every defined SegmentFetcher::ErrorCode,
-    // and breaks compilation if it does not.
-    case SegmentFetcher::ErrorCode::INTEREST_TIMEOUT:
-      onFailure(ERROR_TIMEOUT, msg);
-      break;
-    case SegmentFetcher::ErrorCode::DATA_HAS_NO_SEGMENT:
-      onFailure(ERROR_SERVER, msg);
-      break;
-    case SegmentFetcher::ErrorCode::SEGMENT_VALIDATION_FAIL:
-      /// \todo When SegmentFetcher exposes validator error code, Controller::ERROR_VALIDATION
-      ///       should be replaced with a range that corresponds to validator error codes.
-      onFailure(ERROR_VALIDATION, msg);
-      break;
-    case SegmentFetcher::ErrorCode::NACK_ERROR:
-      onFailure(ERROR_NACK, msg);
-      break;
-  }
-}
-
-} // namespace nfd
-} // namespace ndn
diff --git a/src/management/nfd-controller.hpp b/src/management/nfd-controller.hpp
index 8674a61..b127d57 100644
--- a/src/management/nfd-controller.hpp
+++ b/src/management/nfd-controller.hpp
@@ -19,203 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_CONTROLLER_HPP
-#define NDN_MANAGEMENT_NFD_CONTROLLER_HPP
-
-#include "nfd-control-command.hpp"
-#include "nfd-control-response.hpp"
-#include "nfd-status-dataset.hpp"
-#include "nfd-command-options.hpp"
-#include "../security/validator-null.hpp"
-
-namespace ndn {
-
-namespace security {
-class KeyChain;
-class Validator;
-} // namespace security
-class Face;
-
-namespace nfd {
-
-/**
- * \defgroup management Management
- * \brief Classes and data structures to manage NDN forwarder
+/** \file
+ *  \deprecated Use mgmt/nfd/controller.hpp
  */
-
-/**
- * \ingroup management
- * \brief NFD Management protocol client
- * \sa https://redmine.named-data.net/projects/nfd/wiki/Management
- */
-class Controller : noncopyable
-{
-public:
-  /** \brief a callback on command success
-   */
-  typedef function<void(const ControlParameters&)> CommandSucceedCallback;
-
-  /** \brief a callback on command failure
-   */
-  typedef function<void(const ControlResponse&)> CommandFailCallback;
-
-  /** \brief a callback on dataset retrieval failure
-   */
-  typedef function<void(uint32_t code, const std::string& reason)> DatasetFailCallback;
-
-  /** \brief construct a Controller that uses face for transport,
-   *         and uses the passed KeyChain to sign commands
-   */
-  Controller(Face& face, security::KeyChain& keyChain, security::Validator& validator = s_validatorNull);
-
-  /** \brief start command execution
-   */
-  template<typename Command>
-  void
-  start(const ControlParameters& parameters,
-        const CommandSucceedCallback& onSuccess,
-        const CommandFailCallback& onFailure,
-        const CommandOptions& options = CommandOptions())
-  {
-    shared_ptr<ControlCommand> command = make_shared<Command>();
-    this->startCommand(command, parameters, onSuccess, onFailure, options);
-  }
-
-  /** \brief start dataset fetching
-   */
-  template<typename Dataset>
-  typename std::enable_if<std::is_default_constructible<Dataset>::value>::type
-  fetch(const std::function<void(typename Dataset::ResultType)>& onSuccess,
-        const DatasetFailCallback& onFailure,
-        const CommandOptions& options = CommandOptions())
-  {
-    this->fetchDataset(make_shared<Dataset>(), onSuccess, onFailure, options);
-  }
-
-  /** \brief start dataset fetching
-   */
-  template<typename Dataset, typename ParamType = typename Dataset::ParamType>
-  void
-  fetch(const ParamType& param,
-        const std::function<void(typename Dataset::ResultType)>& onSuccess,
-        const DatasetFailCallback& onFailure,
-        const CommandOptions& options = CommandOptions())
-  {
-    this->fetchDataset(make_shared<Dataset>(param), onSuccess, onFailure, options);
-  }
-
-private:
-  void
-  startCommand(const shared_ptr<ControlCommand>& command,
-               const ControlParameters& parameters,
-               const CommandSucceedCallback& onSuccess,
-               const CommandFailCallback& onFailure,
-               const CommandOptions& options);
-
-  void
-  processCommandResponse(const Data& data,
-                         const shared_ptr<ControlCommand>& command,
-                         const CommandSucceedCallback& onSuccess,
-                         const CommandFailCallback& onFailure);
-
-  void
-  processValidatedCommandResponse(const Data& data,
-                                  const shared_ptr<ControlCommand>& command,
-                                  const CommandSucceedCallback& onSuccess,
-                                  const CommandFailCallback& onFailure);
-
-  template<typename Dataset>
-  void
-  fetchDataset(shared_ptr<Dataset> dataset,
-               const std::function<void(typename Dataset::ResultType)>& onSuccess,
-               const DatasetFailCallback& onFailure,
-               const CommandOptions& options);
-
-  void
-  fetchDataset(const Name& prefix,
-               const std::function<void(const ConstBufferPtr&)>& processResponse,
-               const DatasetFailCallback& onFailure,
-               const CommandOptions& options);
-
-  template<typename Dataset>
-  void
-  processDatasetResponse(shared_ptr<Dataset> dataset,
-                         const std::function<void(typename Dataset::ResultType)>& onSuccess,
-                         const DatasetFailCallback& onFailure,
-                         ConstBufferPtr payload);
-
-  void
-  processDatasetFetchError(const DatasetFailCallback& onFailure, uint32_t code, std::string msg);
-
-public:
-  /** \brief error code for timeout
-   */
-  static const uint32_t ERROR_TIMEOUT;
-
-  /** \brief error code for network Nack
-   */
-  static const uint32_t ERROR_NACK;
-
-  /** \brief error code for response validation failure
-   */
-  static const uint32_t ERROR_VALIDATION;
-
-  /** \brief error code for server error
-   */
-  static const uint32_t ERROR_SERVER;
-
-  /** \brief inclusive lower bound of error codes
-   */
-  static const uint32_t ERROR_LBOUND;
-
-protected:
-  Face& m_face;
-  security::KeyChain& m_keyChain;
-  security::Validator& m_validator;
-
-private:
-  static ValidatorNull s_validatorNull;
-};
-
-template<typename Dataset>
-inline void
-Controller::fetchDataset(shared_ptr<Dataset> dataset,
-                         const std::function<void(typename Dataset::ResultType)>& onSuccess1,
-                         const DatasetFailCallback& onFailure1,
-                         const CommandOptions& options)
-{
-  const std::function<void(typename Dataset::ResultType)>& onSuccess = onSuccess1 ?
-    onSuccess1 : [] (const typename Dataset::ResultType&) {};
-  const DatasetFailCallback& onFailure = onFailure1 ?
-    onFailure1 : [] (uint32_t, const std::string&) {};
-
-  Name prefix = dataset->getDatasetPrefix(options.getPrefix());
-  this->fetchDataset(prefix,
-                     bind(&Controller::processDatasetResponse<Dataset>, this, dataset, onSuccess, onFailure, _1),
-                     onFailure,
-                     options);
-}
-
-template<typename Dataset>
-inline void
-Controller::processDatasetResponse(shared_ptr<Dataset> dataset,
-                                   const std::function<void(typename Dataset::ResultType)>& onSuccess,
-                                   const DatasetFailCallback& onFailure,
-                                   ConstBufferPtr payload)
-{
-  typename Dataset::ResultType result;
-  try {
-    result = dataset->parseResult(payload);
-  }
-  catch (const tlv::Error& e) {
-    onFailure(ERROR_SERVER, e.what());
-    return;
-  }
-
-  onSuccess(result);
-}
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_CONTROLLER_HPP
+#include "../mgmt/nfd/controller.hpp"
diff --git a/src/management/nfd-face-event-notification.cpp b/src/management/nfd-face-event-notification.cpp
deleted file mode 100644
index 5f80fe8..0000000
--- a/src/management/nfd-face-event-notification.cpp
+++ /dev/null
@@ -1,195 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2015 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.
- */
-
-#include "nfd-face-event-notification.hpp"
-#include "encoding/tlv-nfd.hpp"
-#include "encoding/block-helpers.hpp"
-#include "util/concepts.hpp"
-
-namespace ndn {
-namespace nfd {
-
-//BOOST_CONCEPT_ASSERT((boost::EqualityComparable<FaceEventNotification>));
-BOOST_CONCEPT_ASSERT((WireEncodable<FaceEventNotification>));
-BOOST_CONCEPT_ASSERT((WireDecodable<FaceEventNotification>));
-static_assert(std::is_base_of<tlv::Error, FaceEventNotification::Error>::value,
-              "FaceEventNotification::Error must inherit from tlv::Error");
-
-FaceEventNotification::FaceEventNotification()
-  : m_kind(static_cast<FaceEventKind>(0))
-{
-}
-
-FaceEventNotification::FaceEventNotification(const Block& block)
-{
-  this->wireDecode(block);
-}
-
-template<encoding::Tag TAG>
-size_t
-FaceEventNotification::wireEncode(EncodingImpl<TAG>& encoder) const
-{
-  size_t totalLength = 0;
-
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::LinkType, m_linkType);
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::FacePersistency, m_facePersistency);
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::FaceScope, m_faceScope);
-  totalLength += encoder.prependByteArrayBlock(tlv::nfd::LocalUri,
-                 reinterpret_cast<const uint8_t*>(m_localUri.c_str()), m_localUri.size());
-  totalLength += encoder.prependByteArrayBlock(tlv::nfd::Uri,
-                 reinterpret_cast<const uint8_t*>(m_remoteUri.c_str()), m_remoteUri.size());
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::FaceId, m_faceId);
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::FaceEventKind, m_kind);
-
-  totalLength += encoder.prependVarNumber(totalLength);
-  totalLength += encoder.prependVarNumber(tlv::nfd::FaceEventNotification);
-  return totalLength;
-}
-
-const Block&
-FaceEventNotification::wireEncode() const
-{
-  if (m_wire.hasWire())
-    return m_wire;
-
-  EncodingEstimator estimator;
-  size_t estimatedSize = wireEncode(estimator);
-
-  EncodingBuffer buffer(estimatedSize, 0);
-  wireEncode(buffer);
-
-  m_wire = buffer.block();
-  return m_wire;
-}
-
-void
-FaceEventNotification::wireDecode(const Block& block)
-{
-  if (block.type() != tlv::nfd::FaceEventNotification) {
-    BOOST_THROW_EXCEPTION(Error("expecting FaceEventNotification block"));
-  }
-  m_wire = block;
-  m_wire.parse();
-  Block::element_const_iterator val = m_wire.elements_begin();
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::FaceEventKind) {
-    m_kind = static_cast<FaceEventKind>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required FaceEventKind field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::FaceId) {
-    m_faceId = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required FaceId field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::Uri) {
-    m_remoteUri.assign(reinterpret_cast<const char*>(val->value()), val->value_size());
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required Uri field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::LocalUri) {
-    m_localUri.assign(reinterpret_cast<const char*>(val->value()), val->value_size());
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required LocalUri field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::FaceScope) {
-    m_faceScope = static_cast<FaceScope>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required FaceScope field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::FacePersistency) {
-    m_facePersistency = static_cast<FacePersistency>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required FacePersistency field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::LinkType) {
-    m_linkType = static_cast<LinkType>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required LinkType field"));
-  }
-}
-
-FaceEventNotification&
-FaceEventNotification::setKind(FaceEventKind kind)
-{
-  m_wire.reset();
-  m_kind = kind;
-  return *this;
-}
-
-void
-FaceEventNotification::wireReset() const
-{
-  m_wire.reset();
-}
-
-std::ostream&
-operator<<(std::ostream& os, const FaceEventNotification& notification)
-{
-  os << "FaceEventNotification(";
-
-  switch (notification.getKind())
-    {
-    case FACE_EVENT_CREATED:
-      os << "Kind: created, ";
-      break;
-    case FACE_EVENT_DESTROYED:
-      os << "Kind: destroyed, ";
-      break;
-    }
-
-  os << "FaceID: " << notification.getFaceId() << ", "
-     << "RemoteUri: " << notification.getRemoteUri() << ", "
-     << "LocalUri: " << notification.getLocalUri() << ", "
-     << "FaceScope: " << notification.getFaceScope() << ", "
-     << "FacePersistency: " << notification.getFacePersistency() << ", "
-     << "LinkType: " << notification.getLinkType()
-     << ")";
-  return os;
-}
-
-} // namespace nfd
-} // namespace ndn
diff --git a/src/management/nfd-face-event-notification.hpp b/src/management/nfd-face-event-notification.hpp
index 56325ef..3749390 100644
--- a/src/management/nfd-face-event-notification.hpp
+++ b/src/management/nfd-face-event-notification.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,76 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_FACE_EVENT_NOTIFICATION_HPP
-#define NDN_MANAGEMENT_NFD_FACE_EVENT_NOTIFICATION_HPP
-
-#include "nfd-face-traits.hpp"
-#include "../encoding/block.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/**
- * \ingroup management
+/** \file
+ *  \deprecated Use mgmt/nfd/face-event-notification.hpp
  */
-enum FaceEventKind {
-  FACE_EVENT_CREATED = 1,
-  FACE_EVENT_DESTROYED = 2
-};
-
-/**
- * \ingroup management
- * \brief represents a Face status change notification
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Face-Status-Change-Notification
- */
-class FaceEventNotification : public FaceTraits<FaceEventNotification>
-{
-public:
-  FaceEventNotification();
-
-  explicit
-  FaceEventNotification(const Block& block);
-
-  /** \brief prepend FaceEventNotification to the encoder
-   */
-  template<encoding::Tag TAG>
-  size_t
-  wireEncode(EncodingImpl<TAG>& encoder) const;
-
-  /** \brief encode FaceEventNotification
-   */
-  const Block&
-  wireEncode() const;
-
-  /** \brief decode FaceEventNotification
-   */
-  void
-  wireDecode(const Block& wire);
-
-public: // getters & setters
-  FaceEventKind
-  getKind() const
-  {
-    return m_kind;
-  }
-
-  FaceEventNotification&
-  setKind(FaceEventKind kind);
-
-protected:
-  void
-  wireReset() const;
-
-private:
-  FaceEventKind m_kind;
-
-  mutable Block m_wire;
-};
-
-std::ostream&
-operator<<(std::ostream& os, const FaceEventNotification& notification);
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_FACE_EVENT_NOTIFICATION_HPP
+#include "../mgmt/nfd/face-event-notification.hpp"
diff --git a/src/management/nfd-face-monitor.hpp b/src/management/nfd-face-monitor.hpp
index da6e510..f6bc943 100644
--- a/src/management/nfd-face-monitor.hpp
+++ b/src/management/nfd-face-monitor.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2014 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,54 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-/**
- * Original copyright notice from NFD:
- *
- * 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,
- *                      The University of Memphis
- *
- * 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/>.
+/** \file
+ *  \deprecated Use mgmt/nfd/face-monitor.hpp
  */
-
-#ifndef NDN_MANAGEMENT_NFD_FACE_MONITOR_HPP
-#define NDN_MANAGEMENT_NFD_FACE_MONITOR_HPP
-
-#include "../util/notification-subscriber.hpp"
-#include "nfd-face-event-notification.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/** \brief A subscriber for Face status change notification stream
- *  \sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Face-Status-Change-Notification
- */
-class FaceMonitor : public util::NotificationSubscriber<FaceEventNotification>
-{
-public:
-  FaceMonitor(Face& face)
-    : NotificationSubscriber<nfd::FaceEventNotification>(face, "ndn:/localhost/nfd/faces/events")
-  {
-  }
-};
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_FACE_MONITOR_HPP
+#include "../mgmt/nfd/face-monitor.hpp"
diff --git a/src/management/nfd-face-query-filter.cpp b/src/management/nfd-face-query-filter.cpp
deleted file mode 100644
index bd10d2b..0000000
--- a/src/management/nfd-face-query-filter.cpp
+++ /dev/null
@@ -1,352 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2015 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.
- */
-
-#include "nfd-face-query-filter.hpp"
-#include "encoding/tlv-nfd.hpp"
-#include "encoding/block-helpers.hpp"
-#include "util/concepts.hpp"
-
-namespace ndn {
-namespace nfd {
-
-//BOOST_CONCEPT_ASSERT((boost::EqualityComparable<FaceQueryFilter>));
-BOOST_CONCEPT_ASSERT((WireEncodable<FaceQueryFilter>));
-BOOST_CONCEPT_ASSERT((WireDecodable<FaceQueryFilter>));
-static_assert(std::is_base_of<tlv::Error, FaceQueryFilter::Error>::value,
-              "FaceQueryFilter::Error must inherit from tlv::Error");
-
-FaceQueryFilter::FaceQueryFilter()
-  : m_hasFaceId(false)
-  , m_hasUriScheme(false)
-  , m_hasRemoteUri(false)
-  , m_hasLocalUri(false)
-  , m_hasFaceScope(false)
-  , m_hasFacePersistency(false)
-  , m_hasLinkType(false)
-{
-}
-
-FaceQueryFilter::FaceQueryFilter(const Block& block)
-{
-  this->wireDecode(block);
-}
-
-template<encoding::Tag TAG>
-size_t
-FaceQueryFilter::wireEncode(EncodingImpl<TAG>& encoder) const
-{
-  size_t totalLength = 0;
-
-  if (m_hasLinkType) {
-    totalLength += prependNonNegativeIntegerBlock(encoder,
-                   tlv::nfd::LinkType, m_linkType);
-  }
-
-  if (m_hasFacePersistency) {
-    totalLength += prependNonNegativeIntegerBlock(encoder,
-                   tlv::nfd::FacePersistency, m_facePersistency);
-  }
-
-  if (m_hasFaceScope) {
-    totalLength += prependNonNegativeIntegerBlock(encoder,
-                   tlv::nfd::FaceScope, m_faceScope);
-  }
-
-  if (m_hasLocalUri) {
-    totalLength += encoder.prependByteArrayBlock(tlv::nfd::LocalUri,
-                   reinterpret_cast<const uint8_t*>(m_localUri.c_str()), m_localUri.size());
-  }
-
-  if (m_hasRemoteUri) {
-    totalLength += encoder.prependByteArrayBlock(tlv::nfd::Uri,
-                   reinterpret_cast<const uint8_t*>(m_remoteUri.c_str()), m_remoteUri.size());
-  }
-
-  if (m_hasUriScheme) {
-    totalLength += encoder.prependByteArrayBlock(tlv::nfd::UriScheme,
-                   reinterpret_cast<const uint8_t*>(m_uriScheme.c_str()), m_uriScheme.size());
-  }
-
-  if (m_hasFaceId) {
-    totalLength += prependNonNegativeIntegerBlock(encoder,
-                   tlv::nfd::FaceId, m_faceId);
-  }
-
-  totalLength += encoder.prependVarNumber(totalLength);
-  totalLength += encoder.prependVarNumber(tlv::nfd::FaceQueryFilter);
-  return totalLength;
-}
-
-template size_t
-FaceQueryFilter::wireEncode<encoding::EncoderTag>(EncodingImpl<encoding::EncoderTag>&) const;
-
-template size_t
-FaceQueryFilter::wireEncode<encoding::EstimatorTag>(EncodingImpl<encoding::EstimatorTag>&) const;
-
-const Block&
-FaceQueryFilter::wireEncode() const
-{
-  if (m_wire.hasWire())
-    return m_wire;
-
-  EncodingEstimator estimator;
-  size_t estimatedSize = wireEncode(estimator);
-
-  EncodingBuffer buffer(estimatedSize, 0);
-  wireEncode(buffer);
-
-  m_wire = buffer.block();
-  return m_wire;
-}
-
-void
-FaceQueryFilter::wireDecode(const Block& block)
-{
-  //all fields are optional
-  if (block.type() != tlv::nfd::FaceQueryFilter) {
-    BOOST_THROW_EXCEPTION(Error("expecting FaceQueryFilter block"));
-  }
-
-  m_wire = block;
-  m_wire.parse();
-  Block::element_const_iterator val = m_wire.elements_begin();
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::FaceId) {
-    m_faceId = readNonNegativeInteger(*val);
-    m_hasFaceId = true;
-    ++val;
-  }
-  else {
-    m_hasFaceId = false;
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::UriScheme) {
-    m_uriScheme.assign(reinterpret_cast<const char*>(val->value()), val->value_size());
-    m_hasUriScheme = true;
-    ++val;
-  }
-  else {
-    m_hasUriScheme = false;
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::Uri) {
-    m_remoteUri.assign(reinterpret_cast<const char*>(val->value()), val->value_size());
-    m_hasRemoteUri = true;
-    ++val;
-  }
-  else {
-    m_hasRemoteUri = false;
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::LocalUri) {
-    m_localUri.assign(reinterpret_cast<const char*>(val->value()), val->value_size());
-    m_hasLocalUri = true;
-    ++val;
-  }
-  else {
-    m_hasLocalUri = false;
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::FaceScope) {
-    m_faceScope = static_cast<FaceScope>(readNonNegativeInteger(*val));
-    m_hasFaceScope = true;
-    ++val;
-  }
-  else {
-    m_hasFaceScope = false;
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::FacePersistency) {
-    m_facePersistency = static_cast<FacePersistency>(readNonNegativeInteger(*val));
-    m_hasFacePersistency = true;
-    ++val;
-  }
-  else {
-    m_hasFacePersistency = false;
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::LinkType) {
-    m_linkType = static_cast<LinkType>(readNonNegativeInteger(*val));
-    m_hasLinkType = true;
-    ++val;
-  }
-  else {
-    m_hasLinkType = false;
-  }
-
-}
-
-FaceQueryFilter&
-FaceQueryFilter::setFaceId(uint64_t faceId)
-{
-  m_wire.reset();
-  m_faceId = faceId;
-  m_hasFaceId = true;
-  return *this;
-}
-
-FaceQueryFilter&
-FaceQueryFilter::unsetFaceId()
-{
-  m_wire.reset();
-  m_hasFaceId = false;
-  return *this;
-}
-
-FaceQueryFilter&
-FaceQueryFilter::setUriScheme(const std::string& uriScheme)
-{
-  m_wire.reset();
-  m_uriScheme = uriScheme;
-  m_hasUriScheme = true;
-  return *this;
-}
-
-FaceQueryFilter&
-FaceQueryFilter::unsetUriScheme()
-{
-  m_wire.reset();
-  m_hasUriScheme = false;
-  return *this;
-}
-
-FaceQueryFilter&
-FaceQueryFilter::setRemoteUri(const std::string& remoteUri)
-{
-  m_wire.reset();
-  m_remoteUri = remoteUri;
-  m_hasRemoteUri = true;
-  return *this;
-}
-
-FaceQueryFilter&
-FaceQueryFilter::unsetRemoteUri()
-{
-  m_wire.reset();
-  m_hasRemoteUri = false;
-  return *this;
-}
-
-FaceQueryFilter&
-FaceQueryFilter::setLocalUri(const std::string& localUri)
-{
-  m_wire.reset();
-  m_localUri = localUri;
-  m_hasLocalUri = true;
-  return *this;
-}
-
-FaceQueryFilter&
-FaceQueryFilter::unsetLocalUri()
-{
-  m_wire.reset();
-  m_hasLocalUri = false;
-  return *this;
-}
-
-FaceQueryFilter&
-FaceQueryFilter::setFaceScope(FaceScope faceScope)
-{
-  m_wire.reset();
-  m_faceScope = faceScope;
-  m_hasFaceScope = true;
-  return *this;
-}
-
-FaceQueryFilter&
-FaceQueryFilter::unsetFaceScope()
-{
-  m_wire.reset();
-  m_hasFaceScope = false;
-  return *this;
-}
-
-FaceQueryFilter&
-FaceQueryFilter::setFacePersistency(FacePersistency facePersistency)
-{
-  m_wire.reset();
-  m_facePersistency = facePersistency;
-  m_hasFacePersistency = true;
-  return *this;
-}
-
-FaceQueryFilter&
-FaceQueryFilter::unsetFacePersistency()
-{
-  m_wire.reset();
-  m_hasFacePersistency = false;
-  return *this;
-}
-
-FaceQueryFilter&
-FaceQueryFilter::setLinkType(LinkType linkType)
-{
-  m_wire.reset();
-  m_linkType = linkType;
-  m_hasLinkType = true;
-  return *this;
-}
-
-FaceQueryFilter&
-FaceQueryFilter::unsetLinkType()
-{
-  m_wire.reset();
-  m_hasLinkType = false;
-  return *this;
-}
-
-std::ostream&
-operator<<(std::ostream& os, const FaceQueryFilter& filter)
-{
-  os << "FaceQueryFilter(";
-  if (filter.hasFaceId()) {
-    os << "FaceID: " << filter.getFaceId() << ",\n";
-  }
-
-  if (filter.hasUriScheme()) {
-    os << "UriScheme: " << filter.getUriScheme() << ",\n";
-  }
-
-  if (filter.hasRemoteUri()) {
-    os << "RemoteUri: " << filter.getRemoteUri() << ",\n";
-  }
-
-  if (filter.hasLocalUri()) {
-    os << "LocalUri: " << filter.getLocalUri() << ",\n";
-  }
-
-  if (filter.hasFaceScope()) {
-    os << "FaceScope: " << filter.getFaceScope() << ",\n";
-  }
-
-  if (filter.hasFacePersistency()) {
-    os << "FacePersistency: " << filter.getFacePersistency() << ",\n";
-  }
-
-  if (filter.hasLinkType()) {
-    os << "LinkType: " << filter.getLinkType() << ",\n";
-  }
-  os << ")";
-  return os;
-}
-
-} // namespace nfd
-} // namespace ndn
diff --git a/src/management/nfd-face-query-filter.hpp b/src/management/nfd-face-query-filter.hpp
index 30ea386..345af3e 100644
--- a/src/management/nfd-face-query-filter.hpp
+++ b/src/management/nfd-face-query-filter.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,213 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_FACE_QUERY_FILTER_HPP
-#define NDN_MANAGEMENT_NFD_FACE_QUERY_FILTER_HPP
-
-#include "../encoding/block.hpp"
-#include "../encoding/nfd-constants.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/**
- * \ingroup management
- * \brief represents Face Query Filter
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Query-Operation
+/** \file
+ *  \deprecated Use mgmt/nfd/face-query-filter.hpp
  */
-class FaceQueryFilter
-{
-public:
-  class Error : public tlv::Error
-  {
-  public:
-    explicit
-    Error(const std::string& what)
-      : tlv::Error(what)
-    {
-    }
-  };
-
-  FaceQueryFilter();
-
-  explicit
-  FaceQueryFilter(const Block& block);
-
-  /** \brief prepend FaceQueryFilter to the encoder
-   */
-  template<encoding::Tag TAG>
-  size_t
-  wireEncode(EncodingImpl<TAG>& encoder) const;
-
-  /** \brief encode FaceQueryFilter
-   */
-  const Block&
-  wireEncode() const;
-
-  /** \brief decode FaceQueryFilter
-   */
-  void
-  wireDecode(const Block& wire);
-
-public: // getters & setters
-
-  bool
-  hasFaceId() const
-  {
-    return m_hasFaceId;
-  }
-
-  uint64_t
-  getFaceId() const
-  {
-    BOOST_ASSERT(this->hasFaceId());
-    return m_faceId;
-  }
-
-  FaceQueryFilter&
-  setFaceId(uint64_t faceId);
-
-  FaceQueryFilter&
-  unsetFaceId();
-
-  bool
-  hasUriScheme() const
-  {
-    return m_hasUriScheme;
-  }
-
-  const std::string&
-  getUriScheme() const
-  {
-    BOOST_ASSERT(this->hasUriScheme());
-    return m_uriScheme;
-  }
-
-  FaceQueryFilter&
-  setUriScheme(const std::string& uriScheme);
-
-  FaceQueryFilter&
-  unsetUriScheme();
-
-  bool
-  hasRemoteUri() const
-  {
-    return m_hasRemoteUri;
-  }
-
-  const std::string&
-  getRemoteUri() const
-  {
-    BOOST_ASSERT(this->hasRemoteUri());
-    return m_remoteUri;
-  }
-
-  FaceQueryFilter&
-  setRemoteUri(const std::string& remoteUri);
-
-  FaceQueryFilter&
-  unsetRemoteUri();
-
-  bool
-  hasLocalUri() const
-  {
-    return m_hasLocalUri;
-  }
-
-  const std::string&
-  getLocalUri() const
-  {
-    BOOST_ASSERT(this->hasLocalUri());
-    return m_localUri;
-  }
-
-  FaceQueryFilter&
-  setLocalUri(const std::string& localUri);
-
-  FaceQueryFilter&
-  unsetLocalUri();
-
-  bool
-  hasFaceScope() const
-  {
-    return m_hasFaceScope;
-  }
-
-  FaceScope
-  getFaceScope() const
-  {
-    BOOST_ASSERT(this->hasFaceScope());
-    return m_faceScope;
-  }
-
-  FaceQueryFilter&
-  setFaceScope(FaceScope faceScope);
-
-  FaceQueryFilter&
-  unsetFaceScope();
-
-  bool
-  hasFacePersistency() const
-  {
-    return m_hasFacePersistency;
-  }
-
-  FacePersistency
-  getFacePersistency() const
-  {
-    BOOST_ASSERT(this->hasFacePersistency());
-    return m_facePersistency;
-  }
-
-  FaceQueryFilter&
-  setFacePersistency(FacePersistency facePersistency);
-
-  FaceQueryFilter&
-  unsetFacePersistency();
-
-  bool
-  hasLinkType() const
-  {
-    return m_hasLinkType;
-  }
-
-  LinkType
-  getLinkType() const
-  {
-    BOOST_ASSERT(this->hasLinkType());
-    return m_linkType;
-  }
-
-  FaceQueryFilter&
-  setLinkType(LinkType linkType);
-
-  FaceQueryFilter&
-  unsetLinkType();
-
-private:
-  uint64_t m_faceId;
-  std::string m_uriScheme;
-  std::string m_remoteUri;
-  std::string m_localUri;
-  FaceScope m_faceScope;
-  FacePersistency m_facePersistency;
-  LinkType m_linkType;
-
-  bool m_hasFaceId;
-  bool m_hasUriScheme;
-  bool m_hasRemoteUri;
-  bool m_hasLocalUri;
-  bool m_hasFaceScope;
-  bool m_hasFacePersistency;
-  bool m_hasLinkType;
-
-  mutable Block m_wire;
-};
-
-std::ostream&
-operator<<(std::ostream& os, const FaceQueryFilter& filter);
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_FACE_QUERY_FILTER_HPP
+#include "../mgmt/nfd/face-query-filter.hpp"
diff --git a/src/management/nfd-face-status.cpp b/src/management/nfd-face-status.cpp
deleted file mode 100644
index ca24a99..0000000
--- a/src/management/nfd-face-status.cpp
+++ /dev/null
@@ -1,363 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2015 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.
- */
-
-#include "nfd-face-status.hpp"
-#include "encoding/tlv-nfd.hpp"
-#include "encoding/block-helpers.hpp"
-#include "util/concepts.hpp"
-
-namespace ndn {
-namespace nfd {
-
-//BOOST_CONCEPT_ASSERT((boost::EqualityComparable<FaceStatus>));
-BOOST_CONCEPT_ASSERT((WireEncodable<FaceStatus>));
-BOOST_CONCEPT_ASSERT((WireDecodable<FaceStatus>));
-static_assert(std::is_base_of<tlv::Error, FaceStatus::Error>::value,
-              "FaceStatus::Error must inherit from tlv::Error");
-
-FaceStatus::FaceStatus()
-  : m_hasExpirationPeriod(false)
-  , m_nInInterests(0)
-  , m_nInDatas(0)
-  , m_nInNacks(0)
-  , m_nOutInterests(0)
-  , m_nOutDatas(0)
-  , m_nOutNacks(0)
-  , m_nInBytes(0)
-  , m_nOutBytes(0)
-{
-}
-
-FaceStatus::FaceStatus(const Block& block)
-{
-  this->wireDecode(block);
-}
-
-template<encoding::Tag TAG>
-size_t
-FaceStatus::wireEncode(EncodingImpl<TAG>& encoder) const
-{
-  size_t totalLength = 0;
-
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::NOutBytes, m_nOutBytes);
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::NInBytes, m_nInBytes);
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::NOutNacks, m_nOutNacks);
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::NOutDatas, m_nOutDatas);
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::NOutInterests, m_nOutInterests);
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::NInNacks, m_nInNacks);
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::NInDatas, m_nInDatas);
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::NInInterests, m_nInInterests);
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::LinkType, m_linkType);
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::FacePersistency, m_facePersistency);
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::FaceScope, m_faceScope);
-  if (m_hasExpirationPeriod) {
-    totalLength += prependNonNegativeIntegerBlock(encoder,
-                   tlv::nfd::ExpirationPeriod, m_expirationPeriod.count());
-  }
-  totalLength += encoder.prependByteArrayBlock(tlv::nfd::LocalUri,
-                 reinterpret_cast<const uint8_t*>(m_localUri.c_str()), m_localUri.size());
-  totalLength += encoder.prependByteArrayBlock(tlv::nfd::Uri,
-                 reinterpret_cast<const uint8_t*>(m_remoteUri.c_str()), m_remoteUri.size());
-  totalLength += prependNonNegativeIntegerBlock(encoder,
-                 tlv::nfd::FaceId, m_faceId);
-
-  totalLength += encoder.prependVarNumber(totalLength);
-  totalLength += encoder.prependVarNumber(tlv::nfd::FaceStatus);
-  return totalLength;
-}
-
-template size_t
-FaceStatus::wireEncode<encoding::EncoderTag>(EncodingImpl<encoding::EncoderTag>& block) const;
-
-template size_t
-FaceStatus::wireEncode<encoding::EstimatorTag>(EncodingImpl<encoding::EstimatorTag>& block) const;
-
-const Block&
-FaceStatus::wireEncode() const
-{
-  if (m_wire.hasWire())
-    return m_wire;
-
-  EncodingEstimator estimator;
-  size_t estimatedSize = wireEncode(estimator);
-
-  EncodingBuffer buffer(estimatedSize, 0);
-  wireEncode(buffer);
-
-  m_wire = buffer.block();
-  return m_wire;
-}
-
-void
-FaceStatus::wireDecode(const Block& block)
-{
-  if (block.type() != tlv::nfd::FaceStatus) {
-    BOOST_THROW_EXCEPTION(Error("expecting FaceStatus block"));
-  }
-  m_wire = block;
-  m_wire.parse();
-  Block::element_const_iterator val = m_wire.elements_begin();
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::FaceId) {
-    m_faceId = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required FaceId field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::Uri) {
-    m_remoteUri.assign(reinterpret_cast<const char*>(val->value()), val->value_size());
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required Uri field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::LocalUri) {
-    m_localUri.assign(reinterpret_cast<const char*>(val->value()), val->value_size());
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required LocalUri field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::ExpirationPeriod) {
-    m_expirationPeriod = time::milliseconds(readNonNegativeInteger(*val));
-    m_hasExpirationPeriod = true;
-    ++val;
-  }
-  else {
-    m_hasExpirationPeriod = false;
-    // ExpirationPeriod is optional
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::FaceScope) {
-    m_faceScope = static_cast<FaceScope>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required FaceScope field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::FacePersistency) {
-    m_facePersistency = static_cast<FacePersistency>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required FacePersistency field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::LinkType) {
-    m_linkType = static_cast<LinkType>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required LinkType field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NInInterests) {
-    m_nInInterests = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NInInterests field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NInDatas) {
-    m_nInDatas = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NInDatas field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NInNacks) {
-    m_nInNacks = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NInNacks field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NOutInterests) {
-    m_nOutInterests = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NOutInterests field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NOutDatas) {
-    m_nOutDatas = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NOutDatas field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NOutNacks) {
-    m_nOutNacks = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NOutNacks field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NInBytes) {
-    m_nInBytes = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NInBytes field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NOutBytes) {
-    m_nOutBytes = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NOutBytes field"));
-  }
-}
-
-FaceStatus&
-FaceStatus::setExpirationPeriod(const time::milliseconds& expirationPeriod)
-{
-  m_wire.reset();
-  m_expirationPeriod = expirationPeriod;
-  m_hasExpirationPeriod = true;
-  return *this;
-}
-
-FaceStatus&
-FaceStatus::setNInInterests(uint64_t nInInterests)
-{
-  m_wire.reset();
-  m_nInInterests = nInInterests;
-  return *this;
-}
-
-FaceStatus&
-FaceStatus::setNInDatas(uint64_t nInDatas)
-{
-  m_wire.reset();
-  m_nInDatas = nInDatas;
-  return *this;
-}
-
-FaceStatus&
-FaceStatus::setNInNacks(uint64_t nInNacks)
-{
-  m_wire.reset();
-  m_nInNacks = nInNacks;
-  return *this;
-}
-
-FaceStatus&
-FaceStatus::setNOutInterests(uint64_t nOutInterests)
-{
-  m_wire.reset();
-  m_nOutInterests = nOutInterests;
-  return *this;
-}
-
-FaceStatus&
-FaceStatus::setNOutDatas(uint64_t nOutDatas)
-{
-  m_wire.reset();
-  m_nOutDatas = nOutDatas;
-  return *this;
-}
-
-FaceStatus&
-FaceStatus::setNOutNacks(uint64_t nOutNacks)
-{
-  m_wire.reset();
-  m_nOutNacks = nOutNacks;
-  return *this;
-}
-
-FaceStatus&
-FaceStatus::setNInBytes(uint64_t nInBytes)
-{
-  m_wire.reset();
-  m_nInBytes = nInBytes;
-  return *this;
-}
-
-FaceStatus&
-FaceStatus::setNOutBytes(uint64_t nOutBytes)
-{
-  m_wire.reset();
-  m_nOutBytes = nOutBytes;
-  return *this;
-}
-
-void
-FaceStatus::wireReset() const
-{
-  m_wire.reset();
-}
-
-std::ostream&
-operator<<(std::ostream& os, const FaceStatus& status)
-{
-  os << "FaceStatus("
-     << "FaceID: " << status.getFaceId() << ",\n"
-     << "RemoteUri: " << status.getRemoteUri() << ",\n"
-     << "LocalUri: " << status.getLocalUri() << ",\n";
-
-  if (status.hasExpirationPeriod()) {
-    os << "ExpirationPeriod: " << status.getExpirationPeriod() << ",\n";
-  }
-  else {
-    os << "ExpirationPeriod: infinite,\n";
-  }
-
-  os << "FaceScope: " << status.getFaceScope() << ",\n"
-     << "FacePersistency: " << status.getFacePersistency() << ",\n"
-     << "LinkType: " << status.getLinkType() << ",\n"
-     << "Counters: { Interests: {in: " << status.getNInInterests() << ", "
-     << "out: " << status.getNOutInterests() << "},\n"
-     << "            Data: {in: " << status.getNInDatas() << ", "
-     << "out: " << status.getNOutDatas() << "},\n"
-     << "            Nack: {in: " << status.getNInNacks() << ", "
-     << "out: " << status.getNOutNacks() << "},\n"
-     << "            bytes: {in: " << status.getNInBytes() << ", "
-     << "out: " << status.getNOutBytes() << "} }\n"
-     << ")";
-  return os;
-}
-
-} // namespace nfd
-} // namespace ndn
diff --git a/src/management/nfd-face-status.hpp b/src/management/nfd-face-status.hpp
index 521f3d3..13e4919 100644
--- a/src/management/nfd-face-status.hpp
+++ b/src/management/nfd-face-status.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,157 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_FACE_STATUS_HPP
-#define NDN_MANAGEMENT_NFD_FACE_STATUS_HPP
-
-#include "nfd-face-traits.hpp" // include this first, to ensure it compiles on its own.
-#include "../encoding/block.hpp"
-#include "../util/time.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/**
- * \ingroup management
- * \brief represents Face status
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Face-Dataset
+/** \file
+ *  \deprecated Use mgmt/nfd/face-status.hpp
  */
-class FaceStatus : public FaceTraits<FaceStatus>
-{
-public:
-  FaceStatus();
-
-  explicit
-  FaceStatus(const Block& block);
-
-  /** \brief prepend FaceStatus to the encoder
-   */
-  template<encoding::Tag TAG>
-  size_t
-  wireEncode(EncodingImpl<TAG>& encoder) const;
-
-  /** \brief encode FaceStatus
-   */
-  const Block&
-  wireEncode() const;
-
-  /** \brief decode FaceStatus
-   */
-  void
-  wireDecode(const Block& wire);
-
-public: // getters & setters
-  bool
-  hasExpirationPeriod() const
-  {
-    return m_hasExpirationPeriod;
-  }
-
-  const time::milliseconds&
-  getExpirationPeriod() const
-  {
-    BOOST_ASSERT(m_hasExpirationPeriod);
-    return m_expirationPeriod;
-  }
-
-  FaceStatus&
-  setExpirationPeriod(const time::milliseconds& expirationPeriod);
-
-  uint64_t
-  getNInInterests() const
-  {
-    return m_nInInterests;
-  }
-
-  FaceStatus&
-  setNInInterests(uint64_t nInInterests);
-
-  uint64_t
-  getNInDatas() const
-  {
-    return m_nInDatas;
-  }
-
-  FaceStatus&
-  setNInDatas(uint64_t nInDatas);
-
-  uint64_t
-  getNInNacks() const
-  {
-    return m_nInNacks;
-  }
-
-  FaceStatus&
-  setNInNacks(uint64_t nInNacks);
-
-  uint64_t
-  getNOutInterests() const
-  {
-    return m_nOutInterests;
-  }
-
-  FaceStatus&
-  setNOutInterests(uint64_t nOutInterests);
-
-  uint64_t
-  getNOutDatas() const
-  {
-    return m_nOutDatas;
-  }
-
-  FaceStatus&
-  setNOutDatas(uint64_t nOutDatas);
-
-  uint64_t
-  getNOutNacks() const
-  {
-    return m_nOutNacks;
-  }
-
-  FaceStatus&
-  setNOutNacks(uint64_t nOutNacks);
-
-  uint64_t
-  getNInBytes() const
-  {
-    return m_nInBytes;
-  }
-
-  FaceStatus&
-  setNInBytes(uint64_t nInBytes);
-
-  uint64_t
-  getNOutBytes() const
-  {
-    return m_nOutBytes;
-  }
-
-  FaceStatus&
-  setNOutBytes(uint64_t nOutBytes);
-
-protected:
-  void
-  wireReset() const;
-
-private:
-  time::milliseconds m_expirationPeriod;
-  bool m_hasExpirationPeriod;
-  uint64_t m_nInInterests;
-  uint64_t m_nInDatas;
-  uint64_t m_nInNacks;
-  uint64_t m_nOutInterests;
-  uint64_t m_nOutDatas;
-  uint64_t m_nOutNacks;
-  uint64_t m_nInBytes;
-  uint64_t m_nOutBytes;
-
-  mutable Block m_wire;
-};
-
-std::ostream&
-operator<<(std::ostream& os, const FaceStatus& status);
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_FACE_STATUS_HPP
+#include "../mgmt/nfd/face-status.hpp"
diff --git a/src/management/nfd-face-traits.hpp b/src/management/nfd-face-traits.hpp
index f473d8a..914c4d5 100644
--- a/src/management/nfd-face-traits.hpp
+++ b/src/management/nfd-face-traits.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2014 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,139 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_FACE_TRAITS_HPP
-#define NDN_MANAGEMENT_NFD_FACE_TRAITS_HPP
-
-#include "../encoding/tlv-nfd.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/** \ingroup management
- *  \brief providers getters and setters of face information fields
- *  \tparam C the concrete class; it must provide .wireReset() method
-            to clear wire encoding when a field changes
+/** \file
+ *  \deprecated Use mgmt/nfd/face-traits.hpp
  */
-template<class C>
-class FaceTraits
-{
-public:
-  class Error : public tlv::Error
-  {
-  public:
-    explicit
-    Error(const std::string& what)
-      : tlv::Error(what)
-    {
-    }
-  };
-
-  FaceTraits()
-    : m_faceId(0)
-    , m_faceScope(FACE_SCOPE_NON_LOCAL)
-    , m_facePersistency(FACE_PERSISTENCY_PERSISTENT)
-    , m_linkType(LINK_TYPE_POINT_TO_POINT)
-  {
-  }
-
-  uint64_t
-  getFaceId() const
-  {
-    return m_faceId;
-  }
-
-  C&
-  setFaceId(uint64_t faceId)
-  {
-    wireReset();
-    m_faceId = faceId;
-    return static_cast<C&>(*this);
-  }
-
-  const std::string&
-  getRemoteUri() const
-  {
-    return m_remoteUri;
-  }
-
-  C&
-  setRemoteUri(const std::string& remoteUri)
-  {
-    wireReset();
-    m_remoteUri = remoteUri;
-    return static_cast<C&>(*this);
-  }
-
-  const std::string&
-  getLocalUri() const
-  {
-    return m_localUri;
-  }
-
-  C&
-  setLocalUri(const std::string& localUri)
-  {
-    wireReset();
-    m_localUri = localUri;
-    return static_cast<C&>(*this);
-  }
-
-  FaceScope
-  getFaceScope() const
-  {
-    return m_faceScope;
-  }
-
-  C&
-  setFaceScope(FaceScope faceScope)
-  {
-    wireReset();
-    m_faceScope = faceScope;
-    return static_cast<C&>(*this);
-  }
-
-  FacePersistency
-  getFacePersistency() const
-  {
-    return m_facePersistency;
-  }
-
-  C&
-  setFacePersistency(FacePersistency facePersistency)
-  {
-    wireReset();
-    m_facePersistency = facePersistency;
-    return static_cast<C&>(*this);
-  }
-
-  LinkType
-  getLinkType() const
-  {
-    return m_linkType;
-  }
-
-  C&
-  setLinkType(LinkType linkType)
-  {
-    wireReset();
-    m_linkType = linkType;
-    return static_cast<C&>(*this);
-  }
-
-protected:
-  virtual void
-  wireReset() const = 0;
-
-protected:
-  uint64_t m_faceId;
-  std::string m_remoteUri;
-  std::string m_localUri;
-  FaceScope m_faceScope;
-  FacePersistency  m_facePersistency;
-  LinkType m_linkType;
-};
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_FACE_TRAITS_HPP
+#include "../mgmt/nfd/face-traits.hpp"
diff --git a/src/management/nfd-fib-entry.cpp b/src/management/nfd-fib-entry.cpp
deleted file mode 100644
index fb07329..0000000
--- a/src/management/nfd-fib-entry.cpp
+++ /dev/null
@@ -1,268 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2015 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.
- */
-
-#include "nfd-fib-entry.hpp"
-#include <sstream>
-#include "encoding/tlv-nfd.hpp"
-#include "encoding/block-helpers.hpp"
-#include "util/concepts.hpp"
-
-namespace ndn {
-namespace nfd {
-
-//BOOST_CONCEPT_ASSERT((boost::EqualityComparable<NextHopRecord>));
-BOOST_CONCEPT_ASSERT((WireEncodable<NextHopRecord>));
-BOOST_CONCEPT_ASSERT((WireDecodable<NextHopRecord>));
-static_assert(std::is_base_of<tlv::Error, NextHopRecord::Error>::value,
-              "NextHopRecord::Error must inherit from tlv::Error");
-
-//BOOST_CONCEPT_ASSERT((boost::EqualityComparable<FibEntry>));
-BOOST_CONCEPT_ASSERT((WireEncodable<FibEntry>));
-BOOST_CONCEPT_ASSERT((WireDecodable<FibEntry>));
-static_assert(std::is_base_of<tlv::Error, FibEntry::Error>::value,
-              "FibEntry::Error must inherit from tlv::Error");
-
-// NextHopRecord := NEXT-HOP-RECORD TLV-LENGTH
-//                    FaceId
-//                    Cost
-
-NextHopRecord::NextHopRecord()
-  : m_faceId(std::numeric_limits<uint64_t>::max())
-  , m_cost(0)
-{
-}
-
-NextHopRecord::NextHopRecord(const Block& block)
-{
-  this->wireDecode(block);
-}
-
-NextHopRecord&
-NextHopRecord::setFaceId(uint64_t faceId)
-{
-  m_faceId = faceId;
-  m_wire.reset();
-  return *this;
-}
-
-NextHopRecord&
-NextHopRecord::setCost(uint64_t cost)
-{
-  m_cost = cost;
-  m_wire.reset();
-  return *this;
-}
-
-template<encoding::Tag TAG>
-size_t
-NextHopRecord::wireEncode(EncodingImpl<TAG>& block) const
-{
-  size_t totalLength = 0;
-  totalLength += prependNonNegativeIntegerBlock(block,
-                                                ndn::tlv::nfd::Cost,
-                                                m_cost);
-
-  totalLength += prependNonNegativeIntegerBlock(block,
-                                                ndn::tlv::nfd::FaceId,
-                                                m_faceId);
-
-  totalLength += block.prependVarNumber(totalLength);
-  totalLength += block.prependVarNumber(ndn::tlv::nfd::NextHopRecord);
-  return totalLength;
-}
-
-template size_t
-NextHopRecord::wireEncode<encoding::EncoderTag>(EncodingImpl<encoding::EncoderTag>& block) const;
-
-template size_t
-NextHopRecord::wireEncode<encoding::EstimatorTag>(EncodingImpl<encoding::EstimatorTag>& block) const;
-
-const Block&
-NextHopRecord::wireEncode() const
-{
-  if (m_wire.hasWire()) {
-    return m_wire;
-  }
-
-  EncodingEstimator estimator;
-  size_t estimatedSize = wireEncode(estimator);
-
-  EncodingBuffer buffer(estimatedSize, 0);
-  wireEncode(buffer);
-
-  m_wire = buffer.block();
-  return m_wire;
-}
-
-void
-NextHopRecord::wireDecode(const Block& wire)
-{
-  m_faceId = std::numeric_limits<uint64_t>::max();
-  m_cost = 0;
-
-  m_wire = wire;
-
-  if (m_wire.type() != tlv::nfd::NextHopRecord) {
-    std::stringstream error;
-    error << "Requested decoding of NextHopRecord, but Block is of a different type: #"
-          << m_wire.type();
-    BOOST_THROW_EXCEPTION(Error(error.str()));
-  }
-  m_wire.parse();
-
-  Block::element_const_iterator val = m_wire.elements_begin();
-  if (val == m_wire.elements_end()) {
-    BOOST_THROW_EXCEPTION(Error("Unexpected end of NextHopRecord"));
-  }
-  else if (val->type() != tlv::nfd::FaceId) {
-    std::stringstream error;
-    error << "Expected FaceId, but Block is of a different type: #"
-          << val->type();
-    BOOST_THROW_EXCEPTION(Error(error.str()));
-  }
-  m_faceId = readNonNegativeInteger(*val);
-  ++val;
-
-  if (val == m_wire.elements_end()) {
-    BOOST_THROW_EXCEPTION(Error("Unexpected end of NextHopRecord"));
-  }
-  else if (val->type() != tlv::nfd::Cost) {
-    std::stringstream error;
-    error << "Expected Cost, but Block is of a different type: #"
-          << m_wire.type();
-    BOOST_THROW_EXCEPTION(Error(error.str()));
-  }
-  m_cost = readNonNegativeInteger(*val);
-}
-
-// FibEntry      := FIB-ENTRY-TYPE TLV-LENGTH
-//                    Name
-//                    NextHopRecord*
-
-FibEntry::FibEntry()
-{
-}
-
-FibEntry::FibEntry(const Block& block)
-{
-  this->wireDecode(block);
-}
-
-FibEntry&
-FibEntry::setPrefix(const Name& prefix)
-{
-  m_prefix = prefix;
-  m_wire.reset();
-  return *this;
-}
-
-FibEntry&
-FibEntry::addNextHopRecord(const NextHopRecord& nextHopRecord)
-{
-  m_nextHopRecords.push_back(nextHopRecord);
-  m_wire.reset();
-  return *this;
-}
-
-template<encoding::Tag TAG>
-size_t
-FibEntry::wireEncode(EncodingImpl<TAG>& block) const
-{
-  size_t totalLength = 0;
-
-  for (auto i = m_nextHopRecords.rbegin(); i != m_nextHopRecords.rend(); ++i) {
-    totalLength += i->wireEncode(block);
-  }
-
-  totalLength += m_prefix.wireEncode(block);
-  totalLength += block.prependVarNumber(totalLength);
-  totalLength += block.prependVarNumber(tlv::nfd::FibEntry);
-
-  return totalLength;
-}
-
-template size_t
-FibEntry::wireEncode<encoding::EncoderTag>(EncodingImpl<encoding::EncoderTag>& block) const;
-
-template size_t
-FibEntry::wireEncode<encoding::EstimatorTag>(EncodingImpl<encoding::EstimatorTag>& block) const;
-
-const Block&
-FibEntry::wireEncode() const
-{
-  if (m_wire.hasWire()) {
-    return m_wire;
-  }
-
-  EncodingEstimator estimator;
-  size_t estimatedSize = wireEncode(estimator);
-
-  EncodingBuffer buffer(estimatedSize, 0);
-  wireEncode(buffer);
-
-  m_wire = buffer.block();
-
-  return m_wire;
-}
-
-void
-FibEntry::wireDecode(const Block& wire)
-{
-  m_prefix.clear();
-  m_nextHopRecords.clear();
-
-  m_wire = wire;
-
-  if (m_wire.type() != tlv::nfd::FibEntry) {
-    std::stringstream error;
-    error << "Requested decoding of FibEntry, but Block is of a different type: #"
-          << m_wire.type();
-    BOOST_THROW_EXCEPTION(Error(error.str()));
-  }
-
-  m_wire.parse();
-
-  Block::element_const_iterator val = m_wire.elements_begin();
-  if (val == m_wire.elements_end()) {
-    BOOST_THROW_EXCEPTION(Error("Unexpected end of FibEntry"));
-  }
-  else if (val->type() != tlv::Name) {
-    std::stringstream error;
-    error << "Expected Name, but Block is of a different type: #"
-          << val->type();
-    BOOST_THROW_EXCEPTION(Error(error.str()));
-  }
-  m_prefix.wireDecode(*val);
-  ++val;
-
-  for (; val != m_wire.elements_end(); ++val) {
-    if (val->type() != tlv::nfd::NextHopRecord) {
-      std::stringstream error;
-      error << "Expected NextHopRecords, but Block is of a different type: #"
-            << val->type();
-      BOOST_THROW_EXCEPTION(Error(error.str()));
-    }
-    m_nextHopRecords.push_back(NextHopRecord(*val));
-  }
-}
-
-} // namespace nfd
-} // namespace ndn
diff --git a/src/management/nfd-fib-entry.hpp b/src/management/nfd-fib-entry.hpp
index f1f3003..5f3a4c3 100644
--- a/src/management/nfd-fib-entry.hpp
+++ b/src/management/nfd-fib-entry.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,137 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_FIB_ENTRY_HPP
-#define NDN_MANAGEMENT_NFD_FIB_ENTRY_HPP
-
-#include "../encoding/block.hpp"
-#include "../name.hpp"
-#include <list>
-
-namespace ndn {
-namespace nfd {
-
-/** @ingroup management
+/** \file
+ *  \deprecated Use mgmt/nfd/fib-entry.hpp
  */
-class NextHopRecord
-{
-public:
-  class Error : public tlv::Error
-  {
-  public:
-    explicit
-    Error(const std::string& what)
-      : tlv::Error(what)
-    {
-    }
-  };
-
-  NextHopRecord();
-
-  explicit
-  NextHopRecord(const Block& block);
-
-  uint64_t
-  getFaceId() const
-  {
-    return m_faceId;
-  }
-
-  NextHopRecord&
-  setFaceId(uint64_t faceId);
-
-  uint64_t
-  getCost() const
-  {
-    return m_cost;
-  }
-
-  NextHopRecord&
-  setCost(uint64_t cost);
-
-  template<encoding::Tag TAG>
-  size_t
-  wireEncode(EncodingImpl<TAG>& block) const;
-
-  const Block&
-  wireEncode() const;
-
-  void
-  wireDecode(const Block& wire);
-
-private:
-  uint64_t m_faceId;
-  uint64_t m_cost;
-
-  mutable Block m_wire;
-};
-
-/** @ingroup management
- */
-class FibEntry
-{
-public:
-  class Error : public tlv::Error
-  {
-  public:
-    explicit
-    Error(const std::string& what)
-      : tlv::Error(what)
-    {
-    }
-  };
-
-  FibEntry();
-
-  explicit
-  FibEntry(const Block& block);
-
-  const Name&
-  getPrefix() const
-  {
-    return m_prefix;
-  }
-
-  FibEntry&
-  setPrefix(const Name& prefix);
-
-  const std::list<NextHopRecord>&
-  getNextHopRecords() const
-  {
-    return m_nextHopRecords;
-  }
-
-  FibEntry&
-  addNextHopRecord(const NextHopRecord& nextHopRecord);
-
-  template<typename T>
-  FibEntry&
-  setNextHopRecords(const T& begin, const T& end)
-  {
-    m_nextHopRecords.clear();
-    m_nextHopRecords.assign(begin, end);
-    m_wire.reset();
-    return *this;
-  }
-
-  template<encoding::Tag TAG>
-  size_t
-  wireEncode(EncodingImpl<TAG>& block) const;
-
-  const Block&
-  wireEncode() const;
-
-  void
-  wireDecode(const Block& wire);
-
-private:
-  Name m_prefix;
-  std::list<NextHopRecord> m_nextHopRecords;
-
-  mutable Block m_wire;
-};
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_FIB_ENTRY_HPP
+#include "../mgmt/nfd/fib-entry.hpp"
diff --git a/src/management/nfd-forwarder-status.cpp b/src/management/nfd-forwarder-status.cpp
deleted file mode 100644
index 8292f19..0000000
--- a/src/management/nfd-forwarder-status.cpp
+++ /dev/null
@@ -1,357 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2015 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.
- */
-
-#include "nfd-forwarder-status.hpp"
-#include "encoding/tlv-nfd.hpp"
-#include "encoding/block-helpers.hpp"
-#include "util/concepts.hpp"
-
-namespace ndn {
-namespace nfd {
-
-//BOOST_CONCEPT_ASSERT((boost::EqualityComparable<ForwarderStatus>));
-BOOST_CONCEPT_ASSERT((WireEncodable<ForwarderStatus>));
-BOOST_CONCEPT_ASSERT((WireDecodable<ForwarderStatus>));
-static_assert(std::is_base_of<tlv::Error, ForwarderStatus::Error>::value,
-              "ForwarderStatus::Error must inherit from tlv::Error");
-
-ForwarderStatus::ForwarderStatus()
-  : m_startTimestamp(time::system_clock::TimePoint::min())
-  , m_currentTimestamp(time::system_clock::TimePoint::min())
-  , m_nNameTreeEntries(0)
-  , m_nFibEntries(0)
-  , m_nPitEntries(0)
-  , m_nMeasurementsEntries(0)
-  , m_nCsEntries(0)
-  , m_nInInterests(0)
-  , m_nInDatas(0)
-  , m_nInNacks(0)
-  , m_nOutInterests(0)
-  , m_nOutDatas(0)
-  , m_nOutNacks(0)
-{
-}
-
-ForwarderStatus::ForwarderStatus(const Block& payload)
-{
-  this->wireDecode(payload);
-}
-
-template<encoding::Tag TAG>
-size_t
-ForwarderStatus::wireEncode(EncodingImpl<TAG>& encoder) const
-{
-  size_t totalLength = 0;
-
-  totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NOutNacks,
-                                                m_nOutNacks);
-  totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NOutDatas,
-                                                m_nOutDatas);
-  totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NOutInterests,
-                                                m_nOutInterests);
-  totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NInNacks,
-                                                m_nInNacks);
-  totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NInDatas,
-                                                m_nInDatas);
-  totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NInInterests,
-                                                m_nInInterests);
-  totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NCsEntries,
-                                                m_nCsEntries);
-  totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NMeasurementsEntries,
-                                                m_nMeasurementsEntries);
-  totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NPitEntries,
-                                                m_nPitEntries);
-  totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NFibEntries,
-                                                m_nFibEntries);
-  totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NNameTreeEntries,
-                                                m_nNameTreeEntries);
-  totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::CurrentTimestamp,
-                                                time::toUnixTimestamp(m_currentTimestamp).count());
-  totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::StartTimestamp,
-                                                time::toUnixTimestamp(m_startTimestamp).count());
-  totalLength += encoder.prependByteArrayBlock(tlv::nfd::NfdVersion,
-                                       reinterpret_cast<const uint8_t*>(m_nfdVersion.c_str()),
-                                       m_nfdVersion.size());
-
-  totalLength += encoder.prependVarNumber(totalLength);
-  totalLength += encoder.prependVarNumber(tlv::Content);
-  return totalLength;
-}
-
-template size_t
-ForwarderStatus::wireEncode<encoding::EncoderTag>(EncodingImpl<encoding::EncoderTag>&) const;
-
-template size_t
-ForwarderStatus::wireEncode<encoding::EstimatorTag>(EncodingImpl<encoding::EstimatorTag>&) const;
-
-const Block&
-ForwarderStatus::wireEncode() const
-{
-  if (m_wire.hasWire())
-    return m_wire;
-
-  EncodingEstimator estimator;
-  size_t estimatedSize = wireEncode(estimator);
-
-  EncodingBuffer buffer(estimatedSize, 0);
-  wireEncode(buffer);
-
-  m_wire = buffer.block();
-  return m_wire;
-}
-
-void
-ForwarderStatus::wireDecode(const Block& block)
-{
-  if (block.type() != tlv::Content) {
-    BOOST_THROW_EXCEPTION(Error("expecting Content block for Status payload"));
-  }
-  m_wire = block;
-  m_wire.parse();
-  Block::element_const_iterator val = m_wire.elements_begin();
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NfdVersion) {
-    m_nfdVersion.assign(reinterpret_cast<const char*>(val->value()), val->value_size());
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NfdVersion field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::StartTimestamp) {
-    m_startTimestamp = time::fromUnixTimestamp(time::milliseconds(readNonNegativeInteger(*val)));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required StartTimestamp field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::CurrentTimestamp) {
-    m_currentTimestamp = time::fromUnixTimestamp(time::milliseconds(readNonNegativeInteger(*val)));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required CurrentTimestamp field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NNameTreeEntries) {
-    m_nNameTreeEntries = static_cast<size_t>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NNameTreeEntries field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NFibEntries) {
-    m_nFibEntries = static_cast<size_t>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NFibEntries field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NPitEntries) {
-    m_nPitEntries = static_cast<size_t>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NPitEntries field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NMeasurementsEntries) {
-    m_nMeasurementsEntries = static_cast<size_t>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NMeasurementsEntries field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NCsEntries) {
-    m_nCsEntries = static_cast<size_t>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NCsEntries field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NInInterests) {
-    m_nInInterests = static_cast<uint64_t>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NInInterests field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NInDatas) {
-    m_nInDatas = static_cast<uint64_t>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NInDatas field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NInNacks) {
-    m_nInNacks = static_cast<uint64_t>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NInNacks field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NOutInterests) {
-    m_nOutInterests = static_cast<uint64_t>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NOutInterests field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NOutDatas) {
-    m_nOutDatas = static_cast<uint64_t>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NOutDatas field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::NOutNacks) {
-    m_nOutNacks = static_cast<uint64_t>(readNonNegativeInteger(*val));
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required NInNacks field"));
-  }
-}
-
-ForwarderStatus&
-ForwarderStatus::setNfdVersion(const std::string& nfdVersion)
-{
-  m_wire.reset();
-  m_nfdVersion = nfdVersion;
-  return *this;
-}
-
-ForwarderStatus&
-ForwarderStatus::setStartTimestamp(const time::system_clock::TimePoint& startTimestamp)
-{
-  m_wire.reset();
-  m_startTimestamp = startTimestamp;
-  return *this;
-}
-
-ForwarderStatus&
-ForwarderStatus::setCurrentTimestamp(const time::system_clock::TimePoint& currentTimestamp)
-{
-  m_wire.reset();
-  m_currentTimestamp = currentTimestamp;
-  return *this;
-}
-
-ForwarderStatus&
-ForwarderStatus::setNNameTreeEntries(size_t nNameTreeEntries)
-{
-  m_wire.reset();
-  m_nNameTreeEntries = nNameTreeEntries;
-  return *this;
-}
-
-ForwarderStatus&
-ForwarderStatus::setNFibEntries(size_t nFibEntries)
-{
-  m_wire.reset();
-  m_nFibEntries = nFibEntries;
-  return *this;
-}
-
-ForwarderStatus&
-ForwarderStatus::setNPitEntries(size_t nPitEntries)
-{
-  m_wire.reset();
-  m_nPitEntries = nPitEntries;
-  return *this;
-}
-
-ForwarderStatus&
-ForwarderStatus::setNMeasurementsEntries(size_t nMeasurementsEntries)
-{
-  m_wire.reset();
-  m_nMeasurementsEntries = nMeasurementsEntries;
-  return *this;
-}
-
-ForwarderStatus&
-ForwarderStatus::setNCsEntries(size_t nCsEntries)
-{
-  m_wire.reset();
-  m_nCsEntries = nCsEntries;
-  return *this;
-}
-
-ForwarderStatus&
-ForwarderStatus::setNInInterests(uint64_t nInInterests)
-{
-  m_wire.reset();
-  m_nInInterests = nInInterests;
-  return *this;
-}
-
-ForwarderStatus&
-ForwarderStatus::setNInDatas(uint64_t nInDatas)
-{
-  m_wire.reset();
-  m_nInDatas = nInDatas;
-  return *this;
-}
-
-ForwarderStatus&
-ForwarderStatus::setNInNacks(uint64_t nInNacks)
-{
-  m_wire.reset();
-  m_nInNacks = nInNacks;
-  return *this;
-}
-
-ForwarderStatus&
-ForwarderStatus::setNOutInterests(uint64_t nOutInterests)
-{
-  m_wire.reset();
-  m_nOutInterests = nOutInterests;
-  return *this;
-}
-
-ForwarderStatus&
-ForwarderStatus::setNOutDatas(uint64_t nOutDatas)
-{
-  m_wire.reset();
-  m_nOutDatas = nOutDatas;
-  return *this;
-}
-
-ForwarderStatus&
-ForwarderStatus::setNOutNacks(uint64_t nOutNacks)
-{
-  m_wire.reset();
-  m_nOutNacks = nOutNacks;
-  return *this;
-}
-
-} // namespace nfd
-} // namespace ndn
diff --git a/src/management/nfd-forwarder-status.hpp b/src/management/nfd-forwarder-status.hpp
index 7083cb6..ca9a944 100644
--- a/src/management/nfd-forwarder-status.hpp
+++ b/src/management/nfd-forwarder-status.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,207 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_FORWARDER_STATUS_HPP
-#define NDN_MANAGEMENT_NFD_FORWARDER_STATUS_HPP
-
-#include "../encoding/block.hpp"
-#include "../util/time.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/**
- * \ingroup management
- * \brief represents NFD Forwarder Status
- * \sa http://redmine.named-data.net/projects/nfd/wiki/ForwarderStatus
+/** \file
+ *  \deprecated Use mgmt/nfd/forwarder-status.hpp
  */
-class ForwarderStatus
-{
-public:
-  class Error : public tlv::Error
-  {
-  public:
-    explicit
-    Error(const std::string& what)
-      : tlv::Error(what)
-    {
-    }
-  };
-
-  ForwarderStatus();
-
-  explicit
-  ForwarderStatus(const Block& payload);
-
-  /** \brief prepend ForwarderStatus as a Content block to the encoder
-   *
-   *  The outermost Content element isn't part of ForwardStatus structure.
-   */
-  template<encoding::Tag TAG>
-  size_t
-  wireEncode(EncodingImpl<TAG>& encoder) const;
-
-  /** \brief encode ForwarderStatus as a Content block
-   *
-   *  The outermost Content element isn't part of ForwardStatus structure.
-   */
-  const Block&
-  wireEncode() const;
-
-  /** \brief decode ForwarderStatus from a Content block
-   *
-   *  The outermost Content element isn't part of ForwardStatus structure.
-   */
-  void
-  wireDecode(const Block& wire);
-
-public: // getters & setters
-  const std::string&
-  getNfdVersion() const
-  {
-    return m_nfdVersion;
-  }
-
-  ForwarderStatus&
-  setNfdVersion(const std::string& nfdVersion);
-
-  const time::system_clock::TimePoint&
-  getStartTimestamp() const
-  {
-    return m_startTimestamp;
-  }
-
-  ForwarderStatus&
-  setStartTimestamp(const time::system_clock::TimePoint& startTimestamp);
-
-  const time::system_clock::TimePoint&
-  getCurrentTimestamp() const
-  {
-    return m_currentTimestamp;
-  }
-
-  ForwarderStatus&
-  setCurrentTimestamp(const time::system_clock::TimePoint& currentTimestamp);
-
-  size_t
-  getNNameTreeEntries() const
-  {
-    return m_nNameTreeEntries;
-  }
-
-  ForwarderStatus&
-  setNNameTreeEntries(size_t nNameTreeEntries);
-
-  size_t
-  getNFibEntries() const
-  {
-    return m_nFibEntries;
-  }
-
-  ForwarderStatus&
-  setNFibEntries(size_t nFibEntries);
-
-  size_t
-  getNPitEntries() const
-  {
-    return m_nPitEntries;
-  }
-
-  ForwarderStatus&
-  setNPitEntries(size_t nPitEntries);
-
-  size_t
-  getNMeasurementsEntries() const
-  {
-    return m_nMeasurementsEntries;
-  }
-
-  ForwarderStatus&
-  setNMeasurementsEntries(size_t nMeasurementsEntries);
-
-  size_t
-  getNCsEntries() const
-  {
-    return m_nCsEntries;
-  }
-
-  ForwarderStatus&
-  setNCsEntries(size_t nCsEntries);
-
-  uint64_t
-  getNInInterests() const
-  {
-    return m_nInInterests;
-  }
-
-  ForwarderStatus&
-  setNInInterests(uint64_t nInInterests);
-
-  uint64_t
-  getNInDatas() const
-  {
-    return m_nInDatas;
-  }
-
-  ForwarderStatus&
-  setNInDatas(uint64_t nInDatas);
-
-  uint64_t
-  getNInNacks() const
-  {
-    return m_nInNacks;
-  }
-
-  ForwarderStatus&
-  setNInNacks(uint64_t nInNacks);
-
-  uint64_t
-  getNOutInterests() const
-  {
-    return m_nOutInterests;
-  }
-
-  ForwarderStatus&
-  setNOutInterests(uint64_t nOutInterests);
-
-  uint64_t
-  getNOutDatas() const
-  {
-    return m_nOutDatas;
-  }
-
-  ForwarderStatus&
-  setNOutDatas(uint64_t nOutDatas);
-
-  uint64_t
-  getNOutNacks() const
-  {
-    return m_nOutNacks;
-  }
-
-  ForwarderStatus&
-  setNOutNacks(uint64_t nOutNacks);
-
-private:
-  std::string m_nfdVersion;
-  time::system_clock::TimePoint m_startTimestamp;
-  time::system_clock::TimePoint m_currentTimestamp;
-  size_t m_nNameTreeEntries;
-  size_t m_nFibEntries;
-  size_t m_nPitEntries;
-  size_t m_nMeasurementsEntries;
-  size_t m_nCsEntries;
-  uint64_t m_nInInterests;
-  uint64_t m_nInDatas;
-  uint64_t m_nInNacks;
-  uint64_t m_nOutInterests;
-  uint64_t m_nOutDatas;
-  uint64_t m_nOutNacks;
-
-  mutable Block m_wire;
-};
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_FORWARDER_STATUS_HPP
+#include "../mgmt/nfd/forwarder-status.hpp"
diff --git a/src/management/nfd-rib-entry.cpp b/src/management/nfd-rib-entry.cpp
deleted file mode 100644
index 7c056cd..0000000
--- a/src/management/nfd-rib-entry.cpp
+++ /dev/null
@@ -1,320 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2015 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.
- */
-
-#include "nfd-rib-entry.hpp"
-#include "encoding/tlv-nfd.hpp"
-#include "encoding/block-helpers.hpp"
-#include "util/concepts.hpp"
-
-namespace ndn {
-namespace nfd {
-
-//BOOST_CONCEPT_ASSERT((boost::EqualityComparable<Route>));
-BOOST_CONCEPT_ASSERT((WireEncodable<Route>));
-BOOST_CONCEPT_ASSERT((WireDecodable<Route>));
-static_assert(std::is_base_of<tlv::Error, Route::Error>::value,
-              "Route::Error must inherit from tlv::Error");
-
-//BOOST_CONCEPT_ASSERT((boost::EqualityComparable<RibEntry>));
-BOOST_CONCEPT_ASSERT((WireEncodable<RibEntry>));
-BOOST_CONCEPT_ASSERT((WireDecodable<RibEntry>));
-static_assert(std::is_base_of<tlv::Error, RibEntry::Error>::value,
-              "RibEntry::Error must inherit from tlv::Error");
-
-const time::milliseconds Route::INFINITE_EXPIRATION_PERIOD(time::milliseconds::max());
-
-Route::Route()
-  : m_faceId(0)
-  , m_origin(0)
-  , m_cost(0)
-  , m_flags(ROUTE_FLAG_CHILD_INHERIT)
-  , m_expirationPeriod(INFINITE_EXPIRATION_PERIOD)
-  , m_hasInfiniteExpirationPeriod(true)
-{
-}
-
-Route::Route(const Block& block)
-{
-  wireDecode(block);
-}
-
-template<encoding::Tag TAG>
-size_t
-Route::wireEncode(EncodingImpl<TAG>& block) const
-{
-  size_t totalLength = 0;
-
-  // Absence of an ExpirationPeriod signifies non-expiration
-  if (!m_hasInfiniteExpirationPeriod) {
-    totalLength += prependNonNegativeIntegerBlock(block,
-                                                  ndn::tlv::nfd::ExpirationPeriod,
-                                                  m_expirationPeriod.count());
-  }
-
-  totalLength += prependNonNegativeIntegerBlock(block,
-                                                ndn::tlv::nfd::Flags,
-                                                m_flags);
-
-  totalLength += prependNonNegativeIntegerBlock(block,
-                                                ndn::tlv::nfd::Cost,
-                                                m_cost);
-
-  totalLength += prependNonNegativeIntegerBlock(block,
-                                                ndn::tlv::nfd::Origin,
-                                                m_origin);
-
-  totalLength += prependNonNegativeIntegerBlock(block,
-                                                ndn::tlv::nfd::FaceId,
-                                                m_faceId);
-
-  totalLength += block.prependVarNumber(totalLength);
-  totalLength += block.prependVarNumber(ndn::tlv::nfd::Route);
-
-  return totalLength;
-}
-
-template size_t
-Route::wireEncode<encoding::EncoderTag>(EncodingImpl<encoding::EncoderTag>& block) const;
-
-template size_t
-Route::wireEncode<encoding::EstimatorTag>(EncodingImpl<encoding::EstimatorTag>& block) const;
-
-const Block&
-Route::wireEncode() const
-{
-  if (m_wire.hasWire()) {
-    return m_wire;
-  }
-
-  EncodingEstimator estimator;
-  size_t estimatedSize = wireEncode(estimator);
-
-  EncodingBuffer buffer(estimatedSize, 0);
-  wireEncode(buffer);
-
-  m_wire = buffer.block();
-
-  return m_wire;
-}
-
-void
-Route::wireDecode(const Block& wire)
-{
-  m_faceId = 0;
-  m_origin = 0;
-  m_cost = 0;
-  m_flags = 0;
-  m_expirationPeriod = time::milliseconds::min();
-
-  m_wire = wire;
-
-  if (m_wire.type() != tlv::nfd::Route) {
-    std::stringstream error;
-    error << "Expected Route Block, but Block is of a different type: #"
-          << m_wire.type();
-    BOOST_THROW_EXCEPTION(Error(error.str()));
-  }
-
-  m_wire.parse();
-
-  Block::element_const_iterator val = m_wire.elements_begin();
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::FaceId) {
-    m_faceId = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("Missing required FaceId field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::Origin) {
-    m_origin = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("Missing required Origin field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::Cost) {
-    m_cost = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("Missing required Cost field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::Flags) {
-    m_flags = readNonNegativeInteger(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("Missing required Flags field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::ExpirationPeriod) {
-    m_expirationPeriod = time::milliseconds(readNonNegativeInteger(*val));
-    m_hasInfiniteExpirationPeriod = false;
-  }
-  else {
-    m_expirationPeriod = INFINITE_EXPIRATION_PERIOD;
-    m_hasInfiniteExpirationPeriod = true;
-  }
-}
-
-std::ostream&
-operator<<(std::ostream& os, const Route& route)
-{
-  os << "Route("
-     << "FaceId: " << route.getFaceId() << ", "
-     << "Origin: " << route.getOrigin() << ", "
-     << "Cost: " << route.getCost() << ", "
-     << "Flags: " << route.getFlags() << ", ";
-
-  if (!route.hasInfiniteExpirationPeriod()) {
-    os << "ExpirationPeriod: " << route.getExpirationPeriod();
-  }
-  else {
-    os << "ExpirationPeriod: Infinity";
-  }
-
-  os << ")";
-
-  return os;
-}
-
-
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-
-
-RibEntry::RibEntry()
-{
-}
-
-RibEntry::RibEntry(const Block& block)
-{
-  wireDecode(block);
-}
-
-
-template<encoding::Tag TAG>
-size_t
-RibEntry::wireEncode(EncodingImpl<TAG>& block) const
-{
-  size_t totalLength = 0;
-
-  for (std::list<Route>::const_reverse_iterator it = m_routes.rbegin();
-       it != m_routes.rend(); ++it)
-    {
-      totalLength += it->wireEncode(block);
-    }
-
-  totalLength += m_prefix.wireEncode(block);
-
-  totalLength += block.prependVarNumber(totalLength);
-  totalLength += block.prependVarNumber(tlv::nfd::RibEntry);
-
-  return totalLength;
-}
-
-template size_t
-RibEntry::wireEncode<encoding::EncoderTag>(EncodingImpl<encoding::EncoderTag>& block) const;
-
-template size_t
-RibEntry::wireEncode<encoding::EstimatorTag>(EncodingImpl<encoding::EstimatorTag>& block) const;
-
-const Block&
-RibEntry::wireEncode() const
-{
-  if (m_wire.hasWire()) {
-    return m_wire;
-  }
-
-  EncodingEstimator estimator;
-  size_t estimatedSize = wireEncode(estimator);
-
-  EncodingBuffer buffer(estimatedSize, 0);
-  wireEncode(buffer);
-
-  m_wire = buffer.block();
-
-  return m_wire;
-}
-
-void
-RibEntry::wireDecode(const Block& wire)
-{
-  m_prefix.clear();
-  m_routes.clear();
-
-  m_wire = wire;
-
-  if (m_wire.type() != tlv::nfd::RibEntry) {
-    std::stringstream error;
-    error << "Expected RibEntry Block, but Block is of a different type: #"
-          << m_wire.type();
-    BOOST_THROW_EXCEPTION(Error(error.str()));
-  }
-
-  m_wire.parse();
-
-  Block::element_const_iterator val = m_wire.elements_begin();
-
-  if (val != m_wire.elements_end() && val->type() == tlv::Name) {
-    m_prefix.wireDecode(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("Missing required Name field"));
-  }
-
-  for (; val != m_wire.elements_end(); ++val) {
-
-    if (val->type() == tlv::nfd::Route) {
-      m_routes.push_back(Route(*val));
-    }
-    else {
-      std::stringstream error;
-      error << "Expected Route Block, but Block is of a different type: #"
-            << m_wire.type();
-      BOOST_THROW_EXCEPTION(Error(error.str()));
-    }
-  }
-}
-
-std::ostream&
-operator<<(std::ostream& os, const RibEntry& entry)
-{
-  os << "RibEntry{\n"
-     << "  Name: " << entry.getName() << "\n";
-
-  for (RibEntry::iterator it = entry.begin(); it != entry.end(); ++it) {
-    os << "  " << *it << "\n";
-  }
-
-  os << "}";
-
-  return os;
-}
-
-} // namespace nfd
-} // namespace ndn
diff --git a/src/management/nfd-rib-entry.hpp b/src/management/nfd-rib-entry.hpp
index ad5fe92..2673e6c 100644
--- a/src/management/nfd-rib-entry.hpp
+++ b/src/management/nfd-rib-entry.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,269 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_RIB_ENTRY_HPP
-#define NDN_MANAGEMENT_NFD_RIB_ENTRY_HPP
-
-#include "nfd-rib-flags.hpp" // include this first, to ensure it compiles on its own.
-#include "../name.hpp"
-#include "../util/time.hpp"
-
-#include <list>
-
-namespace ndn {
-namespace nfd {
-
-/**
- * @ingroup management
- *
- * @brief Data abstraction for Route
- *
- * A route indicates the availability of content via a certain face and
- * provides meta-information about the face.
- *
- *     Route := ROUTE-TYPE TLV-LENGTH
- *                FaceId
- *                Origin
- *                Cost
- *                Flags
- *                ExpirationPeriod?
- *
- * @sa http://redmine.named-data.net/projects/nfd/wiki/RibMgmt
+/** \file
+ *  \deprecated Use mgmt/nfd/rib-entry.hpp
  */
-class Route : public RibFlagsTraits<Route>
-{
-public:
-  class Error : public tlv::Error
-  {
-  public:
-    explicit
-    Error(const std::string& what) : tlv::Error(what)
-    {
-    }
-  };
-
-  Route();
-
-  explicit
-  Route(const Block& block);
-
-  uint64_t
-  getFaceId() const
-  {
-    return m_faceId;
-  }
-
-  Route&
-  setFaceId(uint64_t faceId)
-  {
-    m_faceId = faceId;
-    m_wire.reset();
-    return *this;
-  }
-
-  uint64_t
-  getOrigin() const
-  {
-    return m_origin;
-  }
-
-  /** @brief set Origin
-   *  @param origin a code defined in ndn::nfd::RouteOrigin
-   */
-  Route&
-  setOrigin(uint64_t origin)
-  {
-    m_origin = origin;
-    m_wire.reset();
-    return *this;
-  }
-
-  uint64_t
-  getCost() const
-  {
-    return m_cost;
-  }
-
-  Route&
-  setCost(uint64_t cost)
-  {
-    m_cost = cost;
-    m_wire.reset();
-    return *this;
-  }
-
-  uint64_t
-  getFlags() const
-  {
-    return m_flags;
-  }
-
-  /** @brief set route inheritance flags
-   *  @param flags a bitwise OR'ed code from ndn::nfd::RouteFlags
-   */
-  Route&
-  setFlags(uint64_t flags)
-  {
-    m_flags = flags;
-    m_wire.reset();
-    return *this;
-  }
-
-  static const time::milliseconds INFINITE_EXPIRATION_PERIOD;
-
-  const time::milliseconds&
-  getExpirationPeriod() const
-  {
-    return m_expirationPeriod;
-  }
-
-  Route&
-  setExpirationPeriod(const time::milliseconds& expirationPeriod)
-  {
-    m_expirationPeriod = expirationPeriod;
-
-    m_hasInfiniteExpirationPeriod = m_expirationPeriod == INFINITE_EXPIRATION_PERIOD;
-
-    m_wire.reset();
-    return *this;
-  }
-
-  bool
-  hasInfiniteExpirationPeriod() const
-  {
-    return m_hasInfiniteExpirationPeriod;
-  }
-
-  template<encoding::Tag TAG>
-  size_t
-  wireEncode(EncodingImpl<TAG>& block) const;
-
-  const Block&
-  wireEncode() const;
-
-  void
-  wireDecode(const Block& wire);
-
-private:
-  uint64_t m_faceId;
-  uint64_t m_origin;
-  uint64_t m_cost;
-  uint64_t m_flags;
-  time::milliseconds m_expirationPeriod;
-  bool m_hasInfiniteExpirationPeriod;
-
-  mutable Block m_wire;
-};
-
-std::ostream&
-operator<<(std::ostream& os, const Route& route);
-
-/**
- * @ingroup management
- *
- * @brief Data abstraction for RIB entry
- *
- * A RIB entry contains one or more routes for the name prefix
- *
- *     RibEntry := RIB-ENTRY-TYPE TLV-LENGTH
- *                Name
- *                Route+
- *
- * @sa http://redmine.named-data.net/projects/nfd/wiki/RibMgmt
- */
-class RibEntry
-{
-public:
-  class Error : public tlv::Error
-  {
-  public:
-    Error(const std::string& what) : tlv::Error(what)
-    {
-    }
-  };
-
-  typedef std::list<Route> RouteList;
-  typedef RouteList::const_iterator iterator;
-
-  RibEntry();
-
-  explicit
-  RibEntry(const Block& block);
-
-  const Name&
-  getName() const
-  {
-    return m_prefix;
-  }
-
-  RibEntry&
-  setName(const Name& prefix)
-  {
-    m_prefix = prefix;
-    m_wire.reset();
-    return *this;
-  }
-
-  const std::list<Route>&
-  getRoutes() const
-  {
-    return m_routes;
-  }
-
-  RibEntry&
-  addRoute(const Route& route)
-  {
-    m_routes.push_back(route);
-    m_wire.reset();
-    return *this;
-  }
-
-  RibEntry&
-  clearRoutes()
-  {
-    m_routes.clear();
-    return *this;
-  }
-
-  template<encoding::Tag TAG>
-  size_t
-  wireEncode(EncodingImpl<TAG>& block) const;
-
-  const Block&
-  wireEncode() const;
-
-  void
-  wireDecode(const Block& wire);
-
-  iterator
-  begin() const;
-
-  iterator
-  end() const;
-
-private:
-  Name m_prefix;
-  RouteList m_routes;
-
-  mutable Block m_wire;
-};
-
-inline RibEntry::iterator
-RibEntry::begin() const
-{
-  return m_routes.begin();
-}
-
-inline RibEntry::iterator
-RibEntry::end() const
-{
-  return m_routes.end();
-}
-
-std::ostream&
-operator<<(std::ostream& os, const RibEntry& entry);
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_RIB_ENTRY_HPP
+#include "../mgmt/nfd/rib-entry.hpp"
diff --git a/src/management/nfd-rib-flags.hpp b/src/management/nfd-rib-flags.hpp
index 07e36d1..8a15a34 100644
--- a/src/management/nfd-rib-flags.hpp
+++ b/src/management/nfd-rib-flags.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2014 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,39 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_RIB_FLAGS_HPP
-#define NDN_MANAGEMENT_NFD_RIB_FLAGS_HPP
-
-#include "../encoding/nfd-constants.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/**
- * \ingroup management
- * \brief implements getters to each RIB flag
- *
- * \tparam T class containing a RibFlags field and implements
- *           `RibFlags getFlags() const` method
+/** \file
+ *  \deprecated Use mgmt/nfd/rib-flags.hpp
  */
-template<typename T>
-class RibFlagsTraits
-{
-public:
-  bool
-  isChildInherit() const
-  {
-    return static_cast<const T*>(this)->getFlags() & ROUTE_FLAG_CHILD_INHERIT;
-  }
-
-  bool
-  isRibCapture() const
-  {
-    return static_cast<const T*>(this)->getFlags() & ROUTE_FLAG_CAPTURE;
-  }
-};
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_RIB_FLAGS_HPP
+#include "../mgmt/nfd/rib-flags.hpp"
diff --git a/src/management/nfd-status-dataset.cpp b/src/management/nfd-status-dataset.cpp
deleted file mode 100644
index 9516e85..0000000
--- a/src/management/nfd-status-dataset.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2016 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.
- */
-
-#include "nfd-status-dataset.hpp"
-#include "../util/concepts.hpp"
-
-namespace ndn {
-namespace nfd {
-
-StatusDataset::StatusDataset(const PartialName& datasetName)
-  : m_datasetName(datasetName)
-{
-}
-
-Name
-StatusDataset::getDatasetPrefix(const Name& prefix) const
-{
-  Name name;
-  name.append(prefix).append(m_datasetName);
-  this->addParameters(name);
-  return name;
-}
-
-void
-StatusDataset::addParameters(Name& name) const
-{
-}
-
-/**
- * \brief parses elements into a vector of T
- * \tparam T element type
- * \param payload pointer to a buffer of zero or more blocks of decodable by T
- * \return a vector of T
- * \throw tlv::Error cannot parse payload
- */
-template<typename T>
-static std::vector<T>
-parseDatasetVector(ConstBufferPtr payload)
-{
-  BOOST_CONCEPT_ASSERT((WireDecodable<T>));
-
-  std::vector<T> result;
-
-  size_t offset = 0;
-  while (offset < payload->size()) {
-    bool isOk = false;
-    Block block;
-    std::tie(isOk, block) = Block::fromBuffer(payload, offset);
-    if (!isOk) {
-      BOOST_THROW_EXCEPTION(StatusDataset::ParseResultError("cannot decode Block"));
-    }
-
-    offset += block.size();
-    result.emplace_back(block);
-  }
-
-  return result;
-}
-
-ForwarderGeneralStatusDataset::ForwarderGeneralStatusDataset()
-  : StatusDataset("status/general")
-{
-}
-
-ForwarderGeneralStatusDataset::ResultType
-ForwarderGeneralStatusDataset::parseResult(ConstBufferPtr payload) const
-{
-  return ForwarderStatus(Block(tlv::Content, payload));
-}
-
-FaceDatasetBase::FaceDatasetBase(const PartialName& datasetName)
-  : StatusDataset(datasetName)
-{
-}
-
-FaceDatasetBase::ResultType
-FaceDatasetBase::parseResult(ConstBufferPtr payload) const
-{
-  return parseDatasetVector<FaceStatus>(payload);
-}
-
-FaceDataset::FaceDataset()
-  : FaceDatasetBase("faces/list")
-{
-}
-
-FaceQueryDataset::FaceQueryDataset(const FaceQueryFilter& filter)
-  : FaceDatasetBase("faces/query")
-  , m_filter(filter)
-{
-}
-
-void
-FaceQueryDataset::addParameters(Name& name) const
-{
-  name.append(m_filter.wireEncode());
-}
-
-ChannelDataset::ChannelDataset()
-  : StatusDataset("faces/channels")
-{
-}
-
-ChannelDataset::ResultType
-ChannelDataset::parseResult(ConstBufferPtr payload) const
-{
-  return parseDatasetVector<ChannelStatus>(payload);
-}
-
-FibDataset::FibDataset()
-  : StatusDataset("fib/list")
-{
-}
-
-FibDataset::ResultType
-FibDataset::parseResult(ConstBufferPtr payload) const
-{
-  return parseDatasetVector<FibEntry>(payload);
-}
-
-StrategyChoiceDataset::StrategyChoiceDataset()
-  : StatusDataset("strategy-choice/list")
-{
-}
-
-StrategyChoiceDataset::ResultType
-StrategyChoiceDataset::parseResult(ConstBufferPtr payload) const
-{
-  return parseDatasetVector<StrategyChoice>(payload);
-}
-
-RibDataset::RibDataset()
-  : StatusDataset("rib/list")
-{
-}
-
-RibDataset::ResultType
-RibDataset::parseResult(ConstBufferPtr payload) const
-{
-  return parseDatasetVector<RibEntry>(payload);
-}
-
-} // namespace nfd
-} // namespace ndn
diff --git a/src/management/nfd-status-dataset.hpp b/src/management/nfd-status-dataset.hpp
index 363186e..0f2d72a 100644
--- a/src/management/nfd-status-dataset.hpp
+++ b/src/management/nfd-status-dataset.hpp
@@ -19,234 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_STATUS_DATASET_HPP
-#define NDN_MANAGEMENT_NFD_STATUS_DATASET_HPP
-
-#include "../name.hpp"
-#include "nfd-forwarder-status.hpp"
-#include "nfd-face-status.hpp"
-#include "nfd-face-query-filter.hpp"
-#include "nfd-channel-status.hpp"
-#include "nfd-fib-entry.hpp"
-#include "nfd-strategy-choice.hpp"
-#include "nfd-rib-entry.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/**
- * \ingroup management
- * \brief base class of NFD StatusDataset
- * \sa http://redmine.named-data.net/projects/nfd/wiki/StatusDataset
+/** \file
+ *  \deprecated Use mgmt/nfd/status-dataset.hpp
  */
-class StatusDataset : noncopyable
-{
-public:
-#ifdef DOXYGEN
-  /**
-   * \brief if defined, specifies constructor argument type;
-   *        otherwise, constructor has no argument
-   */
-  typedef int ParamType;
-#endif
-
-  /**
-   * \brief constructs a name prefix for the dataset
-   * \param prefix top-level prefix, such as ndn:/localhost/nfd
-   * \return name prefix without version and segment components
-   */
-  Name
-  getDatasetPrefix(const Name& prefix) const;
-
-#ifdef DOXYGEN
-  /**
-   * \brief provides the result type, usually a vector
-   */
-  typedef std::vector<int> ResultType;
-#endif
-
-  /**
-   * \brief indicates reassembled payload cannot be parsed as ResultType
-   */
-  class ParseResultError : public tlv::Error
-  {
-  public:
-    explicit
-    ParseResultError(const std::string& what)
-      : tlv::Error(what)
-    {
-    }
-  };
-
-#ifdef DOXYGEN
-  /**
-   * \brief parses a result from reassembled payload
-   * \param payload reassembled payload
-   * \throw tlv::Error cannot parse payload
-   */
-  ResultType
-  parseResult(ConstBufferPtr payload) const;
-#endif
-
-protected:
-  /**
-   * \brief constructs a StatusDataset instance with given sub-prefix
-   * \param datasetName dataset name after top-level prefix, such as faces/list
-   */
-  explicit
-  StatusDataset(const PartialName& datasetName);
-
-private:
-  /**
-   * \brief appends parameters to the dataset name prefix
-   * \param[in,out] the dataset name prefix onto which parameter components can be appended
-   */
-  virtual void
-  addParameters(Name& name) const;
-
-private:
-  PartialName m_datasetName;
-};
-
-
-/**
- * \ingroup management
- * \brief represents a status/general dataset
- * \sa http://redmine.named-data.net/projects/nfd/wiki/ForwarderStatus#General-Status-Dataset
- */
-class ForwarderGeneralStatusDataset : public StatusDataset
-{
-public:
-  ForwarderGeneralStatusDataset();
-
-  typedef ForwarderStatus ResultType;
-
-  ResultType
-  parseResult(ConstBufferPtr payload) const;
-};
-
-
-/**
- * \ingroup management
- * \brief provides common functionality among FaceDataset and FaceQueryDataset
- */
-class FaceDatasetBase : public StatusDataset
-{
-public:
-  typedef std::vector<FaceStatus> ResultType;
-
-  ResultType
-  parseResult(ConstBufferPtr payload) const;
-
-protected:
-  explicit
-  FaceDatasetBase(const PartialName& datasetName);
-};
-
-
-/**
- * \ingroup management
- * \brief represents a faces/list dataset
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Face-Dataset
- */
-class FaceDataset : public FaceDatasetBase
-{
-public:
-  FaceDataset();
-};
-
-
-/**
- * \ingroup management
- * \brief represents a faces/query dataset
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Query-Operation
- */
-class FaceQueryDataset : public FaceDatasetBase
-{
-public:
-  typedef FaceQueryFilter ParamType;
-
-  explicit
-  FaceQueryDataset(const FaceQueryFilter& filter);
-
-private:
-  virtual void
-  addParameters(Name& name) const override;
-
-private:
-  FaceQueryFilter m_filter;
-};
-
-
-/**
- * \ingroup management
- * \brief represents a faces/channels dataset
- * \sa https://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Channel-Dataset
- */
-class ChannelDataset : public StatusDataset
-{
-public:
-  ChannelDataset();
-
-  typedef std::vector<ChannelStatus> ResultType;
-
-  ResultType
-  parseResult(ConstBufferPtr payload) const;
-};
-
-
-/**
- * \ingroup management
- * \brief represents a fib/list dataset
- * \sa http://redmine.named-data.net/projects/nfd/wiki/FibMgmt#FIB-Dataset
- */
-class FibDataset : public StatusDataset
-{
-public:
-  FibDataset();
-
-  typedef std::vector<FibEntry> ResultType;
-
-  ResultType
-  parseResult(ConstBufferPtr payload) const;
-};
-
-
-/**
- * \ingroup management
- * \brief represents a strategy-choice/list dataset
- * \sa http://redmine.named-data.net/projects/nfd/wiki/StrategyChoice#Strategy-Choice-Dataset
- */
-class StrategyChoiceDataset : public StatusDataset
-{
-public:
-  StrategyChoiceDataset();
-
-  typedef std::vector<StrategyChoice> ResultType;
-
-  ResultType
-  parseResult(ConstBufferPtr payload) const;
-};
-
-
-/**
- * \ingroup management
- * \brief represents a rib/list dataset
- * \sa http://redmine.named-data.net/projects/nfd/wiki/RibMgmt#RIB-Dataset
- */
-class RibDataset : public StatusDataset
-{
-public:
-  RibDataset();
-
-  typedef std::vector<RibEntry> ResultType;
-
-  ResultType
-  parseResult(ConstBufferPtr payload) const;
-};
-
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_STATUS_DATASET_HPP
+#include "../mgmt/nfd/status-dataset.hpp"
diff --git a/src/management/nfd-strategy-choice.cpp b/src/management/nfd-strategy-choice.cpp
deleted file mode 100644
index 659293c..0000000
--- a/src/management/nfd-strategy-choice.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2015 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.
- */
-
-#include "nfd-strategy-choice.hpp"
-#include "encoding/tlv-nfd.hpp"
-#include "encoding/block-helpers.hpp"
-#include "util/concepts.hpp"
-
-namespace ndn {
-namespace nfd {
-
-//BOOST_CONCEPT_ASSERT((boost::EqualityComparable<StrategyChoice>));
-BOOST_CONCEPT_ASSERT((WireEncodable<StrategyChoice>));
-BOOST_CONCEPT_ASSERT((WireDecodable<StrategyChoice>));
-static_assert(std::is_base_of<tlv::Error, StrategyChoice::Error>::value,
-              "StrategyChoice::Error must inherit from tlv::Error");
-
-StrategyChoice::StrategyChoice()
-{
-}
-
-StrategyChoice::StrategyChoice(const Block& payload)
-{
-  this->wireDecode(payload);
-}
-
-template<encoding::Tag TAG>
-size_t
-StrategyChoice::wireEncode(EncodingImpl<TAG>& encoder) const
-{
-  size_t totalLength = 0;
-
-  totalLength += prependNestedBlock(encoder, tlv::nfd::Strategy, m_strategy);
-  totalLength += m_name.wireEncode(encoder);
-
-  totalLength += encoder.prependVarNumber(totalLength);
-  totalLength += encoder.prependVarNumber(tlv::nfd::StrategyChoice);
-  return totalLength;
-}
-
-template size_t
-StrategyChoice::wireEncode<encoding::EncoderTag>(EncodingImpl<encoding::EncoderTag>&) const;
-
-template size_t
-StrategyChoice::wireEncode<encoding::EstimatorTag>(EncodingImpl<encoding::EstimatorTag>&) const;
-
-const Block&
-StrategyChoice::wireEncode() const
-{
-  if (m_wire.hasWire())
-    return m_wire;
-
-  EncodingEstimator estimator;
-  size_t estimatedSize = wireEncode(estimator);
-
-  EncodingBuffer buffer(estimatedSize, 0);
-  wireEncode(buffer);
-
-  m_wire = buffer.block();
-  return m_wire;
-}
-
-void
-StrategyChoice::wireDecode(const Block& block)
-{
-  if (block.type() != tlv::nfd::StrategyChoice) {
-    BOOST_THROW_EXCEPTION(Error("expecting StrategyChoice block"));
-  }
-  m_wire = block;
-  m_wire.parse();
-  Block::element_const_iterator val = m_wire.elements_begin();
-
-  if (val != m_wire.elements_end() && val->type() == tlv::Name) {
-    m_name.wireDecode(*val);
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required Name field"));
-  }
-
-  if (val != m_wire.elements_end() && val->type() == tlv::nfd::Strategy) {
-    val->parse();
-    if (val->elements().empty()) {
-      BOOST_THROW_EXCEPTION(Error("expecting Strategy/Name"));
-    }
-    else {
-      m_strategy.wireDecode(*val->elements_begin());
-    }
-    ++val;
-  }
-  else {
-    BOOST_THROW_EXCEPTION(Error("missing required Strategy field"));
-  }
-}
-
-StrategyChoice&
-StrategyChoice::setName(const Name& name)
-{
-  m_wire.reset();
-  m_name = name;
-  return *this;
-}
-
-StrategyChoice&
-StrategyChoice::setStrategy(const Name& strategy)
-{
-  m_wire.reset();
-  m_strategy = strategy;
-  return *this;
-}
-
-} // namespace nfd
-} // namespace ndn
diff --git a/src/management/nfd-strategy-choice.hpp b/src/management/nfd-strategy-choice.hpp
index 4d8e781..1b31c0d 100644
--- a/src/management/nfd-strategy-choice.hpp
+++ b/src/management/nfd-strategy-choice.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,75 +19,7 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_MANAGEMENT_NFD_STRATEGY_CHOICE_HPP
-#define NDN_MANAGEMENT_NFD_STRATEGY_CHOICE_HPP
-
-#include "../encoding/block.hpp"
-#include "../name.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/**
- * @ingroup management
- * @brief represents NFD StrategyChoice dataset
- * @sa http://redmine.named-data.net/projects/nfd/wiki/StrategyChoice#Strategy-Choice-Dataset
+/** \file
+ *  \deprecated Use mgmt/nfd/strategy-choice.hpp
  */
-class StrategyChoice
-{
-public:
-  class Error : public tlv::Error
-  {
-  public:
-    explicit
-    Error(const std::string& what)
-      : tlv::Error(what)
-    {
-    }
-  };
-
-  StrategyChoice();
-
-  explicit
-  StrategyChoice(const Block& payload);
-
-  template<encoding::Tag TAG>
-  size_t
-  wireEncode(EncodingImpl<TAG>& encoder) const;
-
-  const Block&
-  wireEncode() const;
-
-  void
-  wireDecode(const Block& wire);
-
-public: // getters & setters
-  const Name&
-  getName() const
-  {
-    return m_name;
-  }
-
-  StrategyChoice&
-  setName(const Name& name);
-
-  const Name&
-  getStrategy() const
-  {
-    return m_strategy;
-  }
-
-  StrategyChoice&
-  setStrategy(const Name& strategy);
-
-private:
-  Name m_name; // namespace
-  Name m_strategy; // strategy for the namespace
-
-  mutable Block m_wire;
-};
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_STRATEGY_CHOICE_HPP
+#include "../mgmt/nfd/strategy-choice.hpp"