diff --git a/activation.cpp b/activation.cpp
index ff48326..1a64fcc 100644
--- a/activation.cpp
+++ b/activation.cpp
@@ -143,7 +143,7 @@
                                        deleteInterface, "Delete");
     try
     {
-        auto mapperResponseMsg = bus.call(method);
+        mapperResponseMsg = bus.call(method);
 
         // Check that the bus call didn't result in an error
         if (mapperResponseMsg.is_method_error())
diff --git a/image_verify.hpp b/image_verify.hpp
index 768182e..31b5742 100644
--- a/image_verify.hpp
+++ b/image_verify.hpp
@@ -50,7 +50,7 @@
      *
      *  @param[in] fd - File descriptor
      */
-    CustomFd(int fd) : fd(fd)
+    explicit CustomFd(int fd) : fd(fd)
     {
     }
 
diff --git a/item_updater_main.cpp b/item_updater_main.cpp
index 9ba705b..1792ad4 100644
--- a/item_updater_main.cpp
+++ b/item_updater_main.cpp
@@ -46,7 +46,7 @@
                       &updater, std::placeholders::_1));
 #endif
         bus.attach_event(loop, SD_EVENT_PRIORITY_NORMAL);
-        auto rc = sd_event_loop(loop);
+        rc = sd_event_loop(loop);
         if (rc < 0)
         {
             log<level::ERR>("Error occurred during the sd_event_loop",
diff --git a/msl_verify.hpp b/msl_verify.hpp
index 59f4017..d3015d9 100644
--- a/msl_verify.hpp
+++ b/msl_verify.hpp
@@ -25,7 +25,7 @@
     /** @brief Constructs MinimumShipLevel.
      *  @param[in] minShipLevel - Minimum Ship Level string
      */
-    MinimumShipLevel(const std::string& minShipLevel) :
+    explicit MinimumShipLevel(const std::string& minShipLevel) :
         minShipLevel(minShipLevel){};
 
     /** @brief Verify if the current PNOR version meets the min ship level
diff --git a/ubi/item_updater_ubi.cpp b/ubi/item_updater_ubi.cpp
index cf8ffe0..83a514d 100644
--- a/ubi/item_updater_ubi.cpp
+++ b/ubi/item_updater_ubi.cpp
@@ -189,7 +189,7 @@
     }
 }
 
-void ItemUpdaterUbi::removeReadOnlyPartition(std::string versionId)
+void ItemUpdaterUbi::removeReadOnlyPartition(const std::string& versionId)
 {
     auto serviceFile = "obmc-flash-bios-ubiumount-ro@" + versionId + ".service";
 
@@ -200,7 +200,7 @@
     bus.call_noreply(method);
 }
 
-void ItemUpdaterUbi::removeReadWritePartition(std::string versionId)
+void ItemUpdaterUbi::removeReadWritePartition(const std::string& versionId)
 {
     auto serviceFile = "obmc-flash-bios-ubiumount-rw@" + versionId + ".service";
 
diff --git a/ubi/item_updater_ubi.hpp b/ubi/item_updater_ubi.hpp
index fb6a6ca..183daac 100644
--- a/ubi/item_updater_ubi.hpp
+++ b/ubi/item_updater_ubi.hpp
@@ -96,14 +96,14 @@
      *
      * @param[in]  versionId - The id of the ro partition to remove.
      */
-    void removeReadOnlyPartition(std::string versionId);
+    void removeReadOnlyPartition(const std::string& versionId);
 
     /** @brief Clears read write PNOR partition for
      *  given Activation D-Bus object
      *
      *  @param[in]  versionId - The id of the rw partition to remove.
      */
-    void removeReadWritePartition(std::string versionId);
+    void removeReadWritePartition(const std::string& versionId);
 
     /** @brief Clears preserved PNOR partition */
     void removePreservedPartition();
diff --git a/ubi/serialize.cpp b/ubi/serialize.cpp
index 7250a00..a40925a 100644
--- a/ubi/serialize.cpp
+++ b/ubi/serialize.cpp
@@ -16,7 +16,7 @@
 
 namespace fs = std::experimental::filesystem;
 
-void storeToFile(std::string versionId, uint8_t priority)
+void storeToFile(const std::string& versionId, uint8_t priority)
 {
     auto bus = sdbusplus::bus::new_default();
 
@@ -49,7 +49,7 @@
     bus.call_noreply(method);
 }
 
-bool restoreFromFile(std::string versionId, uint8_t& priority)
+bool restoreFromFile(const std::string& versionId, uint8_t& priority)
 {
     auto varPath = PERSIST_DIR + versionId;
     if (fs::exists(varPath))
@@ -113,7 +113,7 @@
     return false;
 }
 
-void removeFile(std::string versionId)
+void removeFile(const std::string& versionId)
 {
     auto bus = sdbusplus::bus::new_default();
 
diff --git a/ubi/serialize.hpp b/ubi/serialize.hpp
index e8860f3..e5fefad 100644
--- a/ubi/serialize.hpp
+++ b/ubi/serialize.hpp
@@ -13,19 +13,19 @@
  *  @param[in] versionId - The version for which to store information.
  *  @param[in] priority - RedundancyPriority value for that version.
  */
-void storeToFile(std::string versionId, uint8_t priority);
+void storeToFile(const std::string& versionId, uint8_t priority);
 
 /** @brief Serialization function - restores activation information from file
  *  @param[in] versionId - The version for which to retrieve information.
  *  @param[in] priority - RedundancyPriority pointer for that version.
  *  @return true if restore was successful, false if not
  */
-bool restoreFromFile(std::string versionId, uint8_t& priority);
+bool restoreFromFile(const std::string& versionId, uint8_t& priority);
 
 /** @brief Removes the serial file for a given version.
  *  @param[in] versionId - The version for which to remove a file, if it exists.
  */
-void removeFile(std::string versionId);
+void removeFile(const std::string& versionId);
 
 } // namespace updater
 } // namespace software
diff --git a/ubi/watch.hpp b/ubi/watch.hpp
index a04967e..4d195a3 100644
--- a/ubi/watch.hpp
+++ b/ubi/watch.hpp
@@ -18,7 +18,7 @@
 {
     void operator()(sd_event_source* eventSource) const
     {
-        eventSource = sd_event_source_unref(eventSource);
+        sd_event_source_unref(eventSource);
     }
 };
 using EventSourcePtr = std::unique_ptr<sd_event_source, EventSourceDeleter>;
@@ -40,7 +40,7 @@
      *
      *  @param[in] fd - File descriptor
      */
-    CustomFd(int fd) : fd(fd)
+    explicit CustomFd(int fd) : fd(fd)
     {
     }
 
diff --git a/version.hpp b/version.hpp
index 831b201..13f772f 100644
--- a/version.hpp
+++ b/version.hpp
@@ -99,8 +99,8 @@
             const std::string& versionString, VersionPurpose versionPurpose,
             const std::string& filePath, eraseFunc callback) :
         VersionInherit(bus, (objPath).c_str(), true),
-        bus(bus), objPath(objPath), parent(parent), versionId(versionId),
-        versionStr(versionString),
+        eraseCallback(callback), bus(bus), objPath(objPath), parent(parent),
+        versionId(versionId), versionStr(versionString),
         chassisStateSignals(
             bus,
             sdbusRule::type::signal() + sdbusRule::member("PropertiesChanged") +
@@ -110,8 +110,6 @@
             std::bind(std::mem_fn(&Version::updateDeleteInterface), this,
                       std::placeholders::_1))
     {
-        // Bind erase method
-        eraseCallback = callback;
         // Set properties.
         purpose(versionPurpose);
         version(versionString);
