diff --git a/helper/ndn-link-control-helper.h b/helper/ndn-link-control-helper.h
new file mode 100644
index 0000000..619fb1c
--- /dev/null
+++ b/helper/ndn-link-control-helper.h
@@ -0,0 +1,103 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ *       : Saran Tarnoi <saran.tarnoi@gmail.com>
+ */
+
+#ifndef NDN_LINK_CONTROL_HELPER_H
+#define NDN_LINK_CONTROL_HELPER_H
+
+#include "ns3/ptr.h"
+#include "ns3/node.h"
+
+namespace ns3 {
+namespace ndn {
+
+/**
+ * @brief Helper class to control the up or down statuss of an NDN link connecting two specific nodes
+ * @ingroup Ndn
+ */
+class LinkControlHelper
+{ 
+public:
+  /**
+   * @brief Fail NDN link between two nodes
+   *
+   * The helper will attempt to find NDN link between node1 and
+   * node2 and set NDN face to DOWN state
+   *
+   * Note that only PointToPointChannels are supported by this helper method
+   *
+   * @param node1 one node
+   * @param node2 another node
+   */
+  static void
+  FailLink (Ptr<Node> node1, Ptr<Node> node2);
+
+  /**
+   * @brief Fail NDN link between two nodes
+   *
+   * The helper will attempt to find NDN link between node1 and
+   * node2 and set NDN face to DOWN state
+   *
+   * Note that only PointToPointChannels are supported by this helper method
+   *
+   * This variant uses node names registered by Names class
+   *
+   * @param node1 one node's name
+   * @param node2 another node's name
+   */
+  static void
+  FailLinkByName (const std::string &node1, const std::string &node2);
+
+  /**
+   * @brief Re-enable NDN link between two nodes
+   *
+   * The helper will attempt to find NDN link between node1 and
+   * node2 and set NDN face to UP state
+   *
+   * Note that only PointToPointChannels are supported by this helper method
+   *
+   * @param node1 one node
+   * @param node2 another node
+   */
+  static void
+  UpLink (Ptr<Node> node1, Ptr<Node> node2);
+  
+  /**
+   * @brief Re-enable NDN link between two nodes
+   *
+   * The helper will attempt to find NDN link between node1 and
+   * node2 and set NDN face to UP state
+   *
+   * Note that only PointToPointChannels are supported by this helper method
+   *
+   * This variant uses node names registered by Names class
+   *
+   * @param node1 one node's name
+   * @param node2 another node's name
+   */
+  static void
+  UpLinkByName (const std::string &node1, const std::string &node2);
+}; // end: LinkControlHelper
+
+
+} // ndn
+} // ns3
+
+#endif // NDN_LINK_CONTROL_HELPER_H
