diff --git a/src/algo/aes.cpp b/src/algo/aes.cpp
index c71946b..bf36aa7 100644
--- a/src/algo/aes.cpp
+++ b/src/algo/aes.cpp
@@ -1,20 +1,20 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of gep (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of gep authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * gep is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * gep is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * gep, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "aes.hpp"
@@ -25,7 +25,7 @@
 #include <ndn-cxx/security/transform/stream-sink.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 namespace algo {
 
 DecryptKey<Aes>
@@ -91,5 +91,5 @@
 }
 
 } // namespace algo
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/algo/aes.hpp b/src/algo/aes.hpp
index d0fbabd..685ea4b 100644
--- a/src/algo/aes.hpp
+++ b/src/algo/aes.hpp
@@ -1,24 +1,24 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of gep (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of gep authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * gep is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * gep is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * gep, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef NDN_GEP_ALGO_AES_HPP
-#define NDN_GEP_ALGO_AES_HPP
+#ifndef NDN_NAC_ALGO_AES_HPP
+#define NDN_NAC_ALGO_AES_HPP
 
 #include "common.hpp"
 #include "encrypt-params.hpp"
@@ -27,7 +27,7 @@
 #include <ndn-cxx/security/key-params.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 namespace algo {
 
 class Aes
@@ -50,11 +50,11 @@
           const EncryptParams& params);
 };
 
