diff --git a/helper/ccnx-interest-sender-helper.cc b/helper/ccnx-interest-sender-helper.cc
new file mode 100644
index 0000000..ca0b9f0
--- /dev/null
+++ b/helper/ccnx-interest-sender-helper.cc
@@ -0,0 +1,75 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+#include "ccnx-interest-sender-helper.h"
+#include "ns3/inet-socket-address.h"
+#include "ns3/packet-socket-address.h"
+#include "ns3/string.h"
+#include "ns3/names.h"
+
+namespace ns3 
+{
+    
+CcnxInterestSenderHelper::CcnxInterestSenderHelper (Ptr<CcnxNameComponents> interestName)
+{
+    m_factory.SetTypeId ("ns3::CcnxInterestSender");
+    m_factory.Set ("InterestName", PointerValue (interestName));
+}
+    
+void 
+CcnxInterestSenderHelper::SetAttribute (std::string name, const AttributeValue &value)
+{
+    m_factory.Set (name, value);
+}
+    
+ApplicationContainer
+CcnxInterestSenderHelper::Install (Ptr<Node> node) const
+{
+    return ApplicationContainer (InstallPriv (node));
+}
+    
+ApplicationContainer
+CcnxInterestSenderHelper::Install (std::string nodeName) const
+{
+    Ptr<Node> node = Names::Find<Node> (nodeName);
+    return ApplicationContainer (InstallPriv (node));
+}
+    
+ApplicationContainer
+CcnxInterestSenderHelper::Install (NodeContainer c) const
+{
+    ApplicationContainer apps;
+    for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
+    {
+        apps.Add (InstallPriv (*i));
+    }
+        
+    return apps;
+}
+    
+Ptr<Application>
+CcnxInterestSenderHelper::InstallPriv (Ptr<Node> node) const
+{
+    Ptr<Application> app = m_factory.Create<Application> ();
+    node->AddApplication (app);
+        
+    return app;
+}
+}
\ No newline at end of file
diff --git a/helper/ccnx-interest-sender-helper.h b/helper/ccnx-interest-sender-helper.h
new file mode 100644
index 0000000..58af8ff
--- /dev/null
+++ b/helper/ccnx-interest-sender-helper.h
@@ -0,0 +1,103 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+#ifndef CCNX_INTEREST_SENDER_HELPER_H
+#define CCNX_INTEREST_SENDER_HELPER_H
+
+#include <stdint.h>
+#include <string>
+#include "ns3/object-factory.h"
+#include "ns3/address.h"
+#include "ns3/attribute.h"
+#include "ns3/net-device.h"
+#include "ns3/node-container.h"
+#include "ns3/application-container.h"
+#include "ns3/name-components.h"
+#include "ns3/pointer.h"
+
+namespace ns3 
+{    
+/**
+ * \brief A helper to make it easier to instantiate an ns3::CcnxInterestSenderApplication
+ * on a set of nodes.
+ */
+
+class CcnxInterestSenderHelper
+{
+
+public:
+    /**
+     * Create an CcnxInterestSenderHelper to make it easier to work with CcnxInterestSenderApps
+     *
+     */
+    CcnxInterestSenderHelper (Ptr<CcnxNameComponents> interestName);
+        
+    /**
+     * Helper function used to set the underlying application attributes.
+     *
+     * \param name the name of the application attribute to set
+     * \param value the value of the application attribute to set
+     */
+    void SetAttribute (std::string name, const AttributeValue &value);
+        
+    /**
+     * Install an ns3::CcnxInterestSender on each node of the input container
+     * configured with all the attributes set with SetAttribute.
+     *
+     * \param c NodeContainer of the set of nodes on which an CcnxInterestSender 
+     * will be installed.
+     * \returns Container of Ptr to the applications installed.
+     */
+    ApplicationContainer Install (NodeContainer c) const;
+        
+    /**
+     * Install an ns3::CcnxInterestSender on the node configured with all the 
+     * attributes set with SetAttribute.
+     *
+     * \param node The node on which an CcnxInterestSender will be installed.
+     * \returns Container of Ptr to the applications installed.
+     */
+    ApplicationContainer Install (Ptr<Node> node) const;
+        
+    /**
+     * Install an ns3::CcnxInterestSender on the node configured with all the 
+     * attributes set with SetAttribute.
+     *
+     * \param nodeName The node on which an CcnxInterestSender will be installed.
+     * \returns Container of Ptr to the applications installed.
+     */
+    ApplicationContainer Install (std::string nodeName) const;
+        
+private:
+    /**
+     * \internal
+     * Install an ns3::CcnxInterestSender on the node configured with all the 
+     * attributes set with SetAttribute.
+     *
+     * \param node The node on which an CcnxInterestSender will be installed.
+     * \returns Ptr to the application installed.
+    */
+    Ptr<Application> InstallPriv (Ptr<Node> node) const;
+    ObjectFactory m_factory;
+};    
+}
+
+#endif
+
