diff --git a/src/prefix-announcement.hpp b/src/prefix-announcement.hpp
new file mode 100644
index 0000000..d811230
--- /dev/null
+++ b/src/prefix-announcement.hpp
@@ -0,0 +1,128 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013-2018 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_CXX_PREFIX_ANNOUNCEMENT_HPP
+#define NDN_CXX_PREFIX_ANNOUNCEMENT_HPP
+
+#include "security/v2/key-chain.hpp"
+
+namespace ndn {
+
+/** \brief A prefix announcement object that represents an application's intent of registering a
+ *         prefix toward itself.
+ *  \sa https://redmine.named-data.net/projects/nfd/wiki/PrefixAnnouncement
+ */
+class PrefixAnnouncement
+{
+public:
+  class Error : public tlv::Error
+  {
+  public:
+    using tlv::Error::Error;
+  };
+
+  /** \brief Construct an empty prefix announcement.
+   *  \post getData() == nullopt
+   *  \post getAnnouncedName() == "/"
+   *  \post getExpiration() == 0_ms
+   */
+  PrefixAnnouncement();
+
+  /** \brief Decode a prefix announcement from Data.
+   *  \throw tlv::Error the Data is not a prefix announcement.
+   *  \post getData() == data
+   */
+  explicit
+  PrefixAnnouncement(Data data);
+
+  /** \brief Get the Data representing the prefix announcement, if available.
+   */
+  const optional<Data>&
+  getData() const
+  {
+    return m_data;
+  }
+
+  /** \brief Create a Data packet representing the prefix announcement, if it does not exist.
+   *  \param keyChain KeyChain to sign the Data.
+   *  \param si signing parameters.
+   *  \param version version number in Data name; if nullopt, use current Unix timestamp (in
+   *                 milliseconds) as the version number.
+   *  \post getData() == the returned Data
+   */
+  const Data&
+  toData(KeyChain& keyChain,
+         const ndn::security::SigningInfo& si = KeyChain::getDefaultSigningInfo(),
+         optional<uint64_t> version = nullopt) const;
+
+  /** \brief Return announced name.
+   */
+  const Name&
+  getAnnouncedName() const
+  {
+    return m_announcedName;
+  }
+
+  /** \brief Set announced name.
+   *  \post getData() == nullopt
+   */
+  PrefixAnnouncement&
+  setAnnouncedName(Name name);
+
+  /** \brief Return relative expiration period.
+   */
+  time::milliseconds
+  getExpiration() const
+  {
+    return m_expiration;
+  }
+
+  /** \brief Set relative expiration period.
+   *  \throw std::invalid_argument expiration period is negative.
+   *  \post getData() == nullopt
+   */
+  PrefixAnnouncement&
+  setExpiration(time::milliseconds expiration);
+
+  /** \brief Return absolute validity period.
+   */
+  optional<security::ValidityPeriod>
+  getValidityPeriod() const
+  {
+    return m_validity;
+  }
+
+  /** \brief Set absolute validity period.
+   *  \post getData() == nullopt
+   */
+  PrefixAnnouncement&
+  setValidityPeriod(optional<security::ValidityPeriod> validity);
+
+private:
+  mutable optional<Data> m_data;
+  Name m_announcedName;
+  time::milliseconds m_expiration;
+  optional<security::ValidityPeriod> m_validity;
+};
+
+} // namespace ndn
+
+#endif // NDN_CXX_PREFIX_ANNOUNCEMENT_HPP
