diff --git a/fru_area.cpp b/fru_area.cpp
index d70c724..8b09968 100644
--- a/fru_area.cpp
+++ b/fru_area.cpp
@@ -13,33 +13,33 @@
 //----------------------------------------------------------------
 IPMIFruArea::IPMIFruArea(const uint8_t fruid, const ipmi_fru_area_type type,
                          bool bmc_fru) :
-    iv_fruid(fruid),
-    iv_type(type), iv_bmc_fru(bmc_fru)
+    fruid(fruid),
+    type(type), bmc_fru(bmc_fru)
 {
-    if (iv_type == IPMI_FRU_AREA_INTERNAL_USE)
+    if (type == IPMI_FRU_AREA_INTERNAL_USE)
     {
-        iv_name = "INTERNAL_";
+        name = "INTERNAL_";
     }
-    else if (iv_type == IPMI_FRU_AREA_CHASSIS_INFO)
+    else if (type == IPMI_FRU_AREA_CHASSIS_INFO)
     {
-        iv_name = "CHASSIS_";
+        name = "CHASSIS_";
     }
-    else if (iv_type == IPMI_FRU_AREA_BOARD_INFO)
+    else if (type == IPMI_FRU_AREA_BOARD_INFO)
     {
-        iv_name = "BOARD_";
+        name = "BOARD_";
     }
-    else if (iv_type == IPMI_FRU_AREA_PRODUCT_INFO)
+    else if (type == IPMI_FRU_AREA_PRODUCT_INFO)
     {
-        iv_name = "PRODUCT_";
+        name = "PRODUCT_";
     }
-    else if (iv_type == IPMI_FRU_AREA_MULTI_RECORD)
+    else if (type == IPMI_FRU_AREA_MULTI_RECORD)
     {
-        iv_name = "MULTI_";
+        name = "MULTI_";
     }
     else
     {
-        iv_name = IPMI_FRU_AREA_TYPE_MAX;
-        log<level::ERR>("Invalid Area", entry("TYPE=%d", iv_type));
+        name = IPMI_FRU_AREA_TYPE_MAX;
+        log<level::ERR>("Invalid Area", entry("TYPE=%d", type));
     }
 }
 
@@ -47,22 +47,22 @@
 // For a FRU area type, accepts the data and updates
 // area specific data.
 //-----------------------------------------------------
-void IPMIFruArea::set_data(const uint8_t* data, const size_t len)
+void IPMIFruArea::set_data(const uint8_t* value, const size_t length)
 {
-    iv_len = len;
-    iv_data = new uint8_t[len];
-    std::memcpy(iv_data, data, len);
+    len = length;
+    data = new uint8_t[len];
+    std::memcpy(data, value, len);
 }
 
 //-----------------------------------------------------
 // Sets the dbus parameters
 //-----------------------------------------------------
-void IPMIFruArea::update_dbus_paths(const char* bus_name, const char* obj_path,
-                                    const char* intf_name)
+void IPMIFruArea::update_dbus_paths(const char* bus, const char* path,
+                                    const char* intf)
 {
-    iv_bus_name = bus_name;
-    iv_obj_path = obj_path;
-    iv_intf_name = intf_name;
+    bus_name = bus;
+    obj_path = path;
+    intf_name = intf;
 }
 
 //-------------------
@@ -70,9 +70,9 @@
 //-------------------
 IPMIFruArea::~IPMIFruArea()
 {
-    if (iv_data != NULL)
+    if (data != NULL)
     {
-        delete[] iv_data;
-        iv_data = NULL;
+        delete[] data;
+        data = NULL;
     }
 }
diff --git a/fru_area.hpp b/fru_area.hpp
index 30401bf..2a6eed0 100644
--- a/fru_area.hpp
+++ b/fru_area.hpp
@@ -15,37 +15,37 @@
 {
   private:
     // Unique way of identifying a FRU
-    uint8_t iv_fruid = 0;
+    uint8_t fruid = 0;
 
     // Type of the fru matching offsets in common header
-    ipmi_fru_area_type iv_type = IPMI_FRU_AREA_INTERNAL_USE;
+    ipmi_fru_area_type type = IPMI_FRU_AREA_INTERNAL_USE;
 
     // Name of the fru area. ( BOARD/CHASSIS/PRODUCT )
-    std::string iv_name;
+    std::string name;
 
     // Length of a specific fru area.
-    size_t iv_len = 0;
+    size_t len = 0;
 
     // Special bit for BMC readable eeprom only.
-    bool iv_bmc_fru = false;
+    bool bmc_fru = false;
 
     // If a FRU is physically present.
-    bool iv_present = false;
+    bool isPresent = false;
 
     // Whether a particular area is valid ?
-    bool iv_valid = false;
+    bool isValid = false;
 
     // Actual area data.
-    uint8_t* iv_data = nullptr;
+    uint8_t* data = nullptr;
 
     // fru inventory dbus name
-    std::string iv_bus_name;
+    std::string bus_name;
 
     // fru inventory dbus object path
-    std::string iv_obj_path;
+    std::string obj_path;
 
     // fru inventory dbus interface name
-    std::string iv_intf_name;
+    std::string intf_name;
 
     // Default constructor disabled.
     IPMIFruArea();
@@ -61,55 +61,55 @@
     // Sets the present bit
     inline void set_present(const bool present)
     {
-        iv_present = present;
+        isPresent = present;
     }
 
     // returns fru id;
     uint8_t get_fruid() const
     {
-        return iv_fruid;
+        return fruid;
     }
 
     // Returns the length.
     size_t get_len() const
     {
-        return iv_len;
+        return len;
     }
 
     // Returns the type of the current fru area
     ipmi_fru_area_type get_type() const
     {
-        return iv_type;
+        return type;
     }
 
     // Returns the name
     const char* get_name() const
     {
-        return iv_name.c_str();
+        return name.c_str();
     }
 
     // Returns SD bus name
     const char* get_bus_name() const
     {
-        return iv_bus_name.c_str();
+        return bus_name.c_str();
     }
 
     // Retrns SD bus object path
     const char* get_obj_path() const
     {
-        return iv_obj_path.c_str();
+        return obj_path.c_str();
     }
 
     // Returns SD bus interface name
     const char* get_intf_name() const
     {
-        return iv_intf_name.c_str();
+        return intf_name.c_str();
     }
 
     // Returns the data portion
     inline uint8_t* get_data() const
     {
-        return iv_data;
+        return data;
     }
 
     // Accepts a pointer to data and sets it in the object.
