diff --git a/src/data.hpp b/src/data.hpp
index fec8658..3cccc16 100644
--- a/src/data.hpp
+++ b/src/data.hpp
@@ -30,12 +30,13 @@
 #include "meta-info.hpp"
 #include "key-locator.hpp"
 #include "management/nfd-local-control-header.hpp"
+#include "tag-host.hpp"
 
 namespace ndn {
 
 /** @brief represents a Data packet
  */
-class Data : public enable_shared_from_this<Data>
+class Data : public TagHost, public enable_shared_from_this<Data>
 {
 public:
   class Error : public tlv::Error
diff --git a/src/interest.hpp b/src/interest.hpp
index 1433628..9516454 100644
--- a/src/interest.hpp
+++ b/src/interest.hpp
@@ -30,6 +30,7 @@
 #include "selectors.hpp"
 #include "util/time.hpp"
 #include "management/nfd-local-control-header.hpp"
+#include "tag-host.hpp"
 
 namespace ndn {
 
@@ -42,7 +43,7 @@
 
 /** @brief represents an Interest packet
  */
-class Interest : public enable_shared_from_this<Interest>
+class Interest : public TagHost, public enable_shared_from_this<Interest>
 {
 public:
   class Error : public tlv::Error
diff --git a/src/tag-host.hpp b/src/tag-host.hpp
new file mode 100644
index 0000000..0d1d39d
--- /dev/null
+++ b/src/tag-host.hpp
@@ -0,0 +1,101 @@
+/* -*- 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.
+ */
+
+#ifndef NDN_TAG_HOST_HPP
+#define NDN_TAG_HOST_HPP
+
+#include "common.hpp"
+#include "tag.hpp"
+
+#include <map>
+
+namespace ndn {
+
+/** \brief Base class to store tag information (e.g., inside Interest and Data packets)
+ */
+class TagHost
+{
+public:
+  /** \brief get a tag item
+   *  \tparam T type of the tag, which must be a subclass of ndn::Tag
+   *  \retval nullptr if no Tag of type T is stored
+   */
+  template<typename T>
+  shared_ptr<T>
+  getTag() const;
+
+  /** \brief set a tag item
+   *  \tparam T type of the tag, which must be a subclass of ndn::Tag
+   *  \note Tag can be set even on a const tag host instance
+   */
+  template<typename T>
+  void
+  setTag(shared_ptr<T> tag) const;
+
+  /** \brief remove tag item
+   *  \note Tag can be removed even on a const tag host instance
+   */
+  template<typename T>
+  void
+  removeTag() const;
+
+private:
+  mutable std::map<size_t, shared_ptr<Tag>> m_tags;
+};
+
+
+template<typename T>
+inline shared_ptr<T>
+TagHost::getTag() const
+{
+  static_assert(std::is_base_of<Tag, T>::value, "T must inherit from Tag");
+
+  auto it = m_tags.find(T::getTypeId());
+  if (it == m_tags.end()) {
+    return nullptr;
+  }
+  return static_pointer_cast<T>(it->second);
+}
+
+template<typename T>
+inline void
+TagHost::setTag(shared_ptr<T> tag) const
+{
+  static_assert(std::is_base_of<Tag, T>::value, "T must inherit from Tag");
+
+  if (tag == nullptr) {
+    m_tags.erase(T::getTypeId());
+    return;
+  }
+
+  m_tags[T::getTypeId()] = tag;
+}
+
+template<typename T>
+inline void
+TagHost::removeTag() const
+{
+  setTag<T>(nullptr);
+}
+
+} // namespace ndn
+
+#endif // NDN_TAG_HOST_HPP
diff --git a/src/tag.hpp b/src/tag.hpp
new file mode 100644
index 0000000..2e75ff9
--- /dev/null
+++ b/src/tag.hpp
@@ -0,0 +1,55 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014 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.
+ */
+
+#ifndef NDN_TAG_HPP
+#define NDN_TAG_HPP
+
+namespace ndn {
+
+/**
+ * @brief Base class for interest/data tags that can hold any arbitrary information
+ */
+class Tag
+{
+public:
+  virtual
+  ~Tag() = 0;
+
+  /**
+   * @fn static constexpr int getTypeId()
+   * @return an integer that uniquely identifies this Tag type
+   * @sa http://redmine.named-data.net/projects/ndn-cxx/wiki/PacketTagTypes
+   */
+  // static constexpr int
+  // getTypeId()
+  // {
+  //   return <type-identifier>;
+  // }
+};
+
+inline
+Tag::~Tag()
+{
+}
+
+} // namespace ndn
+
+#endif // NDN_TAG_HPP
diff --git a/tests/unit-tests/test-tag-host.cpp b/tests/unit-tests/test-tag-host.cpp
new file mode 100644
index 0000000..b0bff72
--- /dev/null
+++ b/tests/unit-tests/test-tag-host.cpp
@@ -0,0 +1,86 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014 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 "tag-host.hpp"
+
+#include "boost-test.hpp"
+#include "interest.hpp"
+#include "data.hpp"
+
+#include <boost/mpl/vector.hpp>
+
+namespace ndn {
+namespace tests {
+
+BOOST_AUTO_TEST_SUITE(TestTagHost)
+
+class TestTag : public Tag
+{
+public:
+  static constexpr size_t
+  getTypeId()
+  {
+    return 1;
+  }
+};
+
+class TestTag2 : public Tag
+{
+public:
+  static constexpr size_t
+  getTypeId()
+  {
+    return 2;
+  }
+};
+
+typedef boost::mpl::vector<TagHost, Interest, Data> Fixtures;
+
+BOOST_FIXTURE_TEST_CASE_TEMPLATE(Basic, T, Fixtures, T)
+{
+  BOOST_CHECK(this->template getTag<TestTag>() == nullptr);
+  BOOST_CHECK(this->template getTag<TestTag2>() == nullptr);
+
+  this->setTag(make_shared<TestTag>());
+
+  BOOST_CHECK(this->template getTag<TestTag>() != nullptr);
+  BOOST_CHECK(this->template getTag<TestTag2>() == nullptr);
+
+  this->setTag(make_shared<TestTag2>());
+
+  BOOST_CHECK(this->template getTag<TestTag>() != nullptr);
+  BOOST_CHECK(this->template getTag<TestTag2>() != nullptr);
+
+  this->template removeTag<TestTag2>();
+
+  BOOST_CHECK(this->template getTag<TestTag>() != nullptr);
+  BOOST_CHECK(this->template getTag<TestTag2>() == nullptr);
+
+  this->template removeTag<TestTag>();
+
+  BOOST_CHECK(this->template getTag<TestTag>() == nullptr);
+  BOOST_CHECK(this->template getTag<TestTag2>() == nullptr);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace tests
+} // namespace ndn
