diff --git a/src/management/nfd-control-parameters.hpp b/src/management/nfd-control-parameters.hpp
index c92a23f..0eff8ae 100644
--- a/src/management/nfd-control-parameters.hpp
+++ b/src/management/nfd-control-parameters.hpp
@@ -13,17 +13,6 @@
 namespace ndn {
 namespace nfd {
 
-class ControlParameters;
-/** \deprecated use ControlParameters instead
- */
-typedef ControlParameters FaceManagementOptions;
-/** \deprecated use ControlParameters instead
- */
-typedef ControlParameters FibManagementOptions;
-/** \deprecated use ControlParameters instead
- */
-typedef ControlParameters StrategyChoiceOptions;
-
 enum ControlParameterField {
   CONTROL_PARAMETER_NAME,
   CONTROL_PARAMETER_FACE_ID,
diff --git a/src/management/nfd-controller.cpp b/src/management/nfd-controller.cpp
index 5a7e397..08285c1 100644
--- a/src/management/nfd-controller.cpp
+++ b/src/management/nfd-controller.cpp
@@ -69,7 +69,7 @@
 void
 Controller::selfRegisterPrefix(const Name& prefixToRegister,
                                const SuccessCallback& onSuccess,
-                               const FailCallback&    onFail)
+                               const FailCallback& onFail)
 {
   const uint32_t selfFaceId = 0;
 
@@ -85,7 +85,7 @@
 void
 Controller::selfDeregisterPrefix(const Name& prefixToDeRegister,
                                  const SuccessCallback& onSuccess,
-                                 const FailCallback&    onFail)
+                                 const FailCallback& onFail)
 {
   const uint32_t selfFaceId = 0;
 
@@ -98,101 +98,5 @@
                                        bind(onFail, _2));
 }
 
-void
-Controller::fibAddNextHop(const Name& prefix, uint64_t faceId, int cost,
-                          const FibCommandSucceedCallback& onSuccess,
-                          const FailCallback& onFail)
-{
-  BOOST_ASSERT(cost >= 0);
-
-  ControlParameters parameters;
-  parameters.setName(prefix)
-            .setFaceId(faceId)
-            .setCost(static_cast<uint64_t>(cost));
-
-  this->start<FibAddNextHopCommand>(parameters,
-                                    onSuccess,
-                                    bind(onFail, _2));
-}
-
-void
-Controller::fibRemoveNextHop(const Name& prefix, uint64_t faceId,
-                             const FibCommandSucceedCallback& onSuccess,
-                             const FailCallback& onFail)
-{
-  ControlParameters parameters;
-  parameters.setName(prefix)
-            .setFaceId(faceId);
-
-  this->start<FibRemoveNextHopCommand>(parameters,
-                                       onSuccess,
-                                       bind(onFail, _2));
-}
-
-void
-Controller::startFibCommand(const std::string& command,
-                            const FibManagementOptions& options,
-                            const FibCommandSucceedCallback& onSuccess,
-                            const FailCallback& onFail)
-{
-  if (command == "add-nexthop") {
-    this->start<FibAddNextHopCommand>(options,
-                                      onSuccess,
-                                      bind(onFail, _2));
-  }
-  else if (command == "remove-nexthop") {
-    this->start<FibRemoveNextHopCommand>(options,
-                                         onSuccess,
-                                         bind(onFail, _2));
-  }
-  else {
-    onFail("unknown command");
-  }
-}
-
-void
-Controller::startFaceCommand(const std::string& command,
-                             const FaceManagementOptions& options,
-                             const FaceCommandSucceedCallback& onSuccess,
-                             const FailCallback& onFail)
-{
-  if (command == "create") {
-    this->start<FaceCreateCommand>(options,
-                                   onSuccess,
-                                   bind(onFail, _2));
-  }
-  else if (command == "destroy") {
-    this->start<FaceDestroyCommand>(options,
-                                    onSuccess,
-                                    bind(onFail, _2));
-  }
-  // enable-local-control and disable-local-control are not in legacy API.
-  else {
-    onFail("unknown command");
-  }
-}
-
-void
-Controller::startStrategyChoiceCommand(const std::string& command,
-                                       const StrategyChoiceOptions& options,
-                                       const StrategyChoiceCommandSucceedCallback& onSuccess,
-                                       const FailCallback& onFail)
-{
-  if (command == "set") {
-    this->start<StrategyChoiceSetCommand>(options,
-                                          onSuccess,
-                                          bind(onFail, _2));
-  }
-  else if (command == "unset") {
-    this->start<StrategyChoiceUnsetCommand>(options,
-                                            onSuccess,
-                                            bind(onFail, _2));
-  }
-  else {
-    onFail("unknown command");
-  }
-}
-
-
 } // namespace nfd
 } // namespace ndn
diff --git a/src/management/nfd-controller.hpp b/src/management/nfd-controller.hpp
index 536994c..823169a 100644
--- a/src/management/nfd-controller.hpp
+++ b/src/management/nfd-controller.hpp
@@ -35,8 +35,8 @@
   template<typename Command>
   void
   start(const ControlParameters& parameters,
-               const CommandSucceedCallback& onSuccess,
-               const CommandFailCallback&    onFailure);
+        const CommandSucceedCallback& onSuccess,
+        const CommandFailCallback& onFailure);
 
 public: // selfreg
   virtual void
@@ -49,81 +49,6 @@
                        const SuccessCallback& onSuccess,
                        const FailCallback&    onFail);
 
