diff --git a/src/xfpm-manager.c b/src/xfpm-manager.c
index 3efc8ba1225f59141a27277867a260fe4a0d7fe0..dae407fc3bedb7e14bdf3ccb81d1e8506c35b868 100644
--- a/src/xfpm-manager.c
+++ b/src/xfpm-manager.c
@@ -590,7 +590,7 @@ xfpm_manager_set_idle_alarm (XfpmManager *manager)
 static gchar*
 xfpm_manager_get_systemd_events(XfpmManager *manager)
 {
-  GSList *events = NULL;
+  GSList *events = NULL, *current_event;
   gchar *what = g_strdup ("");
   gboolean logind_handle_power_key, logind_handle_suspend_key, logind_handle_hibernate_key, logind_handle_lid_switch;
 
@@ -610,15 +610,21 @@ xfpm_manager_get_systemd_events(XfpmManager *manager)
   if (!logind_handle_lid_switch)
     events = g_slist_append(events, "handle-lid-switch");
 
-  while (events != NULL)
+  if (events != NULL)
   {
-    if ( g_strcmp0 (what, "") == 0 )
-      what = g_strdup ( (gchar *) events->data );
-    else
-      what = g_strconcat (what, ":", (gchar *) events->data, NULL);
-    events = g_slist_next (events);
+    g_free(what);
+    current_event = events;
+
+    what = g_strdup ( (gchar *) current_event->data );
+    while ((current_event = g_slist_next (current_event)))
+    {
+      gchar *what_temp = g_strconcat (what, ":", (gchar *) current_event->data, NULL);
+      g_free(what);
+      what = what_temp;
+    }
+
+    g_slist_free(events);
   }
-  g_slist_free(events);
 
   return what;
 }