diff --git a/src/storage/index.cpp b/src/storage/index.cpp
index 2bf17ac..572dc97 100644
--- a/src/storage/index.cpp
+++ b/src/storage/index.cpp
@@ -56,7 +56,7 @@
   return true;
 }
 
-Index::Index(const size_t nMaxPackets)
+Index::Index(size_t nMaxPackets)
   : m_maxPackets(nMaxPackets)
   , m_size(0)
 {
@@ -64,7 +64,7 @@
 
 
 bool
-Index::insert(const Data& data, const int64_t id)
+Index::insert(const Data& data, int64_t id)
 {
   if (isFull())
     throw Error("The Index is Full. Cannot Insert Any Data!");
@@ -76,7 +76,7 @@
 }
 
 bool
-Index::insert(const Name& fullName, const int64_t id,
+Index::insert(const Name& fullName, int64_t id,
               const ndn::ConstBufferPtr& keyLocatorHash)
 {
   if (isFull())
@@ -225,7 +225,7 @@
   return std::make_pair(0, Name());
 }
 
-Index::Entry::Entry(const Data& data, const int64_t id)
+Index::Entry::Entry(const Data& data, int64_t id)
   : m_name(data.getFullName())
   , m_id(id)
 {
@@ -234,7 +234,7 @@
     m_keyLocatorHash = computeKeyLocatorHash(signature.getKeyLocator());
 }
 
-Index::Entry::Entry(const Name& fullName, const KeyLocator& keyLocator, const int64_t id)
+Index::Entry::Entry(const Name& fullName, const KeyLocator& keyLocator, int64_t id)
   : m_name(fullName)
   , m_keyLocatorHash(computeKeyLocatorHash(keyLocator))
   , m_id(id)
@@ -242,7 +242,7 @@
 }
 
 Index::Entry::Entry(const Name& fullName,
-                    const ndn::ConstBufferPtr& keyLocatorHash, const int64_t id)
+                    const ndn::ConstBufferPtr& keyLocatorHash, int64_t id)
   : m_name(fullName)
   , m_keyLocatorHash(keyLocatorHash)
   , m_id(id)
diff --git a/src/storage/index.hpp b/src/storage/index.hpp
index ee8eca4..51d51b2 100644
--- a/src/storage/index.hpp
+++ b/src/storage/index.hpp
@@ -63,12 +63,12 @@
     /**
      * @brief construct Entry by data and id number
      */
-    Entry(const Data& data, const int64_t id);
+    Entry(const Data& data, int64_t id);
 
     /**
      * @brief construct Entry by fullName, keyLocator and id number
      */
-    Entry(const Name& fullName, const KeyLocator& keyLocator, const int64_t id);
+    Entry(const Name& fullName, const KeyLocator& keyLocator, int64_t id);
 
     /**
      * @brief construct Entry by fullName, keyLocatorHash and id number
@@ -76,7 +76,7 @@
      * @param  keyLocatorHash  keyLocator hashed by sha256
      * @param  id              record ID from database
      */
-    Entry(const Name& fullName, const ndn::ConstBufferPtr& keyLocatorHash, const int64_t id);
+    Entry(const Name& fullName, const ndn::ConstBufferPtr& keyLocatorHash, int64_t id);
 
     /**
      *  @brief implicit construct Entry by full name
@@ -106,7 +106,7 @@
     /**
      *  @brief get record ID from database
      */
-    const int64_t
+    int64_t
     getId() const
     {
       return m_id;
@@ -148,7 +148,7 @@
 
 public:
   explicit
-  Index(const size_t nMaxPackets);
+  Index(size_t nMaxPackets);
 
   /**
    *  @brief insert entries into index
@@ -156,7 +156,7 @@
    *  @param  id      obtained from database
    */
   bool
-  insert(const Data& data, const int64_t id);
+  insert(const Data& data, int64_t id);
 
   /**
    *  @brief insert entries into index
@@ -164,7 +164,7 @@
    *  @param  id      obtained from database
    */
   bool
-  insert(const Name& fullName, const int64_t id,
+  insert(const Name& fullName, int64_t id,
          const ndn::ConstBufferPtr& keyLocatorHash);
 
   /**
@@ -198,7 +198,7 @@
   static const ndn::ConstBufferPtr
   computeKeyLocatorHash(const KeyLocator& keyLocator);
 
-  const size_t
+  size_t
   size() const
   {
     return m_size;
