Index: Source/x11/XGServerWindow.m
===================================================================
--- Source/x11/XGServerWindow.m	(revision 25602)
+++ Source/x11/XGServerWindow.m	(working copy)
@@ -1190,8 +1190,14 @@
           // Window state
           generic.netstates.net_wm_state_atom = 
               XInternAtom(dpy, "_NET_WM_STATE", False);
+          generic.netstates.net_wm_state_add_atom = 
+              XInternAtom(dpy, "_NET_WM_STATE_ADD", False);
+          generic.netstates.net_wm_state_remove_atom = 
+              XInternAtom(dpy, "_NET_WM_STATE_REMOVE", False);
           generic.netstates.net_wm_state_skip_taskbar_atom = 
               XInternAtom(dpy, "_NET_WM_STATE_SKIP_TASKBAR", False);
+          generic.netstates.net_wm_state_skip_pager_atom = 
+              XInternAtom(dpy, "_NET_WM_STATE_SKIP_PAGER", False);
         }
       if (win1)
         {
@@ -3031,7 +3037,6 @@
 
 - (void) setwindowlevel: (int)level : (int)win
 {
-  static Atom net_wm_state_skip_pager = None;
   gswindow_device_t *window;
 
   window = WINDOW_WITH_TAG(win);
@@ -3074,7 +3079,7 @@
       if ((generic.wm & XGWM_EWMH) != 0)
         {
           int len;
-          long data[2];
+          long data[4];
           BOOL skipTaskbar = NO;
           
           data[0] = generic.wintypes.win_normal_atom;
@@ -3149,41 +3154,29 @@
  * This feature is only needed for window managers that cannot properly 
  * handle the window type set above.
  */
-          if (skipTaskbar)
-            {
-              static Atom net_wm_state_add = None;
+          data[0] = skipTaskbar ? generic.netstates.net_wm_state_add_atom 
+                                : generic.netstates.net_wm_state_remove_atom;
+          data[1] = generic.netstates.net_wm_state_skip_taskbar_atom;
+          data[2] = generic.netstates.net_wm_state_skip_pager_atom;
+          data[3] = 1;
+          len = 4;
 
-              if (net_wm_state_add == None)
-                net_wm_state_add = XInternAtom(dpy, "_NET_WM_STATE_ADD", False);
-              if (net_wm_state_skip_pager == None)
-                net_wm_state_skip_pager = XInternAtom(dpy, "_NET_WM_STATE_SKIP_PAGER",
-                                                      False);
-              [self _sendRoot: window->root 
-                    type: generic.netstates.net_wm_state_atom
-                    window: window->ident
-                    data0: net_wm_state_add
-                    data1: generic.netstates.net_wm_state_skip_taskbar_atom
-                    data2: net_wm_state_skip_pager
-                    data3: 1];
-            } 
-          else 
-            {
-              static Atom net_wm_state_remove = None;
-              
-              if (net_wm_state_remove == None)
-                net_wm_state_remove = XInternAtom(dpy, "_NET_WM_STATE_REMOVE", False);
-              if (net_wm_state_skip_pager == None)
-                net_wm_state_skip_pager = XInternAtom(dpy, "_NET_WM_STATE_SKIP_PAGER",
-                                                      False);
-              
-              [self _sendRoot: window->root 
-                    type: generic.netstates.net_wm_state_atom
-                    window: window->ident
-                    data0: net_wm_state_remove
-                    data1: generic.netstates.net_wm_state_skip_taskbar_atom
-                    data2: net_wm_state_skip_pager
-                    data3: 1];
-            }
+/* Warning ... X-bug .. when we specify 32bit data X actually expects data
+ * of type 'long' or 'unsigned long' even on machines where those types
+ * hold 64bit values.
+ */
+          XChangeProperty(dpy, window->ident, generic.netstates.net_wm_state_atom,
+                          XA_ATOM, 32, PropModeReplace, 
+                          (unsigned char *)&data, len);
+
+          [self _sendRoot: window->root 
+                type: generic.netstates.net_wm_state_atom
+                window: window->ident
+                data0: data[0]
+                data1: data[1]
+                data2: data[2]
+                data3: 1];
+
         }
       else if ((generic.wm & XGWM_GNOME) != 0)
         {
Index: Headers/x11/XGGeneric.h
===================================================================
--- Headers/x11/XGGeneric.h	(revision 25602)
+++ Headers/x11/XGGeneric.h	(working copy)
@@ -54,7 +54,10 @@
 
 typedef struct {
   Atom net_wm_state_atom;
+  Atom net_wm_state_add_atom;
+  Atom net_wm_state_remove_atom;
   Atom net_wm_state_skip_taskbar_atom;
+  Atom net_wm_state_skip_pager_atom;
 } XGWMNetStates;
 
 /*
