diff --git a/src/requester.hpp b/src/requester.hpp
index 2b6c3c3..4f1bb80 100644
--- a/src/requester.hpp
+++ b/src/requester.hpp
@@ -35,7 +35,7 @@
 public:
   /**
    * Generates a CA profile discovery Interest following RDR protocol.
-   * @param caName, the name prefix of the CA.
+   * @p caName, the name prefix of the CA.
    * @return A shared pointer to an Interest ready to be sent.
    */
   static shared_ptr<Interest>
@@ -43,7 +43,7 @@
 
   /**
    * Generates a CA profile fetching Interest following RDR protocol.
-   * @param reply, the Data packet replied from discovery Interest.
+   * @p reply, the Data packet replied from discovery Interest.
    * @return A shared pointer to an Interest ready to be sent.
    */
   static shared_ptr<Interest>
@@ -53,7 +53,7 @@
    * Decodes the CA profile from the replied CA profile Data packet.
    * Will first verify the signature of the packet using the key provided inside the profile.
    * The application should be cautious whether to add CaProfile into the RequesterCaCache.
-   * @param reply, the Data packet replied from CA profile fetching Interest.
+   * @p reply, the Data packet replied from CA profile fetching Interest.
    * @return the CaProfile if decoding is successful
    * @throw std::runtime_error if the decoding fails or receiving an error packet.
    */
@@ -65,8 +65,8 @@
    * Will first verify the signature of the packet using the key provided inside the profile and
    * verify the certificate's digest matches the one obtained from the original CA.
    * The application should be cautious whether to add CaProfile into the RequesterCaCache.
-   * @param reply, the Data packet replied from CA profile fetching Interest.
-   * @param caCertFullName, the full name obtained from original CA's probe response.
+   * @p reply, the Data packet replied from CA profile fetching Interest.
+   * @p caCertFullName, the full name obtained from original CA's probe response.
    * @return the CaProfile if decoding is successful
    * @throw std::runtime_error if the decoding fails or receiving an error packet.
    */
@@ -75,8 +75,8 @@
 
   /**
    * Generates a PROBE interest to the CA (for suggested name assignments).
-   * @param ca, the CA that interest is send to
-   * @param probeInfo, the requester information to carry to the CA
+   * @p ca, the CA that interest is send to
+   * @p probeInfo, the requester information to carry to the CA
    * @return A shared pointer of to the encoded interest, ready to be sent.
    */
   static shared_ptr<Interest>
@@ -85,10 +85,10 @@
   /**
    * Decodes the replied data for PROBE process from the CA.
    * Will first verify the signature of the packet using the key provided inside the profile.
-   * @param reply, The replied data packet
-   * @param ca, the profile of the CA that replies the packet
-   * @param identityNames, The vector to load the decoded identity names from the data.
-   * @param otherCas, The vector to load the decoded redirection CA prefixes from the data.
+   * @p reply, The replied data packet
+   * @p ca, the profile of the CA that replies the packet
+   * @p identityNames, The vector to load the decoded identity names from the data.
+   * @p otherCas, The vector to load the decoded redirection CA prefixes from the data.
    * @throw std::runtime_error if the decoding fails or receiving an error packet.
    */
   static void
@@ -98,10 +98,10 @@
   // NEW/REVOKE/RENEW related helpers
   /**
    * Generates a NEW interest to the CA.
-   * @param state, The current requester state for this request. Will be modified in the function.
-   * @param identityName, The identity name to be requested.
-   * @param notBefore, The expected notBefore field for the certificate (starting time)
-   * @param notAfter, The expected notAfter field for the certificate (expiration time)
+   * @p state, The current requester state for this request. Will be modified in the function.
+   * @p identityName, The identity name to be requested.
+   * @p notBefore, The expected notBefore field for the certificate (starting time)
+   * @p notAfter, The expected notAfter field for the certificate (expiration time)
    * @return The shared pointer to the encoded interest.
    */
   static shared_ptr<Interest>
@@ -111,8 +111,8 @@
 
   /**
    * Generates a REVOKE interest to the CA.
-   * @param state, The current requester state for this request. Will be modified in the function.
-   * @param certificate, the certificate to the revoked.
+   * @p state, The current requester state for this request. Will be modified in the function.
+   * @p certificate, the certificate to the revoked.
    * @return The shared pointer to the encoded interest.
    */
   static shared_ptr<Interest>
@@ -120,8 +120,8 @@
 
   /**
    * Decodes the replied data of NEW, RENEW, or REVOKE interest from the CA.
-   * @param state, the current requester state for the request. Will be updated in the function.
-   * @param reply, the replied data from the network
+   * @p state, the current requester state for the request. Will be updated in the function.
+   * @p reply, the replied data from the network
    * @return the list of challenge accepted by the CA, for CHALLENGE step.
    * @throw std::runtime_error if the decoding fails or receiving an error packet.
    */
@@ -131,8 +131,8 @@
   // CHALLENGE helpers
   /**
    * Generates the required parameter for the selected challenge for the request
-   * @param state, The requester state of the request.Will be updated in the function.
-   * @param challengeSelected, The selected challenge for the request.
+   * @p state, The requester state of the request.Will be updated in the function.
+   * @p challengeSelected, The selected challenge for the request.
    *            Can use state.m_challengeType to continue.
    * @return The requirement list for the current stage of the challenge, in name, prompt mapping.
    */
@@ -141,8 +141,8 @@
 
   /**
    * Generates the CHALLENGE interest for the request.
-   * @param state, The requester state of the request.
-   * @param parameters, The requirement list, in name, value mapping.
+   * @p state, The requester state of the request.
+   * @p parameters, The requirement list, in name, value mapping.
    * @return The shared pointer to the encoded interest
    */
   static shared_ptr<Interest>
@@ -151,8 +151,8 @@
 
   /**
    * Decodes the responded data from the CHALLENGE interest.
-   * @param state, the corresponding requester state of the request. Will be modified.
-   * @param reply, the response data.
+   * @p state, the corresponding requester state of the request. Will be modified.
+   * @p reply, the response data.
    * @throw std::runtime_error if the decoding fails or receiving an error packet.
    */
   static void
@@ -160,7 +160,7 @@
 
   /**
    * Generate the interest to fetch the issued certificate
-   * @param state, the state of the request.
+   * @p state, the state of the request.
    * @return The shared pointer to the encoded interest
    */
   static shared_ptr<Interest>
@@ -168,7 +168,7 @@
 
   /**
    * Decoded and installs the response certificate from the certificate fetch.
-   * @param reply, the data replied from the certificate fetch interest.
+   * @p reply, the data replied from the certificate fetch interest.
    * @return The shared pointer to the certificate being fetched.
    */
   static shared_ptr<security::Certificate>
@@ -176,7 +176,7 @@
 
   /**
    * End the current request session and performs cleanup if necessary.
-   * @param state, the requester state for the request.
+   * @p state, the requester state for the request.
    */
   static void
   endSession(RequesterState& state);
