diff --git a/src/event_manager.hpp b/src/event_manager.hpp
index 7184852..a177739 100644
--- a/src/event_manager.hpp
+++ b/src/event_manager.hpp
@@ -17,38 +17,35 @@
  */
 class Manager
 {
-    public:
-        Manager() = default;
-        Manager(const Manager&) = delete;
-        Manager& operator=(const Manager&) = delete;
-        Manager(Manager&&) = default;
-        Manager& operator=(Manager&&) = default;
-        virtual ~Manager() = default;
+  public:
+    Manager() = default;
+    Manager(const Manager&) = delete;
+    Manager& operator=(const Manager&) = delete;
+    Manager(Manager&&) = default;
+    Manager& operator=(Manager&&) = default;
+    virtual ~Manager() = default;
 
-        /** @brief Create the D-Bus Event object.
-         *  @detail Add the objectPath,propertyName, propertyValue
-         *          as additional data of the event object.
-         *  @param[in] eventName - Name of the event.
-         *  @param[in] eventMessage - Message for the event.
-         *  @param[in] objectPath - Path of the D-Bus object.
-         *  @param[in] propertyName - Name of the property.
-         *  @param[in] propertyValue - Value of the property.
-         */
-        void create(
-            const std::string& eventName,
-            const std::string& eventMessage,
-            const std::string& objectPath,
-            const std::string& propertyName,
-            const std::string& propertyValue);
+    /** @brief Create the D-Bus Event object.
+     *  @detail Add the objectPath,propertyName, propertyValue
+     *          as additional data of the event object.
+     *  @param[in] eventName - Name of the event.
+     *  @param[in] eventMessage - Message for the event.
+     *  @param[in] objectPath - Path of the D-Bus object.
+     *  @param[in] propertyName - Name of the property.
+     *  @param[in] propertyValue - Value of the property.
+     */
+    void create(const std::string& eventName, const std::string& eventMessage,
+                const std::string& objectPath, const std::string& propertyName,
+                const std::string& propertyValue);
 
-    private:
-        using EventName = std::string;
-        /** @brief Queue of events */
-        using EventQueue = std::queue<std::unique_ptr<Entry>>;
+  private:
+    using EventName = std::string;
+    /** @brief Queue of events */
+    using EventQueue = std::queue<std::unique_ptr<Entry>>;
 
-        using EventMap = std::map<EventName, EventQueue>;
-        /** @brief Map of event name  and the list of events **/
-        EventMap eventMap;
+    using EventMap = std::map<EventName, EventQueue>;
+    /** @brief Map of event name  and the list of events **/
+    EventMap eventMap;
 };
 
 Manager& getManager();
