diff -urNX xclude.hd orig/hildon-desktop-2.2.138/debian/control hildon-desktop-2.2.138/debian/control
--- orig/hildon-desktop-2.2.138/debian/control	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/debian/control	2010-05-25 20:47:06.000000000 +0300
@@ -19,3 +19,10 @@
 Depends: hildon-desktop (= ${Source-Version})
 Description: Debug symbols for Hildon desktop
  Debug symbols for Hildon desktop.
+
+Package: modified-hildon-desktop
+Section: user/system
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, hildon-theme | hildon-theme-devel (>= 5.10.19-1), hildon-icons | sdk-default-icons, gconf2, osso-af-startup, maemo-af-desktop-l10n-mr0 | maemo-af-desktop-l10n-mr, theme-config, ke-recv-extra, clipboard-manager, ke-recv-l10n-mr | ke-recv-l10n-mr0, libgtk2.0-0 (>= 2:2.14.7-1maemo15) hildon-desktop (>=2.2.135-2), rescue-boot, wget
+Description: Modified Hildon desktop for Fremantle
+ Hildon desktop for Fremantle.
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/debian/files hildon-desktop-2.2.138/debian/files
--- orig/hildon-desktop-2.2.138/debian/files	1970-01-01 02:00:00.000000000 +0200
+++ hildon-desktop-2.2.138/debian/files	2010-05-25 21:04:25.000000000 +0300
@@ -0,0 +1,3 @@
+hildon-desktop_2.2.138-1+0m5_armel.deb x11 optional
+hildon-desktop-dbg_2.2.138-1+0m5_armel.deb devel extra
+modified-hildon-desktop_2.0_armel.deb user/system optional
Binary files orig/hildon-desktop-2.2.138/debian/hildon-desktop-dbg/usr/lib/debug/usr/bin/hildon-desktop.launch and hildon-desktop-2.2.138/debian/hildon-desktop-dbg/usr/lib/debug/usr/bin/hildon-desktop.launch differ
Binary files orig/hildon-desktop-2.2.138/debian/hildon-desktop-dbg/usr/lib/debug/usr/lib/gtk-2.0/modules/libhda.so and hildon-desktop-2.2.138/debian/hildon-desktop-dbg/usr/lib/debug/usr/lib/gtk-2.0/modules/libhda.so differ
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/debian/hildon-desktop.postinst hildon-desktop-2.2.138/debian/hildon-desktop.postinst
--- orig/hildon-desktop-2.2.138/debian/hildon-desktop.postinst	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/debian/hildon-desktop.postinst	2010-05-25 20:58:02.000000000 +0300
@@ -4,6 +4,7 @@
     configure)
 
       gconf-schemas --register hildon-desktop-views.schemas
+      gconf-schemas --register hildon-desktop-keys.schemas
     ;;
 
     abort-upgrade|abort-remove|abort-deconfigure)
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/debian/modified-hildon-desktop.changelog hildon-desktop-2.2.138/debian/modified-hildon-desktop.changelog
--- orig/hildon-desktop-2.2.138/debian/modified-hildon-desktop.changelog	1970-01-01 02:00:00.000000000 +0200
+++ hildon-desktop-2.2.138/debian/modified-hildon-desktop.changelog	2010-05-25 20:46:18.000000000 +0300
@@ -0,0 +1,104 @@
+hildon-desktop (2.0) unstable; urgency=low
+
+  * Rebased to hildon-desktop-2.2.135 (for PR1.2)
+  * Now uninstall should really work.
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Wed, 24 Mar 2010 16:42:24 +0200
+
+hildon-desktop (1.14) unstable; urgency=low
+
+  * Fix gconf loop bug with updating views/current.
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Fri, 19 Mar 2010 03:16:07 +0200
+
+hildon-desktop (1.13) unstable; urgency=low
+
+  * Found another place where desktops were limited to 4.
+  * Setting gconf key views/current now switches the current view.
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Thu, 18 Mar 2010 16:57:18 +0200
+
+hildon-desktop (1.12) unstable; urgency=low
+
+  * ctrl_backspace_in_tasknav == 3 or 4 work again.
+  * Removed workaround for postinst.
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Tue,  9 Mar 2010 14:23:12 +0200
+
+hildon-desktop (1.11) unstable; urgency=low
+
+  * Try to correct shift/fn after control behaviour.
+  * Workaround for postinst saving original hildon-desktop bug.
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Sat, 20 Feb 2010 02:05:27 +0200
+
+hildon-desktop (1.10) unstable; urgency=low
+
+  * Chaneg depenedency on hildon-desktop to use >=, instead of =.
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Fri, 12 Feb 2010 21:09:56 +0200
+
+hildon-desktop (1.09) unstable; urgency=low
+
+  * Make sure notifications are always last in alt-tab mode. 
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Sun,  7 Feb 2010 01:03:19 +0200
+
+hildon-desktop (1.08) unstable; urgency=low
+
+  * Use keyval instead of keycode for arrows (for two-arrows keyboards).
+  * Only run home specific keyboard code when in home. 
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Mon,  1 Feb 2010 22:39:50 +0200
+
+hildon-desktop (1.07) unstable; urgency=low
+
+  * Dont click thumbnail when navigator not active.
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Thu, 28 Jan 2010 22:58:22 +0200
+
+hildon-desktop (1.06) unstable; urgency=low
+
+  * Add an option for locking desktop.
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Tue, 26 Jan 2010 22:41:04 +0200
+
+hildon-desktop (1.05) unstable; urgency=low
+
+  * Increased max home views to 9.
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Tue, 26 Jan 2010 16:45:58 +0200
+
+hildon-desktop (1.04) unstable; urgency=low
+
+  * Implement Alt-Tab like option for CTRL-Backspace.
+  * Fix memory leak in hd_task_navigator_activate().
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Mon, 25 Jan 2010 18:36:28 +0200
+
+hildon-desktop (1.03) unstable; urgency=low
+
+  * If using FN for shortcuts, capture also H,P,N,X.
+  * Change section to make visible in H-A-M.
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Fri, 22 Jan 2010 22:25:01 +0200
+
+hildon-desktop (1.02) unstable; urgency=low
+
+  * Include rescue-boot script.
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Tue, 19 Jan 2010 18:56:49 +0200
+
+hildon-desktop (1.01) unstable; urgency=low
+
+  * Allow (configuration option) using FN instead of SHIFT in shortcuts.
+  * CTRL+key shortcuts now configurable, since they conflict with other uses.
+  * Fix "shift remembered after returning to task navigator" bug.
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Tue, 19 Jan 2010 13:15:01 +0200
+
+hildon-desktop (1.0) unstable; urgency=low
+
+  * Initial release.
+
+ -- Matan Ziv-Av <matan@svgalib.org>  Sun, 17 Jan 2010 17:03:47 +0200
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/debian/modified-hildon-desktop.install hildon-desktop-2.2.138/debian/modified-hildon-desktop.install
--- orig/hildon-desktop-2.2.138/debian/modified-hildon-desktop.install	1970-01-01 02:00:00.000000000 +0200
+++ hildon-desktop-2.2.138/debian/modified-hildon-desktop.install	2010-05-25 20:46:18.000000000 +0300
@@ -0,0 +1,2 @@
+debian/tmp/usr/bin
+
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/debian/modified-hildon-desktop.postinst hildon-desktop-2.2.138/debian/modified-hildon-desktop.postinst
--- orig/hildon-desktop-2.2.138/debian/modified-hildon-desktop.postinst	1970-01-01 02:00:00.000000000 +0200
+++ hildon-desktop-2.2.138/debian/modified-hildon-desktop.postinst	2010-05-25 20:46:18.000000000 +0300
@@ -0,0 +1,32 @@
+#! /bin/sh
+
+case "$1" in
+    configure)
+
+      grep usr/bin/hildon-desktop.launch /var/lib/dpkg/info/hildon-desktop.md5sums > /tmp/mhd.a1
+      a=`md5sum /usr/bin/hildon-desktop.launch | cut -d' ' -f 1`
+      if grep -q $a /tmp/mhd.a1 ; then
+	      mv /usr/bin/hildon-desktop.launch /usr/bin/hildon-desktop.launch.orig
+      else
+	      mv /usr/bin/hildon-desktop.launch /usr/bin/hildon-desktop.launch1
+      fi
+# Workaround for bug in saving original hildon-desktop.launch.
+# Should be removed in the next version.
+      if [ ! -f /usr/bin/hildon-desktop.launch.orig ] ; then
+    	wget -o /dev/null -O /usr/bin/hildon-desktop.launch.orig http://my.arava.co.il/~matan/770/n900/hildon-desktop.launch.orig
+      fi
+      mv /usr/bin/modified-hildon-desktop /usr/bin/hildon-desktop.launch
+      gconf-schemas --register hildon-desktop-keys.schemas
+      killall hildon-desktop
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+
+    ;;
+
+    *)
+        echo "postinst called with unknown argument \`$1'" >&2
+    ;;
+esac
+
+exit 0
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/debian/modified-hildon-desktop.prerm hildon-desktop-2.2.138/debian/modified-hildon-desktop.prerm
--- orig/hildon-desktop-2.2.138/debian/modified-hildon-desktop.prerm	1970-01-01 02:00:00.000000000 +0200
+++ hildon-desktop-2.2.138/debian/modified-hildon-desktop.prerm	2010-05-25 20:46:18.000000000 +0300
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+case "$1" in
+	    remove)
+		if [ -f /usr/bin/hildon-desktop.launch.orig ] ; then
+		 rm -f /usr/bin/hildon-desktop.launch
+		 mv /usr/bin/hildon-desktop.launch.orig /usr/bin/hildon-desktop.launch
+		 /etc/init.d/hildon-desktop stop
+		 sleep 3
+		 /etc/init.d/hildon-desktop start
+		fi
+		;;
+	    upgrade)
+		;;
+	    deconfigure)
+		;;
+	    failed-upgrade)
+		;;
+	    *)
+		echo "prerm called with unknown argument \`$1'" >&2
+	        ;;
+esac
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/debian/rules hildon-desktop-2.2.138/debian/rules
--- orig/hildon-desktop-2.2.138/debian/rules	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/debian/rules	2010-05-25 20:46:18.000000000 +0300
@@ -27,6 +27,8 @@
 
 DEB_DH_STRIP_ARGS := --dbg-package=hildon-desktop
 DEB_DH_INSTALLINIT_ARGS := --no-start -- start 51 2 3 4 . stop 20 0 1 5 6 .