-public:
-  /** \deprecated use CommandSucceedCallback instead
-   */
-  typedef function<void(const FibManagementOptions&)> FibCommandSucceedCallback;
-  /** \deprecated use CommandSucceedCallback instead
-   */
-  typedef function<void(const FaceManagementOptions&)> FaceCommandSucceedCallback;
-  /** \deprecated use CommandSucceedCallback instead
-   */
-  typedef function<void(const StrategyChoiceOptions&)> StrategyChoiceCommandSucceedCallback;
-
-  /**
-   * \brief Adds a nexthop to an existing or new FIB entry
-   * \deprecated use startCommand instead
-   *
-   * If FIB entry for the specified prefix does not exist, it will be automatically created.
-   *
-   * \param prefix    Prefix of the FIB entry
-   * \param faceId    ID of the face which should be added as a next hop for prefix FIB entry.
-   *                  If a nexthop of same FaceId exists on the FIB entry, its cost is updated.
-   *                  If FaceId is set to zero, it is implied as the face of the entity sending
-   *                  this command.
-   * \param cost      Cost that should be associated with the next hop
-   * \param onSuccess Callback that will be called when operation succeeds
-   * \param onFail    Callback that will be called when operation fails
-   */
-  void
-  fibAddNextHop(const Name& prefix, uint64_t faceId, int cost,
-                const FibCommandSucceedCallback& onSuccess,
-                const FailCallback& onFail);
-
-  /**
-   * \brief Remove a nexthop from FIB entry
-   * \deprecated use startCommand instead
-   *
-   * If after removal of the nexthop FIB entry has zero next hops, this FIB entry will
-   * be automatically deleted.
-   *
-   * \param prefix    Prefix of the FIB entry
-   * \param faceId    ID of the face which should be removed FIB entry.
-   *                  If FaceId is set to zero, it is implied as the face of the entity sending
-   *                  this command.
-   * \param onSuccess Callback that will be called when operation succeeds
-   * \param onFail    Callback that will be called when operation fails
-   */
-  void
-  fibRemoveNextHop(const Name& prefix, uint64_t faceId,
-                   const FibCommandSucceedCallback& onSuccess,
-                   const FailCallback& onFail);
-
-protected:
-  /** \deprecated use startCommand instead
-   */
-  void
-  startFibCommand(const std::string& command,
-                  const FibManagementOptions& options,
-                  const FibCommandSucceedCallback& onSuccess,
-                  const FailCallback& onFailure);
-
-  /** \deprecated use startCommand instead
-   */
-  void
-  startFaceCommand(const std::string& command,
-                   const FaceManagementOptions& options,
-                   const FaceCommandSucceedCallback& onSuccess,
-                   const FailCallback& onFailure);
-
-  /** \deprecated use startCommand instead
-   */
-  void
-  startStrategyChoiceCommand(const std::string& command,
-                             const StrategyChoiceOptions& options,
-                             const StrategyChoiceCommandSucceedCallback& onSuccess,
-                             const FailCallback& onFailure);
-
 private:
   void
   processCommandResponse(const Data& data,
diff --git a/src/management/nfd-face-management-options.hpp b/src/management/nfd-face-management-options.hpp
deleted file mode 100644
index 5efc4f8..0000000
--- a/src/management/nfd-face-management-options.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/**
- * Copyright (C) 2013 Regents of the University of California.
- * See COPYING for copyright and distribution information.
- */
-
-#ifndef NDN_MANAGEMENT_NFD_FACE_MANAGEMENT_OPTIONS_HPP
-#define NDN_MANAGEMENT_NFD_FACE_MANAGEMENT_OPTIONS_HPP
-
-#include "nfd-control-parameters.hpp"
-
-#endif // NDN_MANAGEMENT_NFD_FACE_MANAGEMENT_OPTIONS_HPP
diff --git a/src/management/nfd-fib-management-options.hpp b/src/management/nfd-fib-management-options.hpp
deleted file mode 100644
index d1270c3..0000000
--- a/src/management/nfd-fib-management-options.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/**
- * Copyright (C) 2013 Regents of the University of California.
- *
- * @author: Wentao Shang <wentao@cs.ucla.edu>
- *
- * See COPYING for copyright and distribution information.
- */
-
-#ifndef NDN_MANAGEMENT_NFD_FIB_MANAGEMENT_OPTIONS_HPP
-#define NDN_MANAGEMENT_NFD_FIB_MANAGEMENT_OPTIONS_HPP
-
-#include "nfd-control-parameters.hpp"
-
-#endif // NDN_MANAGEMENT_NFD_FIB_MANAGEMENT_OPTIONS_HPP
diff --git a/src/management/nfd-status.hpp b/src/management/nfd-status.hpp
deleted file mode 100644
index 4725a66..0000000
--- a/src/management/nfd-status.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/**
- * Copyright (C) 2013 Regents of the University of California.
- * See COPYING for copyright and distribution information.
- */
-
-#ifndef NDN_MANAGEMENT_NFD_STATUS_HPP
-#define NDN_MANAGEMENT_NFD_STATUS_HPP
-
-#include "nfd-forwarder-status.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/** \deprecated use ForwarderStatus instead
- */
-typedef ForwarderStatus Status;
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_STATUS_HPP
diff --git a/src/management/nfd-strategy-choice-options.hpp b/src/management/nfd-strategy-choice-options.hpp
deleted file mode 100644
index 99889c7..0000000
--- a/src/management/nfd-strategy-choice-options.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
-* Copyright (C) 2014 Named Data Networking Project
-* See COPYING for copyright and distribution information.
-*/
-
-#ifndef NDN_MANAGEMENT_NFD_STRATEGY_CHOICE_OPTIONS_HPP
-#define NDN_MANAGEMENT_NFD_STRATEGY_CHOICE_OPTIONS_HPP
-
-#include "nfd-control-parameters.hpp"
-
-#endif // NDN_MANAGEMENT_NFD_STRATEGY_CHOICE_MANAGEMENT_OPTIONS_HPP
