diff -u -r xfwm4-4.4.1.orig/src/client.c xfwm4-4.4.1/src/client.c
--- xfwm4-4.4.1.orig/src/client.c	2007-04-02 15:48:20.000000000 -0400
+++ xfwm4-4.4.1/src/client.c	2007-05-27 20:01:11.000000000 -0400
@@ -2013,6 +2013,11 @@
         myDisplayGetCursorResize(screen_info->display_info, CORNER_TOP_RIGHT));
     xfwmWindowCreate (screen_info,  c->visual, c->depth, c->frame,
         &c->title, None);
+    /* create the top side window AFTER the title window since they overlap
+       and the top side window should be on top */
+    xfwmWindowCreate (screen_info,  c->visual, c->depth, c->frame,
+	&c->sides[SIDE_TOP],
+	myDisplayGetCursorResize(screen_info->display_info, CORNER_COUNT + SIDE_TOP));
     for (i = 0; i < BUTTON_LAST; i++)
     {
         xfwmWindowCreate (screen_info,  c->visual, c->depth, c->frame,
@@ -2149,10 +2154,11 @@
     xfwmWindowDelete (&c->sides[SIDE_LEFT]);
     xfwmWindowDelete (&c->sides[SIDE_RIGHT]);
     xfwmWindowDelete (&c->sides[SIDE_BOTTOM]);
-    xfwmWindowDelete (&c->sides[CORNER_BOTTOM_LEFT]);
-    xfwmWindowDelete (&c->sides[CORNER_BOTTOM_RIGHT]);
-    xfwmWindowDelete (&c->sides[CORNER_TOP_LEFT]);
-    xfwmWindowDelete (&c->sides[CORNER_TOP_RIGHT]);
+    xfwmWindowDelete (&c->sides[SIDE_TOP]);
+    xfwmWindowDelete (&c->corners[CORNER_BOTTOM_LEFT]);
+    xfwmWindowDelete (&c->corners[CORNER_BOTTOM_RIGHT]);
+    xfwmWindowDelete (&c->corners[CORNER_TOP_LEFT]);
+    xfwmWindowDelete (&c->corners[CORNER_TOP_RIGHT]);
 
     xfwmPixmapFree (&c->appmenu[ACTIVE]);
     xfwmPixmapFree (&c->appmenu[INACTIVE]);
diff -u -r xfwm4-4.4.1.orig/src/client.h xfwm4-4.4.1/src/client.h
--- xfwm4-4.4.1.orig/src/client.h	2007-03-11 09:44:43.000000000 -0400
+++ xfwm4-4.4.1/src/client.h	2007-05-27 19:11:45.000000000 -0400
@@ -1,4 +1,4 @@
-/*      $Id: client.h 24716 2007-01-24 21:42:47Z olivier $
+/*      $Id: client.h,v 1.1 2007/05/27 23:11:30 vandry Exp vandry $
 
         This program is free software; you can redistribute it and/or modify
         it under the terms of the GNU General Public License as published by
@@ -223,7 +223,7 @@
     Window transient_for;
     Window *cmap_windows;
     xfwmWindow title;
-    xfwmWindow sides[3];
+    xfwmWindow sides[4];
     xfwmWindow corners[4];
     xfwmWindow buttons[BUTTON_COUNT];
     Window client_leader;
diff -u -r xfwm4-4.4.1.orig/src/display.c xfwm4-4.4.1/src/display.c
--- xfwm4-4.4.1.orig/src/display.c	2007-04-02 15:32:01.000000000 -0400
+++ xfwm4-4.4.1/src/display.c	2007-05-27 19:15:28.000000000 -0400
@@ -1,4 +1,4 @@
-/*      $Id: display.c 25371 2007-04-02 19:32:01Z olivier $
+/*      $Id: display.c,v 1.1 2007/05/27 23:11:50 vandry Exp vandry $
 
         This program is free software; you can redistribute it and/or modify
         it under the terms of the GNU General Public License as published by
@@ -308,6 +308,8 @@
         XCreateFontCursor (display->dpy, XC_top_side);
     display->resize_cursor[CORNER_COUNT + SIDE_BOTTOM] =
         XCreateFontCursor (display->dpy, XC_bottom_side);
+    display->resize_cursor[CORNER_COUNT + SIDE_TOP] =
+        XCreateFontCursor (display->dpy, XC_top_side);
 
     display->xfilter = NULL;
     display->screens = NULL;
@@ -347,7 +349,7 @@
         display->hostname = NULL;
     }
 
-    for (i = 0; i < 7; i++)
+    for (i = 0; i < 8; i++)
     {
         XFreeCursor (display->dpy, display->resize_cursor[i]);
         display->resize_cursor[i] = None;
diff -u -r xfwm4-4.4.1.orig/src/events.c xfwm4-4.4.1/src/events.c
--- xfwm4-4.4.1.orig/src/events.c	2007-04-02 15:48:20.000000000 -0400
+++ xfwm4-4.4.1/src/events.c	2007-05-27 20:04:48.000000000 -0400
@@ -1,4 +1,4 @@
-/*      $Id: events.c 25372 2007-04-02 19:48:21Z olivier $
+/*      $Id: events.c,v 1.1 2007/05/28 00:04:04 vandry Exp vandry $
 
         This program is free software; you can redistribute it and/or modify
         it under the terms of the GNU General Public License as published by
@@ -998,6 +998,11 @@
         {
             edgeButton (c, CORNER_COUNT + SIDE_BOTTOM, ev);
         }
+        else if ((win == MYWINDOW_XWINDOW (c->sides[SIDE_TOP]))
+            && (state == 0))
+        {
+            edgeButton (c, CORNER_COUNT + SIDE_TOP, ev);
+        }
         else if ((win == MYWINDOW_XWINDOW (c->sides[SIDE_LEFT]))
             && (state == 0))
         {
diff -u -r xfwm4-4.4.1.orig/src/frame.c xfwm4-4.4.1/src/frame.c
--- xfwm4-4.4.1.orig/src/frame.c	2007-04-02 15:32:01.000000000 -0400
+++ xfwm4-4.4.1/src/frame.c	2007-05-27 19:35:21.000000000 -0400
@@ -1,4 +1,4 @@
-/*      $Id: frame.c 25371 2007-04-02 19:32:01Z olivier $
+/*      $Id: frame.c,v 1.1 2007/05/27 23:15:43 vandry Exp vandry $
 
         This program is free software; you can redistribute it and/or modify
         it under the terms of the GNU General Public License as published by
@@ -249,7 +249,7 @@
 }
 
 static void
-frameCreateTitlePixmap (Client * c, int state, int left, int right, xfwmPixmap * pm)
+frameCreateTitlePixmap (Client * c, int state, int left, int right, xfwmPixmap * pm, xfwmPixmap * resize_pm)
 {
     ScreenInfo *screen_info;
     DisplayInfo *display_info;
@@ -283,6 +283,10 @@
         pm->mask = None;
         pm->width = 0;
         pm->height = 0;
+        resize_pm->pixmap = None;
+        resize_pm->mask = None;
+        resize_pm->width = 0;
+        resize_pm->height = 0;
         return;
     }
 
@@ -370,6 +374,7 @@
     }
 
     xfwmPixmapCreate (screen_info, pm, width, frameTop (c));
+    xfwmPixmapCreate (screen_info, resize_pm, width, frameTop (c));
     gpixmap = gdk_pixmap_foreign_new (pm->pixmap);
     gdk_drawable_set_colormap (gpixmap, gdk_screen_get_rgb_colormap (screen_info->gscr));
     gc = gdk_gc_new (gpixmap);
@@ -377,10 +382,12 @@
     if (w1 > 0)
     {
         xfwmPixmapFill (&screen_info->title[TITLE_1][state], pm, 0, 0, w1, frameTop (c));
+        xfwmPixmapFill (&screen_info->title_resize[TITLE_1][state], resize_pm, 0, 0, w1, frameTop (c));
         x = x + w1;
     }
 
     xfwmPixmapFill (&screen_info->title[TITLE_2][state], pm, x, 0, w2, frameTop (c));
+    xfwmPixmapFill (&screen_info->title_resize[TITLE_2][state], resize_pm, x, 0, w2, frameTop (c));
     x = x + w2;
 
     if (w3 > 0)
@@ -394,6 +401,7 @@
             voffset = screen_info->params->title_vertical_offset_inactive;
         }
         xfwmPixmapFill (&screen_info->title[TITLE_3][state], pm, x, 0, w3, frameTop (c));
+        xfwmPixmapFill (&screen_info->title_resize[TITLE_3][state], resize_pm, x, 0, w3, frameTop (c));
         title_x = hoffset + x;
         title_y = voffset + (frameTop (c) - logical_rect.height) / 2;
         if (title_y + logical_rect.height > frameTop (c))
@@ -427,11 +435,13 @@
         x = right - w4;
     }
     xfwmPixmapFill (&screen_info->title[TITLE_4][state], pm, x, 0, w4, frameTop (c));
+    xfwmPixmapFill (&screen_info->title_resize[TITLE_4][state], resize_pm, x, 0, w4, frameTop (c));
     x = x + w4;
 
     if (w5 > 0)
     {
         xfwmPixmapFill (&screen_info->title[TITLE_5][state], pm, x, 0, w5, frameTop (c));
+        xfwmPixmapFill (&screen_info->title_resize[TITLE_5][state], resize_pm, x, 0, w5, frameTop (c));
     }
     g_object_unref (G_OBJECT (gc));
     g_object_unref (G_OBJECT (gpixmap));
@@ -653,6 +663,12 @@
                                ShapeBounding, 0, 0, frame_pix->pm_sides[SIDE_BOTTOM].mask, ShapeSet);
         }
 
+        if (xfwmWindowVisible (&c->sides[SIDE_TOP]))
+        {
+            XShapeCombineMask (display_info->dpy, MYWINDOW_XWINDOW (c->sides[SIDE_TOP]),
+                               ShapeBounding, 0, 0, frame_pix->pm_sides[SIDE_TOP].mask, ShapeSet);
+        }
+
         if (xfwmWindowVisible (&c->corners[CORNER_BOTTOM_LEFT]))
         {
             XShapeCombineMask (display_info->dpy, MYWINDOW_XWINDOW (c->corners[CORNER_BOTTOM_LEFT]),
@@ -772,6 +788,14 @@
                                 MYWINDOW_XWINDOW (c->sides[SIDE_BOTTOM]), ShapeBounding, ShapeUnion);
         }
 
+        if (xfwmWindowVisible (&c->sides[SIDE_TOP]))
+        {
+            XShapeCombineShape (display_info->dpy, shape_win, ShapeBounding,
+                                screen_info->corners[CORNER_BOTTOM_LEFT][state].width,
+                                frameTop (c) - frameBottom (c),
+                                MYWINDOW_XWINDOW (c->sides[SIDE_TOP]), ShapeBounding, ShapeUnion);
+        }
+
         if (xfwmWindowVisible (&c->corners[CORNER_BOTTOM_LEFT]))
         {
             XShapeCombineShape (display_info->dpy, shape_win, ShapeBounding, 0,
@@ -830,6 +854,7 @@
     int state, i, j, x, button, left, right;
     int top_width, bottom_width, left_height, right_height;
     int button_x[BUTTON_COUNT];
+    int top_resize_position, top_resize_size;
     gboolean requires_clearing;
     gboolean width_changed;
     gboolean height_changed;
@@ -1010,9 +1035,11 @@
         xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_LEFT]);
         xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_RIGHT]);
         xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_BOTTOM]);
+        xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_TOP]);
 
         /* The title is always visible */
-        frameCreateTitlePixmap (c, state, left, right, &frame_pix.pm_title);
+        frameCreateTitlePixmap (c, state, left, right, &frame_pix.pm_title,
+		&frame_pix.pm_sides[SIDE_TOP]);
         xfwmWindowSetBG (&c->title, &frame_pix.pm_title);
         xfwmWindowShow (&c->title,
             frameTopLeftWidth (c, state), 0, top_width,
@@ -1037,6 +1064,7 @@
             xfwmWindowHide (&c->sides[SIDE_LEFT]);
             xfwmWindowHide (&c->sides[SIDE_RIGHT]);
             xfwmWindowHide (&c->sides[SIDE_BOTTOM]);
+            xfwmWindowHide (&c->sides[SIDE_TOP]);
             xfwmWindowHide (&c->corners[CORNER_TOP_LEFT]);
             xfwmWindowHide (&c->corners[CORNER_TOP_RIGHT]);
             xfwmWindowHide (&c->corners[CORNER_BOTTOM_LEFT]);
@@ -1085,6 +1113,20 @@
                 frameHeight (c) - frameBottom (c), bottom_width, frameBottom (c),
                 (requires_clearing | width_changed));
 
+	    if (screen_info->title_resize[TITLE_3][state].height > 1)
+	    {
+		xfwmWindowSetBG (&c->sides[SIDE_TOP],
+			&frame_pix.pm_sides[SIDE_TOP]);
+		xfwmWindowShow (&c->sides[SIDE_TOP],
+			screen_info->corners[CORNER_TOP_LEFT][state].width,
+			0, top_width, frameTop (c),
+			(requires_clearing | width_changed));
+	    }
+	    else
+	    {
+		xfwmWindowHide (&c->sides[SIDE_TOP]);
+	    }
+
             xfwmWindowShow (&c->corners[CORNER_TOP_LEFT], 0, 0,
                 frameTopLeftWidth (c, state),
                 screen_info->corners[CORNER_TOP_LEFT][state].height,
@@ -1117,6 +1159,7 @@
         xfwmPixmapFree (&frame_pix.pm_sides[SIDE_BOTTOM]);
         xfwmPixmapFree (&frame_pix.pm_sides[SIDE_LEFT]);
         xfwmPixmapFree (&frame_pix.pm_sides[SIDE_RIGHT]);
+        xfwmPixmapFree (&frame_pix.pm_sides[SIDE_TOP]);
     }
     else
     {
@@ -1124,7 +1167,7 @@
         {
             xfwmWindowHide (&c->title);
         }
-        for (i = 0; i < 3; i++)
+        for (i = 0; i < 4; i++)
         {
             if (MYWINDOW_XWINDOW (c->sides[i]) && xfwmWindowVisible (&c->sides[i]))
             {
diff -u -r xfwm4-4.4.1.orig/src/frame.h xfwm4-4.4.1/src/frame.h
--- xfwm4-4.4.1.orig/src/frame.h	2007-03-11 09:44:43.000000000 -0400
+++ xfwm4-4.4.1/src/frame.h	2007-05-27 19:35:34.000000000 -0400
@@ -1,4 +1,4 @@
-/*      $Id: frame.h 24716 2007-01-24 21:42:47Z olivier $
+/*      $Id: frame.h,v 1.1 2007/05/27 23:35:26 vandry Exp vandry $
 
         This program is free software; you can redistribute it and/or modify
         it under the terms of the GNU General Public License as published by
@@ -33,7 +33,7 @@
 struct _FramePixmap
 {
     xfwmPixmap pm_title;
-    xfwmPixmap pm_sides[3];
+    xfwmPixmap pm_sides[4];
 };
 typedef struct _FramePixmap FramePixmap;
 
diff -u -r xfwm4-4.4.1.orig/src/screen.h xfwm4-4.4.1/src/screen.h
--- xfwm4-4.4.1.orig/src/screen.h	2007-03-11 09:44:43.000000000 -0400
+++ xfwm4-4.4.1/src/screen.h	2007-05-27 19:36:25.000000000 -0400
@@ -1,4 +1,4 @@
-/*      $Id: screen.h 24291 2007-01-07 20:23:21Z olivier $
+/*      $Id: screen.h,v 1.1 2007/05/27 23:36:05 vandry Exp vandry $
 
         This program is free software; you can redistribute it and/or modify
         it under the terms of the GNU General Public License as published by
@@ -72,8 +72,9 @@
     XfwmColor title_shadow_colors[2];
     xfwmPixmap buttons[BUTTON_COUNT][6];
     xfwmPixmap corners[4][2];
-    xfwmPixmap sides[3][2];
+    xfwmPixmap sides[4][2];
     xfwmPixmap title[5][2];
+    xfwmPixmap title_resize[5][2];
 
     /* Per screen graphic contexts */
     GC box_gc;
diff -u -r xfwm4-4.4.1.orig/src/settings.c xfwm4-4.4.1/src/settings.c
--- xfwm4-4.4.1.orig/src/settings.c	2007-04-02 15:48:20.000000000 -0400
+++ xfwm4-4.4.1/src/settings.c	2007-05-27 19:39:36.000000000 -0400
@@ -1,4 +1,4 @@
-/*      $Id: settings.c 25372 2007-04-02 19:48:21Z olivier $
+/*      $Id: settings.c,v 1.1 2007/05/27 23:36:41 vandry Exp vandry $
 
         This program is free software; you can redistribute it and/or modify
         it under the terms of the GNU General Public License as published by
@@ -967,6 +967,7 @@
     gchar *font;
     PangoFontDescription *desc;
     guint i;
+    char imagename[30];
 
     widget = myScreenGetGtkWidget (screen_info);
     display_info = screen_info->display_info;
@@ -1136,26 +1137,22 @@
         "maximize-toggled-inactive", colsym);
     xfwmPixmapLoad (screen_info, &screen_info->buttons[MAXIMIZE_BUTTON][T_PRESSED], theme,
         "maximize-toggled-pressed", colsym);
-    xfwmPixmapLoad (screen_info, &screen_info->title[TITLE_1][ACTIVE], theme,
-        "title-1-active", colsym);
-    xfwmPixmapLoad (screen_info, &screen_info->title[TITLE_1][INACTIVE], theme,
-        "title-1-inactive", colsym);
-    xfwmPixmapLoad (screen_info, &screen_info->title[TITLE_2][ACTIVE], theme,
-        "title-2-active", colsym);
-    xfwmPixmapLoad (screen_info, &screen_info->title[TITLE_2][INACTIVE], theme,
-        "title-2-inactive", colsym);
-    xfwmPixmapLoad (screen_info, &screen_info->title[TITLE_3][ACTIVE], theme,
-        "title-3-active", colsym);
-    xfwmPixmapLoad (screen_info, &screen_info->title[TITLE_3][INACTIVE], theme,
-        "title-3-inactive", colsym);
-    xfwmPixmapLoad (screen_info, &screen_info->title[TITLE_4][ACTIVE], theme,
-        "title-4-active", colsym);
-    xfwmPixmapLoad (screen_info, &screen_info->title[TITLE_4][INACTIVE], theme,
-        "title-4-inactive", colsym);
-    xfwmPixmapLoad (screen_info, &screen_info->title[TITLE_5][ACTIVE], theme,
-        "title-5-active", colsym);
-    xfwmPixmapLoad (screen_info, &screen_info->title[TITLE_5][INACTIVE], theme,
-        "title-5-inactive", colsym);
+
+    for (i = 0; i < 5; i++)
+    {
+	sprintf(imagename, "title-%d-active", i+1);
+	xfwmPixmapLoad (screen_info, &screen_info->title[i][ACTIVE], theme,
+		imagename, colsym);
+	strcpy(imagename+7, "-inactive");
+	xfwmPixmapLoad (screen_info, &screen_info->title[i][INACTIVE], theme,
+		imagename, colsym);
+	strcpy(imagename+7, "-resize-active");
+	xfwmPixmapLoad (screen_info, &screen_info->title_resize[i][ACTIVE], theme,
+		imagename, colsym);
+	strcpy(imagename+7, "-resize-inactive");
+	xfwmPixmapLoad (screen_info, &screen_info->title_resize[i][INACTIVE], theme,
+		imagename, colsym);
+    }
 
     screen_info->box_gc = createGC (screen_info, "#FFFFFF", GXxor, NULL, 2, TRUE);
 