+DEB_DH_GENCONTROL_ARGS += -ldebian/modified-hildon-desktop.changelog
+
 
 makebuilddir/hildon-desktop::
 	[ -f configure ] || ./autogen.sh
@@ -41,3 +43,11 @@
 binary-post-install/hildon-desktop::
 	rm -rf "debian/$(cdbs_curpkg)/usr/share/doc"
 endif
+
+binary-install/modified-hildon-desktop::
+	mv debian/modified-hildon-desktop/usr/bin/hildon-desktop debian/modified-hildon-desktop/usr/bin/modified-hildon-desktop
+	mkdir -p debian/modified-hildon-desktop/usr/share/gconf/schemas/
+	cp src/hildon-desktop-keys.schemas debian/modified-hildon-desktop/usr/share/gconf/schemas/
+	mkdir -p debian/modified-hildon-desktop/etc/rescue-boot.d/
+	cp hildon-desktop.rescue debian/modified-hildon-desktop/etc/rescue-boot.d/
+	rm -rf debian/modified-hildon-desktop/usr/share/doc/
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/hildon-desktop.rescue hildon-desktop-2.2.138/hildon-desktop.rescue
--- orig/hildon-desktop-2.2.138/hildon-desktop.rescue	1970-01-01 02:00:00.000000000 +0200
+++ hildon-desktop-2.2.138/hildon-desktop.rescue	2010-05-25 20:46:18.000000000 +0300
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+if [ -f /usr/bin/hildon-desktop.launch.orig ] ; then
+ mv /usr/bin/hildon-dekstop.launch.orig /usr/bin/hildon-desktop.launch
+ exit 0
+fi
+
+if [ -f /usr/bin/hildon-desktop.launch1 ] ; then
+ mv /usr/bin/hildon-dekstop.launch1 /usr/bin/hildon-desktop.launch
+fi
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/Makefile.am hildon-desktop-2.2.138/src/Makefile.am
--- orig/hildon-desktop-2.2.138/src/Makefile.am	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/src/Makefile.am	2010-05-25 21:02:40.000000000 +0300
@@ -21,7 +21,7 @@
 
 schemadir = ${datadir}/gconf/schemas
 schema_DATA = \ 
-	hildon-desktop-views.schemas
+	hildon-desktop-views.schemas hildon-desktop-keys.schemas
 
 cuddir = ${sysconfdir}/osso-cud-scripts
 cud_SCRIPTS = \
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/hildon-desktop-keys.schemas hildon-desktop-2.2.138/src/hildon-desktop-keys.schemas
--- orig/hildon-desktop-2.2.138/src/hildon-desktop-keys.schemas	1970-01-01 02:00:00.000000000 +0200
+++ hildon-desktop-2.2.138/src/hildon-desktop-keys.schemas	2010-05-25 20:46:18.000000000 +0300
@@ -0,0 +1,106 @@
+<?xml version="1.0"?>
+<gconfschemafile>
+  <schemalist>
+    <schema>
+      <key>/schemas/apps/osso/hildon-desktop/key-actions/launcher_navigator_accel</key>
+      <applyto>/apps/osso/hildon-desktop/key-actions/launcher_navigator_accel</applyto>
+      <owner>hildon-desktop</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Use 15 keys to select icons in launcher and navigator</short>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/apps/osso/hildon-desktop/key-actions/home_contacts_phone</key>
+      <applyto>/apps/osso/hildon-desktop/key-actions/home_contacts_phone</applyto>
+      <owner>hildon-desktop</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Launch contacts or phone application on a key press in home</short>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/apps/osso/hildon-desktop/key-actions/ctrl_backaspace</key>
+      <applyto>/apps/osso/hildon-desktop/key-actions/ctrl_backspace</applyto>
+      <owner>hildon-desktop</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+	      <short>Enable ctrl+backspace shortcut</short>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/apps/osso/hildon-desktop/key-actions/dbus_shift_ctrl</key>
+      <applyto>/apps/osso/hildon-desktop/key-actions/dbus_shift_ctrl</applyto>
+      <owner>hildon-desktop</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Capture all ctrl+shift+letter and report them on D-Bus</short>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/apps/osso/hildon-desktop/key-actions/dbus_launcher_navigator</key>
+      <applyto>/apps/osso/hildon-desktop/key-actions/dbus_launcher_navigator</applyto>
+      <owner>hildon-desktop</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Report key presses when in launcher or navigator on D-Bus</short>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/apps/osso/hildon-desktop/key-actions/preset_shift_ctrl</key>
+      <applyto>/apps/osso/hildon-desktop/key-actions/preset_shift_ctrl</applyto>
+      <owner>hildon-desktop</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Enable default ctrl-shift-[xnp] actions</short>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/apps/osso/hildon-desktop/key-actions/ctrl_backspace_in_tasknav</key>
+      <applyto>/apps/osso/hildon-desktop/key-actions/ctrl_backspace_in_tasknav</applyto>
+      <owner>hildon-desktop</owner>
+      <type>int</type>
+      <default>0</default>
+      <locale name="C">
+        <short>Action of ctrl+backspace when pressed while in navigator</short>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/apps/osso/hildon-desktop/key-actions/dbus_ctrl_shortcuts</key>
+      <applyto>/apps/osso/hildon-desktop/key-actions/dbus_ctrl_shortcuts</applyto>
+      <owner>hildon-desktop</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Capture some ctrl+key combinations (conflicts with other uses).</short>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/apps/osso/hildon-desktop/key-actions/dbus_shortcuts_use_fn</key>
+      <applyto>/apps/osso/hildon-desktop/key-actions/dbus_shortcuts_use_fn</applyto>
+      <owner>hildon-desktop</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Use ctrl+fn instead of ctrl+shift for keyboard shortcuts.</short>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/apps/osso/hildon-desktop/key-actions/disable_edit</key>
+      <applyto>/apps/osso/hildon-desktop/key-actions/disable_edit</applyto>
+      <owner>hildon-desktop</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Lock widgets on desktop.</short>
+      </locale>
+    </schema>
+ 
+  </schemalist>
+</gconfschemafile>
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/home/hd-home-view-container.c hildon-desktop-2.2.138/src/home/hd-home-view-container.c
--- orig/hildon-desktop-2.2.138/src/home/hd-home-view-container.c	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/src/home/hd-home-view-container.c	2010-05-25 20:46:18.000000000 +0300
@@ -41,7 +41,7 @@
 #include <math.h>
 #include <X11/Xproto.h>
 
-#define MAX_HOME_VIEWS 4
+#define MAX_HOME_VIEWS 9
 
 #define HD_GCONF_DIR_VIEWS         "/apps/osso/hildon-desktop/views"
 #define HD_GCONF_KEY_VIEWS_ACTIVE  HD_GCONF_DIR_VIEWS "/active"
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/home/hd-home-view-container.h hildon-desktop-2.2.138/src/home/hd-home-view-container.h
--- orig/hildon-desktop-2.2.138/src/home/hd-home-view-container.h	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/src/home/hd-home-view-container.h	2010-05-25 20:46:18.000000000 +0300
@@ -23,6 +23,7 @@
 #define __HD_HOME_VIEW_CONTAINER_H__
 
 #include <clutter/clutter.h>
