diff --git a/dbus/dbusactiveread.cpp b/dbus/dbusactiveread.cpp
index 689a85d..3d0ed79 100644
--- a/dbus/dbusactiveread.cpp
+++ b/dbus/dbusactiveread.cpp
@@ -28,7 +28,7 @@
 
 ReadReturn DbusActiveRead::read(void)
 {
-    struct SensorProperties settings;
+    SensorProperties settings;
     double value;
 
     _helper->getProperties(_service, _path, &settings);
@@ -39,7 +39,7 @@
      * Technically it might not be a value from now, but there's no timestamp
      * on Sensor.Value yet.
      */
-    struct ReadReturn r = {value, std::chrono::high_resolution_clock::now()};
+    ReadReturn r = {value, std::chrono::high_resolution_clock::now()};
 
     return r;
 }
diff --git a/dbus/dbusconfiguration.cpp b/dbus/dbusconfiguration.cpp
index 161f14a..55151d3 100644
--- a/dbus/dbusconfiguration.cpp
+++ b/dbus/dbusconfiguration.cpp
@@ -260,7 +260,7 @@
 void populatePidInfo(
     sdbusplus::bus::bus& bus,
     const std::unordered_map<std::string, DbusVariantType>& base,
-    struct conf::ControllerInfo& info, const std::string* thresholdProperty,
+    conf::ControllerInfo& info, const std::string* thresholdProperty,
     const std::map<std::string, conf::SensorConfig>& sensorConfig)
 {
     info.type = std::get<std::string>(getPIDAttribute(base, "Class"));
@@ -752,7 +752,7 @@
 
                 if (offsetType.empty())
                 {
-                    struct conf::ControllerInfo& info =
+                    conf::ControllerInfo& info =
                         conf[std::get<std::string>(base.at("Name"))];
                     info.inputs = std::move(inputSensorNames);
                     populatePidInfo(bus, base, info, nullptr, sensorConfig);
@@ -763,7 +763,7 @@
                     // values will differ, making setpoints differ
                     for (const std::string& input : inputSensorNames)
                     {
-                        struct conf::ControllerInfo& info = conf[input];
+                        conf::ControllerInfo& info = conf[input];
                         info.inputs.emplace_back(input);
                         populatePidInfo(bus, base, info, &offsetType,
                                         sensorConfig);
@@ -822,7 +822,7 @@
                 {
                     continue;
                 }
-                struct conf::ControllerInfo& info =
+                conf::ControllerInfo& info =
                     conf[std::get<std::string>(base.at("Name"))];
                 info.inputs = std::move(inputs);
 
diff --git a/dbus/dbushelper.cpp b/dbus/dbushelper.cpp
index f7dbe41..8601733 100644
--- a/dbus/dbushelper.cpp
+++ b/dbus/dbushelper.cpp
@@ -74,8 +74,7 @@
 }
 
 void DbusHelper::getProperties(const std::string& service,
-                               const std::string& path,
-                               struct SensorProperties* prop)
+                               const std::string& path, SensorProperties* prop)
 {
     auto pimMsg = _bus.new_method_call(service.c_str(), path.c_str(),
                                        propertiesintf, "GetAll");
diff --git a/dbus/dbushelper.hpp b/dbus/dbushelper.hpp
index b4d3aa0..81a7238 100644
--- a/dbus/dbushelper.hpp
+++ b/dbus/dbushelper.hpp
@@ -33,7 +33,7 @@
                            const std::string& path) override;
 
     void getProperties(const std::string& service, const std::string& path,
-                       struct SensorProperties* prop) override;
+                       SensorProperties* prop) override;
 
     bool thresholdsAsserted(const std::string& service,
                             const std::string& path) override;
diff --git a/dbus/dbushelper_interface.hpp b/dbus/dbushelper_interface.hpp
index 4dbf00c..3f7d744 100644
--- a/dbus/dbushelper_interface.hpp
+++ b/dbus/dbushelper_interface.hpp
@@ -32,13 +32,13 @@
      * @param[in] bus - A bus to use for the call.
      * @param[in] service - The service providing the interface.
      * @param[in] path - The dbus path.
-     * @param[out] prop - A pointer to a properties struct to fill out.
+     * @param[out] prop - A pointer to a properties to fill out.
      *
      * @warning Throws exception on dbus failure.
      */
     virtual void getProperties(const std::string& service,
                                const std::string& path,
-                               struct SensorProperties* prop) = 0;
+                               SensorProperties* prop) = 0;
 
     /** @brief Get Critical Threshold current assert status
      *
diff --git a/dbus/dbuspassive.cpp b/dbus/dbuspassive.cpp
index 6667bc4..0c73db2 100644
--- a/dbus/dbuspassive.cpp
+++ b/dbus/dbuspassive.cpp
@@ -50,7 +50,7 @@
     /* service == busname */
     std::string path = getSensorPath(type, id);
 
-    struct SensorProperties settings;
+    SensorProperties settings;
     bool failed;
 
     try
@@ -79,8 +79,7 @@
 DbusPassive::DbusPassive(
     sdbusplus::bus::bus& bus, const std::string& type, const std::string& id,
     std::unique_ptr<DbusHelperInterface> helper,
-    const struct SensorProperties& settings, bool failed,
-    const std::string& path,
+    const SensorProperties& settings, bool failed, const std::string& path,
     const std::shared_ptr<DbusPassiveRedundancy>& redundancy) :
     ReadInterface(),
     _signal(bus, getMatch(type, id).c_str(), dbusHandleSignal, this), _id(id),
@@ -103,7 +102,7 @@
 {
     std::lock_guard<std::mutex> guard(_lock);
 
-    struct ReadReturn r = {_value, _updated};
+    ReadReturn r = {_value, _updated};
 
     return r;
 }
diff --git a/dbus/dbuspassive.hpp b/dbus/dbuspassive.hpp
index 3b091dd..9065a29 100644
--- a/dbus/dbuspassive.hpp
+++ b/dbus/dbuspassive.hpp
@@ -49,7 +49,7 @@
     DbusPassive(sdbusplus::bus::bus& bus, const std::string& type,
                 const std::string& id,
                 std::unique_ptr<DbusHelperInterface> helper,
-                const struct SensorProperties& settings, bool failed,
+                const SensorProperties& settings, bool failed,
                 const std::string& path,
                 const std::shared_ptr<DbusPassiveRedundancy>& redundancy);
 
