diff --git a/.clang-tidy b/.clang-tidy
index bbdad5d..00bbfd1 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -226,7 +226,8 @@
 performance-noexcept-move-constructor,
 performance-trivially-destructible,
 performance-type-promotion-in-math-fn,
-performance-unnecessary-copy-initialization'
+performance-unnecessary-copy-initialization,
+performance-unnecessary-value-param'
 
 WarningsAsErrors: '*'
 HeaderFilterRegex: '.*'
diff --git a/image_manager.cpp b/image_manager.cpp
index 8e32e3f..c9a958d 100644
--- a/image_manager.cpp
+++ b/image_manager.cpp
@@ -240,7 +240,7 @@
     return 0;
 }
 
-void Manager::erase(std::string entryId)
+void Manager::erase(const std::string& entryId)
 {
     auto it = versions.find(entryId);
     if (it == versions.end())
diff --git a/image_manager.hpp b/image_manager.hpp
index ca4d676..21dd373 100644
--- a/image_manager.hpp
+++ b/image_manager.hpp
@@ -43,7 +43,7 @@
      *
      * @param[in] entryId - unique identifier of the entry
      */
-    void erase(std::string entryId);
+    void erase(const std::string& entryId);
 
   private:
     /** @brief Persistent map of Version dbus objects and their
diff --git a/item_updater.cpp b/item_updater.cpp
index f624cbe..1f62133 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -523,8 +523,8 @@
                                std::pair<std::string, uint8_t>)>
         cmpPriority;
     cmpPriority cmpPriorityFunc =
-        [](std::pair<std::string, uint8_t> priority1,
-           std::pair<std::string, uint8_t> priority2) {
+        [](const std::pair<std::string, uint8_t>& priority1,
+           const std::pair<std::string, uint8_t>& priority2) {
         return priority1.second <= priority2.second;
     };
 
@@ -563,7 +563,7 @@
     info("BMC factory reset will take effect upon reboot.");
 }
 
-void ItemUpdater::removeReadOnlyPartition(std::string versionId)
+void ItemUpdater::removeReadOnlyPartition(const std::string& versionId)
 {
     auto flashId = versions.find(versionId)->second->path();
     helper.removeVersion(flashId);
@@ -867,7 +867,7 @@
     biosActivation = std::make_unique<Activation>(
         bus, path, *this, versionId, server::Activation::Activations::Active,
         assocs);
-    auto dummyErase = [](std::string /*entryId*/) {
+    auto dummyErase = [](const std::string& /*entryId*/) {
         // Do nothing;
     };
     biosVersion = std::make_unique<VersionClass>(
diff --git a/item_updater.hpp b/item_updater.hpp
index 59f9839..a0607fe 100644
--- a/item_updater.hpp
+++ b/item_updater.hpp
@@ -275,7 +275,7 @@
      *
      * @param[in]  versionId - The version id.
      */
-    void removeReadOnlyPartition(std::string versionId);
+    void removeReadOnlyPartition(const std::string& versionId);
 
     /** @brief Copies U-Boot from the currently booted BMC chip to the
      *  alternate chip.
diff --git a/sync_watch.cpp b/sync_watch.cpp
index fdeace6..225bf18 100644
--- a/sync_watch.cpp
+++ b/sync_watch.cpp
@@ -37,7 +37,7 @@
 SyncWatch::SyncWatch(sd_event& loop,
                      std::function<int(int, fs::path&)> syncCallback) :
     inotifyFd(-1),
-    syncCallback(syncCallback), loop(loop)
+    syncCallback(std::move(syncCallback)), loop(loop)
 {
     auto fd = inotify_init1(IN_NONBLOCK);
     if (-1 == fd)
diff --git a/test/utest.cpp b/test/utest.cpp
index 8e3edd3..5d3d10d 100644
--- a/test/utest.cpp
+++ b/test/utest.cpp
@@ -354,7 +354,7 @@
 class FileTest : public testing::Test
 {
   protected:
-    std::string readFile(fs::path path)
+    std::string readFile(const fs::path& path)
     {
         std::ifstream f(path, std::ios::in);
         if (!f.is_open())
diff --git a/version.hpp b/version.hpp
index 8a85ba9..77b20f7 100644
--- a/version.hpp
+++ b/version.hpp
@@ -87,7 +87,7 @@
             const std::string& id) :
         VersionInherit(bus, (objPath).c_str(),
                        VersionInherit::action::defer_emit),
-        eraseCallback(callback), id(id), versionStr(versionString)
+        eraseCallback(std::move(callback)), id(id), versionStr(versionString)
     {
         // Set properties.
         extendedVersion(extVersion);
diff --git a/watch.cpp b/watch.cpp
index cabfd79..991bf48 100644
--- a/watch.cpp
+++ b/watch.cpp
@@ -28,7 +28,7 @@
 namespace fs = std::filesystem;
 
 Watch::Watch(sd_event* loop, std::function<int(std::string&)> imageCallback) :
-    imageCallback(imageCallback)
+    imageCallback(std::move(imageCallback))
 {
     // Check if IMAGE DIR exists.
     std::error_code ec;