+#include "hd-home.h"
 #include "hd-comp-mgr.h"
 
 G_BEGIN_DECLS
@@ -85,6 +86,8 @@
 MBWindowManagerClient *
 hd_home_view_container_get_live_bg (HdHomeViewContainer *container);
 
+HdHomeViewContainer *hd_home_get_view_container(HdHome *home);
+
 G_END_DECLS
 
 #endif
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/home/hd-home-view.c hildon-desktop-2.2.138/src/home/hd-home-view.c
--- orig/hildon-desktop-2.2.138/src/home/hd-home-view.c	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/src/home/hd-home-view.c	2010-05-25 20:46:18.000000000 +0300
@@ -56,7 +56,7 @@
 #define GCONF_KEY_MODIFIED "/apps/osso/hildon-desktop/applets/%s/modified"
 #define GCONF_KEY_VIEW     "/apps/osso/hildon-desktop/applets/%s/view"
 
-#define MAX_VIEWS 4
+#define MAX_VIEWS 9
 
 /* Maximal pixel movement for a tap (before it is a move) */
 #define MAX_TAP_DISTANCE 20
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/home/hd-home.c hildon-desktop-2.2.138/src/home/hd-home.c
--- orig/hildon-desktop-2.2.138/src/home/hd-home.c	2010-04-20 16:58:31.000000000 +0300
+++ hildon-desktop-2.2.138/src/home/hd-home.c	2010-05-25 20:52:06.000000000 +0300
@@ -38,6 +38,8 @@
 #include "hd-render-manager.h"
 #include "hd-clutter-cache.h"
 #include "hd-theme.h"
+#include "hd-dbus.h"
+#include "hd-title-bar.h"
 
 #include "hd-launcher-app.h"
 
@@ -85,7 +87,7 @@
 #define INDICATION_WIDTH 50
 #define HD_EDGE_INDICATION_COLOR "SelectionColor"
 
-#define MAX_VIEWS 4
+#define MAX_VIEWS 9
 
 #define FN_KEY GDK_ISO_Level3_Shift
 #define FN_MODIFIER Mod5Mask
@@ -97,6 +99,8 @@
 #define DRAG_DEBUG(...)
 //#define DRAG_DEBUG g_debug
 
+gboolean in_alt_tab;
+
 enum
 {
   PROP_COMP_MGR = 1,
@@ -171,7 +175,8 @@
     FN_STATE_NONE,      // interpret the KeyPress as it is
     FN_STATE_NEXT,      // the next key is Fn-modified
     FN_STATE_LOCKED,    // until turned off all key press are Fn-modified
-  } fn_state;
+  } fn_state, shift_state;
+  time_t last_fn_time;
 
   enum
   {
@@ -184,6 +189,7 @@
   /* For hd_home_desktop_key_release():
    * Don't change @fn_state if it was wasn't pressed alone. */
   gboolean ignore_next_fn_release;
+  gboolean ignore_next_shift_release;
   /* These are all reset when the HDRM state is changed. */
 
   /* addressbook and Call UI D-Bus interfaces (name, path, method) */
@@ -215,6 +221,8 @@
 
 static void hd_home_show_edit_button (HdHome *home);
 
+static void hd_home_reset_fn_state (HdHome *home);
+
 static void do_applet_release (HdHome             *home,
                                ClutterActor       *applet,
                                ClutterButtonEvent *event);
@@ -688,11 +696,125 @@
     }
 
   /* We don't care if Ctrl is pressed. */
-  if (xev->state & ControlMask)
-    return;
+  if (xev->state & ControlMask){
+	 hd_home_reset_fn_state(home);
+	 return;
+  }
 
 /*  g_debug ("%s, display: %p, keymap: %p", __FUNCTION__, display, keymap); */
 
+  if (hd_render_manager_get_state()==HDRM_STATE_LAUNCHER) {
+          int d;
+          d=0;
+          switch(xev->keycode) {
+                  case 24:
+                  case 25:
+                  case 26:
+                  case 27:
+                  case 28:
+                          d=24;
+                          break;
+                  case 38:
+                  case 39:
+                  case 40:
+                  case 41:
+                  case 42:
+                          d=33;
+                          break;
+                  case 52:
+                  case 53:
+                  case 54:
+                  case 55:
+                  case 56:
+                          d=42;
+                          break;
+                  case 22: /* Backspace sends -1, which means up one level */
+                          d=23;
+                          break;
+          }
+          if (d && conf_enable_launcher_navigator_accel) {
+                hd_launcher_activate(xev->keycode-d);
+          } else if(conf_enable_dbus_launcher_navigator) {
+                char s[16];
+                gdk_keymap_translate_keyboard_state (keymap,
+                                       xev->keycode,
+                                       xev->state,
+                                       0,
+                                       &keyval,
+                                       NULL, NULL, NULL);
+                sprintf(s, "%i", keyval+1024);
+                hd_dbus_send_event(s);
+          }
+  }
+  if (hd_render_manager_get_state()==HDRM_STATE_TASK_NAV) {
+          int d,y;
+          d=0;
+          switch(xev->keycode) {
+                  case 24:
+                  case 25:
+                  case 26:
+                  case 27:
+                  case 28:
+                          d=24;
+                          y=0;
+                          break;
+                  case 38:
+                  case 39:
+                  case 40:
+                  case 41:
+                  case 42:
+                          d=38;
+                          y=1;
+                          break;
+                  case 52:
+                  case 53:
+                  case 54:
+                  case 55:
+                  case 56:
+                          d=52;
+                          y=2;
+                          break;
+          }
+          if (d && conf_enable_launcher_navigator_accel) {
+		 time (&now);
+                 if ((xev->state & (FN_MODIFIER|ShiftMask))||(
+					 (difftime (now, priv->last_fn_time) < 4)
+					 &&(priv->fn_state||priv->shift_state)
+					 )) {
+                         hd_task_navigator_activate(xev->keycode-d,y,1);
+                         hd_home_reset_fn_state(home);
+                 } else hd_task_navigator_activate(xev->keycode-d,y,0);
+          } else if(conf_enable_dbus_launcher_navigator) {
+                char s[16];
+                gdk_keymap_translate_keyboard_state (keymap,
+                                       xev->keycode,
+                                       xev->state,
+                                       0,
+                                       &keyval,
+                                       NULL, NULL, NULL);
+                sprintf(s, "%i", keyval+2048);
+                hd_dbus_send_event(s);
+          }
+  }
+  if (hd_render_manager_get_state()==HDRM_STATE_HOME) {
+	  gdk_keymap_translate_keyboard_state (keymap,
+                                       xev->keycode,
+                                       xev->state,
+                                       0,
+                                       &keyval,
+                                       NULL, NULL, NULL);
+	  g_warning("kv=%i   %i %i", keyval, GDK_Left, GDK_Right);
+	  if (keyval==GDK_Left) {
+		  hd_home_view_container_scroll_to_previous (HD_HOME_VIEW_CONTAINER (priv->view_container), 20000);
+		  return ;
+	  }
+	  if (keyval==GDK_Right) {
+		  hd_home_view_container_scroll_to_next (HD_HOME_VIEW_CONTAINER (priv->view_container), -20000);
+		  return ;
+	  }
+	  
+  if(conf_enable_home_contacts_phone) {
+
   /* First check how long has it been since last key press. If more than n sec,
    * reset.
    */
@@ -707,7 +829,7 @@
    * already sent some to Contacts or CallUI. */
   if (!STATE_ALLOW_CALL_FROM_HOME (hd_render_manager_get_state ()) &&
       (priv->key_sent == KEY_SENT_NONE))
-    return;
+    goto handle_fn_shift;
 
   if (priv->key_sent == KEY_SENT_CALLUI)
     {
@@ -781,7 +903,20 @@
                 G_TYPE_STRING, buffer, G_TYPE_INVALID);
         }
     }
+ } else if(conf_enable_dbus_launcher_navigator) {
+	char s[16];
+	gdk_keymap_translate_keyboard_state (keymap,
+		       xev->keycode,
+		       xev->state,
+		       0,
+		       &keyval,
+		       NULL, NULL, NULL);
+		sprintf(s, "%i", keyval+4096); 
+		hd_dbus_send_event(s);
+ }
+  }
 
+handle_fn_shift:
  if (xev->state & FN_MODIFIER)
    {
      priv->fn_state = FN_STATE_NONE;
@@ -792,6 +927,23 @@
      priv->fn_state = FN_STATE_NONE;
      g_debug ("%s, FN state: %d", __FUNCTION__, priv->fn_state);
    }