-typedef DecryptKey<Aes> AesEncryptKey;
-typedef EncryptKey<Aes> AesDecryptKey;
+using AesEncryptKey = DecryptKey<Aes>;
+using AesDecryptKey = EncryptKey<Aes>;
 
 } // namespace algo
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_ALGO_AES_HPP
+#endif // NDN_NAC_ALGO_AES_HPP
diff --git a/src/algo/encrypt-params.cpp b/src/algo/encrypt-params.cpp
index 91b5588..6663249 100644
--- a/src/algo/encrypt-params.cpp
+++ b/src/algo/encrypt-params.cpp
@@ -1,20 +1,20 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of gep (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of gep authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * gep is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * gep is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * gep, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "encrypt-params.hpp"
@@ -22,7 +22,7 @@
 #include <openssl/rand.h>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 namespace algo {
 
 EncryptParams::EncryptParams(tlv::AlgorithmTypeValue algorithm, uint8_t ivLength)
@@ -62,5 +62,5 @@
 }
 
 } // namespace algo
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/algo/encrypt-params.hpp b/src/algo/encrypt-params.hpp
index 030f443..26b494c 100644
--- a/src/algo/encrypt-params.hpp
+++ b/src/algo/encrypt-params.hpp
@@ -1,30 +1,30 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of gep (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of gep authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * gep is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * gep is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * gep, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef NDN_GEP_ENCRYPT_PARAMS_HPP
-#define NDN_GEP_ENCRYPT_PARAMS_HPP
+#ifndef NDN_NAC_ENCRYPT_PARAMS_HPP
+#define NDN_NAC_ENCRYPT_PARAMS_HPP
 
 #include "../tlv.hpp"
 #include <ndn-cxx/encoding/buffer-stream.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 namespace algo {
 
 class EncryptParams
@@ -50,7 +50,7 @@
 };
 
 } // namespace algo
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_ENCRYPT_PARAMS_HPP
+#endif // NDN_NAC_ENCRYPT_PARAMS_HPP
diff --git a/src/algo/encryptor.cpp b/src/algo/encryptor.cpp
index c9f7745..4f626c2 100644
--- a/src/algo/encryptor.cpp
+++ b/src/algo/encryptor.cpp
@@ -2,19 +2,19 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later version.
+ * NAC is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt 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 General Public License for more details.
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "encryptor.hpp"
@@ -25,7 +25,7 @@
 #include <openssl/rand.h>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 namespace algo {
 
 /**
@@ -148,5 +148,5 @@
 }
 
 } // namespace algo
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/algo/encryptor.hpp b/src/algo/encryptor.hpp
index 4dde07e..7c46355 100644
--- a/src/algo/encryptor.hpp
+++ b/src/algo/encryptor.hpp
@@ -1,20 +1,20 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later version.
+ * NAC is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt 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 General Public License for more details.
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #ifndef NDN_ENCRYPTOR_HPP
@@ -24,7 +24,7 @@
 #include <ndn-cxx/data.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 namespace algo {
 
 /**
@@ -48,7 +48,7 @@
             const EncryptParams& params);
 
 } // namespace algo
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
 #endif // NDN_ENCRYPTOR_HPP
diff --git a/src/algo/error.hpp b/src/algo/error.hpp
index d9abdb2..2ed6cfa 100644
--- a/src/algo/error.hpp
+++ b/src/algo/error.hpp
@@ -1,43 +1,39 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of gep (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of gep authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * gep is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * gep is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * gep, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef NDN_GEP_ALGO_ERROR_HPP
-#define NDN_GEP_ALGO_ERROR_HPP
+#ifndef NDN_NAC_ALGO_ERROR_HPP
+#define NDN_NAC_ALGO_ERROR_HPP
 
 #include <stdexcept>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 namespace algo {
 
 class Error : public std::runtime_error
 {
 public:
-  explicit
-  Error(const std::string& what)
-    : std::runtime_error(what)
-  {
-  }
+  using std::runtime_error::runtime_error;
 };
 
 } // namespace algo
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_ALGO_ERROR_HPP
+#endif // NDN_NAC_ALGO_ERROR_HPP
diff --git a/src/algo/rsa.cpp b/src/algo/rsa.cpp
index 85f4498..ff6c31d 100644
--- a/src/algo/rsa.cpp
+++ b/src/algo/rsa.cpp
@@ -1,20 +1,20 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of gep (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of gep authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * gep is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * gep is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * gep, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "rsa.hpp"
@@ -24,7 +24,7 @@
 #include <ndn-cxx/security/transform/public-key.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 namespace algo {
 
 DecryptKey<Rsa>
@@ -80,5 +80,5 @@
 }
 
 } // namespace algo
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/algo/rsa.hpp b/src/algo/rsa.hpp
index db44474..89719e5 100644
--- a/src/algo/rsa.hpp
+++ b/src/algo/rsa.hpp
@@ -1,31 +1,31 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of gep (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of gep authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * gep is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * gep is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * gep, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef NDN_GEP_ALGO_RSA_HPP
-#define NDN_GEP_ALGO_RSA_HPP
+#ifndef NDN_NAC_ALGO_RSA_HPP
+#define NDN_NAC_ALGO_RSA_HPP
 
 #include "encrypt-params.hpp"
 #include "../decrypt-key.hpp"
 #include <ndn-cxx/security/key-params.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 namespace algo {
 
 class Rsa
@@ -46,11 +46,11 @@
           const uint8_t* payload, size_t payloadLen);
 };
 
-typedef DecryptKey<Rsa> RsaPrivateKey;
-typedef EncryptKey<Rsa> RsaPublicKey;
+using RsaPrivateKey = DecryptKey<Rsa>;
+using RsaPublicKey = EncryptKey<Rsa>;
 
 } // namespace algo
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_ALGO_RSA_HPP
+#endif // NDN_NAC_ALGO_RSA_HPP
diff --git a/src/common.hpp b/src/common.hpp
index 14bca91..a478820 100644
--- a/src/common.hpp
+++ b/src/common.hpp
@@ -1,28 +1,28 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later version.
+ * NAC is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt 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 General Public License for more details.
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef NDN_GEP_COMMON_HPP
-#define NDN_GEP_COMMON_HPP
+#ifndef NDN_NAC_COMMON_HPP
+#define NDN_NAC_COMMON_HPP
 
 #include "config.hpp"
 
-#ifdef NDN_GEP_HAVE_TESTS
+#ifdef NDN_NAC_HAVE_TESTS
 #define VIRTUAL_WITH_TESTS virtual
 #define PUBLIC_WITH_TESTS_ELSE_PROTECTED public
 #define PUBLIC_WITH_TESTS_ELSE_PRIVATE public
@@ -34,15 +34,6 @@
 #define PROTECTED_WITH_TESTS_ELSE_PRIVATE private
 #endif
 
-/** \def DECL_OVERRIDE
- *  \brief expands to 'override' if compiler supports this feature, otherwise expands to nothing
- */
-#ifdef HAVE_CXX_OVERRIDE
-#define DECL_OVERRIDE override
-#else
-#define DECL_OVERRIDE
-#endif
-
 #include <cstddef>
 #include <list>
 #include <map>
