diff --git a/src/compositor.c b/src/compositor.c
index 11879cd1431db6637b00a6edead0a97b6ba766a5..a894ecbd18ac64782f1ba31d7a75159112c72f98 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -2711,6 +2711,26 @@ compositorSetCompositeMode (DisplayInfo *display_info, gboolean use_manual_redir
 #endif /* HAVE_COMPOSITOR */
 }
 
+static void
+compositorSetCMSelection (ScreenInfo *screen_info, Window w)
+{
+    DisplayInfo *display_info;
+    gchar selection[32];
+    Atom a;
+    
+    g_return_if_fail (screen_info != NULL);
+
+    display_info = screen_info->display_info;
+    /* Newer EWMH standard property "_NET_WM_CM_S<n>" */
+    g_snprintf (selection, sizeof (selection), "_NET_WM_CM_S%d", screen_info->screen);
+    a = XInternAtom (display_info->dpy, selection, FALSE);
+    setXAtomManagerOwner (display_info, a, screen_info->xroot, w);
+
+    /* Older property "COMPOSITING_MANAGER" */
+    setAtomIdManagerOwner (display_info, COMPOSITING_MANAGER, screen_info->xroot, w);
+}
+
+
 gboolean
 compositorManageScreen (ScreenInfo *screen_info)
 {
@@ -2777,8 +2797,7 @@ compositorManageScreen (ScreenInfo *screen_info)
     screen_info->overlays = 0;
 
     XClearArea (display_info->dpy, screen_info->xroot, 0, 0, 0, 0, TRUE);
-    setAtomManagerOwner (display_info, COMPOSITING_MANAGER, 
-                         screen_info->xroot, screen_info->xfwm4_win);
+    compositorSetCMSelection (screen_info, screen_info->xfwm4_win);
 
     return TRUE;
 #else
@@ -2856,7 +2875,7 @@ compositorUnmanageScreen (ScreenInfo *screen_info)
     XCompositeUnredirectSubwindows (display_info->dpy, screen_info->xroot, 
                                     display_info->composite_mode);
 
-    setAtomManagerOwner (display_info, COMPOSITING_MANAGER, screen_info->xroot, None);
+    compositorSetCMSelection (screen_info, None);
 #endif /* HAVE_COMPOSITOR */
 }
 
diff --git a/src/hints.c b/src/hints.c
index 06b41a714a47b6d963583f7b5a9972c8a596b92a..faf64827c72a3aeb27bf38421d77b9c9ceac79b9 100644
--- a/src/hints.c
+++ b/src/hints.c
@@ -1115,30 +1115,29 @@ getOpacityLock (DisplayInfo *display_info, Window window)
 }
 
 gboolean
-setAtomManagerOwner (DisplayInfo *display_info, int atom_id, Window root, Window w)
+setXAtomManagerOwner (DisplayInfo *display_info, Atom atom, Window root, Window w)
 {
     XClientMessageEvent ev;
     Time server_time;
     int status;
-    
-    g_return_val_if_fail (((atom_id >= 0) && (atom_id < NB_ATOMS)), FALSE);
+
+    g_return_val_if_fail (root != None, FALSE);
+
     server_time = myDisplayGetCurrentTime (display_info);
-    status = XSetSelectionOwner (display_info->dpy, 
-                                 display_info->atoms[atom_id],
-                                 w, server_time);
+    status = XSetSelectionOwner (display_info->dpy, atom, w, server_time);
 
     if ((status == BadAtom) || (status == BadWindow))
     {
         return FALSE;
     }
 
-    if (XGetSelectionOwner (display_info->dpy, display_info->atoms[atom_id]) == w)
+    if (XGetSelectionOwner (display_info->dpy, atom) == w)
     {
         ev.type = ClientMessage;
-        ev.message_type = display_info->atoms[atom_id];
+        ev.message_type = atom;
         ev.format = 32;
         ev.data.l[0] = server_time;
-        ev.data.l[1] = display_info->atoms[atom_id];
+        ev.data.l[1] = atom;
         ev.data.l[2] = w;
         ev.data.l[3] = 0;
         ev.data.l[4] = 0;
@@ -1152,6 +1151,14 @@ setAtomManagerOwner (DisplayInfo *display_info, int atom_id, Window root, Window
     return FALSE;
 }
 
+gboolean
+setAtomIdManagerOwner (DisplayInfo *display_info, int atom_id, Window root, Window w)
+{
+    g_return_val_if_fail (((atom_id >= 0) && (atom_id < NB_ATOMS)), FALSE);
+
+    return setXAtomManagerOwner(display_info, display_info->atoms[atom_id], root, w);
+}
+
 #ifdef ENABLE_KDE_SYSTRAY_PROXY
 gboolean
 checkKdeSystrayWindow(DisplayInfo *display_info, Window window)
diff --git a/src/hints.h b/src/hints.h
index bdb10bc15c5d90d754424b26e8c8e5bc724f9253..90060ac78aa024b454b2edf19e0153b2cc33b0bf 100644
--- a/src/hints.h
+++ b/src/hints.h
@@ -178,7 +178,8 @@ gboolean getKDEIcon (DisplayInfo *, Window, Pixmap *, Pixmap *);
 gboolean getRGBIconData (DisplayInfo *, Window, unsigned long **, unsigned long *);
 gboolean getOpacity (DisplayInfo *, Window, guint *);
 gboolean getOpacityLock (DisplayInfo *, Window);
-gboolean setAtomManagerOwner (DisplayInfo *, int, Window , Window);
+gboolean setAtomIdManagerOwner (DisplayInfo *, int, Window , Window);
+gboolean setXAtomManagerOwner (DisplayInfo *, Atom, Window , Window);
 
 #ifdef ENABLE_KDE_SYSTRAY_PROXY
 gboolean checkKdeSystrayWindow(DisplayInfo *, Window);
diff --git a/src/main.c b/src/main.c
index 3949587dfb15437344ba50a664578710fd3d248a..091c0cd55c43b9acfc9c84624496ed65a307949f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -461,7 +461,7 @@ initialize (int argc, char **argv, gint compositor_mode)
                    compositing manager (used by WM tweaks to determine whether or not
                    show the "compositor" tab.
                  */
-                setAtomManagerOwner (display_info, XFWM4_COMPOSITING_MANAGER, 
+                setAtomIdManagerOwner (display_info, XFWM4_COMPOSITING_MANAGER, 
                                      screen_info->xroot, screen_info->xfwm4_win);
             }
         }