+ if (xev->state & ShiftMask)
+   {
+     priv->shift_state = FN_STATE_NONE;
+     priv->ignore_next_shift_release = TRUE;
+   }
+ else if (priv->shift_state == FN_STATE_NEXT)
+   {
+     priv->shift_state = FN_STATE_NONE;
+     g_debug ("%s, SHIFT state: %d", __FUNCTION__, priv->shift_state);
+   }
+  if(XkbKeycodeToKeysym(clutter_x11_get_default_display(), xev->keycode, 0, 0) == FN_KEY) {
+	  priv->ignore_next_fn_release = FALSE;
+  }
+  if(XkbKeycodeToKeysym(clutter_x11_get_default_display(), xev->keycode, 0, 0) == GDK_Shift_L) {
+	  priv->ignore_next_shift_release = FALSE;
+  }
+	
 }
 
 static void
@@ -800,26 +952,57 @@
   HdHome *home = userdata;
   HdHomePrivate *priv = home->priv;
 
-  /* Ignore keys if they are not Fn. */
-  if (xev->state & ControlMask
-      || XkbKeycodeToKeysym(clutter_x11_get_default_display(),
-                            xev->keycode, 0, 0) != FN_KEY)
-    return;
 
   /* Ignore keys if not at home or launching an app that wants them. */
   if (!STATE_ALLOW_CALL_FROM_HOME (hd_render_manager_get_state ()) &&
-      (priv->key_sent == KEY_SENT_NONE))
+      (priv->key_sent == KEY_SENT_NONE) && (hd_render_manager_get_state()!=HDRM_STATE_TASK_NAV))
       return;
 
-  if (priv->ignore_next_fn_release)
-    priv->ignore_next_fn_release = FALSE;
-  else if (priv->fn_state == FN_STATE_NONE)
-    priv->fn_state = FN_STATE_NEXT;
-  else if (priv->fn_state == FN_STATE_NEXT)
-    priv->fn_state = FN_STATE_LOCKED;
-  else
-    priv->fn_state = FN_STATE_NONE;
-  g_debug ("%s. FN state: %d", __FUNCTION__, priv->fn_state);
+  if((XkbKeycodeToKeysym(clutter_x11_get_default_display(), xev->keycode, 0, 0) == GDK_Control_L) &&
+  	(hd_render_manager_get_state () == HDRM_STATE_TASK_NAV ) &&
+	(conf_ctrl_backspace_in_tasknav==5) && in_alt_tab) {
+	  in_alt_tab=FALSE;
+	  hd_task_navigator_activate(0, 0, 0);
+  }
+
+  if(xev->state & ControlMask) {
+	  priv->fn_state = FN_STATE_NONE;
+	  priv->shift_state = FN_STATE_NONE;
+	  priv->ignore_next_fn_release = TRUE;
+	  priv->ignore_next_shift_release = TRUE;
+	  return ;
+  }
+
+  if(XkbKeycodeToKeysym(clutter_x11_get_default_display(), xev->keycode, 0, 0) == FN_KEY) {
+	  if (priv->ignore_next_fn_release)
+	    priv->ignore_next_fn_release = FALSE;
+	  else if (priv->fn_state == FN_STATE_NONE)
+	    priv->fn_state = FN_STATE_NEXT;
+	  else if (priv->fn_state == FN_STATE_NEXT)
+	    priv->fn_state = FN_STATE_LOCKED;
+	  else
+	    priv->fn_state = FN_STATE_NONE;
+	  if(priv->fn_state && (hd_render_manager_get_state()==HDRM_STATE_TASK_NAV)) {
+		  hd_home_show_edit_button(home);
+		  time(&priv->last_fn_time);
+	  }
+//	  g_warning ("%s. FN state: %d", __FUNCTION__, priv->fn_state);
+  }
+  if(XkbKeycodeToKeysym(clutter_x11_get_default_display(), xev->keycode, 0, 0) == GDK_Shift_L) {
+	  if (priv->ignore_next_shift_release)
+	    priv->ignore_next_shift_release = FALSE;
+	  else if (priv->shift_state == FN_STATE_NONE)
+	    priv->shift_state = FN_STATE_NEXT;
+	  else if (priv->shift_state == FN_STATE_NEXT)
+	    priv->shift_state = FN_STATE_LOCKED;
+	  else
+	    priv->shift_state = FN_STATE_NONE;
+	  if(priv->shift_state && (hd_render_manager_get_state()==HDRM_STATE_TASK_NAV)) {
+		  hd_home_show_edit_button(home);
+		  time(&priv->last_fn_time);
+	  }
+//	  g_warning ("%s. SHIFT state: %d", __FUNCTION__, priv->shift_state);
+	}
 }
 
 static void
@@ -827,6 +1010,8 @@
 {
   home->priv->fn_state = FN_STATE_NONE;
   home->priv->ignore_next_fn_release = FALSE;
+  home->priv->shift_state = FN_STATE_NONE;
+  home->priv->ignore_next_shift_release = FALSE;
 }
 
 /*
@@ -2062,6 +2247,8 @@
 
   hd_home_hide_edit_button (home);
 
+  hd_home_reset_fn_state(home);
+
   return FALSE;
 }
 
@@ -2427,3 +2614,7 @@
   if (HD_IS_HOME_VIEW (view))
     hd_home_view_unregister_applet (view, applet);
 }
+
+HdHomeViewContainer *hd_home_get_view_container(HdHome *home) {
+	return HD_HOME_VIEW_CONTAINER (home->priv->view_container);
+}
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/home/hd-home.h hildon-desktop-2.2.138/src/home/hd-home.h
--- orig/hildon-desktop-2.2.138/src/home/hd-home.h	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/src/home/hd-home.h	2010-05-25 20:46:18.000000000 +0300
@@ -105,6 +105,8 @@
                                 ClutterActor *applet);
 void hd_home_set_live_background (HdHome *home, MBWindowManagerClient *client);
 
+extern gboolean in_alt_tab;
+
 G_END_DECLS
 
 #endif
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/home/hd-render-manager.c hildon-desktop-2.2.138/src/home/hd-render-manager.c
--- orig/hildon-desktop-2.2.138/src/home/hd-render-manager.c	2010-04-20 16:58:31.000000000 +0300
+++ hildon-desktop-2.2.138/src/home/hd-render-manager.c	2010-05-25 20:46:18.000000000 +0300
@@ -1235,6 +1235,12 @@
             hd_render_manager_state_str(priv->state),
             hd_render_manager_state_str(state));
 
+  if(conf_disable_edit) {
+	  if ((state==HDRM_STATE_HOME_EDIT)||(state==HDRM_STATE_HOME_EDIT)) {
+		  state=priv->state;
+	  }
+  }
+
   if (!cmgr)
   {
     g_warning("%s: HdCompMgr not defined", __FUNCTION__);
@@ -3112,3 +3118,11 @@
    /* Set the new viewport */
    hd_render_manager_set_compositor_input_viewport(region);
  }
+
+
+HdHome *
+hd_render_manager_get_home (void)
+{
+  return the_render_manager->priv->home;
+}
+
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/home/hd-render-manager.h hildon-desktop-2.2.138/src/home/hd-render-manager.h
--- orig/hildon-desktop-2.2.138/src/home/hd-render-manager.h	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/src/home/hd-render-manager.h	2010-05-25 20:46:18.000000000 +0300
@@ -268,6 +268,8 @@
 
 void hd_render_manager_set_visibilities(void);
 
+HdHome *hd_render_manager_get_home (void);
+
 G_END_DECLS
 
 #endif /* __HD_RENDER_MANAGER_H__ */
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/home/hd-task-navigator.c hildon-desktop-2.2.138/src/home/hd-task-navigator.c
--- orig/hildon-desktop-2.2.138/src/home/hd-task-navigator.c	2010-04-20 16:58:31.000000000 +0300
+++ hildon-desktop-2.2.138/src/home/hd-task-navigator.c	2010-05-25 20:46:18.000000000 +0300
@@ -443,6 +443,7 @@
    *                  or in the application's they belong to.
    */
   TNote               *tnote;
+  time_t last_activated;
 } Thumbnail; /* }}} */
 /* Thumbnail data structures }}} */
 
@@ -2821,7 +2822,7 @@
 
 /* Called when a %Thumbnail.thwin is clicked. */
 static gboolean
-appthumb_clicked (const Thumbnail * apthumb)
+appthumb_clicked (Thumbnail * apthumb)
 {
   if (hd_render_manager_get_state () != HDRM_STATE_TASK_NAV)
     /* Bloke clicked a home applet while exiting the switcher,
@@ -2842,6 +2843,7 @@
   else
     g_signal_emit_by_name (Navigator, "thumbnail-clicked", apthumb->apwin);
 
+  apthumb->last_activated = time(NULL);
   return TRUE;
 }
 
@@ -2932,6 +2934,7 @@
   apthumb = g_new0 (Thumbnail, 1);
   apthumb->type = APPLICATION;
 
+  apthumb->last_activated = time(NULL);
   /* We're just in a MapNotify, it shouldn't happen.
    * mb_wm_object_signal_connect() will take reference
    * of apthumb->win. */
@@ -4169,5 +4172,82 @@
 }
 /* %HdTaskNavigator }}} */
 
