diff --git a/ipaddress.hpp b/ipaddress.hpp
index 7ffb769..b0e77fb 100644
--- a/ipaddress.hpp
+++ b/ipaddress.hpp
@@ -11,10 +11,9 @@
 namespace network
 {
 
-using IPIfaces =
-    sdbusplus::server::object::object<
-        sdbusplus::xyz::openbmc_project::Network::server::IP,
-        sdbusplus::xyz::openbmc_project::Object::server::Delete>;
+using IPIfaces = sdbusplus::server::object::object<
+    sdbusplus::xyz::openbmc_project::Network::server::IP,
+    sdbusplus::xyz::openbmc_project::Object::server::Delete>;
 
 using IP = sdbusplus::xyz::openbmc_project::Network::server::IP;
 
@@ -28,42 +27,36 @@
  */
 class IPAddress : public IPIfaces
 {
-    public:
-        IPAddress() = delete;
-        IPAddress(const IPAddress&) = delete;
-        IPAddress& operator=(const IPAddress&) = delete;
-        IPAddress(IPAddress&&) = delete;
-        IPAddress& operator=(IPAddress &&) = delete;
-        virtual ~IPAddress() = default;
+  public:
+    IPAddress() = delete;
+    IPAddress(const IPAddress&) = delete;
+    IPAddress& operator=(const IPAddress&) = delete;
+    IPAddress(IPAddress&&) = delete;
+    IPAddress& operator=(IPAddress&&) = delete;
+    virtual ~IPAddress() = default;
 
-        /** @brief Constructor to put object onto bus at a dbus path.
-         *  @param[in] bus - Bus to attach to.
-         *  @param[in] objPath - Path to attach at.
-         *  @param[in] parent - Parent object.
-         *  @param[in] type - ipaddress type(v4/v6).
-         *  @param[in] ipAddress - ipadress.
-         *  @param[in] origin - origin of ipaddress(dhcp/static/SLAAC/LinkLocal).
-         *  @param[in] prefixLength - Length of prefix.
-         *  @param[in] gateway - gateway address.
-         */
-        IPAddress(sdbusplus::bus::bus& bus,
-                  const char* objPath,
-                  EthernetInterface& parent,
-                  IP::Protocol type,
-                  const std::string& ipAddress,
-                  IP::AddressOrigin origin,
-                  uint8_t prefixLength,
-                  const std::string& gateway);
+    /** @brief Constructor to put object onto bus at a dbus path.
+     *  @param[in] bus - Bus to attach to.
+     *  @param[in] objPath - Path to attach at.
+     *  @param[in] parent - Parent object.
+     *  @param[in] type - ipaddress type(v4/v6).
+     *  @param[in] ipAddress - ipadress.
+     *  @param[in] origin - origin of ipaddress(dhcp/static/SLAAC/LinkLocal).
+     *  @param[in] prefixLength - Length of prefix.
+     *  @param[in] gateway - gateway address.
+     */
+    IPAddress(sdbusplus::bus::bus& bus, const char* objPath,
+              EthernetInterface& parent, IP::Protocol type,
+              const std::string& ipAddress, IP::AddressOrigin origin,
+              uint8_t prefixLength, const std::string& gateway);
 
-        /** @brief Delete this d-bus object.
-         */
-        void delete_() override;
+    /** @brief Delete this d-bus object.
+     */
+    void delete_() override;
 
-    private:
-
-        /** @brief Parent Object. */
-        EthernetInterface& parent;
-
+  private:
+    /** @brief Parent Object. */
+    EthernetInterface& parent;
 };
 
 } // namespace network