@@ -71,37 +62,11 @@
 #include <boost/property_tree/ptree.hpp>
 
 namespace ndn {
-namespace gep {
-
-using std::size_t;
-
-using boost::noncopyable;
-
-using std::shared_ptr;
-using std::unique_ptr;
-using std::weak_ptr;
-using std::bad_weak_ptr;
-using std::make_shared;
-using std::enable_shared_from_this;
-
-using std::static_pointer_cast;
-using std::dynamic_pointer_cast;
-using std::const_pointer_cast;
-
-using std::function;
-using std::bind;
-using std::ref;
-using std::cref;
-
-using ndn::Interest;
-using ndn::Data;
-using ndn::Name;
-using ndn::Exclude;
-using ndn::Block;
+namespace nac {
 
 using security::v2::Certificate;
-using ndn::security::v2::Validator;
-using ndn::security::ValidatorNull;
+using security::v2::Validator;
+using security::ValidatorNull;
 using security::v2::DataValidationSuccessCallback;
 using security::v2::DataValidationFailureCallback;
 using security::v2::ValidationError;
@@ -110,19 +75,15 @@
 using namespace ndn::tlv;
 } // namespace tlv
 
-namespace name = ndn::name;
-namespace time = ndn::time;
-namespace signal = ndn::util::signal;
+const name::Component NAME_COMPONENT_FOR("FOR");
+const name::Component NAME_COMPONENT_READ("READ");
+const name::Component NAME_COMPONENT_SAMPLE("SAMPLE");
+const name::Component NAME_COMPONENT_ACCESS("ACCESS");
+const name::Component NAME_COMPONENT_E_KEY("E-KEY");
+const name::Component NAME_COMPONENT_D_KEY("D-KEY");
+const name::Component NAME_COMPONENT_C_KEY("C-KEY");
 
-const ndn::name::Component NAME_COMPONENT_FOR("FOR");
-const ndn::name::Component NAME_COMPONENT_READ("READ");
-const ndn::name::Component NAME_COMPONENT_SAMPLE("SAMPLE");
-const ndn::name::Component NAME_COMPONENT_ACCESS("ACCESS");
-const ndn::name::Component NAME_COMPONENT_E_KEY("E-KEY");
-const ndn::name::Component NAME_COMPONENT_D_KEY("D-KEY");
-const ndn::name::Component NAME_COMPONENT_C_KEY("C-KEY");
-
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_COMMON_HPP
+#endif // NDN_NAC_COMMON_HPP
diff --git a/src/consumer-db.cpp b/src/consumer-db.cpp
index 661ab04..96e8427 100644
--- a/src/consumer-db.cpp
+++ b/src/consumer-db.cpp
@@ -2,19 +2,19 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
  */
@@ -25,7 +25,7 @@
 #include <sqlite3.h>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 using util::Sqlite3Statement;
 
@@ -118,5 +118,5 @@
   statement.step();
 }
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/consumer-db.hpp b/src/consumer-db.hpp
index 8500b67..29230dd 100644
--- a/src/consumer-db.hpp
+++ b/src/consumer-db.hpp
@@ -2,30 +2,30 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <dreamerbarrychang@gmail.com>
  */
 
-#ifndef NDN_GEP_CONSUMER_DB_HPP
-#define NDN_GEP_CONSUMER_DB_HPP
+#ifndef NDN_NAC_CONSUMER_DB_HPP
+#define NDN_NAC_CONSUMER_DB_HPP
 
 #include "common.hpp"
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 /**
  * @brief ConsumerDB is a class to manage decryption keys for consumer.
@@ -36,11 +36,7 @@
   class Error : public std::runtime_error
   {
   public:
-    explicit
-    Error(const std::string& what)
-      : std::runtime_error(what)
-    {
-    }
+    using std::runtime_error::runtime_error;
   };
 
 public:
@@ -79,7 +75,7 @@
   unique_ptr<Impl> m_impl;
 };
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_CONSUMER_DB_HPP
+#endif // NDN_NAC_CONSUMER_DB_HPP
diff --git a/src/consumer.cpp b/src/consumer.cpp
index 4470089..cd1cdc1 100644
--- a/src/consumer.cpp
+++ b/src/consumer.cpp
@@ -2,19 +2,19 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
  * @author Yingdi Yu <yingdi@cs.ucla.edu>
@@ -24,7 +24,7 @@
 #include "encrypted-content.hpp"
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 const Link Consumer::NO_LINK = Link();
 
@@ -290,5 +290,5 @@
     handleNack(interest, lp::Nack(), link, callback, errorCallback);
 }
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/consumer.hpp b/src/consumer.hpp
index 777425d..55dee91 100644
--- a/src/consumer.hpp
+++ b/src/consumer.hpp
@@ -2,26 +2,26 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
  * @author Yingdi Yu <yingdi@cs.ucla.edu>
  */
 
-#ifndef NDN_GEP_CONSUMER_HPP
-#define NDN_GEP_CONSUMER_HPP
+#ifndef NDN_NAC_CONSUMER_HPP
+#define NDN_NAC_CONSUMER_HPP
 
 #include "common.hpp"
 #include "consumer-db.hpp"
@@ -32,7 +32,7 @@
 #include <ndn-cxx/security/validator-null.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 typedef function<void(const Data&, const Buffer&)> ConsumptionCallBack;
 
@@ -212,7 +212,7 @@
   std::map<Name, Buffer> m_dKeyMap;
 };
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_CONSUMER_HPP
+#endif // NDN_NAC_CONSUMER_HPP
diff --git a/src/decrypt-key.hpp b/src/decrypt-key.hpp
index df45428..4c61099 100644
--- a/src/decrypt-key.hpp
+++ b/src/decrypt-key.hpp
@@ -1,29 +1,29 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later version.
+ * NAC is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt 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 General Public License for more details.
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef NDN_GEP_DECRYPT_KEY_HPP
-#define NDN_GEP_DECRYPT_KEY_HPP
+#ifndef NDN_NAC_DECRYPT_KEY_HPP
+#define NDN_NAC_DECRYPT_KEY_HPP
 
 #include "encrypt-key.hpp"
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 template<class Algorithm>
 class DecryptKey