+static int hd_thumb_compare (gconstpointer a, gconstpointer b)
+{
+	Thumbnail *t=(Thumbnail *)a;
+	Thumbnail *s=(Thumbnail *)b;
+	if ( (thumb_has_notification(t) || thumb_is_notification(t)) &&
+	     !(thumb_has_notification(s) || thumb_is_notification(s))) return 1;
+	if ( (thumb_has_notification(s) || thumb_is_notification(s)) &&
+	     !(thumb_has_notification(t) || thumb_is_notification(t))) return -1;
+	return s->last_activated - t->last_activated;
+}	
+
+static int hd_thumb_compare2 (gconstpointer a, gconstpointer b)
+{
+       	Thumbnail *t=(Thumbnail *)a;
+       	Thumbnail *s=(Thumbnail *)b;
+       	return t->last_activated - s->last_activated;
+}
+
+void hd_task_navigator_rotate_thumbs(void) {
+	GList *s, *t;
+	s=Thumbnails;
+	Thumbnails=g_list_remove_link(Thumbnails,s);
+	t=Thumbnails;
+	while(t && !thumb_has_notification((Thumbnail *)(t->data)) && 
+		   !thumb_is_notification((Thumbnail *)(t->data)))t=g_list_next(t);
+	if(t) {
+		Thumbnails=g_list_insert_before(Thumbnails, t, s->data);
+		g_list_free(s);
+	} else {
+		Thumbnails=g_list_concat(Thumbnails,s);
+	}
+        layout (NULL, FALSE);
+}
+void hd_task_navigator_sort_thumbs(void) {
+	GList *s, *t;
+	s=g_list_sort(g_list_copy(Thumbnails), hd_thumb_compare);
+	t=Thumbnails;
+	Thumbnails=s;
+//	Thumbnails=g_list_reverse(Thumbnails);
+	g_list_free(t);
+        layout (NULL, FALSE);
+}
+
+void hd_task_navigator_activate(int x, int y, int close) {
+	Layout lout;
+	int n;
+	GList *t;
+	if (y==-2) {
+		GList *s;
+		if(x<0)x+=NThumbnails;
+		s=g_list_sort(g_list_copy(Thumbnails), hd_thumb_compare2);
+		t=g_list_nth(s,x);
+		if(t) {
+			if(close) appthumb_close_clicked((Thumbnail *)t->data); else 
+			  if (hd_task_navigator_is_active ()) appthumb_clicked((Thumbnail *)t->data);
+		}
+		g_list_free(s);
+		return ;
+	} else 
+	if (y==-1) {
+		n=x;
+	} else {
+		calc_layout(&lout);
+		if(lout.cells_per_row<=x) return ;
+		n=y*lout.cells_per_row+x;
+	}
+	if(n>=NThumbnails) return ;
+	t=Thumbnails;
+	while((n>0) && t) {
+		t=t->next;
+		n--;
+	}
+	if(t && !n ) {
+		if(close) appthumb_close_clicked((Thumbnail *)t->data); else 
+		  if (hd_task_navigator_is_active ()) appthumb_clicked((Thumbnail *)t->data);
+	}
+}
 /* vim: set foldmethod=marker: */
 /* End of hd-task-navigator.c */
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/home/hd-task-navigator.h hildon-desktop-2.2.138/src/home/hd-task-navigator.h
--- orig/hildon-desktop-2.2.138/src/home/hd-task-navigator.h	2010-04-20 16:58:31.000000000 +0300
+++ hildon-desktop-2.2.138/src/home/hd-task-navigator.h	2010-05-25 20:46:18.000000000 +0300
@@ -76,5 +76,9 @@
                                             HdNote *hdnote);
 void hd_task_navigator_remove_notification (HdTaskNavigator *self,
                                             HdNote *hdnote);
+void hd_task_navigator_activate(int x, int y, int close);
+
+void hd_task_navigator_sort_thumbs(void);
+void hd_task_navigator_rotate_thumbs(void);
 
 #endif /* ! __HD_TASK_NAVIGATOR_H__ */
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/launcher/hd-app-mgr.c hildon-desktop-2.2.138/src/launcher/hd-app-mgr.c
--- orig/hildon-desktop-2.2.138/src/launcher/hd-app-mgr.c	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/src/launcher/hd-app-mgr.c	2010-05-25 20:46:18.000000000 +0300
@@ -47,6 +47,7 @@
 #include "hd-launcher.h"
 #include "hd-launcher-tree.h"
 #include "home/hd-render-manager.h"
+#include "home/hd-home-view-container.h"
 #include "hd-transition.h"
 #include "hd-wm.h"
 
@@ -206,6 +207,21 @@
 #define GCONF_SLIDE_OPEN_KEY     "/system/osso/af/slide-open"
 #define GCONF_DISABLE_CALLUI_DIR "/apps/osso/hildon-desktop"
 #define GCONF_DISABLE_CALLUI_KEY "/apps/osso/hildon-desktop/disable_phone_gesture"
+#define GCONF_KEY_ACTIONS_DIR "/apps/osso/hildon-desktop/key-actions"
+#define GCONF_VIEWS_CURRENT_DIR "/apps/osso/hildon-desktop/views"
+#define GCONF_VIEWS_CURRENT_KEY "/apps/osso/hildon-desktop/views/current"
+
+gboolean conf_enable_ctrl_backspace;
+gboolean conf_enable_preset_shift_ctrl;
+gboolean conf_enable_dbus_shift_ctrl;
+gboolean conf_enable_home_contacts_phone;
+gboolean conf_enable_launcher_navigator_accel;
+gboolean conf_enable_dbus_launcher_navigator;
+gboolean conf_default_launcher_positions;
+gboolean conf_dbus_shortcuts_use_fn;
+gboolean conf_dbus_ctrl_shortcuts;
+gint conf_ctrl_backspace_in_tasknav; 
+gboolean conf_disable_edit;
 
 /* Forward declarations */
 static void hd_app_mgr_dispose (GObject *gobject);
@@ -429,6 +445,40 @@
                                hd_app_mgr_gconf_value_changed,
                                (gpointer) self,
                                NULL, NULL);
+      gconf_client_notify_add (priv->gconf_client, GCONF_KEY_ACTIONS_DIR,
+                               hd_app_mgr_gconf_value_changed,
+                               (gpointer) self,
+                               NULL, NULL);
+      gconf_client_add_dir (priv->gconf_client, GCONF_VIEWS_CURRENT_DIR,
+                            GCONF_CLIENT_PRELOAD_NONE, NULL);
+      gconf_client_notify_add (priv->gconf_client, GCONF_VIEWS_CURRENT_KEY,
+                               hd_app_mgr_gconf_value_changed,
+                               (gpointer) self,
+                               NULL, NULL);
+      if(gconf_client_dir_exists(priv->gconf_client, GCONF_KEY_ACTIONS_DIR, NULL)) {
+	      conf_enable_ctrl_backspace = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/ctrl_backspace", NULL);
+	      conf_enable_preset_shift_ctrl = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/preset_shift_ctrl", NULL);
+	      conf_enable_dbus_shift_ctrl = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/dbus_shift_ctrl", NULL);
+	      conf_enable_home_contacts_phone = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/home_contacts_phone", NULL);
+	      conf_enable_launcher_navigator_accel = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/launcher_navigator_accel", NULL);
+	      conf_enable_dbus_launcher_navigator = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/dbus_launcher_navigator", NULL);
+	      conf_default_launcher_positions = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/default_launcher_positions", NULL);
+	      conf_ctrl_backspace_in_tasknav = gconf_client_get_int(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/ctrl_backspace_in_tasknav", NULL);
+	      conf_dbus_shortcuts_use_fn = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/dbus_shortcuts_use_fn", NULL);
+	      conf_dbus_ctrl_shortcuts = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/dbus_ctrl_shortcuts", NULL);
+	      conf_disable_edit = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/disable_edit", NULL);
+      }
     }
 
   /* Start memory limits. */
