diff --git a/src/logic.hpp b/src/logic.hpp
index b07ba62..4f75085 100644
--- a/src/logic.hpp
+++ b/src/logic.hpp
@@ -111,10 +111,11 @@
    * @param defaultSigningId The signing Id of the default user
    * @param validator The validator for packet validation
    * @param resetTimer The timer to periodically send Reset Interest
-   * @param syncReplyFreshness The FreshnessPeriod of sync reply
-   * @param resetInterestLifetime The lifetime of sync interest
-   * @param resetInterestLifetime The lifetime of Reset Interest
    * @param cancelResetTimer The timer to exit from Reset state
+   * @param resetInterestLifetime The lifetime of Reset Interest
+   * @param syncInterestLifetime The lifetime of sync interest
+   * @param syncReplyFreshness The FreshnessPeriod of sync reply
+   * @param recoveryInterestLifetime The lifetime of recovery interest
    */
   Logic(ndn::Face& face,
         const Name& syncPrefix,
diff --git a/src/socket.hpp b/src/socket.hpp
index 09fee72..356b212 100644
--- a/src/socket.hpp
+++ b/src/socket.hpp
@@ -105,6 +105,7 @@
    * @param buf Pointer to the bytes in content
    * @param len size of the bytes in content
    * @param freshness FreshnessPeriod of the data packet.
+   * @param prefix The user prefix that will be used to publish the data.
    */
   void
   publishData(const uint8_t* buf, size_t len, const ndn::time::milliseconds& freshness,
@@ -123,6 +124,7 @@
    * @param len size of the bytes in content
    * @param freshness FreshnessPeriod of the data packet.
    * @param seqNo Sequence number of the data
+   * @param prefix The user prefix that will be used to publish the data.
    */
   void
   publishData(const uint8_t* buf, size_t len, const ndn::time::milliseconds& freshness,
@@ -139,6 +141,7 @@
    *
    * @param content Block that will be set as the content of the data packet.
    * @param freshness FreshnessPeriod of the data packet.
+   * @param prefix The user prefix that will be used to publish the data.
    */
   void
   publishData(const Block& content, const ndn::time::milliseconds& freshness,
@@ -156,6 +159,7 @@
    * @param content Block that will be set as the content of the data packet.
    * @param freshness FreshnessPeriod of the data packet.
    * @param seqNo Sequence number of the data
+   * @param prefix The user prefix that will be used to publish the data.
    */
   void
   publishData(const Block& content, const ndn::time::milliseconds& freshness,
@@ -180,6 +184,8 @@
    * @param sessionName The name of the target session.
    * @param seq The seqNo of the data packet.
    * @param onValidated The callback when the retrieved packet has been validated.
+   * @param onValidationFailed The callback when the retrieved packet failed validation.
+   * @param onTimeout The callback when data is not retrieved.
    * @param nRetries The number of retries.
    */
   void
diff --git a/src/state.cpp b/src/state.cpp
index 0b2c0c7..26a8944 100644
--- a/src/state.cpp
+++ b/src/state.cpp
@@ -117,9 +117,11 @@
   return totalLength;
 }
 
+//! \relates State
 template size_t
 State::wireEncode<true>(ndn::EncodingImpl<true>& block) const;
 
+//! \relates State
 template size_t
 State::wireEncode<false>(ndn::EncodingImpl<false>& block) const;
 