@@ -56,7 +56,7 @@
   Buffer m_keyBits;
 };
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_DECRYPT_KEY_HPP
+#endif // NDN_NAC_DECRYPT_KEY_HPP
diff --git a/src/encrypt-key.hpp b/src/encrypt-key.hpp
index ba0d778..7df3910 100644
--- a/src/encrypt-key.hpp
+++ b/src/encrypt-key.hpp
@@ -1,29 +1,29 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2015,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later version.
+ * NAC is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt 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 General Public License for more details.
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef NDN_GEP_ENCRYPT_KEY_HPP
-#define NDN_GEP_ENCRYPT_KEY_HPP
+#ifndef NDN_NAC_ENCRYPT_KEY_HPP
+#define NDN_NAC_ENCRYPT_KEY_HPP
 
 #include "common.hpp"
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 template<class Algorithm>
 class EncryptKey
@@ -50,7 +50,7 @@
   Buffer m_keyBits;
 };
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_ENCRYPT_KEY_HPP
+#endif // NDN_NAC_ENCRYPT_KEY_HPP
diff --git a/src/encrypted-content.cpp b/src/encrypted-content.cpp
index 68d0e9c..776755c 100644
--- a/src/encrypted-content.cpp
+++ b/src/encrypted-content.cpp
@@ -1,20 +1,20 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of gep (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of gep authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * gep is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * gep is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * gep, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Yingdi Yu <yingdi@cs.ucla.edu>
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
@@ -26,7 +26,7 @@
 #include <boost/lexical_cast.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 BOOST_CONCEPT_ASSERT((boost::EqualityComparable<EncryptedContent>));
 BOOST_CONCEPT_ASSERT((WireEncodable<EncryptedContent>));
@@ -214,5 +214,5 @@
   return (wireEncode() == rhs.wireEncode());
 }
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/encrypted-content.hpp b/src/encrypted-content.hpp
index 8a96fc7..53bad96 100644
--- a/src/encrypted-content.hpp
+++ b/src/encrypted-content.hpp
@@ -1,26 +1,26 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of gep (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of gep authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * gep is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * gep is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * gep, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Yingdi Yu <yingdi@cs.ucla.edu>
  */
 
-#ifndef NDN_ENCRYPTED_CONTENT_HPP
-#define NDN_ENCRYPTED_CONTENT_HPP
+#ifndef NDN_NAC_ENCRYPTED_CONTENT_HPP
+#define NDN_NAC_ENCRYPTED_CONTENT_HPP
 
 #include "tlv.hpp"
 #include <list>
@@ -28,7 +28,7 @@
 #include <ndn-cxx/key-locator.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 class EncryptedContent
 {
@@ -36,10 +36,7 @@
   class Error : public ndn::tlv::Error
   {
   public:
-    explicit Error(const std::string& what)
-      : ndn::tlv::Error(what)
-    {
-    }
+    using ndn::tlv::Error::Error;
   };
 
 public:
@@ -52,7 +49,8 @@
                    const uint8_t* iv = 0,
                    size_t ivLen = 0);
 
-  explicit EncryptedContent(const Block& block);
+  explicit
+  EncryptedContent(const Block& block);
 
   void
   setAlgorithmType(tlv::AlgorithmTypeValue type);
@@ -100,6 +98,7 @@
 public:
   bool
   operator==(const EncryptedContent& rhs) const;
+
   bool
   operator!=(const EncryptedContent& rhs) const
   {
@@ -116,7 +115,7 @@
   mutable Block m_wire;
 };
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_ENCRYPTED_CONTENT_HPP
+#endif // NDN_NAC_ENCRYPTED_CONTENT_HPP
diff --git a/src/error-code.hpp b/src/error-code.hpp
index e070efe..10d2f62 100644
--- a/src/error-code.hpp
+++ b/src/error-code.hpp
@@ -1,31 +1,31 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Yingdi Yu <yingdi@cs.ucla.edu>
  */
 
-#ifndef NDN_GEP_ERROR_CODE_HPP
-#define NDN_GEP_ERROR_CODE_HPP
+#ifndef NDN_NAC_ERROR_CODE_HPP
+#define NDN_NAC_ERROR_CODE_HPP
 
 #include "common.hpp"
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 enum class ErrorCode {
   Timeout = 1,
@@ -37,9 +37,9 @@
   DataRetrievalFailure = 36
 };
 
-typedef function<void (const ErrorCode&, const std::string&)> ErrorCallBack;
+using ErrorCallBack = std::function<void (const ErrorCode&, const std::string&)>;
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_ERROR_CODE_HPP
+#endif // NDN_NAC_ERROR_CODE_HPP
diff --git a/src/group-manager-db.cpp b/src/group-manager-db.cpp
index 57a3697..0e94661 100644
--- a/src/group-manager-db.cpp
+++ b/src/group-manager-db.cpp
@@ -1,20 +1,20 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
  */
@@ -27,7 +27,7 @@
 #include <ndn-cxx/util/string-helper.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 using util::Sqlite3Statement;
 
@@ -391,5 +391,5 @@
   }
 }
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/group-manager-db.hpp b/src/group-manager-db.hpp
index a311ecf..59c0e66 100644
--- a/src/group-manager-db.hpp
+++ b/src/group-manager-db.hpp
@@ -2,19 +2,19 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
  */
