diff --git a/occ_presence.hpp b/occ_presence.hpp
index e0bd3ad..9e66acc 100644
--- a/occ_presence.hpp
+++ b/occ_presence.hpp
@@ -13,39 +13,37 @@
  */
 class Presence : public Error
 {
-    public:
-        Presence() = delete;
-        Presence(const Presence&) = delete;
-        Presence& operator=(const Presence&) = delete;
-        Presence(Presence&&) = default;
-        Presence& operator=(Presence&&) = default;
+  public:
+    Presence() = delete;
+    Presence(const Presence&) = delete;
+    Presence& operator=(const Presence&) = delete;
+    Presence(Presence&&) = default;
+    Presence& operator=(Presence&&) = default;
 
-        /** @brief Constructs the Presence object
-         *
-         *  @param[in] event    - Reference to sd_event unique_ptr
-         *  @param[in] file     - File used by driver to communicate errors
-         *  @param[in] mgr      - OCC manager instance
-         *  @param[in] callBack - Optional function callback on error condition
-         */
-        Presence(EventPtr& event,
-              const fs::path& file,
-              const Manager& mgr,
-              std::function<void(bool)> callBack = nullptr) :
-            Error(event, file, callBack),
-            manager(mgr)
-        {
-            // Nothing to do here.
-        }
+    /** @brief Constructs the Presence object
+     *
+     *  @param[in] event    - Reference to sd_event unique_ptr
+     *  @param[in] file     - File used by driver to communicate errors
+     *  @param[in] mgr      - OCC manager instance
+     *  @param[in] callBack - Optional function callback on error condition
+     */
+    Presence(EventPtr& event, const fs::path& file, const Manager& mgr,
+             std::function<void(bool)> callBack = nullptr) :
+        Error(event, file, callBack),
+        manager(mgr)
+    {
+        // Nothing to do here.
+    }
 
-    private:
-        /** Store the manager instance to enable getting number of OCCs */
-        const Manager& manager;
+  private:
+    /** Store the manager instance to enable getting number of OCCs */
+    const Manager& manager;
 
-        /** @brief When the error event is received, analyzes it
-         *         and makes a callback to error handler if the
-         *         content denotes an error condition
-         */
-        void analyzeEvent() override;
+    /** @brief When the error event is received, analyzes it
+     *         and makes a callback to error handler if the
+     *         content denotes an error condition
+     */
+    void analyzeEvent() override;
 };
 
 } // namespace occ