@@ -2097,12 +2147,44 @@
     value = gconf_value_get_bool (gvalue);
 
   if (!g_strcmp0 (gconf_entry_get_key (entry),
+                  GCONF_VIEWS_CURRENT_KEY)) {
+      HdHome * home =  hd_render_manager_get_home();
+
+      if(hd_home_view_container_get_current_view(hd_home_get_view_container(home)) != gconf_value_get_int(gvalue)-1)
+      	hd_home_view_container_set_current_view(hd_home_get_view_container(home), gconf_value_get_int(gvalue)-1);
+  }
+
+  if (!g_strcmp0 (gconf_entry_get_key (entry),
                   GCONF_SLIDE_OPEN_KEY))
     {
       priv->slide_closed = !value;
 
       hd_app_mgr_update_portraitness(self);
     }
+      if(gconf_client_dir_exists(priv->gconf_client, GCONF_KEY_ACTIONS_DIR, NULL)) {
+	      conf_enable_ctrl_backspace = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/ctrl_backspace", NULL);
+//	      conf_enable_preset_shift_ctrl = gconf_client_get_bool(priv->gconf_client, 
+//			      GCONF_KEY_ACTIONS_DIR "/preset_shift_ctrl", NULL);
+//	      conf_enable_dbus_shift_ctrl = gconf_client_get_bool(priv->gconf_client, 
+//			      GCONF_KEY_ACTIONS_DIR "/dbus_shift_ctrl", NULL);
+	      conf_enable_home_contacts_phone = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/home_contacts_phone", NULL);
+	      conf_enable_launcher_navigator_accel = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/launcher_navigator_accel", NULL);
+	      conf_enable_dbus_launcher_navigator = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/dbus_launcher_navigator", NULL);
+	      conf_default_launcher_positions = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/default_launcher_positions", NULL);
+	      conf_ctrl_backspace_in_tasknav = gconf_client_get_int(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/ctrl_backspace_in_tasknav", NULL);
+	      conf_dbus_shortcuts_use_fn = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/dbus_shortcuts_use_fn", NULL);
+	      conf_dbus_ctrl_shortcuts = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/dbus_ctrl_shortcuts", NULL);
+	      conf_disable_edit = gconf_client_get_bool(priv->gconf_client, 
+			      GCONF_KEY_ACTIONS_DIR "/disable_edit", NULL);
+      }
 
   if (!g_strcmp0 (gconf_entry_get_key (entry),
                   GCONF_DISABLE_CALLUI_KEY))
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/launcher/hd-app-mgr.h hildon-desktop-2.2.138/src/launcher/hd-app-mgr.h
--- orig/hildon-desktop-2.2.138/src/launcher/hd-app-mgr.h	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/src/launcher/hd-app-mgr.h	2010-05-25 20:46:18.000000000 +0300
@@ -103,6 +103,18 @@
 
 void hd_app_mgr_mce_activate_accel_if_needed(gboolean update_portraitness);
 
+extern gboolean conf_enable_ctrl_backspace;
+extern gboolean conf_enable_preset_shift_ctrl;
+extern gboolean conf_enable_dbus_shift_ctrl;
+extern gboolean conf_enable_home_contacts_phone;
+extern gboolean conf_enable_launcher_navigator_accel;
+extern gboolean conf_enable_dbus_launcher_navigator;
+extern gboolean conf_default_launcher_positions;
+extern gboolean conf_dbus_shortcuts_use_fn;
+extern gboolean conf_dbus_ctrl_shortcuts;
+extern gint conf_ctrl_backspace_in_tasknav;
+extern gboolean conf_disable_edit;
+
 G_END_DECLS
 
 #endif /* __HD_APP_MGR_H__ */
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/launcher/hd-launcher-grid.c hildon-desktop-2.2.138/src/launcher/hd-launcher-grid.c
--- orig/hildon-desktop-2.2.138/src/launcher/hd-launcher-grid.c	2010-04-20 16:58:31.000000000 +0300
+++ hildon-desktop-2.2.138/src/launcher/hd-launcher-grid.c	2010-05-25 20:46:18.000000000 +0300
@@ -861,3 +861,15 @@
 {
   return TRUE;
 }
+
+void hd_launcher_grid_activate(ClutterActor *actor, int p)
+{
+	HdLauncherGridPrivate *priv = HD_LAUNCHER_GRID_GET_PRIVATE (actor);
+	GList *l;
+	l=priv->tiles;
+	while((p>0) && l) {
+		l=l->next;
+		p--;
+	}
+	if(l && !p) hd_launcher_tile_activate(l->data);
+}
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/launcher/hd-launcher-grid.h hildon-desktop-2.2.138/src/launcher/hd-launcher-grid.h
--- orig/hildon-desktop-2.2.138/src/launcher/hd-launcher-grid.h	2010-04-20 16:58:31.000000000 +0300
+++ hildon-desktop-2.2.138/src/launcher/hd-launcher-grid.h	2010-05-25 20:46:18.000000000 +0300
@@ -77,6 +77,8 @@
 void          hd_launcher_grid_reset(HdLauncherGrid *grid);
 void          hd_launcher_grid_layout(HdLauncherGrid *grid);
 
+void hd_launcher_grid_activate(ClutterActor *actor, int p);
+
 /* Fixed sizes */
 #define HD_LAUNCHER_GRID_MIN_HEIGHT \
                 (HD_LAUNCHER_PAGE_HEIGHT - HD_LAUNCHER_PAGE_YMARGIN)
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/launcher/hd-launcher-page.c hildon-desktop-2.2.138/src/launcher/hd-launcher-page.c
--- orig/hildon-desktop-2.2.138/src/launcher/hd-launcher-page.c	2010-04-20 16:58:31.000000000 +0300
+++ hildon-desktop-2.2.138/src/launcher/hd-launcher-page.c	2010-05-25 20:46:18.000000000 +0300
@@ -538,3 +538,9 @@
   priv = HD_LAUNCHER_PAGE_GET_PRIVATE (page);
   return priv->drag_distance;
 }
+
+void
+hd_launcher_page_activate(ClutterActor *actor, int p) {
+	HdLauncherPagePrivate *priv = HD_LAUNCHER_PAGE_GET_PRIVATE (actor);
+	hd_launcher_grid_activate(priv->grid, p);
+}
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/launcher/hd-launcher-page.h hildon-desktop-2.2.138/src/launcher/hd-launcher-page.h
--- orig/hildon-desktop-2.2.138/src/launcher/hd-launcher-page.h	2010-04-20 16:58:31.000000000 +0300
+++ hildon-desktop-2.2.138/src/launcher/hd-launcher-page.h	2010-05-25 20:46:18.000000000 +0300
@@ -83,6 +83,8 @@
 const char *hd_launcher_page_get_transition_string(
                                          HdLauncherPageTransition trans_type);
 
+void hd_launcher_page_activate(ClutterActor *actor, int p);
+
 /* Fixed sizes.
  * FIXME: These should come from getting the screen size
  */
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/launcher/hd-launcher-tile.c hildon-desktop-2.2.138/src/launcher/hd-launcher-tile.c
--- orig/hildon-desktop-2.2.138/src/launcher/hd-launcher-tile.c	2010-04-20 16:58:31.000000000 +0300
+++ hildon-desktop-2.2.138/src/launcher/hd-launcher-tile.c	2010-05-25 20:46:18.000000000 +0300
@@ -686,3 +686,9 @@
       priv->press_timeout = 0;
     }
 }
+
+void hd_launcher_tile_activate(ClutterActor       *actor)
+{
+	hd_launcher_tile_button_press(actor);
+	hd_launcher_tile_button_release(actor);
+}
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/launcher/hd-launcher-tile.h hildon-desktop-2.2.138/src/launcher/hd-launcher-tile.h
--- orig/hildon-desktop-2.2.138/src/launcher/hd-launcher-tile.h	2010-04-20 16:58:31.000000000 +0300
+++ hildon-desktop-2.2.138/src/launcher/hd-launcher-tile.h	2010-05-25 20:46:18.000000000 +0300
@@ -76,6 +76,8 @@
 
 void hd_launcher_tile_reset(HdLauncherTile *tile);
 
+void hd_launcher_tile_activate(ClutterActor       *actor);
+
 /* Fixed size */
 #define HD_LAUNCHER_TILE_HEIGHT (96)
 #define HD_LAUNCHER_TILE_WIDTH  (142)
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/launcher/hd-launcher.c hildon-desktop-2.2.138/src/launcher/hd-launcher.c
--- orig/hildon-desktop-2.2.138/src/launcher/hd-launcher.c	2010-04-20 16:58:31.000000000 +0300
+++ hildon-desktop-2.2.138/src/launcher/hd-launcher.c	2010-05-25 20:46:18.000000000 +0300
@@ -116,6 +116,9 @@
 static gboolean hd_launcher_background_clicked (HdLauncher *self,
                                                 ClutterButtonEvent *event,
                                                 gpointer *data);