@@ -25,7 +25,7 @@
 #include "schedule.hpp"
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 /**
  * @brief GroupManagerDB is a class to manage the database of group manager.
@@ -38,17 +38,15 @@
   class Error : public std::runtime_error
   {
   public:
-    explicit Error(const std::string& what)
-      : std::runtime_error(what)
-    {
-    }
+    using std::runtime_error::runtime_error;
   };
 
 public:
   /**
    * @brief Create the database of group manager at path @p dbPath.
    */
-  explicit GroupManagerDB(const std::string& dbPath);
+  explicit
+  GroupManagerDB(const std::string& dbPath);
 
   ~GroupManagerDB();
 
@@ -202,7 +200,7 @@
   unique_ptr<Impl> m_impl;
 };
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
 #endif // GEP_GROUP_MANAGER_DB_HPP
diff --git a/src/group-manager.cpp b/src/group-manager.cpp
index dfcb260..0521dff 100644
--- a/src/group-manager.cpp
+++ b/src/group-manager.cpp
@@ -1,24 +1,20 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for
- * NDN). See AUTHORS.md for complete list of ndn-group-encrypt authors and
- * contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation, either version 3 of the License, or (at your option) any
- * later version.
+ * NAC is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt 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 General Public License for
- * more details.
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see
- * <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
  */
