diff --git a/tools/nfdc.cpp b/tools/nfdc.cpp
index 2a39a85..2f2937f 100644
--- a/tools/nfdc.cpp
+++ b/tools/nfdc.cpp
@@ -16,12 +16,8 @@
   "       -h print usage and exit\n"
   "\n"
   "   COMMAND can be one of following:\n"
-  "       insert <name> \n"
-  "           Insert a FIB entry \n"
-  "       delete <name> \n"
-  "           Delete a FIB entry\n"
   "       add-nexthop <name> <faceId> [<cost>]\n"
-  "           Add a nexthop to an existing FIB entry\n"
+  "           Add a nexthop to a FIB entry\n"
   "       remove-nexthop <name> <faceId> \n"
   "           Remove a nexthop from a FIB entry\n"
   "       set-strategy <name> <stratgy>\n"
@@ -48,17 +44,7 @@
 bool
 Controller::dispatch(const std::string& command, const char* commandOptions[], int nOptions)
 {
-  if (command == "insert") {
-    if (nOptions != 1)
-      return false;
-    fibInsert(commandOptions);
-  }
-  else if (command == "delete") {
-    if (nOptions != 1)
-      return false;
-    fibDelete(commandOptions);
-  }
-  else if (command == "add-nexthop") {
+  if (command == "add-nexthop") {
     if (nOptions == 2)
       fibAddNextHop(commandOptions, false);
     else if (nOptions == 3)
@@ -91,32 +77,6 @@
 
   return true;
 }
-  
-void
-Controller::fibInsert(const char* commandOptions[])
-{
-  const std::string& name = commandOptions[0];
-
-  ndn::nfd::FibManagementOptions fibOptions;
-  fibOptions.setName(name);
-  startFibCommand("insert",
-                  fibOptions,
-                  bind(&Controller::onFibSuccess, this, _1, "Fib insertion succeeded"),
-                  bind(&Controller::onError, this, _1, "Fib insertion failed"));
-}
-    
-void
-Controller::fibDelete(const char* commandOptions[])
-{
-  const std::string& name = commandOptions[0];
-  ndn::nfd::FibManagementOptions fibOptions;
-  fibOptions.setName(name);
-  startFibCommand("delete",
-                  fibOptions,
-                  bind(&Controller::onFibSuccess, this, _1, "Fib deletion succeeded"),
-                  bind(&Controller::onError, this, _1, "Fib deletion failed" ));
-}
-
 
 void
 Controller::fibAddNextHop(const char* commandOptions[], bool hasCost)
diff --git a/tools/nfdc.hpp b/tools/nfdc.hpp
index a606100..8786a39 100644
--- a/tools/nfdc.hpp
+++ b/tools/nfdc.hpp
@@ -34,7 +34,9 @@
            const char* cmdOptions[],
            int nOptions);
   /**
-   * \brief Create a new FIB entry if it doesn't exist
+   * \brief Adds a nexthop to a FIB entry. 
+   *
+   * If the FIB entry does not exist, it is inserted automatically
    *
    * cmd format:
    *   name
@@ -42,35 +44,11 @@
    * @param cmdOptions           add command without leading 'insert' component
    */
   void
-  fibInsert(const char* cmdOptions[]);
-  /**
-   * \brief Delete a FIB entry if it exists
-   *
-   * cmd format:
-   *   name
-   *
-   * @param cmdOptions          del command without leading 'delete' component
-   */
-  void
-  fibDelete(const char* cmdOptions[]);
-  /**
-   * \brief Adds a nexthop to an existing FIB entry
-   *
-   *  If a nexthop of same FaceId exists on the FIB entry, its cost is updated.
-   *  FaceId is the FaceId returned in NFD Face Management protocol.
-   *  If FaceId is set to zero, it is implied as the face of the entity sending this command.
-   * cmd format:
-   *   name faceId cost
-   *
-   * @param cmdOptions          addNextHop command without leading 'add-nexthop' component
-   */
-  void
   fibAddNextHop(const char* cmdOptions[], bool hasCost);
   /**
-   * \brief Remove a nexthop from an existing FIB entry
+   * \brief Removes a nexthop from an existing FIB entry
    *
-   *  This command removes a nexthop from a FIB entry. 
-   *  Removing the last nexthop in a FIB entry will not automatically delete the FIB entry.
+   * If the last nexthop record in a FIB entry is removed, the FIB entry is also deleted
    *
    * cmd format:
    *   name faceId
@@ -82,7 +60,7 @@
   /**
    * \brief Sets a forwarding strategy for a namespace
    *
-   *  This command sets a forwarding strategy for a namespace.
+   * This command sets a forwarding strategy for a namespace.
    *
    * cmd format:
    *   name strategy
@@ -95,7 +73,7 @@
   /**
    * \brief create new face
    *
-   *  This command allows creation of UDP unicast and TCP faces only.
+   * This command allows creation of UDP unicast and TCP faces only.
    *
    * cmd format:
    *   uri