+static gboolean hd_launcher_key_pressed (HdLauncher *self,
+                                                ClutterButtonEvent *event,
+                                                gpointer *data);
 static void hd_launcher_populate_tree_starting (HdLauncherTree *tree,
                                                 gpointer data);
 static void hd_launcher_populate_tree_finished (HdLauncherTree *tree,
@@ -219,6 +222,8 @@
                     G_CALLBACK(hd_launcher_captured_event_cb), 0);
   g_signal_connect (self, "button-release-event",
                     G_CALLBACK(hd_launcher_background_clicked), 0);
+  g_signal_connect (self, "key-pressed-event",
+                    G_CALLBACK(hd_launcher_key_pressed), 0);
 
   /* App launch transition */
   priv->launch_image = 0;
@@ -1086,3 +1091,27 @@
 
   return TRUE;
 }
+
+static gboolean
+hd_launcher_key_pressed (HdLauncher *self,
+                                ClutterButtonEvent *event,
+                                gpointer *data)
+{
+//  HdLauncherPrivate *priv = HD_LAUNCHER_GET_PRIVATE (hd_launcher_get ());
+
+  hd_launcher_back_button_clicked();
+
+  return TRUE;
+}
+
+void 
+hd_launcher_activate(int p) {
+	HdLauncherPrivate *priv = HD_LAUNCHER_GET_PRIVATE (hd_launcher_get ());
+	if (hd_render_manager_get_state () != HDRM_STATE_LAUNCHER) return;
+	if(p==-1) {
+		hd_launcher_back_button_clicked();
+		return;
+	}
+	hd_launcher_page_activate(priv->active_page, p);
+}
+
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/launcher/hd-launcher.h hildon-desktop-2.2.138/src/launcher/hd-launcher.h
--- orig/hildon-desktop-2.2.138/src/launcher/hd-launcher.h	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/src/launcher/hd-launcher.h	2010-05-25 20:46:18.000000000 +0300
@@ -93,6 +93,8 @@
 
 void hd_launcher_stop_loading_transition (void);
 
+void hd_launcher_activate(int p);
+
 /* left/right/top/bottom margin that is clicked on to go back */
 #define HD_LAUNCHER_LEFT_MARGIN (68) /* layout guide F */
 #define HD_LAUNCHER_RIGHT_MARGIN (68) /* layout guide F */
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/main.c hildon-desktop-2.2.138/src/main.c
--- orig/hildon-desktop-2.2.138/src/main.c	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/src/main.c	2010-05-25 20:46:18.000000000 +0300
@@ -48,6 +48,7 @@
 #include "hd-wm.h"
 #include "hd-theme.h"
 #include "hd-util.h"
+#include "hd-dbus.h"
 #include "hd-volume-profile.h"
 #include "launcher/hd-app-mgr.h"
 #include "home/hd-render-manager.h"
@@ -64,6 +65,7 @@
   KEY_ACTION_XTERMINAL,
   KEY_ACTION_TOGGLE_PORTRAITABLE,
   KEY_ACTION_ROTATE,
+  KEY_ACTION_SEND_DBUS,
 };
 
 #ifdef MBWM_DEB_VERSION
@@ -249,8 +251,38 @@
     {
     case KEY_ACTION_TOGGLE_SWITCHER:
       /* don't go to the switcher if we are showing a system-modal */
-      if (!hd_wm_has_modal_blockers (hd_mb_wm))
-        hd_render_manager_set_state (HDRM_STATE_TASK_NAV);
+      if (hd_render_manager_get_state () == HDRM_STATE_TASK_NAV ) {
+          switch(conf_ctrl_backspace_in_tasknav) {
+              case 1:
+                  hd_render_manager_set_state (HDRM_STATE_HOME);
+                  break;
+              case 2:
+                  hd_render_manager_set_state (HDRM_STATE_LAUNCHER);
+                  break;
+              case 3:
+                  hd_task_navigator_activate(-2, -2, 0);
+                  break;
+              case 4:
+                  hd_task_navigator_activate(-1, -2, 0);
+                  break;
+              case 5:
+                  in_alt_tab = TRUE;
+                  hd_task_navigator_rotate_thumbs();
+                  break;
+  
+              case 0:
+              default:
+                  break;
+          }
+      } else { 
+		  if (!hd_wm_has_modal_blockers (hd_mb_wm))
+			hd_render_manager_set_state (HDRM_STATE_TASK_NAV);
+            if(conf_ctrl_backspace_in_tasknav==5) { 
+                in_alt_tab = TRUE;
+                    hd_task_navigator_sort_thumbs();
+                hd_task_navigator_rotate_thumbs();
+            }
+      }
       break;
     case KEY_ACTION_TOGGLE_NON_COMP_MODE:
       /* printf(" ### KEY_ACTION_TOGGLE_NON_COMP_MODE ###\n"); */
@@ -289,6 +321,19 @@
         break;
     }
 }
+static void
+key_binding_func_key (MBWindowManager   *wm,
+		  MBWMKeyBinding    *binding,
+		  void              *userdata)
+{
+  int action;
+  char s[32];
+
+  action = (int)(userdata);
+  sprintf(s,"%i",action);
+
+  hd_dbus_send_event (s);
+}
 
 static ClutterX11FilterReturn
 clutter_x11_event_filter (XEvent *xev, ClutterEvent *cev, gpointer data)
@@ -533,6 +578,7 @@
   Display * dpy = NULL;
   MBWindowManager *wm;
   HdAppMgr *app_mgr;
+  char keys1[32], c; 
 
   signal (SIGUSR1, dump_debug_info_sighand);
   signal (SIGHUP,  relaunch);
@@ -613,36 +659,118 @@
   mb_wm_init (wm);
   g_assert (mb_wm_comp_mgr_enabled (wm->comp_mgr));
 
-  mb_wm_keys_binding_add_with_spec (wm,
-				    "<ctrl>BackSpace",
-				    key_binding_func,
-				    NULL,
-				    (void*)KEY_ACTION_TOGGLE_SWITCHER);
-  mb_wm_keys_binding_add_with_spec (wm,
-				    "<shift><ctrl>x",
-				    key_binding_func,
-				    NULL,
-				    (void*)KEY_ACTION_XTERMINAL);
-  mb_wm_keys_binding_add_with_spec (wm,
-				    "<shift><ctrl>n",
-				    key_binding_func,
-				    NULL,
-				    (void*)KEY_ACTION_TOGGLE_NON_COMP_MODE);
-  mb_wm_keys_binding_add_with_spec (wm,
-				    "<shift><ctrl>p",
-				    key_binding_func,
-				    NULL,
-				    (void*)KEY_ACTION_TAKE_SCREENSHOT);
-  mb_wm_keys_binding_add_with_spec (wm,
-                                      "<shift><ctrl>r",
-                                      key_binding_func,
-                                      NULL,
-                                      (void*)KEY_ACTION_TOGGLE_PORTRAITABLE);
-  mb_wm_keys_binding_add_with_spec (wm, /* mod5 == Fn */
-                                      "<shift><ctrl><mod5>l",
-                                      key_binding_func,
-                                      NULL,
-                                      (void*)KEY_ACTION_ROTATE);
+  if(conf_enable_ctrl_backspace) {
+	  mb_wm_keys_binding_add_with_spec (wm,
+						"<ctrl>BackSpace",
+						key_binding_func,
+						NULL,
+						(void*)KEY_ACTION_TOGGLE_SWITCHER);
+  }
+  if(conf_enable_preset_shift_ctrl) {
+	  mb_wm_keys_binding_add_with_spec (wm,
+						"<shift><ctrl>x",
+						key_binding_func,
+						NULL,
+						(void*)KEY_ACTION_XTERMINAL);
+	  mb_wm_keys_binding_add_with_spec (wm,
+						"<shift><ctrl>n",
+						key_binding_func,
+						NULL,
+						(void*)KEY_ACTION_TOGGLE_NON_COMP_MODE);
+	  mb_wm_keys_binding_add_with_spec (wm,
+						"<shift><ctrl>p",
+						key_binding_func,
+						NULL,
+						(void*)KEY_ACTION_TAKE_SCREENSHOT);
+	  mb_wm_keys_binding_add_with_spec (wm,
+										  "<shift><ctrl>r",
+										  key_binding_func,
+										  NULL,
+										  (void*)KEY_ACTION_TOGGLE_PORTRAITABLE);
+	  mb_wm_keys_binding_add_with_spec (wm, /* mod5 == Fn */
+										  "<shift><ctrl><mod5>l",
+										  key_binding_func,
+										  NULL,
+										  (void*)KEY_ACTION_ROTATE);
+  }
+
+  if(conf_enable_dbus_shift_ctrl) {
+      if(conf_dbus_shortcuts_use_fn) {
+          mb_wm_keys_binding_add_with_spec (wm,
+                           "<ctrl><mod5>Space",
+                           key_binding_func_key,
+                           NULL,
+                           (void*)(192+32));
+          mb_wm_keys_binding_add_with_spec (wm,
+                           "<ctrl><mod5>comma",
+                           key_binding_func_key,
+                           NULL,
+                           (void*)(192+33));
+          mb_wm_keys_binding_add_with_spec (wm,
+                           "<ctrl><mod5>period",
+                           key_binding_func_key,
+                           NULL,
+                           (void*)(192+34));
+      } else {
+          mb_wm_keys_binding_add_with_spec (wm,
+                           "<shift><ctrl>Space",
+                           key_binding_func_key,
+                           NULL,
+                           (void*)(192+32));
+          mb_wm_keys_binding_add_with_spec (wm,
+                           "<shift><ctrl>comma",
+                           key_binding_func_key,
+                           NULL,
+                           (void*)(192+33));
+          mb_wm_keys_binding_add_with_spec (wm,
+                           "<shift><ctrl>period",
+                           key_binding_func_key,
+                           NULL,
+                           (void*)(192+34));
+      }
+	  if(conf_dbus_ctrl_shortcuts) {
+		  mb_wm_keys_binding_add_with_spec (wm,
+							"<ctrl>F7",
+							key_binding_func_key,
+							NULL,
+							(void*)247);
+		  mb_wm_keys_binding_add_with_spec (wm,
+							"<ctrl>F8",
+							key_binding_func_key,
+							NULL,
+							(void*)248);
+		  mb_wm_keys_binding_add_with_spec (wm,
+						   "<ctrl>Space",
+						   key_binding_func_key,
+						   NULL,
+						   (void*)(192+36));
+		  mb_wm_keys_binding_add_with_spec (wm,
+						   "<ctrl>comma",
+						   key_binding_func_key,
+						   NULL,
+						   (void*)(192+37));
+		  mb_wm_keys_binding_add_with_spec (wm,
+						   "<ctrl>period",
+						   key_binding_func_key,
+						   NULL,
+						   (void*)(192+38));
+	  }
+
+	  if(conf_dbus_shortcuts_use_fn) {
+		  strcpy(keys1,"<ctrl><mod5>a");
+	  } else {
+		  strcpy(keys1,"<shift><ctrl>a");
+	  }
+	  for(c='a';c<='z';c++) if(!conf_enable_preset_shift_ctrl || conf_dbus_shortcuts_use_fn || ((c!='n') && (c!='p') && (c!='x') && (c!='h'))){
+		  keys1[strlen(keys1)-1]=c;
+		  mb_wm_keys_binding_add_with_spec (wm,
+						keys1,
+						key_binding_func_key,
+						NULL,
+						(void*)(192+c-'a'+1));
+	  }
+  }
+
 
   clutter_x11_add_filter (clutter_x11_event_filter, wm);
 
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/util/hd-dbus.c hildon-desktop-2.2.138/src/util/hd-dbus.c
--- orig/hildon-desktop-2.2.138/src/util/hd-dbus.c	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/src/util/hd-dbus.c	2010-05-25 20:46:18.000000000 +0300
@@ -5,6 +5,7 @@
 #include "hd-title-bar.h"
 #include "hd-render-manager.h"
 #include "hd-volume-profile.h"