@@ -33,7 +29,7 @@
 #include <ndn-cxx/util/string-helper.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 GroupManager::GroupManager(const Name& prefix,
                            const Name& dataType,
@@ -260,5 +256,5 @@
   m_db.cleanEKeys();
 }
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/group-manager.hpp b/src/group-manager.hpp
index 56feb28..afb7349 100644
--- a/src/group-manager.hpp
+++ b/src/group-manager.hpp
@@ -1,26 +1,26 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  Regents of the University of California
+ * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
  */
 
-#ifndef NDN_GEP_GROUP_MANAGER_HPP
-#define NDN_GEP_GROUP_MANAGER_HPP
+#ifndef NDN_NAC_GROUP_MANAGER_HPP
+#define NDN_NAC_GROUP_MANAGER_HPP
 
 #include "group-manager-db.hpp"
 #include "algo/rsa.hpp"
@@ -28,7 +28,7 @@
 #include <ndn-cxx/security/key-chain.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 class GroupManager
 {
@@ -36,10 +36,7 @@
   class Error : public std::runtime_error
   {
   public:
-    explicit Error(const std::string& what)
-      : std::runtime_error(what)
-    {
-    }
+    using std::runtime_error::runtime_error;
   };
 
 public:
@@ -103,8 +100,7 @@
   void
   updateMemberSchedule(const Name& identity, const std::string& scheduleName);
 
-
-PUBLIC_WITH_TESTS_ELSE_PRIVATE :
+PUBLIC_WITH_TESTS_ELSE_PRIVATE:
   /**
    * @brief Calculate interval that covers @p timeslot
    * and fill @p memberKeys with the info of members who is allowed to access the interval.
@@ -157,7 +153,7 @@
   KeyChain m_keyChain;
 };
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_GROUP_MANAGER_HPP
+#endif // NDN_NAC_GROUP_MANAGER_HPP
diff --git a/src/interval.cpp b/src/interval.cpp
index 8d96f77..1402baf 100644
--- a/src/interval.cpp
+++ b/src/interval.cpp
@@ -2,19 +2,19 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
  */
@@ -22,7 +22,7 @@
 #include "interval.hpp"
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 static const TimeStamp DEFAULT_TIME = boost::posix_time::from_iso_string("14000101T000000");
 
@@ -109,5 +109,5 @@
   return *this;
 }
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/interval.hpp b/src/interval.hpp
index 6cf6b86..d442252 100644
--- a/src/interval.hpp
+++ b/src/interval.hpp
@@ -2,31 +2,31 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
  */
 
-#ifndef NDN_GEP_INTERVAL_HPP
-#define NDN_GEP_INTERVAL_HPP
+#ifndef NDN_NAC_INTERVAL_HPP
+#define NDN_NAC_INTERVAL_HPP
 
 #include "common.hpp"
 #include <boost/date_time/posix_time/posix_time.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 typedef boost::posix_time::ptime TimeStamp;
 
@@ -37,10 +37,7 @@
   class Error : public std::runtime_error
   {
   public:
-    explicit Error(const std::string& what)
-      : std::runtime_error(what)
-    {
-    }
+    using std::runtime_error::runtime_error;
   };
 
 public:
@@ -49,7 +46,8 @@
    *
    * @param isValid If isValid is true, the created interval is an empty interval
    */
