diff --git a/po/xfwm4.pot b/po/xfwm4.pot
index eb509e9594d1ac16d590526653bc527996b183e9..36057d2df30f895af8962bbab7c18bc8c51d3d67 100644
--- a/po/xfwm4.pot
+++ b/po/xfwm4.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-09-27 00:12+0200\n"
+"POT-Creation-Date: 2004-09-27 23:39+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -592,7 +592,7 @@ msgstr ""
 msgid "Compose shortcut for command :"
 msgstr ""
 
-#: src/events.c:1707
+#: src/events.c:1704
 #, c-format
 msgid "%s: Operation not supported (yet)\n"
 msgstr ""
@@ -602,27 +602,27 @@ msgstr ""
 msgid "%s: Segmentation fault"
 msgstr ""
 
-#: src/main.c:404
+#: src/main.c:414
 #, c-format
 msgid "%s: Another Window Manager is already running"
 msgstr ""
 
-#: src/main.c:409
+#: src/main.c:419
 #, c-format
 msgid "%s: Missing data from default files"
 msgstr ""
 
-#: src/main.c:419
+#: src/main.c:429
 #, c-format
 msgid "%s: Failed to enter daemon mode: %s"
 msgstr ""
 
-#: src/main.c:427
+#: src/main.c:437
 #, c-format
 msgid "%s: Failed to create new process: %s"
 msgstr ""
 
-#: src/main.c:448
+#: src/main.c:458
 #, c-format
 msgid "%s: Unknown error occured"
 msgstr ""
diff --git a/src/compositor.c b/src/compositor.c
index c05c704f61a485a43a6101bfedb062c34e41742c..404d94d22f837d1b0256a30a98f6c4f9031df8fe 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -968,7 +968,7 @@ add_damage (ScreenInfo *screen_info, XserverRegion damage)
 }
 
 static void
-free_win_data (CWindow *cw)
+free_win_data (CWindow *cw, gboolean delete)
 {
 #if HAVE_NAME_WINDOW_PIXMAP
     if (cw->name_window_pixmap)
@@ -995,7 +995,7 @@ free_win_data (CWindow *cw)
         XRenderFreePicture (myScreenGetXDisplay (cw->screen_info), cw->shadowPict);
         cw->shadowPict = None;
     }
-    if (cw->damage != None)
+    if ((delete) && (cw->damage != None))
     {
         XDamageDestroy (myScreenGetXDisplay (cw->screen_info), cw->damage);
         cw->damage = None;
@@ -1018,6 +1018,11 @@ free_win_data (CWindow *cw)
         XFixesDestroyRegion (myScreenGetXDisplay (cw->screen_info), cw->borderClip);
         cw->borderClip = None;
     }
+    
+    if (delete)
+    {
+        g_free (cw);
+    }
 }
 
 static void
@@ -1168,7 +1173,7 @@ unmap_win (CWindow *cw)
         add_damage (screen_info, cw->extents);
         cw->extents = None;
     }
-    free_win_data (cw);  
+    free_win_data (cw, FALSE);  
     screen_info->clipChanged = TRUE;
 }
 
@@ -1351,9 +1356,8 @@ destroy_win (ScreenInfo *screen_info, Window id, gboolean gone)
         {
             unmap_win (cw);
         }
-        free_win_data (cw);
         screen_info->cwindows = g_list_remove (screen_info->cwindows, (gconstpointer) cw);
-        g_free (cw);
+        free_win_data (cw, TRUE);
         TRACE ("window 0x%lx removed", id);    
     }
 }
@@ -1862,8 +1866,7 @@ compositorUnmanageScreen (ScreenInfo *screen_info)
     for (index = screen_info->cwindows; index; index = g_list_next (index))
     {
         CWindow *cw2 = (CWindow *) index->data;
-        free_win_data (cw2);
-        g_free (cw2);
+        free_win_data (cw2, TRUE);
         i++;
     }
     g_list_free (screen_info->cwindows);