diff --git a/occ_pass_through.hpp b/occ_pass_through.hpp
index 384a065..a28eb6a 100644
--- a/occ_pass_through.hpp
+++ b/occ_pass_through.hpp
@@ -1,9 +1,9 @@
 #pragma once
 
-#include <string>
+#include <org/open_power/OCC/PassThrough/server.hpp>
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/object.hpp>
-#include <org/open_power/OCC/PassThrough/server.hpp>
+#include <string>
 
 namespace open_power
 {
@@ -21,69 +21,67 @@
  */
 class PassThrough : public Iface
 {
-    public:
-        PassThrough() = delete;
-        PassThrough(const PassThrough&) = delete;
-        PassThrough& operator=(const PassThrough&) = delete;
-        PassThrough(PassThrough&&) = default;
-        PassThrough& operator=(PassThrough&&) = default;
+  public:
+    PassThrough() = delete;
+    PassThrough(const PassThrough&) = delete;
+    PassThrough& operator=(const PassThrough&) = delete;
+    PassThrough(PassThrough&&) = default;
+    PassThrough& operator=(PassThrough&&) = default;
 
-        /** @brief Ctor to put pass-through d-bus object on the bus
-         *  @param[in] bus - Bus to attach to
-         *  @param[in] path - Path to attach at
-         */
-        PassThrough(sdbusplus::bus::bus& bus,
-                    const char* path);
+    /** @brief Ctor to put pass-through d-bus object on the bus
+     *  @param[in] bus - Bus to attach to
+     *  @param[in] path - Path to attach at
+     */
+    PassThrough(sdbusplus::bus::bus& bus, const char* path);
 
-        ~PassThrough()
-        {
-            closeDevice();
-        }
+    ~PassThrough()
+    {
+        closeDevice();
+    }
 
-        /** @brief Pass through command to OCC
-         *  @param[in] command - command to pass-through
-         *  @returns OCC response as an array
-         */
-        std::vector<std::int32_t>
-            send(std::vector<std::int32_t> command) override;
+    /** @brief Pass through command to OCC
+     *  @param[in] command - command to pass-through
+     *  @returns OCC response as an array
+     */
+    std::vector<std::int32_t> send(std::vector<std::int32_t> command) override;
 
-    private:
-        /** @brief Pass-through occ path on the bus */
-        std::string path;
+  private:
+    /** @brief Pass-through occ path on the bus */
+    std::string path;
 
-        /** @brief OCC device path
-         *  For now, here is the hard-coded mapping until
-         *  the udev rule is in.
-         *  occ0 --> /dev/occ1
-         *  occ1 --> /dev/occ2
-         *  ...
-         */
-        std::string devicePath;
+    /** @brief OCC device path
+     *  For now, here is the hard-coded mapping until
+     *  the udev rule is in.
+     *  occ0 --> /dev/occ1
+     *  occ1 --> /dev/occ2
+     *  ...
+     */
+    std::string devicePath;
 
-        /** @brief Indicates whether or not the OCC is currently active */
-        bool occActive = false;
+    /** @brief Indicates whether or not the OCC is currently active */
+    bool occActive = false;
 
-        /** brief file descriptor associated with occ device */
-        int fd = -1;
+    /** brief file descriptor associated with occ device */
+    int fd = -1;
 
-        /** @brief Subscribe to OCC Status signal
-         *
-         *  Once the OCC status gets to active, only then we will get /dev/occ2
-         *  populated and hence need to wait on that before opening that
-         */
-        sdbusplus::bus::match_t activeStatusSignal;
+    /** @brief Subscribe to OCC Status signal
+     *
+     *  Once the OCC status gets to active, only then we will get /dev/occ2
+     *  populated and hence need to wait on that before opening that
+     */
+    sdbusplus::bus::match_t activeStatusSignal;
 
-        /** Opens devicePath and populates file descritor */
-        void openDevice();
+    /** Opens devicePath and populates file descritor */
+    void openDevice();
 
-        /** Closed the fd associated with opened device */
-        void closeDevice();
+    /** Closed the fd associated with opened device */
+    void closeDevice();
 
-        /** @brief Callback function on OCC Status change signals
-         *
-         *  @param[in]  msg - Data associated with subscribed signal
-         */
-        void activeStatusEvent(sdbusplus::message::message& msg);
+    /** @brief Callback function on OCC Status change signals
+     *
+     *  @param[in]  msg - Data associated with subscribed signal
+     */
+    void activeStatusEvent(sdbusplus::message::message& msg);
 };
 
 } // namespace occ