-  explicit Interval(bool isValid = false);
+  explicit
+  Interval(bool isValid = false);
 
   Interval(const TimeStamp& startTime, const TimeStamp& endTime);
 
@@ -114,7 +112,7 @@
   bool m_isValid;
 };
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_INTERVAL_HPP
+#endif // NDN_NAC_INTERVAL_HPP
diff --git a/src/producer-db.cpp b/src/producer-db.cpp
index 0cde47d..3f75796 100644
--- a/src/producer-db.cpp
+++ b/src/producer-db.cpp
@@ -2,19 +2,19 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Prashanth Swaminathan <prashanthsw@gmail.com>
  */
@@ -26,7 +26,7 @@
 #include <sqlite3.h>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 using util::Sqlite3Statement;
 using time::system_clock;
@@ -144,5 +144,5 @@
   statement.step();
 }
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/producer-db.hpp b/src/producer-db.hpp
index a846901..6147204 100644
--- a/src/producer-db.hpp
+++ b/src/producer-db.hpp
@@ -2,30 +2,30 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Prashanth Swaminathan <prashanthsw@gmail.com>
  */
 
-#ifndef NDN_GEP_PRODUCER_DB_HPP
-#define NDN_GEP_PRODUCER_DB_HPP
+#ifndef NDN_NAC_PRODUCER_DB_HPP
+#define NDN_NAC_PRODUCER_DB_HPP
 
 #include "common.hpp"
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 /**
  * @brief ProducerDB is a class to manage the database of data producer.
@@ -38,14 +38,12 @@
   class Error : public std::runtime_error
   {
   public:
-    explicit Error(const std::string& what)
-      : std::runtime_error(what)
-    {
-    }
+    using std::runtime_error::runtime_error;
   };
 
 public:
-  explicit ProducerDB(const std::string& dbPath);
+  explicit
+  ProducerDB(const std::string& dbPath);
 
   ~ProducerDB();
 
@@ -81,7 +79,7 @@
   unique_ptr<Impl> m_impl;
 };
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_PRODUCER_DB_HPP
+#endif // NDN_NAC_PRODUCER_DB_HPP
diff --git a/src/producer.cpp b/src/producer.cpp
index ac9aca0..bc7c0d5 100644
--- a/src/producer.cpp
+++ b/src/producer.cpp
@@ -2,19 +2,19 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Prashanth Swaminathan <prashanthsw@gmail.com>
  * @author Yingdi Yu <yuyingdi@gmail.com>
@@ -28,7 +28,7 @@
 #include <iostream>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 using time::system_clock;
 
@@ -314,5 +314,5 @@
   return true;
 }
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/producer.hpp b/src/producer.hpp
index 8724d1b..2081d5d 100644
--- a/src/producer.hpp
+++ b/src/producer.hpp
@@ -2,26 +2,26 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Prashanth Swaminathan <prashanthsw@gmail.com>
  * @author Yingdi Yu <yuyingdi@gmail.com>
  */
 
-#ifndef NDN_GEP_PRODUCER_HPP
-#define NDN_GEP_PRODUCER_HPP
+#ifndef NDN_NAC_PRODUCER_HPP
+#define NDN_NAC_PRODUCER_HPP
 
 #include "error-code.hpp"
 #include "producer-db.hpp"
@@ -30,7 +30,7 @@
 #include <ndn-cxx/security/key-chain.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 // @brief Callback returns vector of Data contains content keys encrypted by E-KEYS
 typedef function<void(const std::vector<Data>&)> ProducerEKeyCallback;
@@ -216,7 +216,7 @@
   Link m_keyRetrievalLink;
 };
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_PRODUCER_HPP
+#endif // NDN_NAC_PRODUCER_HPP
diff --git a/src/repetitive-interval.cpp b/src/repetitive-interval.cpp
index fbbe0a9..9815aa5 100644
--- a/src/repetitive-interval.cpp
+++ b/src/repetitive-interval.cpp
@@ -2,19 +2,19 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
  */
