diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
index ec1d5b0..caeb649 100644
--- a/daemon/gdm-session-worker.c
+++ b/daemon/gdm-session-worker.c
@@ -1722,6 +1722,8 @@ gdm_session_worker_accredit_user (GdmSessionWorker  *worker,
         ret = TRUE;
 
  out:
+        g_free (home);
+        g_free (shell);
         if (ret) {
                 g_debug ("GdmSessionWorker: state ACCREDITED");
                 ret = TRUE;
@@ -2970,11 +2972,41 @@ gdm_session_worker_finalize (GObject *object)
 
         gdm_session_worker_unwatch_child (worker);
 
+        if (worker->priv->service != NULL) {
+                g_free (worker->priv->service);
+                worker->priv->service = NULL;
+        }
+
+        if (worker->priv->x11_display_name != NULL) {
+                g_free (worker->priv->x11_display_name);
+                worker->priv->x11_display_name = NULL;
+        }
+
+        if (worker->priv->x11_authority_file != NULL) {
+                g_free (worker->priv->x11_authority_file);
+                worker->priv->x11_authority_file = NULL;
+        }
+
+        if (worker->priv->display_device != NULL) {
+                g_free (worker->priv->display_device);
+                worker->priv->display_device = NULL;
+        }
+
+        if (worker->priv->hostname != NULL) {
+                g_free (worker->priv->hostname);
+                worker->priv->hostname = NULL;
+        }
+
         if (worker->priv->username != NULL) {
                 g_free (worker->priv->username);
                 worker->priv->username = NULL;
         }
 
+        if (worker->priv->server_address != NULL) {
+                g_free (worker->priv->server_address);
+                worker->priv->server_address = NULL;
+        }
+
         if (worker->priv->arguments != NULL) {
                 g_strfreev (worker->priv->arguments);
                 worker->priv->arguments = NULL;
