diff --git a/src/validator/certificate-fetcher-ndns-appcert.cpp b/src/validator/certificate-fetcher-ndns-appcert.cpp
index 28f81b5..99e7f21 100644
--- a/src/validator/certificate-fetcher-ndns-appcert.cpp
+++ b/src/validator/certificate-fetcher-ndns-appcert.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2017, Regents of the University of California.
+/*
+ * Copyright (c) 2014-2018, Regents of the University of California.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
  * See AUTHORS.md for complete list of NDNS authors and contributors.
@@ -44,10 +44,10 @@
                                    const shared_ptr<security::v2::ValidationState>& state,
                                    const ValidationContinuation& continueValidation)
 {
-  const Name& key = certRequest->m_interest.getName();
+  const Name& key = certRequest->interest.getName();
   auto query = make_shared<IterativeQueryController>(key,
                                                      label::APPCERT_RR_TYPE,
-                                                     certRequest->m_interest.getInterestLifetime(),
+                                                     certRequest->interest.getInterestLifetime(),
                                                      [=] (const Data& data, const Response& response) {
                                                        onQuerySuccessCallback(data, certRequest, state, continueValidation);
                                                      },
@@ -85,7 +85,7 @@
                                                const ValidationContinuation& continueValidation)
 {
   state->fail({security::v2::ValidationError::Code::CANNOT_RETRIEVE_CERT, "Cannot fetch certificate due to " +
-        errMsg + " `" + certRequest->m_interest.getName().toUri() + "`"});
+               errMsg + " `" + certRequest->interest.getName().toUri() + "`"});
 }
 
 void
@@ -96,7 +96,7 @@
 {
   if (data.getContentType() == NDNS_NACK) {
     state->fail({security::v2::ValidationError::Code::CANNOT_RETRIEVE_CERT, "Cannot fetch certificate: get a Nack "
-          "in query `" + certRequest->m_interest.getName().toUri() + "`"});
+                 "in query `" + certRequest->interest.getName().toUri() + "`"});
     return;
   }
 
@@ -118,8 +118,8 @@
                                                     const ValidationContinuation& continueValidation)
 {
   state->fail({security::v2::ValidationError::Code::CANNOT_RETRIEVE_CERT,
-        "Cannot fetch certificate due to NDNS validation error :"
-        + err.getInfo() + " `" + certRequest->m_interest.getName().toUri() + "`"});
+               "Cannot fetch certificate due to NDNS validation error: " +
+               err.getInfo() + " `" + certRequest->interest.getName().toUri() + "`"});
 }
 
 } // namespace ndns
diff --git a/src/validator/certificate-fetcher-ndns-cert.cpp b/src/validator/certificate-fetcher-ndns-cert.cpp
index 4e0f01c..b5a0b9f 100644
--- a/src/validator/certificate-fetcher-ndns-cert.cpp
+++ b/src/validator/certificate-fetcher-ndns-cert.cpp
@@ -46,7 +46,7 @@
                                     const ValidationContinuation& continueValidation)
 {
   using IterativeQueryTag = SimpleTag<shared_ptr<IterativeQueryController>, 1086>;
-  const Name& key = certRequest->m_interest.getName();
+  const Name& key = certRequest->interest.getName();
   Name domain = calculateDomain(key);
   if (domain.size() == m_startComponentIndex) {
     // NS record does not exist, since the domain is actually globally routable
@@ -59,7 +59,7 @@
 
   auto query = std::make_shared<IterativeQueryController>(domain,
                                                           label::NS_RR_TYPE,
-                                                          certRequest->m_interest.getInterestLifetime(),
+                                                          certRequest->interest.getInterestLifetime(),
                                                           [=] (const Data& data, const Response& response) {
                                                             nsSuccessCallback(data, certRequest, state, continueValidation);
                                                           },
@@ -81,7 +81,7 @@
                                               const shared_ptr<security::v2::ValidationState>& state,
                                               const ValidationContinuation& continueValidation)
 {
-  Name interestName(certRequest->m_interest.getName());
+  Name interestName(certRequest->interest.getName());
   interestName.append(label::CERT_RR_TYPE);
   Interest interest(interestName);
 
@@ -118,9 +118,9 @@
                                            const ValidationContinuation& continueValidation)
 {
   NDNS_LOG_WARN("Cannot fetch link due to " +
-                errMsg + " `" + certRequest->m_interest.getName().toUri() + "`");
+                errMsg + " `" + certRequest->interest.getName().toUri() + "`");
 
-  Name interestName(certRequest->m_interest.getName());
+  Name interestName(certRequest->interest.getName());
   interestName.append(label::CERT_RR_TYPE);
   Interest interest(interestName);
   m_face.expressInterest(interest,
@@ -172,16 +172,16 @@
                                          const ValidationContinuation& continueValidation)
 {
   NDNS_LOG_DEBUG("NACK (" << nack.getReason() <<  ") while fetching certificate "
-                 << certRequest->m_interest.getName());
+                 << certRequest->interest.getName());
 
-  --certRequest->m_nRetriesLeft;
-  if (certRequest->m_nRetriesLeft >= 0) {
+  --certRequest->nRetriesLeft;
+  if (certRequest->nRetriesLeft >= 0) {
     // TODO implement delay for the the next fetch
     fetch(certRequest, state, continueValidation);
   }
   else {
     state->fail({security::v2::ValidationError::Code::CANNOT_RETRIEVE_CERT, "Cannot fetch certificate after all "
-                 "retries `" + certRequest->m_interest.getName().toUri() + "`"});
+                 "retries `" + certRequest->interest.getName().toUri() + "`"});
   }
 }
 
@@ -190,16 +190,16 @@
                                             const shared_ptr<security::v2::ValidationState>& state,
                                             const ValidationContinuation& continueValidation)
 {
-  NDNS_LOG_DEBUG("Timeout while fetching certificate " << certRequest->m_interest.getName()
+  NDNS_LOG_DEBUG("Timeout while fetching certificate " << certRequest->interest.getName()
                  << ", retrying");
 
-  --certRequest->m_nRetriesLeft;
-  if (certRequest->m_nRetriesLeft >= 0) {
+  --certRequest->nRetriesLeft;
+  if (certRequest->nRetriesLeft >= 0) {
     fetch(certRequest, state, continueValidation);
   }
   else {
     state->fail({security::v2::ValidationError::Code::CANNOT_RETRIEVE_CERT, "Cannot fetch certificate after all "
-                 "retries `" + certRequest->m_interest.getName().toUri() + "`"});
+                 "retries `" + certRequest->interest.getName().toUri() + "`"});
   }
 }
 