+#include "hd-task-navigator.h"
 
 #include <glib.h>
 #include <mce/dbus-names.h>
@@ -52,6 +53,102 @@
         hd_render_manager_set_state (HDRM_STATE_TASK_NAV);
       return DBUS_HANDLER_RESULT_HANDLED;
     }
+  else if (dbus_message_is_signal(msg,
+                                  TASKNAV_SIGNAL_INTERFACE,
+                                  "set_state"))
+    {
+      DBusMessageIter args;
+      int sigvalue;
+ 
+      if ((dbus_message_iter_init(msg, &args)) && 
+          (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args))) {
+        dbus_message_iter_get_basic(&args, &sigvalue);
+	switch(sigvalue) {
+	  case HDRM_STATE_HOME :
+          case HDRM_STATE_HOME_PORTRAIT:
+          case HDRM_STATE_APP:
+          case HDRM_STATE_APP_PORTRAIT:
+          case HDRM_STATE_TASK_NAV:
+          case HDRM_STATE_LAUNCHER:
+          case HDRM_STATE_NON_COMPOSITED:
+          case HDRM_STATE_NON_COMP_PORT:
+            hd_render_manager_set_state (sigvalue);
+            break;
+        }
+        return DBUS_HANDLER_RESULT_HANDLED;
+      }
+    }
+  else if (dbus_message_is_signal(msg,
+                                  TASKNAV_SIGNAL_INTERFACE,
+                                  "activate_window"))
+    {
+      DBusMessageIter args;
+      int sigvalue;
+ 
+      if ((dbus_message_iter_init(msg, &args)) && 
+          (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args))) {
+        dbus_message_iter_get_basic(&args, &sigvalue);
+	hd_task_navigator_activate(sigvalue, -1, 0);
+        return DBUS_HANDLER_RESULT_HANDLED;
+      }
+    }
+  else if (dbus_message_is_signal(msg,
+                                  TASKNAV_SIGNAL_INTERFACE,
+                                  "close_window"))
+    {
+      DBusMessageIter args;
+      int sigvalue;
+ 
+      if ((dbus_message_iter_init(msg, &args)) && 
+          (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args))) {
+        dbus_message_iter_get_basic(&args, &sigvalue);
+	hd_task_navigator_activate(sigvalue, -1, 1);
+        return DBUS_HANDLER_RESULT_HANDLED;
+      }
+    }
+  else if (dbus_message_is_signal(msg,
+                                  TASKNAV_SIGNAL_INTERFACE,
+                                  "activate_window_time"))
+    {
+      DBusMessageIter args;
+      int sigvalue;
+ 
+      if ((dbus_message_iter_init(msg, &args)) && 
+          (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args))) {
+        dbus_message_iter_get_basic(&args, &sigvalue);
+	hd_task_navigator_activate(sigvalue, -2, 0);
+        return DBUS_HANDLER_RESULT_HANDLED;
+      }
+    }
+  else if (dbus_message_is_signal(msg,
+                                  TASKNAV_SIGNAL_INTERFACE,
+                                  "close_window_time"))
+    {
+      DBusMessageIter args;
+      int sigvalue;
+ 
+      if ((dbus_message_iter_init(msg, &args)) && 
+          (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args))) {
+        dbus_message_iter_get_basic(&args, &sigvalue);
+	hd_task_navigator_activate(sigvalue, -2, 1);
+        return DBUS_HANDLER_RESULT_HANDLED;
+      }
+    }
+  else if (dbus_message_is_signal(msg, TASKNAV_SIGNAL_INTERFACE, "launcher_activate"))
+    {
+	    DBusMessageIter args;
+	    int sigvalue;
+
+	    if ((dbus_message_iter_init(msg, &args)) && 
+			    (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args))) {
+		    dbus_message_iter_get_basic(&args, &sigvalue);
+		    hd_launcher_activate(sigvalue);
+		    return DBUS_HANDLER_RESULT_HANDLED;
+	    }
+    }
+
+
+
 
   return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
 }
@@ -245,6 +342,37 @@
     }
 }
 
+void hd_dbus_send_event (char *value)
+{
+  DBusMessage *msg;
+  dbus_bool_t b;
+  DBusMessageIter args;
+
+  if (sysbus_conn == NULL) {
+    g_warning ("%s: no D-Bus system bus connection", __func__);
+    return;
+  }
+  msg = dbus_message_new_signal("/com/nokia/hildon_desktop", "com.nokia.hildon_desktop", "KeyEvent");
+  if (msg == NULL) {
+    g_warning ("%s: could not create message", __func__);
+    return;
+  }
+
+  dbus_message_iter_init_append(msg, &args);
+  if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &value)) { 
+    g_warning("Out Of Memory!"); 
+    return;
+  }
+
+  b = dbus_connection_send(sysbus_conn, msg, NULL);
+  if (!b) {
+    g_warning ("%s: dbus_connection_send() failed", __func__);
+  } else {
+    dbus_connection_flush(sysbus_conn);
+  }
+  dbus_message_unref(msg);
+}
+
 DBusConnection *
 hd_dbus_init (HdCompMgr * hmgr)
 {
diff -urNX xclude.hd orig/hildon-desktop-2.2.138/src/util/hd-dbus.h hildon-desktop-2.2.138/src/util/hd-dbus.h
--- orig/hildon-desktop-2.2.138/src/util/hd-dbus.h	2010-04-20 16:58:30.000000000 +0300
+++ hildon-desktop-2.2.138/src/util/hd-dbus.h	2010-05-25 20:46:18.000000000 +0300
@@ -16,5 +16,5 @@
 				 const gchar    *interface,
 				 const gchar    *method,
 				 const gchar    *launch_param);
-
+void hd_dbus_send_event (char *value);
 #endif