@@ -26,7 +26,7 @@
 #include <boost/date_time/posix_time/posix_time.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 static const TimeStamp DEFAULT_TIME = boost::posix_time::from_iso_string("14000101T000000");
 
@@ -282,5 +282,5 @@
   return (static_cast<size_t>(m_unit) < static_cast<size_t>(interval.getRepeatUnit()));
 }
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/repetitive-interval.hpp b/src/repetitive-interval.hpp
index de9b63c..4400f05 100644
--- a/src/repetitive-interval.hpp
+++ b/src/repetitive-interval.hpp
@@ -2,31 +2,31 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
  */
 
-#ifndef NDN_GEP_REPETITIVE_INTERVAL_HPP
-#define NDN_GEP_REPETITIVE_INTERVAL_HPP
+#ifndef NDN_NAC_REPETITIVE_INTERVAL_HPP
+#define NDN_NAC_REPETITIVE_INTERVAL_HPP
 
 #include "common.hpp"
 #include "interval.hpp"
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 ///@brief An advanced interval which can have a repeat pattern and repeat unit
 class RepetitiveInterval
@@ -140,7 +140,7 @@
   mutable Block m_wire;
 };
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_REPETITIVE_INTERVAL_HPP
+#endif // NDN_NAC_REPETITIVE_INTERVAL_HPP
diff --git a/src/schedule.cpp b/src/schedule.cpp
index 797467a..0fd78f6 100644
--- a/src/schedule.cpp
+++ b/src/schedule.cpp
@@ -2,19 +2,19 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
  */
@@ -26,7 +26,7 @@
 #include <ndn-cxx/util/concepts.hpp>
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 /**
  * @brief Helper functon to calculate black interval results or white interval results
@@ -210,5 +210,5 @@
   }
 }
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
diff --git a/src/schedule.hpp b/src/schedule.hpp
index a919767..d13c93a 100644
--- a/src/schedule.hpp
+++ b/src/schedule.hpp
@@ -2,31 +2,31 @@
 /**
  * Copyright (c) 2014-2018, Regents of the University of California
  *
- * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
- * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
  *
- * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
+ * NAC is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
  *
- * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * NAC 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * ndn-group-encrypt, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
  */
 
-#ifndef NDN_GEP_SCHEDULE_HPP
-#define NDN_GEP_SCHEDULE_HPP
+#ifndef NDN_NAC_SCHEDULE_HPP
+#define NDN_NAC_SCHEDULE_HPP
 
 #include "common.hpp"
 #include "repetitive-interval.hpp"
 
 namespace ndn {
-namespace gep {
+namespace nac {
 
 /**
  * @brief Schedule is used to manage the time, which contains two sets of RepetitiveIntervals
@@ -39,7 +39,8 @@
 public:
   Schedule();
 
-  explicit Schedule(const Block& block);
+  explicit
+  Schedule(const Block& block);
 
 public:
   template<encoding::Tag TAG>
@@ -78,7 +79,7 @@
   mutable Block m_wire;
 };
 
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_SCHEDULE_HPP
+#endif // NDN_NAC_SCHEDULE_HPP
diff --git a/src/tlv.hpp b/src/tlv.hpp
index 26444ac..6aae9a1 100644
--- a/src/tlv.hpp
+++ b/src/tlv.hpp
@@ -1,29 +1,27 @@
 /* -*- 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.
-*/
+ * Copyright (c) 2014-2018, Regents of the University of California
+ *
+ * This file is part of NAC (Name-Based Access Control for NDN).
+ * See AUTHORS.md for complete list of NAC authors and contributors.
+ *
+ * NAC is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NAC 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NAC, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
 
-#ifndef NDN_GEP_TLV_HPP
-#define NDN_GEP_TLV_HPP
+#ifndef NDN_NAC_TLV_HPP
+#define NDN_NAC_TLV_HPP
 
 namespace ndn {
-namespace gep {
+namespace nac {
 namespace tlv {
 
 enum {
@@ -55,7 +53,7 @@
 };
 
 } // namespace tlv
-} // namespace gep
+} // namespace nac
 } // namespace ndn
 
-#endif // NDN_GEP_TLV_HPP
+#endif // NDN_NAC_TLV_HPP
