diff --git a/helpers/DATA/mate-session-manager/mate-wm b/helpers/DATA/mate-session-manager/mate-wm
new file mode 100755
index 0000000000000000000000000000000000000000..d819672afdfbfd5477098482d056bbe44b23e68c
--- /dev/null
+++ b/helpers/DATA/mate-session-manager/mate-wm
@@ -0,0 +1,161 @@
+#!/bin/sh
+
+# The user can specify his prefered WM by setting the WINDOW_MANAGER
+# environment variable.
+#
+# If this is not set, we search a list of known windowmanagers and use
+# the first one that is found in the users's PATH
+#
+# NOTE: DON'T USE THIS.  Please have your window manager install
+# a desktop file and change the mateconf key
+# /desktop/mate/session/required_components/windowmanager
+
+# sm-client-id value
+SMID=
+# default-wm value
+DEFWM=
+
+#read in the arguments
+GET=
+for n in "$@" ; do
+  case "$GET" in
+    smid)
+      SMID=$n
+      GET=
+      ;;
+    defwm)
+      DEFWM=$n
+      GET=
+      ;;
+    *)
+      case "$n" in
+        --sm-client-id)
+          GET=smid
+          ;;
+        --default-wm)
+          GET=defwm
+          ;;
+      esac
+      ;;
+  esac
+done
+
+# WINDOW_MANAGER overrides all
+if [ -z "$WINDOW_MANAGER" ] ; then
+    WINDOW_MANAGER=`gsettings get org.mate.session.required-components windowmanager 2> /dev/null`
+fi
+
+# Migrate compiz to compiz-manager if possible and needed
+if [ "x$WINDOW_MANAGER" = "xcompiz" -o "x$DEFWM" = "xcompiz" ]; then
+  which compiz-manager > /dev/null 2>&1
+  if [ $? -eq 0 ]; then
+    if [ "x$WINDOW_MANAGER" = "xcompiz" ]; then
+      WINDOW_MANAGER="compiz-manager"
+    fi
+    if [ "x$DEFWM" = "xcompiz" ]; then
+      DEFWM="compiz-manager"
+    fi
+  fi
+fi
+
+# Avoid looping if the session configuration tells us to use mate-wm or if
+# the user forces mate-wm via WINDOW_MANAGER
+if [ "x$WINDOW_MANAGER" = "xmate-wm" ]; then
+  WINDOW_MANAGER=""
+fi
+
+if [ -z "$WINDOW_MANAGER" ] ; then
+  # Create a list of window manager we can handle, trying to only use the
+  # compositing ones when it makes sense
+
+  KNOWN_WM="sawfish sawmill enlightenment icewm wmaker fvwm2 qvwm fvwm twm kwm"
+  # marco is still the default wm in MATE
+  KNOWN_WM="marco $KNOWN_WM"
+
+  xdpyinfo 2> /dev/null | grep -q "^ *Composite$" 2> /dev/null
+  IS_X_COMPOSITED=$?
+  if [ $IS_X_COMPOSITED -eq 0 ] ; then
+    KNOWN_WM="marco-compton mutter compiz-manager compiz beryl $KNOWN_WM"
+  fi
+
+  OLDIFS=$IFS
+  if [ -z "$DEFWM" -o "x$DEFWM" = "xmate-wm" ]; then
+
+    for wm in $KNOWN_WM ; do
+      IFS=":"
+      for dir in $PATH ; do
+        if [ -x "$dir/$wm" ] ; then
+          WINDOW_MANAGER="$dir/$wm"
+          break 2
+        fi
+      done
+      IFS=$OLDIFS
+    done
+
+  else
+    WINDOW_MANAGER=$DEFWM
+  fi
+  IFS=$OLDIFS
+fi
+
+# If no window manager can be found, we default to xterm
+
+if [ -z "$WINDOW_MANAGER" ] ; then
+  echo "WARNING: No window manager can be found."
+  WINDOW_MANAGER=xterm
+fi
+
+# Now create options OPT1, OPT2 and OPT3 based on the windowmanager used
+OPT1=
+OPT2=
+OPT3=
+OPT4=
+if [ ! -z "$SMID" ] ; then
+  case `basename $WINDOW_MANAGER` in
+    sawfish|sawmill|marco|mutter)
+      OPT1=--sm-client-id=$SMID
+      ;;
+    openbox|enlightenment|e16)
+      OPT1=--sm-client-id
+      OPT2=$SMID
+      ;;
+    twm)
+      OPT1=-clientId
+      OPT2=$SMID
+      ;;
+    lwm)
+      OPT1=-s
+      OPT2=$SMID
+      ;;
+    fvwm)
+      OPT1=-i
+      OPT2=$SMID
+      ;;
+    compiz|compiz-manager)
+      OPT1=--sm-client-id
+      OPT2=$SMID
+      ;;
+    beryl)
+      OPT1=--sm-client-id
+      OPT2=$SMID
+      ;;
+    #FIXME: add all other windowmanagers here with their proper options
+  esac
+fi
+
+case `basename $WINDOW_MANAGER` in
+  compiz)
+    #commented lines cause high cpu usage
+    #export LIBGL_ALWAYS_INDIRECT=1
+    gtk-window-decorator &
+    #OPT3=glib
+    #OPT4=mateconf
+    ;;
+  beryl)
+    emerald &
+    ;;
+esac
+
+exec $WINDOW_MANAGER $OPT1 $OPT2 $OPT3 $OPT4
+
+echo "ERROR: No window manager could run!"
diff --git a/helpers/make-mate-session-manager b/helpers/make-mate-session-manager
new file mode 100644
index 0000000000000000000000000000000000000000..cfce16b6e71f8e5087a5512c1e957065c9fa3db7
--- /dev/null
+++ b/helpers/make-mate-session-manager
@@ -0,0 +1,29 @@
+#!/bin/sh
+#
+#    Copyright (C) 2017  Ruben Rodriguez <ruben@trisquel.info>
+#
+#    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
+#    the Free Software Foundation; either version 2 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program; if not, write to the Free Software
+#    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+#
+
+VERSION=1
+
+. ./config
+
+cp $DATA/mate-wm data/mate-wm
+
+changelog "Improved composition handling"
+
+compile
+