diff -u gnome-applets-2.14.2/libgswitchit-/ChangeLog gnome-applets-2.14.2/libgswitchit/ChangeLog
--- gnome-applets-2.14.2/libgswitchit-/ChangeLog	2006-01-03 07:38:59.000000000 -0500
+++ gnome-applets-2.14.2/libgswitchit/ChangeLog	2006-05-26 20:19:52.000000000 -0400
@@ -1,3 +1,20 @@
+2006-05-27  Sergey Udaltsov <svu@gnome.org>
+
+	* gswitchit_config.[ch]: optimizing dealing with UTF8 descriptions -
+	changed GSList to NULL-terminated gchar **
+
+2006-04-22  Sergey Udaltsov <svu@gnome.org>
+
+	* gswitchit_config.[ch]: save/load preview window coords
+
+2006-04-20  Sergey Udaltsov <svu@gnome.org>
+
+	* gswitchit_config.c: added kbd config ToString function
+
+2006-04-20  Sergey Udaltsov <svu@gnome.org>
+
+	* *.c,*.h: update for new libxklavier API
+
 2006-01-03  Kristof Vansant <de_lupus@pandora.be>
 
 	Fixes #171668
Only in gnome-applets-2.14.2/libgswitchit: .ChangeLog.swp
diff -u gnome-applets-2.14.2/libgswitchit-/gswitchit_config.c gnome-applets-2.14.2/libgswitchit/gswitchit_config.c
--- gnome-applets-2.14.2/libgswitchit-/gswitchit_config.c	2006-01-30 05:48:20.000000000 -0500
+++ gnome-applets-2.14.2/libgswitchit/gswitchit_config.c	2006-05-26 20:19:52.000000000 -0400
@@ -25,8 +25,6 @@
 #include <gdk/gdkx.h>
 #include <libgnome/gnome-program.h>
 
-#include <libxklavier/xklavier_config.h>
-
 #include "gswitchit_config.h"
 #include "gswitchit_config_private.h"
 
@@ -37,27 +35,41 @@
 
 #define GSWITCHIT_CONFIG_KEY_PREFIX  KEYBOARD_CONFIG_KEY_PREFIX "/general"
 
-const char GSWITCHIT_CONFIG_DIR[] = GSWITCHIT_CONFIG_KEY_PREFIX;
-const char GSWITCHIT_CONFIG_KEY_DEFAULT_GROUP[] =
+const gchar GSWITCHIT_CONFIG_DIR[] = GSWITCHIT_CONFIG_KEY_PREFIX;
+const gchar GSWITCHIT_CONFIG_KEY_DEFAULT_GROUP[] =
     GSWITCHIT_CONFIG_KEY_PREFIX "/defaultGroup";
-const char GSWITCHIT_CONFIG_KEY_GROUP_PER_WINDOW[] =
+const gchar GSWITCHIT_CONFIG_KEY_GROUP_PER_WINDOW[] =
     GSWITCHIT_CONFIG_KEY_PREFIX "/groupPerWindow";
-const char GSWITCHIT_CONFIG_KEY_HANDLE_INDICATORS[] =
+const gchar GSWITCHIT_CONFIG_KEY_HANDLE_INDICATORS[] =
     GSWITCHIT_CONFIG_KEY_PREFIX "/handleIndicators";
-const char GSWITCHIT_CONFIG_KEY_LAYOUT_NAMES_AS_GROUP_NAMES[]
+const gchar GSWITCHIT_CONFIG_KEY_LAYOUT_NAMES_AS_GROUP_NAMES[]
     = GSWITCHIT_CONFIG_KEY_PREFIX "/layoutNamesAsGroupNames";
 
+#define GSWITCHIT_PREVIEW_CONFIG_KEY_PREFIX  "/apps/gswitchit/preview"
+
+const gchar GSWITCHIT_PREVIEW_CONFIG_DIR[] =
+    GSWITCHIT_PREVIEW_CONFIG_KEY_PREFIX;
+const gchar GSWITCHIT_PREVIEW_CONFIG_KEY_X[] =
+    GSWITCHIT_PREVIEW_CONFIG_KEY_PREFIX "/x";
+const gchar GSWITCHIT_PREVIEW_CONFIG_KEY_Y[] =
+    GSWITCHIT_PREVIEW_CONFIG_KEY_PREFIX "/y";
+const gchar GSWITCHIT_PREVIEW_CONFIG_KEY_WIDTH[] =
+    GSWITCHIT_PREVIEW_CONFIG_KEY_PREFIX "/width";
+const gchar GSWITCHIT_PREVIEW_CONFIG_KEY_HEIGHT[] =
+    GSWITCHIT_PREVIEW_CONFIG_KEY_PREFIX "/height";
+
 /**
  * GSwitchItAppletConfig
  */
 #define GSWITCHIT_APPLET_CONFIG_KEY_PREFIX  "/apps/gswitchit/Applet"
 
-const char GSWITCHIT_APPLET_CONFIG_DIR[] = GSWITCHIT_APPLET_CONFIG_KEY_PREFIX;
-const char GSWITCHIT_APPLET_CONFIG_KEY_SHOW_FLAGS[] =
+const gchar GSWITCHIT_APPLET_CONFIG_DIR[] =
+    GSWITCHIT_APPLET_CONFIG_KEY_PREFIX;
+const gchar GSWITCHIT_APPLET_CONFIG_KEY_SHOW_FLAGS[] =
     GSWITCHIT_APPLET_CONFIG_KEY_PREFIX "/showFlags";
-const char GSWITCHIT_APPLET_CONFIG_KEY_ENABLED_PLUGINS[] =
+const gchar GSWITCHIT_APPLET_CONFIG_KEY_ENABLED_PLUGINS[] =
     GSWITCHIT_APPLET_CONFIG_KEY_PREFIX "/enabledPlugins";
-const char GSWITCHIT_APPLET_CONFIG_KEY_SECONDARIES[] =
+const gchar GSWITCHIT_APPLET_CONFIG_KEY_SECONDARIES[] =
     GSWITCHIT_APPLET_CONFIG_KEY_PREFIX "/secondary";
 
 /**
@@ -65,15 +77,15 @@
  */
 #define GSWITCHIT_KBD_CONFIG_KEY_PREFIX KEYBOARD_CONFIG_KEY_PREFIX "/kbd"
 
-const char GSWITCHIT_KBD_CONFIG_DIR[] = GSWITCHIT_KBD_CONFIG_KEY_PREFIX;
-const char GSWITCHIT_KBD_CONFIG_KEY_MODEL[] =
+const gchar GSWITCHIT_KBD_CONFIG_DIR[] = GSWITCHIT_KBD_CONFIG_KEY_PREFIX;
+const gchar GSWITCHIT_KBD_CONFIG_KEY_MODEL[] =
     GSWITCHIT_KBD_CONFIG_KEY_PREFIX "/model";
-const char GSWITCHIT_KBD_CONFIG_KEY_LAYOUTS[] =
+const gchar GSWITCHIT_KBD_CONFIG_KEY_LAYOUTS[] =
     GSWITCHIT_KBD_CONFIG_KEY_PREFIX "/layouts";
-const char GSWITCHIT_KBD_CONFIG_KEY_OPTIONS[] =
+const gchar GSWITCHIT_KBD_CONFIG_KEY_OPTIONS[] =
     GSWITCHIT_KBD_CONFIG_KEY_PREFIX "/options";
 
-const char *GSWITCHIT_KBD_CONFIG_ACTIVE[] = {
+const gchar *GSWITCHIT_KBD_CONFIG_ACTIVE[] = {
 	GSWITCHIT_KBD_CONFIG_KEY_MODEL,
 	GSWITCHIT_KBD_CONFIG_KEY_LAYOUTS,
 	GSWITCHIT_KBD_CONFIG_KEY_OPTIONS
@@ -81,16 +93,16 @@
 
 #define GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_PREFIX KEYBOARD_CONFIG_KEY_PREFIX "/kbd.sysbackup"
 
-const char GSWITCHIT_KBD_CONFIG_SYSBACKUP_DIR[] =
+const gchar GSWITCHIT_KBD_CONFIG_SYSBACKUP_DIR[] =
     GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_PREFIX;
-const char GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_MODEL[] =
+const gchar GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_MODEL[] =
     GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_PREFIX "/model";
-const char GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_LAYOUTS[] =
+const gchar GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_LAYOUTS[] =
     GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_PREFIX "/layouts";
-const char GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_OPTIONS[] =
+const gchar GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_OPTIONS[] =
     GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_PREFIX "/options";
 
-const char *GSWITCHIT_KBD_CONFIG_SYSBACKUP[] = {
+const gchar *GSWITCHIT_KBD_CONFIG_SYSBACKUP[] = {
 	GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_MODEL,
 	GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_LAYOUTS,
 	GSWITCHIT_KBD_CONFIG_SYSBACKUP_KEY_OPTIONS
@@ -111,12 +123,13 @@
 }
 
 static Bool
-_GSwitchItKbdConfigGetDescriptions (const char *layoutName,
-				 const char *variantName,
-				 char **layoutShortDescr,
-				 char **layoutDescr,
-				 char **variantShortDescr,
-				 char **variantDescr)
+_GSwitchItKbdConfigGetDescriptions (XklConfigRegistry * configRegistry,
+				    const gchar * layoutName,
+				    const gchar * variantName,
+				    gchar ** layoutShortDescr,
+				    gchar ** layoutDescr,
+				    gchar ** variantShortDescr,
+				    gchar ** variantDescr)
 {
 	static XklConfigItem litem;
 	static XklConfigItem vitem;
@@ -124,8 +137,8 @@
 	layoutName = g_strdup (layoutName);
 
 	g_snprintf (litem.name, sizeof litem.name, "%s", layoutName);
-	if (XklConfigFindLayout (&litem)) {
-		*layoutShortDescr = litem.shortDescription;
+	if (xkl_config_registry_find_layout (configRegistry, &litem)) {
+		*layoutShortDescr = litem.short_description;
 		*layoutDescr = litem.description;
 	} else
 		*layoutShortDescr = *layoutDescr = NULL;
@@ -134,8 +147,9 @@
 		variantName = g_strdup (variantName);
 		g_snprintf (vitem.name, sizeof vitem.name, "%s",
 			    variantName);
-		if (XklConfigFindVariant (layoutName, &vitem)) {
-			*variantShortDescr = vitem.shortDescription;
+		if (xkl_config_registry_find_variant
+		    (configRegistry, layoutName, &vitem)) {
+			*variantShortDescr = vitem.short_description;
 			*variantDescr = vitem.description;
 		} else
 			*variantShortDescr = *variantDescr = NULL;
@@ -154,14 +168,15 @@
 			     GConfClientNotifyFunc func,
 			     gpointer userData, int *pid)
 {
-	GError *err = NULL;
-	XklDebug (150, "Listening to [%s]\n", key);
+	GError *gerror = NULL;
+	xkl_debug (150, "Listening to [%s]\n", key);
 	*pid = gconf_client_notify_add (confClient,
-					key, func, userData, NULL, &err);
+					key, func, userData, NULL,
+					&gerror);
 	if (0 == *pid) {
 		g_warning ("Error listening for configuration: [%s]\n",
-			   err->message);
-		g_error_free (err);
+			   gerror->message);
+		g_error_free (gerror);
 	}
 }
 
@@ -177,10 +192,10 @@
 /**
  * extern common functions
  */
-const char *
-GSwitchItKbdConfigMergeItems (const char *parent, const char *child)
+const gchar *
+GSwitchItKbdConfigMergeItems (const gchar * parent, const gchar * child)
 {
-	static char buffer[XKL_MAX_CI_NAME_LENGTH * 2 - 1];
+	static gchar buffer[XKL_MAX_CI_NAME_LENGTH * 2 - 1];
 	*buffer = '\0';
 	if (parent != NULL) {
 		if (strlen (parent) >= XKL_MAX_CI_NAME_LENGTH)
@@ -197,12 +212,13 @@
 }
 
 gboolean
-GSwitchItKbdConfigSplitItems (const char *merged, char **parent, char **child)
+GSwitchItKbdConfigSplitItems (const gchar * merged, gchar ** parent,
+			      gchar ** child)
 {
-	static char pbuffer[XKL_MAX_CI_NAME_LENGTH];
-	static char cbuffer[XKL_MAX_CI_NAME_LENGTH];
+	static gchar pbuffer[XKL_MAX_CI_NAME_LENGTH];
+	static gchar cbuffer[XKL_MAX_CI_NAME_LENGTH];
 	int plen, clen;
-	const char *pos;
+	const gchar *pos;
 	*parent = *child = NULL;
 
 	if (merged == NULL)
@@ -270,25 +286,24 @@
 _GSwitchItKbdConfigCopyFromXklConfig (GSwitchItKbdConfig * kbdConfig,
 				      XklConfigRec * pdata)
 {
-	int i;
 	char **p, **p1;
 	GSwitchItKbdConfigModelSet (kbdConfig, pdata->model);
-	XklDebug (150, "Loaded Kbd model: [%s]\n", pdata->model);
+	xkl_debug (150, "Loaded Kbd model: [%s]\n", pdata->model);
 
 	GSwitchItKbdConfigLayoutsReset (kbdConfig);
 	p = pdata->layouts;
 	p1 = pdata->variants;
-	for (i = pdata->numLayouts; --i >= 0;) {
+	while (p != NULL && *p != NULL) {
 		if (*p1 == NULL || **p1 == '\0') {
-			XklDebug (150, "Loaded Kbd layout: [%s]\n", *p);
+			xkl_debug (150, "Loaded Kbd layout: [%s]\n", *p);
 			_GSwitchItKbdConfigLayoutsAdd (kbdConfig, *p);
 		} else {
 			char fullLayout[XKL_MAX_CI_NAME_LENGTH * 2];
 			g_snprintf (fullLayout, sizeof (fullLayout),
 				    "%s\t%s", *p, *p1);
-			XklDebug (150,
-				  "Loaded Kbd layout with variant: [%s]\n",
-				  fullLayout);
+			xkl_debug (150,
+				   "Loaded Kbd layout with variant: [%s]\n",
+				   fullLayout);
 			_GSwitchItKbdConfigLayoutsAdd (kbdConfig,
 						       fullLayout);
 		}
@@ -298,7 +313,7 @@
 
 	GSwitchItKbdConfigOptionsReset (kbdConfig);
 	p = pdata->options;
-	for (i = pdata->numOptions; --i >= 0;) {
+	while (p != NULL && *p != NULL) {
 		char group[XKL_MAX_CI_NAME_LENGTH];
 		char *option = *p;
 		char *delim =
@@ -308,8 +323,8 @@
 		    ((len = (delim - option)) < XKL_MAX_CI_NAME_LENGTH)) {
 			strncpy (group, option, len);
 			group[len] = 0;
-			XklDebug (150, "Loaded Kbd option: [%s][%s]\n",
-				  group, option);
+			xkl_debug (150, "Loaded Kbd option: [%s][%s]\n",
+				   group, option);
 			GSwitchItKbdConfigOptionsAdd (kbdConfig, group,
 						      option);
 		}
@@ -322,63 +337,69 @@
 				    XklConfigRec * pdata)
 {
 	int i;
+	int numLayouts, numOptions;
 	pdata->model =
-	    (kbdConfig->model == NULL) ? NULL : strdup (kbdConfig->model);
+	    (kbdConfig->model ==
+	     NULL) ? NULL : g_strdup (kbdConfig->model);
 
-	pdata->numLayouts = pdata->numVariants =
+	numLayouts =
 	    (kbdConfig->layouts ==
 	     NULL) ? 0 : g_slist_length (kbdConfig->layouts);
-	pdata->numOptions =
+	numOptions =
 	    (kbdConfig->options ==
 	     NULL) ? 0 : g_slist_length (kbdConfig->options);
 
-	XklDebug (150, "Taking %d layouts\n", pdata->numLayouts);
-	if (pdata->numLayouts != 0) {
+	xkl_debug (150, "Taking %d layouts\n", numLayouts);
+	if (numLayouts != 0) {
 		GSList *theLayout = kbdConfig->layouts;
 		char **p1 = pdata->layouts =
-		    calloc ((sizeof (char *)) * pdata->numLayouts, 1);
+		    g_new0 (char *, numLayouts + 1);
 		char **p2 = pdata->variants =
-		    calloc ((sizeof (char *)) * pdata->numVariants, 1);
-		for (i = pdata->numLayouts; --i >= 0;) {
+		    g_new0 (char *, numLayouts + 1);
+		for (i = numLayouts; --i >= 0;) {
 			char *layout, *variant;
 			if (GSwitchItKbdConfigSplitItems
 			    (theLayout->data, &layout, &variant)
 			    && variant != NULL) {
 				*p1 =
 				    (layout ==
-				     NULL) ? NULL : strdup (layout);
+				     NULL) ? g_strdup ("") :
+				    g_strdup (layout);
 				*p2 =
 				    (variant ==
-				     NULL) ? NULL : strdup (variant);
+				     NULL) ? g_strdup ("") :
+				    g_strdup (variant);
 			} else {
 				*p1 =
 				    (theLayout->data ==
-				     NULL) ? NULL : strdup (theLayout->
-							    data);
-				*p2 = NULL;
+				     NULL) ? g_strdup ("") :
+				    g_strdup (theLayout->data);
+				*p2 = g_strdup ("");
 			}
-			XklDebug (150, "Adding [%s]/%p and [%s]/%p\n",
-				  *p1 ? *p1 : "(nil)", *p1,
-				  *p2 ? *p2 : "(nil)", *p2);
+			xkl_debug (150, "Adding [%s]/%p and [%s]/%p\n",
+				   *p1 ? *p1 : "(nil)", *p1,
+				   *p2 ? *p2 : "(nil)", *p2);
 			p1++;
 			p2++;
 			theLayout = theLayout->next;
 		}
 	}
 
-	if (pdata->numOptions != 0) {
+	if (numOptions != 0) {
 		GSList *theOption = kbdConfig->options;
 		char **p = pdata->options =
-		    calloc ((sizeof (char *)) * pdata->numOptions, 1);
-		for (i = pdata->numOptions; --i >= 0;) {
+		    g_new0 (char *, numOptions + 1);
+		for (i = numOptions; --i >= 0;) {
 			char *group, *option;
 			if (GSwitchItKbdConfigSplitItems
 			    (theOption->data, &group, &option)
 			    && option != NULL)
-				*(p++) = strdup (option);
-			else
-				XklDebug (150, "Could not split [%s]\n",
-					  theOption->data);
+				*(p++) = g_strdup (option);
+			else {
+				*(p++) = g_strdup ("");
+				xkl_debug (150, "Could not split [%s]\n",
+					   theOption->data);
+			}
 			theOption = theOption->next;
 		}
 	}
@@ -404,7 +425,7 @@
 
 static void
 _GSwitchItKbdConfigLoadParams (GSwitchItKbdConfig * kbdConfig,
-			       const char *paramNames[])
+			       const gchar * paramNames[])
 {
 	GError *gerror = NULL;
 	gchar *pc;
@@ -425,7 +446,8 @@
 		GSwitchItKbdConfigModelSet (kbdConfig, pc);
 		g_free (pc);
 	}
-	XklDebug (150, "Loaded Kbd model: [%s]\n", kbdConfig->model ? kbdConfig->model : "(null)");
+	xkl_debug (150, "Loaded Kbd model: [%s]\n",
+		   kbdConfig->model ? kbdConfig->model : "(null)");
 
 	GSwitchItKbdConfigLayoutsReset (kbdConfig);
 
@@ -442,11 +464,11 @@
 	}
 
 	while (pl != NULL) {
-		XklDebug (150, "Loaded Kbd layout: [%s]\n", pl->data);
+		xkl_debug (150, "Loaded Kbd layout: [%s]\n", pl->data);
 		_GSwitchItKbdConfigLayoutsAdd (kbdConfig, pl->data);
 		pl = pl->next;
 	}
-	_GSwitchItConfigStringListReset(&pl);
+	_GSwitchItConfigStringListReset (&pl);
 
 	GSwitchItKbdConfigOptionsReset (kbdConfig);
 
@@ -463,52 +485,58 @@
 	}
 
 	while (pl != NULL) {
-		XklDebug (150, "Loaded Kbd option: [%s]\n", pl->data);
+		xkl_debug (150, "Loaded Kbd option: [%s]\n", pl->data);
 		_GSwitchItKbdConfigOptionsAdd (kbdConfig,
-					       (const char *) pl->data);
+					       (const gchar *) pl->data);
 		pl = pl->next;
 	}
-	_GSwitchItConfigStringListReset(&pl);
+	_GSwitchItConfigStringListReset (&pl);
 }
 
 static void
 _GSwitchItKbdConfigSaveParams (GSwitchItKbdConfig * kbdConfig,
 			       GConfChangeSet * cs,
-			       const char *paramNames[])
+			       const gchar * paramNames[])
 {
 	GSList *pl;
 
 	if (kbdConfig->model)
-		gconf_change_set_set_string (cs, paramNames[0], kbdConfig->model);
+		gconf_change_set_set_string (cs, paramNames[0],
+					     kbdConfig->model);
 	else
 		gconf_change_set_unset (cs, paramNames[0]);
-	XklDebug (150, "Saved Kbd model: [%s]\n", kbdConfig->model ? kbdConfig->model : "(null)");
+	xkl_debug (150, "Saved Kbd model: [%s]\n",
+		   kbdConfig->model ? kbdConfig->model : "(null)");
 
 	if (kbdConfig->layouts) {
 		pl = kbdConfig->layouts;
 		while (pl != NULL) {
-			XklDebug (150, "Saved Kbd layout: [%s]\n", pl->data);
+			xkl_debug (150, "Saved Kbd layout: [%s]\n",
+				   pl->data);
 			pl = pl->next;
 		}
 		gconf_change_set_set_list (cs,
 					   paramNames[1],
-					   GCONF_VALUE_STRING, kbdConfig->layouts);
+					   GCONF_VALUE_STRING,
+					   kbdConfig->layouts);
 	} else {
-		XklDebug (150, "Saved Kbd layouts: []\n");
+		xkl_debug (150, "Saved Kbd layouts: []\n");
 		gconf_change_set_unset (cs, paramNames[1]);
 	}
 
 	if (kbdConfig->options) {
 		pl = kbdConfig->options;
 		while (pl != NULL) {
-			XklDebug (150, "Saved Kbd option: [%s]\n", pl->data);
+			xkl_debug (150, "Saved Kbd option: [%s]\n",
+				   pl->data);
 			pl = pl->next;
 		}
 		gconf_change_set_set_list (cs,
 					   paramNames[2],
-					   GCONF_VALUE_STRING, kbdConfig->options);
+					   GCONF_VALUE_STRING,
+					   kbdConfig->options);
 	} else {
-		XklDebug (150, "Saved Kbd options: []\n");
+		xkl_debug (150, "Saved Kbd options: []\n");
 		gconf_change_set_unset (cs, paramNames[2]);
 	}
 }
@@ -517,13 +545,14 @@
  * extern GSwitchItConfig config functions
  */
 void
-GSwitchItConfigInit (GSwitchItConfig * config,
-		     GConfClient * confClient)
+GSwitchItConfigInit (GSwitchItConfig * config, GConfClient * confClient,
+		     XklEngine * engine)
 {
 	GError *gerror = NULL;
 
 	memset (config, 0, sizeof (*config));
 	config->confClient = confClient;
+	config->engine = engine;
 	g_object_ref (config->confClient);
 
 	gconf_client_add_dir (config->confClient,
@@ -559,7 +588,7 @@
 		g_error_free (gerror);
 		gerror = NULL;
 	}
-	XklDebug (150, "groupPerApp: %d\n", config->groupPerApp);
+	xkl_debug (150, "groupPerApp: %d\n", config->groupPerApp);
 
 	config->handleIndicators =
 	    gconf_client_get_bool (config->confClient,
@@ -572,7 +601,8 @@
 		g_error_free (gerror);
 		gerror = NULL;
 	}
-	XklDebug (150, "handleIndicators: %d\n", config->handleIndicators);
+	xkl_debug (150, "handleIndicators: %d\n",
+		   config->handleIndicators);
 
 	config->layoutNamesAsGroupNames =
 	    gconf_client_get_bool (config->confClient,
@@ -585,7 +615,8 @@
 		g_error_free (gerror);
 		gerror = NULL;
 	}
-	XklDebug (150, "layoutNamesAsGroupNames: %d\n", config->layoutNamesAsGroupNames);
+	xkl_debug (150, "layoutNamesAsGroupNames: %d\n",
+		   config->layoutNamesAsGroupNames);
 
 	config->defaultGroup =
 	    gconf_client_get_int (config->confClient,
@@ -600,9 +631,10 @@
 	}
 
 	if (config->defaultGroup < -1
-	    || config->defaultGroup >= XklGetMaxNumGroups ())
+	    || config->defaultGroup >=
+	    xkl_engine_get_max_num_groups (config->engine))
 		config->defaultGroup = -1;
-	XklDebug (150, "defaultGroup: %d\n", config->defaultGroup);
+	xkl_debug (150, "defaultGroup: %d\n", config->defaultGroup);
 }
 
 void
@@ -642,38 +674,40 @@
 {
 	gboolean rv = TRUE;
 
-	XklSetGroupPerApp (config->groupPerApp);
-	XklSetIndicatorsHandling (config->handleIndicators);
-	XklSetDefaultGroup (config->defaultGroup);
+	xkl_engine_set_group_per_toplevel_window (config->engine,
+						  config->groupPerApp);
+	xkl_engine_set_indicators_handling (config->engine,
+					    config->handleIndicators);
+	xkl_engine_set_default_group (config->engine,
+				      config->defaultGroup);
 
 	return rv;
 }
 
 void
-GSwitchItConfigLockNextGroup (void)
+GSwitchItConfigLockNextGroup (GSwitchItConfig * config)
 {
-	int group = XklGetNextGroup ();
-	XklLockGroup (group);
+	int group = xkl_engine_get_next_group (config->engine);
+	xkl_engine_lock_group (config->engine, group);
 }
 
 void
-GSwitchItConfigLockPrevGroup (void)
+GSwitchItConfigLockPrevGroup (GSwitchItConfig * config)
 {
-	int group = XklGetPrevGroup ();
-	XklLockGroup (group);
+	int group = xkl_engine_get_prev_group (config->engine);
+	xkl_engine_lock_group (config->engine, group);
 }
 
 void
-GSwitchItConfigRestoreGroup (void)
+GSwitchItConfigRestoreGroup (GSwitchItConfig * config)
 {
-	int group = XklGetRestoreGroup ();
-	XklLockGroup (group);
+	int group = xkl_engine_get_current_window_group (config->engine);
+	xkl_engine_lock_group (config->engine, group);
 }
 
 void
 GSwitchItConfigStartListen (GSwitchItConfig * config,
-			    GConfClientNotifyFunc func,
-			    gpointer userData)
+			    GConfClientNotifyFunc func, gpointer userData)
 {
 	_GSwitchItConfigAddListener (config->confClient,
 				     GSWITCHIT_CONFIG_DIR, func,
@@ -686,17 +720,19 @@
 	_GSwitchItConfigRemoveListener (config->confClient,
 					&config->configListenerId);
 }
+
 /**
  * extern GSwitchItKbdConfig config functions
  */
 void
 GSwitchItKbdConfigInit (GSwitchItKbdConfig * kbdConfig,
-			GConfClient * confClient)
+			GConfClient * confClient, XklEngine * engine)
 {
 	GError *gerror = NULL;
 
 	memset (kbdConfig, 0, sizeof (*kbdConfig));
 	kbdConfig->confClient = confClient;
+	kbdConfig->engine = engine;
 	g_object_ref (kbdConfig->confClient);
 
 	gconf_client_add_dir (kbdConfig->confClient,
@@ -731,14 +767,15 @@
 		GSList *pl;
 
 		if (kbdConfig->model == NULL)
-			kbdConfig->model = g_strdup (kbdConfigDefault->model);
+			kbdConfig->model =
+			    g_strdup (kbdConfigDefault->model);
 
 		if (kbdConfig->layouts == NULL) {
 			pl = kbdConfigDefault->layouts;
 			while (pl != NULL) {
 				kbdConfig->layouts =
-					g_slist_append (kbdConfig->layouts,
-							g_strdup (pl->data));
+				    g_slist_append (kbdConfig->layouts,
+						    g_strdup (pl->data));
 				pl = pl->next;
 			}
 		}
@@ -747,8 +784,8 @@
 			pl = kbdConfigDefault->options;
 			while (pl != NULL) {
 				kbdConfig->options =
-					g_slist_append (kbdConfig->options,
-							g_strdup (pl->data));
+				    g_slist_append (kbdConfig->options,
+						    g_strdup (pl->data));
 				pl = pl->next;
 			}
 		}
@@ -765,29 +802,27 @@
 void
 GSwitchItKbdConfigLoadFromXCurrent (GSwitchItKbdConfig * kbdConfig)
 {
-	XklConfigRec data;
-	XklConfigRecInit (&data);
-	if (XklConfigGetFromServer (&data))
-		_GSwitchItKbdConfigCopyFromXklConfig (kbdConfig, &data);
+	XklConfigRec *data = xkl_config_rec_new ();
+	if (xkl_config_rec_get_from_server (data, kbdConfig->engine))
+		_GSwitchItKbdConfigCopyFromXklConfig (kbdConfig, data);
 	else
-		XklDebug (150,
-			  "Could not load keyboard config from server: [%s]\n",
-			  XklGetLastError ());
-	XklConfigRecDestroy (&data);
+		xkl_debug (150,
+			   "Could not load keyboard config from server: [%s]\n",
+			   xkl_get_last_error ());
+	g_object_unref (G_OBJECT (data));
 }
 
 void
 GSwitchItKbdConfigLoadFromXInitial (GSwitchItKbdConfig * kbdConfig)
 {
-	XklConfigRec data;
-	XklConfigRecInit (&data);
-	if (XklConfigGetFromBackup (&data))
-		_GSwitchItKbdConfigCopyFromXklConfig (kbdConfig, &data);
+	XklConfigRec *data = xkl_config_rec_new ();
+	if (xkl_config_rec_get_from_backup (data, kbdConfig->engine))
+		_GSwitchItKbdConfigCopyFromXklConfig (kbdConfig, data);
 	else
-		XklDebug (150,
-			  "Could not load keyboard config from backup: [%s]\n",
-			  XklGetLastError ());
-	XklConfigRecDestroy (&data);
+		xkl_debug (150,
+			   "Could not load keyboard config from backup: [%s]\n",
+			   xkl_get_last_error ());
+	g_object_unref (G_OBJECT (data));
 }
 
 gboolean
@@ -856,7 +891,8 @@
 	if (kbdConfig->model != NULL)
 		g_free (kbdConfig->model);
 	kbdConfig->model =
-	    (modelName == NULL || modelName[0] == '\0') ? NULL : g_strdup (modelName);
+	    (modelName == NULL
+	     || modelName[0] == '\0') ? NULL : g_strdup (modelName);
 }
 
 void
@@ -864,7 +900,7 @@
 			      const gchar * layoutName,
 			      const gchar * variantName)
 {
-	const char *merged;
+	const gchar *merged;
 	if (layoutName == NULL)
 		return;
 	merged = GSwitchItKbdConfigMergeItems (layoutName, variantName);
@@ -890,7 +926,7 @@
 			      const gchar * groupName,
 			      const gchar * optionName)
 {
-	const char *merged;
+	const gchar *merged;
 	if (groupName == NULL || optionName == NULL)
 		return;
 	merged = GSwitchItKbdConfigMergeItems (groupName, optionName);
@@ -904,7 +940,7 @@
 				const gchar * groupName,
 				const gchar * optionName)
 {
-	const char *merged =
+	const gchar *merged =
 	    GSwitchItKbdConfigMergeItems (groupName, optionName);
 	if (merged == NULL)
 		return FALSE;
@@ -918,14 +954,11 @@
 GSwitchItKbdConfigActivate (GSwitchItKbdConfig * kbdConfig)
 {
 	gboolean rv;
+	XklConfigRec *data = xkl_config_rec_new ();
 
-	XklConfigRec data;
-	XklConfigRecInit (&data);
-
-	_GSwitchItKbdConfigCopyToXklConfig (kbdConfig, &data);
-
-	rv = XklConfigActivate (&data);
-	XklConfigRecDestroy (&data);
+	_GSwitchItKbdConfigCopyToXklConfig (kbdConfig, data);
+	rv = xkl_config_rec_activate (data, kbdConfig->engine);
+	g_object_unref (G_OBJECT (data));
 
 	return rv;
 }
@@ -937,7 +970,8 @@
 {
 	_GSwitchItConfigAddListener (kbdConfig->confClient,
 				     GSWITCHIT_KBD_CONFIG_DIR, func,
-				     userData, &kbdConfig->configListenerId);
+				     userData,
+				     &kbdConfig->configListenerId);
 }
 
 void
@@ -954,15 +988,15 @@
 GSwitchItAppletConfigFreeImages (GSwitchItAppletConfig * appletConfig)
 {
 	GdkPixbuf *pi;
-	GSList* imgNode;
-	while ((imgNode = appletConfig->images) != NULL)
-	{
+	GSList *imgNode;
+	while ((imgNode = appletConfig->images) != NULL) {
 		pi = GDK_PIXBUF (imgNode->data);
 		/* It can be NULL - some images may be missing */
 		if (pi != NULL) {
 			gdk_pixbuf_unref (pi);
 		}
-		appletConfig->images = g_slist_remove_link (appletConfig->images, imgNode);
+		appletConfig->images =
+		    g_slist_remove_link (appletConfig->images, imgNode);
 		g_slist_free_1 (imgNode);
 	}
 }
@@ -986,7 +1020,8 @@
 
 		if (fullLayoutName != NULL) {
 			char *l, *v;
-			GSwitchItKbdConfigSplitItems (fullLayoutName, &l, &v);
+			GSwitchItKbdConfigSplitItems (fullLayoutName, &l,
+						      &v);
 			if (l != NULL) {
 				// probably there is something in theme?
 				iconInfo = gtk_icon_theme_lookup_icon
@@ -1018,53 +1053,62 @@
 	if (!appletConfig->showFlags)
 		return;
 
-	for (i = XklGetMaxNumGroups (); --i >= 0;) {
+	for (i = xkl_engine_get_max_num_groups (appletConfig->engine);
+	     --i >= 0;) {
 		GdkPixbuf *image = NULL;
 		char *imageFile =
 		    GSwitchItAppletConfigGetImagesFile (appletConfig,
 							kbdConfig, i);
 
 		if (imageFile != NULL) {
-			GError *err = NULL;
+			GError *gerror = NULL;
 			image =
-			    gdk_pixbuf_new_from_file (imageFile, &err);
+			    gdk_pixbuf_new_from_file (imageFile, &gerror);
 			if (image == NULL) {
-				GtkWidget *dialog = gtk_message_dialog_new (NULL, 
-									    GTK_DIALOG_DESTROY_WITH_PARENT,
-									    GTK_MESSAGE_ERROR,
-									    GTK_BUTTONS_OK,
-									    _("There was an error loading an image: %s"),
-									    err->message);
+				GtkWidget *dialog =
+				    gtk_message_dialog_new (NULL,
+							    GTK_DIALOG_DESTROY_WITH_PARENT,
+							    GTK_MESSAGE_ERROR,
+							    GTK_BUTTONS_OK,
+							    _
+							    ("There was an error loading an image: %s"),
+							    gerror->
+							    message);
 				g_signal_connect (G_OBJECT (dialog),
 						  "response",
-						  G_CALLBACK (gtk_widget_destroy), NULL);
+						  G_CALLBACK
+						  (gtk_widget_destroy),
+						  NULL);
 
-				gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+				gtk_window_set_resizable (GTK_WINDOW
+							  (dialog), FALSE);
 
 				gtk_widget_show (dialog);
-				g_error_free (err);
+				g_error_free (gerror);
 			}
-			XklDebug (150,
-				  "Image %d[%s] loaded -> %p[%dx%d]\n",
-				  i, imageFile, image,
-				  gdk_pixbuf_get_width (image),
-				  gdk_pixbuf_get_height (image));
+			xkl_debug (150,
+				   "Image %d[%s] loaded -> %p[%dx%d]\n",
+				   i, imageFile, image,
+				   gdk_pixbuf_get_width (image),
+				   gdk_pixbuf_get_height (image));
 			g_free (imageFile);
 		}
 		/* We append the image anyway - even if it is NULL! */
-		appletConfig->images = g_slist_prepend (appletConfig->images, image);
+		appletConfig->images =
+		    g_slist_prepend (appletConfig->images, image);
 	}
 }
 
 void
 GSwitchItAppletConfigInit (GSwitchItAppletConfig * appletConfig,
-			   GConfClient * confClient)
+			   GConfClient * confClient, XklEngine * engine)
 {
 	GError *gerror = NULL;
 	gchar *sp, *datadir;
 
 	memset (appletConfig, 0, sizeof (*appletConfig));
 	appletConfig->confClient = confClient;
+	appletConfig->engine = engine;
 	g_object_ref (appletConfig->confClient);
 
 	gconf_client_add_dir (appletConfig->confClient,
@@ -1204,7 +1248,9 @@
 void
 GSwitchItAppletConfigActivate (GSwitchItAppletConfig * appletConfig)
 {
-	XklSetSecondaryGroupsMask (appletConfig->secondaryGroupsMask);
+	xkl_engine_set_secondary_groups_mask (appletConfig->engine,
+					      appletConfig->
+					      secondaryGroupsMask);
 }
 
 void
@@ -1214,7 +1260,8 @@
 {
 	_GSwitchItConfigAddListener (appletConfig->confClient,
 				     GSWITCHIT_APPLET_CONFIG_DIR, func,
-				     userData, &appletConfig->configListenerId);
+				     userData,
+				     &appletConfig->configListenerId);
 }
 
 void
@@ -1225,27 +1272,31 @@
 }
 
 Bool
-GSwitchItKbdConfigGetDescriptions (const char *name,
-				char **layoutShortDescr,
-				char **layoutDescr,
-				char **variantShortDescr,
-				char **variantDescr)
+GSwitchItKbdConfigGetDescriptions (XklConfigRegistry * configRegistry,
+				   const gchar * name,
+				   gchar ** layoutShortDescr,
+				   gchar ** layoutDescr,
+				   gchar ** variantShortDescr,
+				   gchar ** variantDescr)
 {
 	char *layoutName = NULL, *variantName = NULL;
-	if (!GSwitchItKbdConfigSplitItems (name, &layoutName, &variantName))
+	if (!GSwitchItKbdConfigSplitItems
+	    (name, &layoutName, &variantName))
 		return FALSE;
-	return _GSwitchItKbdConfigGetDescriptions (layoutName, variantName,
-						layoutShortDescr,
-						layoutDescr,
-						variantShortDescr,
-						variantDescr);
+	return _GSwitchItKbdConfigGetDescriptions (configRegistry,
+						   layoutName,
+						   variantName,
+						   layoutShortDescr,
+						   layoutDescr,
+						   variantShortDescr,
+						   variantDescr);
 }
 
-const char *
-GSwitchItKbdConfigFormatFullLayout (const char *layoutDescr,
-				 const char *variantDescr)
+const gchar *
+GSwitchItKbdConfigFormatFullLayout (const gchar * layoutDescr,
+				    const gchar * variantDescr)
 {
-	static char fullDescr[XKL_MAX_CI_DESC_LENGTH * 2];
+	static gchar fullDescr[XKL_MAX_CI_DESC_LENGTH * 2];
 	if (variantDescr == NULL)
 		g_snprintf (fullDescr, sizeof (fullDescr), "%s",
 			    layoutDescr);
@@ -1255,55 +1306,221 @@
 	return fullDescr;
 }
 
-GSList *
-GSwitchItConfigLoadGroupDescriptionsUtf8 (GSwitchItConfig * config)
+gchar **
+GSwitchItConfigLoadGroupDescriptionsUtf8 (GSwitchItConfig * config,
+					  XklConfigRegistry *
+					  configRegistry)
 {
 	int i;
-	const char **pNativeNames = XklGetGroupNames ();
-	GSList *rv = NULL;
-	if ((XklGetBackendFeatures() & XKLF_MULTIPLE_LAYOUTS_SUPPORTED) && 
-	    config->layoutNamesAsGroupNames) {
-		XklConfigRec xklConfig;
-		XklConfigRecInit (&xklConfig);
-		if (XklConfigGetFromServer (&xklConfig)) {
-			char **pl = xklConfig.layouts;
-			char **pv = xklConfig.variants;
-			for (i = xklConfig.numLayouts; --i >= 0;) {
+	const gchar **pNativeNames =
+	    xkl_engine_get_groups_names (config->engine);
+	guint totalGroups = xkl_engine_get_num_groups (config->engine);
+	guint totalLayouts;
+	gchar **rv = g_new0 (char *, totalGroups + 1);
+	gchar **pCurrentDescr = rv;
+
+	if ((xkl_engine_get_features (config->engine) &
+	     XKLF_MULTIPLE_LAYOUTS_SUPPORTED)
+	    && config->layoutNamesAsGroupNames) {
+		XklConfigRec *xklConfig = xkl_config_rec_new ();
+		if (xkl_config_rec_get_from_server
+		    (xklConfig, config->engine)) {
+			char **pl = xklConfig->layouts;
+			char **pv = xklConfig->variants;
+			i = totalGroups;
+			while (pl != NULL && *pl != NULL && i >= 0) {
 				char *lSDescr;
 				char *lDescr;
 				char *vSDescr;
 				char *vDescr;
 				if (_GSwitchItKbdConfigGetDescriptions
-				    (*pl++, *pv++, &lSDescr, &lDescr,
-				     &vSDescr, &vDescr)) {
+				    (configRegistry, *pl++, *pv++,
+				     &lSDescr, &lDescr, &vSDescr,
+				     &vDescr)) {
 					char *nameUtf =
 					    g_locale_to_utf8
 					    (GSwitchItKbdConfigFormatFullLayout
 					     (lDescr, vDescr), -1, NULL,
 					     NULL, NULL);
-					rv = g_slist_append (rv, nameUtf);
+					*pCurrentDescr++ = nameUtf;
 				} else {
-					rv = g_slist_append (rv, g_strdup(""));
+					*pCurrentDescr++ = g_strdup ("");
 				}
 			}
 		}
-		XklConfigRecDestroy (&xklConfig);
+		g_object_unref (G_OBJECT (xklConfig));
 		/* Worst case - multiple layous - but SOME of them are multigrouped :((( 
 		   We cannot do much - just add empty descriptions. 
 		   The UI is going to be messy. 
 		   Canadian layouts are famous for this sh.t. */
-		if (g_slist_length (rv) != XklGetNumGroups())
-		{
-			XklDebug (0, "The mismatch between "
-				  "the number of groups: %d and number of layouts: %d\n",
-				  XklGetNumGroups(), g_slist_length (rv));
-			for (i = XklGetNumGroups() - g_slist_length (rv); --i>=0;)
-				rv = g_slist_append (rv, g_strdup(""));
+		totalLayouts = g_strv_length (rv);
+		if (totalLayouts != totalGroups) {
+			xkl_debug (0,
+				   "The mismatch between "
+				   "the number of groups: %d and number of layouts: %d\n",
+				   totalGroups, totalLayouts);
+			pCurrentDescr = rv + totalLayouts;
+			for (i = totalGroups - totalLayouts; --i >= 0;)
+				*pCurrentDescr++ = g_strdup ("");
 		}
 	}
-	if (rv == NULL)
-		for (i = XklGetNumGroups (); --i >= 0;)
-			rv = g_slist_append (rv, g_strdup (*pNativeNames++));
+	totalLayouts = g_strv_length (rv);
+	if (!totalLayouts)
+		for (i = totalGroups; --i >= 0;)
+			*pCurrentDescr++ = g_strdup (*pNativeNames++);
 
 	return rv;
 }
+
+gchar *
+GSwitchItKbdConfigToString (const GSwitchItKbdConfig * config)
+{
+	gchar *layouts = NULL, *options = NULL;
+	GString *buffer = g_string_new (NULL);
+
+	GSList *iter;
+	gint count;
+	gchar *result;
+
+	if (config->layouts) {
+		/* g_slist_length is "expensive", so we determinate the length on the fly */
+		for (iter = config->layouts, count = 0; iter;
+		     iter = iter->next, ++count) {
+			if (buffer->len)
+				g_string_append (buffer, " ");
+
+			g_string_append (buffer,
+					 (const gchar *) iter->data);
+		}
+
+		layouts =
+		    g_strdup_printf (ngettext
+				     ("layout \"%s\"", "layouts \"%s\"",
+				      count), buffer->str);
+		g_string_truncate (buffer, 0);
+	}
+	if (config->options) {
+		/* g_slist_length is "expensive", so we determinate the length on the fly */
+		for (iter = config->options, count = 0; iter;
+		     iter = iter->next, ++count) {
+			if (buffer->len)
+				g_string_append (buffer, " ");
+
+			g_string_append (buffer,
+					 (const gchar *) iter->data);
+		}
+
+		options =
+		    g_strdup_printf (ngettext
+				     ("option \"%s\"", "options \"%s\"",
+				      count), buffer->str);
+		g_string_truncate (buffer, 0);
+	}
+
+	g_string_free (buffer, TRUE);
+
+	result =
+	    g_strdup_printf (_("model \"%s\", %s and %s"), config->model,
+			     layouts ? layouts : _("no layout"),
+			     options ? options : _("no options"));
+
+	g_free (options);
+	g_free (layouts);
+
+	return result;
+}
+
+GdkRectangle *
+GSwitchItPreviewLoad (void)
+{
+	GError *gerror = NULL;
+	GdkRectangle *rv = NULL;
+	gint x, y, w, h;
+	GConfClient *confClient = gconf_client_get_default ();
+
+	if (confClient == NULL)
+		return NULL;
+
+	x = gconf_client_get_int (confClient,
+				  GSWITCHIT_PREVIEW_CONFIG_KEY_X, &gerror);
+	if (gerror != NULL) {
+		xkl_debug (0, "Error getting the preview x: %s\n",
+			   gerror->message);
+		g_error_free (gerror);
+		g_object_unref (G_OBJECT (confClient));
+		return NULL;
+	}
+
+	y = gconf_client_get_int (confClient,
+				  GSWITCHIT_PREVIEW_CONFIG_KEY_Y, &gerror);
+	if (gerror != NULL) {
+		xkl_debug (0, "Error getting the preview y: %s\n",
+			   gerror->message);
+		g_error_free (gerror);
+		g_object_unref (G_OBJECT (confClient));
+		return NULL;
+	}
+
+	w = gconf_client_get_int (confClient,
+				  GSWITCHIT_PREVIEW_CONFIG_KEY_WIDTH,
+				  &gerror);
+	if (gerror != NULL) {
+		xkl_debug (0, "Error getting the preview width: %s\n",
+			   gerror->message);
+		g_error_free (gerror);
+		g_object_unref (G_OBJECT (confClient));
+		return NULL;
+	}
+
+	h = gconf_client_get_int (confClient,
+				  GSWITCHIT_PREVIEW_CONFIG_KEY_HEIGHT,
+				  &gerror);
+	if (gerror != NULL) {
+		xkl_debug (0, "Error getting the preview height: %s\n",
+			   gerror->message);
+		g_error_free (gerror);
+		g_object_unref (G_OBJECT (confClient));
+		return NULL;
+	}
+
+	g_object_unref (G_OBJECT (confClient));
+
+	// default values should be just ignored
+	if (x == -1 || y == -1 || w == -1 || h == -1)
+		return NULL;
+
+	rv = g_new (GdkRectangle, 1);
+	rv->x = x;
+	rv->y = y;
+	rv->width = w;
+	rv->height = h;
+	return rv;
+}
+
+void
+GSwitchItPreviewSave (GdkRectangle * rect)
+{
+	GConfClient *confClient = gconf_client_get_default ();
+	GConfChangeSet *cs;
+	GError *gerror = NULL;
+
+	cs = gconf_change_set_new ();
+
+	gconf_change_set_set_int (cs, GSWITCHIT_PREVIEW_CONFIG_KEY_X,
+				  rect->x);
+	gconf_change_set_set_int (cs, GSWITCHIT_PREVIEW_CONFIG_KEY_Y,
+				  rect->y);
+	gconf_change_set_set_int (cs, GSWITCHIT_PREVIEW_CONFIG_KEY_WIDTH,
+				  rect->width);
+	gconf_change_set_set_int (cs, GSWITCHIT_PREVIEW_CONFIG_KEY_HEIGHT,
+				  rect->height);
+
+	gconf_client_commit_change_set (confClient, cs, TRUE, &gerror);
+	if (gerror != NULL) {
+		g_warning ("Error saving preview configuration: %s\n",
+			   gerror->message);
+		g_error_free (gerror);
+	}
+	gconf_change_set_unref (cs);
+	g_object_unref (G_OBJECT (confClient));
+}
diff -u gnome-applets-2.14.2/libgswitchit-/gswitchit_config.h gnome-applets-2.14.2/libgswitchit/gswitchit_config.h
--- gnome-applets-2.14.2/libgswitchit-/gswitchit_config.h	2005-07-26 16:38:25.000000000 -0400
+++ gnome-applets-2.14.2/libgswitchit/gswitchit_config.h	2006-05-26 20:19:52.000000000 -0400
@@ -27,22 +27,30 @@
 #include <gdk-pixbuf/gdk-pixbuf.h>
 #include <gconf/gconf-client.h>
 
-extern const char GSWITCHIT_CONFIG_DIR[];
-extern const char GSWITCHIT_CONFIG_KEY_DEFAULT_GROUP[];
-extern const char GSWITCHIT_CONFIG_KEY_GROUP_PER_WINDOW[];
-extern const char GSWITCHIT_CONFIG_KEY_HANDLE_INDICATORS[];
-extern const char GSWITCHIT_CONFIG_KEY_LAYOUT_NAMES_AS_GROUP_NAMES[];
-
-extern const char GSWITCHIT_KBD_CONFIG_DIR[];
-extern const char GSWITCHIT_KBD_CONFIG_KEY_MODEL[];
-extern const char GSWITCHIT_KBD_CONFIG_KEY_LAYOUTS[];
-extern const char GSWITCHIT_KBD_CONFIG_KEY_OPTIONS[];
+#include <libxklavier/xklavier.h>
+
+extern const gchar GSWITCHIT_CONFIG_DIR[];
+extern const gchar GSWITCHIT_CONFIG_KEY_DEFAULT_GROUP[];
+extern const gchar GSWITCHIT_CONFIG_KEY_GROUP_PER_WINDOW[];
+extern const gchar GSWITCHIT_CONFIG_KEY_HANDLE_INDICATORS[];
+extern const gchar GSWITCHIT_CONFIG_KEY_LAYOUT_NAMES_AS_GROUP_NAMES[];
+
+extern const gchar GSWITCHIT_PREVIEW_CONFIG_DIR[];
+extern const gchar GSWITCHIT_PREVIEW_CONFIG_KEY_X[];
+extern const gchar GSWITCHIT_PREVIEW_CONFIG_KEY_Y[];
+extern const gchar GSWITCHIT_PREVIEW_CONFIG_KEY_WIDTH[];
+extern const gchar GSWITCHIT_PREVIEW_CONFIG_KEY_HEIGHT[];
+
+extern const gchar GSWITCHIT_KBD_CONFIG_DIR[];
+extern const gchar GSWITCHIT_KBD_CONFIG_KEY_MODEL[];
+extern const gchar GSWITCHIT_KBD_CONFIG_KEY_LAYOUTS[];
+extern const gchar GSWITCHIT_KBD_CONFIG_KEY_OPTIONS[];
 
 /*
  * General configuration
  */
 typedef struct _GSwitchItConfig {
-	int defaultGroup;
+	gint defaultGroup;
 	gboolean groupPerApp;
 	gboolean handleIndicators;
 	gboolean layoutNamesAsGroupNames;
@@ -50,6 +58,7 @@
 	/* private, transient */
 	GConfClient *confClient;
 	int configListenerId;
+	XklEngine *engine;
 } GSwitchItConfig;
 
 /*
@@ -63,6 +72,7 @@
 	/* private, transient */
 	GConfClient *confClient;
 	int configListenerId;
+	XklEngine *engine;
 } GSwitchItKbdConfig;
 
 /*
@@ -79,13 +89,15 @@
 	GSList *images;
 	GtkIconTheme *iconTheme;
 	int configListenerId;
+	XklEngine *engine;
 } GSwitchItAppletConfig;
 
 /**
  * GSwitchItConfig functions
  */
 extern void GSwitchItConfigInit (GSwitchItConfig * config,
-				 GConfClient * confClient);
+				 GConfClient * confClient,
+				 XklEngine * engine);
 extern void GSwitchItConfigTerm (GSwitchItConfig * config);
 
 extern void GSwitchItConfigLoadFromGConf (GSwitchItConfig * config);
@@ -95,17 +107,19 @@
 extern gboolean GSwitchItConfigActivate (GSwitchItConfig * config);
 
 /* Affected by XKB and XKB/GConf configuration */
-extern GSList *
-GSwitchItConfigLoadGroupDescriptionsUtf8 (GSwitchItConfig * config);
+extern gchar **GSwitchItConfigLoadGroupDescriptionsUtf8 (GSwitchItConfig *
+							 config,
+							 XklConfigRegistry
+							 * configRegistry);
 
-extern void GSwitchItConfigLockNextGroup (void);
+extern void GSwitchItConfigLockNextGroup (GSwitchItConfig * config);
 
-extern void GSwitchItConfigLockPrevGroup (void);
+extern void GSwitchItConfigLockPrevGroup (GSwitchItConfig * config);
 
-extern void GSwitchItConfigRestoreGroup (void);
+extern void GSwitchItConfigRestoreGroup (GSwitchItConfig * config);
 
 extern void GSwitchItConfigStartListen (GSwitchItConfig * config,
-					GConfClientNotifyFunc func, 
+					GConfClientNotifyFunc func,
 					gpointer user_data);
 
 extern void GSwitchItConfigStopListen (GSwitchItConfig * config);
@@ -114,24 +128,31 @@
  * GSwitchItKbdConfig functions
  */
 extern void GSwitchItKbdConfigInit (GSwitchItKbdConfig * kbdConfig,
-				    GConfClient * confClient);
+				    GConfClient * confClient,
+				    XklEngine * engine);
 extern void GSwitchItKbdConfigTerm (GSwitchItKbdConfig * kbdConfig);
 
-extern void GSwitchItKbdConfigLoadFromGConf (GSwitchItKbdConfig * kbdConfig,
-					     GSwitchItKbdConfig * kbdConfigDefault);
+extern void GSwitchItKbdConfigLoadFromGConf (GSwitchItKbdConfig *
+					     kbdConfig,
+					     GSwitchItKbdConfig *
+					     kbdConfigDefault);
 
 extern void GSwitchItKbdConfigSaveToGConf (GSwitchItKbdConfig * kbdConfig);
 
-extern void GSwitchItKbdConfigLoadFromGConfBackup (GSwitchItKbdConfig * kbdConfig);
+extern void GSwitchItKbdConfigLoadFromGConfBackup (GSwitchItKbdConfig *
+						   kbdConfig);
 
-extern void GSwitchItKbdConfigSaveToGConfBackup (GSwitchItKbdConfig * kbdConfig);
+extern void GSwitchItKbdConfigSaveToGConfBackup (GSwitchItKbdConfig *
+						 kbdConfig);
 
-extern void GSwitchItKbdConfigLoadFromXInitial (GSwitchItKbdConfig * kbdConfig);
+extern void GSwitchItKbdConfigLoadFromXInitial (GSwitchItKbdConfig *
+						kbdConfig);
 
-extern void GSwitchItKbdConfigLoadFromXCurrent (GSwitchItKbdConfig * kbdConfig);
+extern void GSwitchItKbdConfigLoadFromXCurrent (GSwitchItKbdConfig *
+						kbdConfig);
 
 extern void GSwitchItKbdConfigStartListen (GSwitchItKbdConfig * kbdConfig,
-					   GConfClientNotifyFunc func, 
+					   GConfClientNotifyFunc func,
 					   gpointer user_data);
 
 extern void GSwitchItKbdConfigStopListen (GSwitchItKbdConfig * kbdConfig);
@@ -139,55 +160,85 @@
 extern gboolean GSwitchItKbdConfigEquals (GSwitchItKbdConfig * kbdConfig1,
 					  GSwitchItKbdConfig * kbdConfig2);
 
-extern gboolean GSwitchItKbdConfigActivate (GSwitchItKbdConfig * kbdConfig);
+extern gboolean GSwitchItKbdConfigActivate (GSwitchItKbdConfig *
+					    kbdConfig);
 
-extern const char *GSwitchItKbdConfigMergeItems (const char *parent,
-						 const char *child);
+extern const gchar *GSwitchItKbdConfigMergeItems (const gchar * parent,
+						  const gchar * child);
 
-extern gboolean GSwitchItKbdConfigSplitItems (const char *merged,
-					      char **parent, char **child);
+extern gboolean GSwitchItKbdConfigSplitItems (const gchar * merged,
+					      gchar ** parent,
+					      gchar ** child);
+
+extern Bool GSwitchItKbdConfigGetDescriptions (XklConfigRegistry *
+					       configRegistry,
+					       const gchar * name,
+					       gchar ** layoutShortDescr,
+					       gchar ** layoutDescr,
+					       gchar ** variantShortDescr,
+					       gchar ** variantDescr);
+
+extern const gchar *GSwitchItKbdConfigFormatFullLayout (const gchar
+							* layoutDescr,
+							const gchar *
+							variantDescr);
 
-extern Bool GSwitchItKbdConfigGetDescriptions (const char *name,
-					       char **layoutShortDescr,
-					       char **layoutDescr,
-					       char **variantShortDescr,
-					       char **variantDescr);
+extern gchar *GSwitchItKbdConfigToString (const GSwitchItKbdConfig *
+					  config);
 
-extern const char *GSwitchItKbdConfigFormatFullLayout (const char *layoutDescr, 
-						       const char *variantDescr);
 
 /**
  * GSwitchItAppletConfig functions - 
  * some of them require GSwitchItKbdConfig as well - 
  * for loading approptiate images
  */
-extern void GSwitchItAppletConfigInit (GSwitchItAppletConfig * appletConfig,
-				       GConfClient * confClient);
-extern void GSwitchItAppletConfigTerm (GSwitchItAppletConfig * appletConfig);
-
-extern void GSwitchItAppletConfigLoadFromGConf (GSwitchItAppletConfig * appletConfig);
-extern void GSwitchItAppletConfigSaveToGConf (GSwitchItAppletConfig * appletConfig);
-
-extern char
-*GSwitchItAppletConfigGetImagesFile (GSwitchItAppletConfig * appletConfig,
-				     GSwitchItKbdConfig * kbdConfig,
-				     int group);
-
-extern void GSwitchItAppletConfigLoadImages (GSwitchItAppletConfig * appletConfig,
-					     GSwitchItKbdConfig * kbdConfig);
-extern void GSwitchItAppletConfigFreeImages (GSwitchItAppletConfig * appletConfig);
+extern void GSwitchItAppletConfigInit (GSwitchItAppletConfig *
+				       appletConfig,
+				       GConfClient * confClient,
+				       XklEngine * engine);
+extern void GSwitchItAppletConfigTerm (GSwitchItAppletConfig *
+				       appletConfig);
+
+extern void GSwitchItAppletConfigLoadFromGConf (GSwitchItAppletConfig *
+						appletConfig);
+extern void GSwitchItAppletConfigSaveToGConf (GSwitchItAppletConfig *
+					      appletConfig);
+
+extern gchar *GSwitchItAppletConfigGetImagesFile (GSwitchItAppletConfig *
+						  appletConfig,
+						  GSwitchItKbdConfig *
+						  kbdConfig, int group);
+
+extern void GSwitchItAppletConfigLoadImages (GSwitchItAppletConfig *
+					     appletConfig,
+					     GSwitchItKbdConfig *
+					     kbdConfig);
+extern void GSwitchItAppletConfigFreeImages (GSwitchItAppletConfig *
+					     appletConfig);
 
 /* Should be updated on Applet/GConf and Kbd/GConf configuration change */
-extern void GSwitchItAppletConfigUpdateImages (GSwitchItAppletConfig * appletConfig,
-					       GSwitchItKbdConfig * kbdConfig);
+extern void GSwitchItAppletConfigUpdateImages (GSwitchItAppletConfig *
+					       appletConfig,
+					       GSwitchItKbdConfig *
+					       kbdConfig);
 
 /* Should be updated on Applet/GConf configuration change */
-extern void GSwitchItAppletConfigActivate (GSwitchItAppletConfig * appletConfig);
+extern void GSwitchItAppletConfigActivate (GSwitchItAppletConfig *
+					   appletConfig);
 
-extern void GSwitchItAppletConfigStartListen (GSwitchItAppletConfig * appletConfig,
-					      GConfClientNotifyFunc func, 
+extern void GSwitchItAppletConfigStartListen (GSwitchItAppletConfig *
+					      appletConfig,
+					      GConfClientNotifyFunc func,
 					      gpointer user_data);
 
-extern void GSwitchItAppletConfigStopListen (GSwitchItAppletConfig * appletConfig);
+extern void GSwitchItAppletConfigStopListen (GSwitchItAppletConfig *
+					     appletConfig);
+
+/**
+ * GSwitchItPreview functions
+ */
+extern GdkRectangle *GSwitchItPreviewLoad (void);
+
+extern void GSwitchItPreviewSave (GdkRectangle * rect);
 
 #endif
diff -u gnome-applets-2.14.2/libgswitchit-/gswitchit_plugin.h gnome-applets-2.14.2/libgswitchit/gswitchit_plugin.h
--- gnome-applets-2.14.2/libgswitchit-/gswitchit_plugin.h	2005-12-06 18:25:44.000000000 -0500
+++ gnome-applets-2.14.2/libgswitchit/gswitchit_plugin.h	2006-05-26 20:27:01.000000000 -0400
@@ -35,7 +35,8 @@
 typedef gboolean (*GSwitchItPluginInitFunc) (GSwitchItPluginContainer *
 					     pc);
 
-typedef void (*GSwitchItPluginGroupChangedFunc) (GtkWidget * notebook, int newGroup);
+typedef void (*GSwitchItPluginGroupChangedFunc) (GtkWidget * notebook,
+						 int newGroup);
 
 typedef void (*GSwitchItPluginConfigChangedFunc) (const GSwitchItKbdConfig
 						  * from,
@@ -105,7 +106,8 @@
 
 extern guint GSwitchItPluginGetNumGroups (GSwitchItPluginContainer * pc);
 
-extern GSList*
-GSwitchItPluginLoadLocalizedGroupNames (GSwitchItPluginContainer * pc);
+extern gchar
+    **GSwitchItPluginLoadLocalizedGroupNames (GSwitchItPluginContainer *
+					      pc);
 
 #endif
diff -u gnome-applets-2.14.2/libgswitchit-/gswitchit_plugin_manager.c gnome-applets-2.14.2/libgswitchit/gswitchit_plugin_manager.c
--- gnome-applets-2.14.2/libgswitchit-/gswitchit_plugin_manager.c	2005-12-06 18:25:44.000000000 -0500
+++ gnome-applets-2.14.2/libgswitchit/gswitchit_plugin_manager.c	2006-04-19 19:18:00.000000000 -0400
@@ -46,11 +46,11 @@
 	if (dir == NULL)
 		return;
 
-	XklDebug (100, "Scanning [%s]...\n", dirname);
+	xkl_debug (100, "Scanning [%s]...\n", dirname);
 	while ((filename = g_dir_read_name (dir)) != NULL) {
 		gchar *fullPath =
 		    g_build_filename (dirname, filename, NULL);
-		XklDebug (100, "Loading plugin module [%s]...\n",
+		xkl_debug (100, "Loading plugin module [%s]...\n",
 			  fullPath);
 		if (fullPath != NULL) {
 			GModule *module = g_module_open (fullPath, 0);
@@ -68,7 +68,7 @@
 						    g_new0
 						    (GSwitchItPluginManagerRecord,
 						     1);
-						XklDebug (100,
+						xkl_debug (100,
 							  "Loaded plugin from [%s]: [%s]/[%s]...\n",
 							  fullPath,
 							  plugin->name,
@@ -84,12 +84,12 @@
 						continue;
 					}
 				} else
-					XklDebug (0,
+					xkl_debug (0,
 						  "Bad plugin: [%s]\n",
 						  fullPath);
 				g_module_close (module);
 			} else
-				XklDebug (0, "Bad module: [%s], %s\n",
+				xkl_debug (0, "Bad module: [%s], %s\n",
 					  fullPath, g_module_error());
 			g_free (fullPath);
 		}
@@ -101,7 +101,7 @@
 _GSwitchItPluginManagerLoadAll (GSwitchItPluginManager *manager)
 {
 	if (!g_module_supported ()) {
-		XklDebug (0, "Modules are not supported - no plugins!\n");
+		xkl_debug (0, "Modules are not supported - no plugins!\n");
 		return;
 	}
 	_GSwitchItPluginManagerAddPluginsDir (manager, SYS_PLUGIN_DIR);
@@ -113,7 +113,7 @@
 {
 	const GSwitchItPlugin *plugin = rec->plugin;
 	if (plugin != NULL) {
-		XklDebug (100, "Terminating plugin: [%s]...\n",
+		xkl_debug (100, "Terminating plugin: [%s]...\n",
 			  plugin->name);
 		if (plugin->termCallback)
 			(*plugin->termCallback) ();
@@ -123,7 +123,7 @@
 static void
 _GSwitchItPluginManagerRecDestroy (GSwitchItPluginManagerRecord *rec)
 {
-	XklDebug (100, "Unloading plugin: [%s]...\n", rec->plugin->name);
+	xkl_debug (100, "Unloading plugin: [%s]...\n", rec->plugin->name);
 
 	g_module_close (rec->module);
 	g_free (rec);
@@ -158,7 +158,7 @@
 	GSList *pluginNameNode = enabledPlugins;
 	if (manager->allPluginRecs == NULL)
 		return;
-	XklDebug (100, "Initializing all enabled plugins...\n");
+	xkl_debug (100, "Initializing all enabled plugins...\n");
 	while (pluginNameNode != NULL) {
 		const char *fullPath = pluginNameNode->data;
 		if (fullPath != NULL) {
@@ -171,7 +171,7 @@
 				const GSwitchItPlugin *plugin =
 				    rec->plugin;
 				gboolean initialized = FALSE;
-				XklDebug (100,
+				xkl_debug (100,
 					  "Initializing plugin: [%s] from [%s]...\n",
 					  plugin->name, fullPath);
 				if (plugin->initCallback != NULL)
@@ -183,7 +183,7 @@
 				manager->initedPluginRecs =
 				    g_slist_append (manager->
 						    initedPluginRecs, rec);
-				XklDebug (100,
+				xkl_debug (100,
 					  "Plugin [%s] initialized: %d\n",
 					  plugin->name, initialized);
 			}
@@ -324,7 +324,7 @@
 		int groupToAssign =
 		    (*plugin->windowCreatedCallback) (win, parent);
 		if (groupToAssign != -1) {
-			XklDebug (100,
+			xkl_debug (100,
 				  "Plugin [%s] assigned group %d to new window %ld\n",
 				  plugin->name, groupToAssign, win);
 			return groupToAssign;
@@ -348,7 +348,7 @@
 						       groupDescription,
 						       kbdConfig);
 		if (decoratedWidget != NULL) {
-			XklDebug (100,
+			xkl_debug (100,
 				  "Plugin [%s] decorated widget %p to %p\n",
 				  plugin->name, widget, decoratedWidget);
 			return decoratedWidget;
@@ -383,9 +383,3 @@
 {
 	g_object_unref (pc->confClient);
 }
-
-guint
-GSwitchItPluginGetNumGroups (GSwitchItPluginContainer *pc)
-{
-	return XklGetNumGroups ();
-}
diff -u gnome-applets-2.14.2/libgswitchit-/gswitchit_util.c gnome-applets-2.14.2/libgswitchit/gswitchit_util.c
--- gnome-applets-2.14.2/libgswitchit-/gswitchit_util.c	2005-03-16 07:53:08.000000000 -0500
+++ gnome-applets-2.14.2/libgswitchit/gswitchit_util.c	2006-04-19 19:18:00.000000000 -0400
@@ -72,5 +72,5 @@
 void
 GSwitchItInstallGlibLogAppender (void)
 {
-	XklSetLogAppender (GSwitchItLogAppender);
+	xkl_set_log_appender (GSwitchItLogAppender);
 }
Only in gnome-applets-2.14.2/libgswitchit: .indent.pro
Only in gnome-applets-2.14.2/libgswitchit: MAINTAINERS
diff -u gnome-applets-2.14.2/gswitchit-/ChangeLog gnome-applets-2.14.2/gswitchit/ChangeLog
--- gnome-applets-2.14.2/gswitchit-/ChangeLog	2006-04-08 13:27:51.000000000 -0400
+++ gnome-applets-2.14.2/gswitchit/ChangeLog	2006-05-26 20:21:10.000000000 -0400
@@ -1,3 +1,17 @@
+2006-05-27  Sergey Udaltsov <svu@gnome.org>
+
+	* gswitchit-applet.c, gswitchit-plugin.c: Better UTF-8 description
+	handling, changed GSList to NULL-terminated gchar **
+
+2006-05-23  Sergey Udaltsov <svu@gnome.org>
+
+	* gswitchit-applet.c: Mouse wheel events are ignored
+
+2006-04-23  Sergey Udaltsov <svu@gnome.org>
+
+	* gswitchit-applet.c: Layout View keeps track of the window
+	geometry (same as gnome-keyboard-properties "Add Layout" dialog)
+
 2006-04-08  cyphra  <serrador@cvs.gnome.org>
 
 	* help/es/es.po: Updated Spanish translation
diff -u gnome-applets-2.14.2/gswitchit-/gswitchit-applet.c gnome-applets-2.14.2/gswitchit/gswitchit-applet.c
--- gnome-applets-2.14.2/gswitchit-/gswitchit-applet.c	2006-03-29 12:30:57.000000000 -0500
+++ gnome-applets-2.14.2/gswitchit/gswitchit-applet.c	2006-05-26 20:21:10.000000000 -0400
@@ -32,8 +32,6 @@
 #include <gdk/gdkx.h>
 #include <glade/glade.h>
 
-#include <libxklavier/xklavier_config.h>
-
 #define GROUPS_SUBMENU_PATH "/popups/popup/groups"
 
 /* we never build applet without XKB, so far: TODO */
@@ -45,8 +43,14 @@
  * BAD STYLE: Taken from xklavier_private_xkb.h
  * Any ideas on architectural improvements are WELCOME
  */
-extern Bool _XklXkbConfigPrepareNative( const XklConfigRecPtr data, XkbComponentNamesPtr componentNamesPtr );
-extern void _XklXkbConfigCleanupNative( XkbComponentNamesPtr componentNamesPtr );
+extern gboolean xkl_xkb_config_native_prepare (XklEngine * engine,
+					       const XklConfigRec * data,
+					       XkbComponentNamesPtr
+					       component_names);
+
+extern void xkl_xkb_config_native_cleanup (XklEngine * engine,
+					   XkbComponentNamesPtr
+					   component_names);
 /* */
 #endif
 
@@ -64,7 +68,7 @@
 		GSList* cur; \
 		for (cur = globals.appletInstances; cur != NULL; cur = cur->next) { \
 			GSwitchItApplet * sia = (GSwitchItApplet*)cur->data;
-#define NextApplet \
+#define NextApplet() \
 		} \
 	}
 
@@ -150,9 +154,9 @@
 	GSwitchItAppletRevalidate (sia);
 
 	/* also, update tooltips */
-	currentState = XklGetCurrentState ();
+	currentState = xkl_engine_get_current_state (globals.engine);
 	if (currentState->group >= 0) {
-		pname = g_slist_nth_data (globals.groupNames, currentState->group);
+		pname = globals.groupNames[currentState->group];
 		GSwitchItAppletSetTooltip (sia, pname);
 	}
 }
@@ -160,78 +164,82 @@
 /* Should be called once for all applets */
 static void
 GSwitchItConfigChanged (GConfClient * client,
-			guint cnxn_id,
-			GConfEntry * entry)
+			guint cnxn_id, GConfEntry * entry)
 {
-	XklDebug (100,
-		  "General configuration changed in GConf - reiniting...\n");
+	xkl_debug (100,
+		   "General configuration changed in GConf - reiniting...\n");
 	GSwitchItConfigLoadFromGConf (&globals.config);
 	GSwitchItConfigActivate (&globals.config);
-	ForAllApplets ()
+	ForAllApplets () {
 		GSwitchItAppletReinitUi (sia);
-	NextApplet
+	} NextApplet ();
 }
 
 /* Should be called once for all applets */
 static void
 GSwitchItAppletConfigChanged (GConfClient * client,
-			      guint cnxn_id,
-			      GConfEntry * entry)
+			      guint cnxn_id, GConfEntry * entry)
 {
-	GSList* enabledPlugins = NULL;
+	GSList *enabledPlugins = NULL;
 
-	XklDebug (100,
-		  "Applet configuration changed in GConf - reiniting...\n");
+	xkl_debug (100,
+		   "Applet configuration changed in GConf - reiniting...\n");
 	GSwitchItAppletConfigLoadFromGConf (&globals.appletConfig);
-	GSwitchItAppletConfigUpdateImages (&globals.appletConfig, &globals.kbdConfig);
+	GSwitchItAppletConfigUpdateImages (&globals.appletConfig,
+					   &globals.kbdConfig);
 	GSwitchItAppletConfigActivate (&globals.appletConfig);
-	
+
 	GSwitchItPluginManagerTogglePlugins (&globals.pluginManager,
 					     &globals.pluginContainer,
-					     globals.appletConfig.enabledPlugins);
+					     globals.appletConfig.
+					     enabledPlugins);
 
-	ForAllApplets ()
+	ForAllApplets () {
 		GSwitchItAppletReinitUi (sia);
-	NextApplet
+	} NextApplet ();
 }
 
 /* Should be called once for all applets */
 static void
-GSwitchItAppletKbdConfigCallback (void)
+GSwitchItAppletKbdConfigCallback (XklEngine * engine)
 {
-	XklDebug (100,
-		  "XKB configuration changed on X Server - reiniting...\n");
+	xkl_debug (100,
+		   "XKB configuration changed on X Server - reiniting...\n");
 
 	GSwitchItKbdConfigLoadFromXCurrent (&globals.kbdConfig);
-	GSwitchItAppletConfigUpdateImages (&globals.appletConfig, &globals.kbdConfig);
+	GSwitchItAppletConfigUpdateImages (&globals.appletConfig,
+					   &globals.kbdConfig);
 
-	while (globals.groupNames != NULL) {
-		GSList * nn = globals.groupNames;
-		globals.groupNames = g_slist_remove_link (globals.groupNames, nn);
-		g_free (nn->data);
-		g_slist_free_1 (nn);
-	}
-	globals.groupNames = GSwitchItConfigLoadGroupDescriptionsUtf8 (&globals.config);
+	g_strfreev (globals.groupNames);
+	globals.groupNames =
+	    GSwitchItConfigLoadGroupDescriptionsUtf8 (&globals.config,
+						      globals.
+						      configRegistry);
 
-	ForAllApplets ()
+	ForAllApplets () {
 		GSwitchItAppletReinitUi (sia);
-	NextApplet
+	}
+	NextApplet ();
 }
 
 /* Should be called once for all applets */
 static void
-GSwitchItAppletStateCallback (XklStateChange changeType,
-			      int group, Bool restore)
+GSwitchItAppletStateCallback (XklEngine * engine,
+			      XklEngineStateChange changeType, gint group,
+			      gboolean restore)
 {
-	XklDebug (150, "group is now %d, restore: %d\n", group, restore);
+	xkl_debug (150, "group is now %d, restore: %d\n", group, restore);
 
 	if (changeType == GROUP_CHANGED) {
-		ForAllApplets ()
-			GSwitchItPluginManagerGroupChanged (&globals.pluginManager, 
-					sia->notebook, group);
-			XklDebug (200, "do repaint\n");
+		ForAllApplets () {
+			GSwitchItPluginManagerGroupChanged (&globals.
+							    pluginManager,
+							    sia->notebook,
+							    group);
+			xkl_debug (200, "do repaint\n");
 			GSwitchItAppletRevalidateGroup (sia, group);
-		NextApplet
+		}
+		NextApplet ();
 	}
 }
 
@@ -241,37 +249,43 @@
 {
 	XEvent *xevent = (XEvent *) xev;
 
-	XklFilterEvents (xevent);
+	xkl_engine_filter_events (globals.engine, xevent);
 	switch (xevent->type) {
 	case DestroyNotify:
 		{
-			XDestroyWindowEvent *de = (XDestroyWindowEvent *) xev;
-			
-			ForAllApplets ()
-				GdkWindow * w = sia->appletAncestor;
+			XDestroyWindowEvent *de =
+			    (XDestroyWindowEvent *) xev;
+
+			ForAllApplets () {
+				GdkWindow *w = sia->appletAncestor;
 
 				/* compare the applet's parent window with the even window */
-				if (w != NULL && GDK_WINDOW_XID (w) == de->window) {
+				if (w != NULL
+				    && GDK_WINDOW_XID (w) == de->window) {
 					sia->appletAncestor = NULL;
 				}
-			NextApplet
-
+			}
+			NextApplet ();
 		}
 		break;
 	case ReparentNotify:
 		{
 			XReparentEvent *rne = (XReparentEvent *) xev;
 
-			ForAllApplets ()
-				GdkWindow * w = sia->appletAncestor;
+			ForAllApplets () {
+				GdkWindow *w = sia->appletAncestor;
 
 				/* compare the applet's parent window with the even window */
-				if (w != NULL && GDK_WINDOW_XID (w) == rne->window) {
-					/* if so - make it transparent...*/
-					XklSetTransparent (rne->window, TRUE);
-					break; /* once is enough */
+				if (w != NULL
+				    && GDK_WINDOW_XID (w) == rne->window) {
+					/* if so - make it transparent... */
+					xkl_engine_set_window_transparent
+					    (globals.engine, rne->window,
+					     TRUE);
+					break;	/* once is enough */
 				}
-			NextApplet
+			}
+			NextApplet ();
 		}
 		break;
 	}
@@ -283,7 +297,7 @@
 GSwitchItAppletRevalidate (GSwitchItApplet * sia)
 {
 	XklState *currentState;
-	currentState = XklGetCurrentState ();
+	currentState = xkl_engine_get_current_state (globals.engine);
 	if (currentState->group >= 0)
 		GSwitchItAppletRevalidateGroup (sia, currentState->group);
 }
@@ -318,8 +332,7 @@
 		image = GDK_PIXBUF (pimage);
 		orient =
 		    panel_applet_get_orient (PANEL_APPLET (sia->applet));
-		psize =
-		    panel_applet_get_size (PANEL_APPLET (sia->applet));
+		psize = panel_applet_get_size (PANEL_APPLET (sia->applet));
 		isize = psize - 4;
 		xyratio =
 		    1.0 * gdk_pixbuf_get_width (image) /
@@ -340,8 +353,11 @@
 			ysize1 = psize / xyratio;
 			break;
 		}
-		XklDebug (150, "Resizing the applet for size %d: %d X %d\n", isize, xsize, ysize);
-		XklDebug (150, "Would be %d: %d X %d\n", psize, xsize1, ysize1);
+		xkl_debug (150,
+			   "Resizing the applet for size %d: %d X %d\n",
+			   isize, xsize, ysize);
+		xkl_debug (150, "Would be %d: %d X %d\n", psize, xsize1,
+			   ysize1);
 
 		scaled =
 		    gdk_pixbuf_scale_simple (image, xsize, ysize,
@@ -350,7 +366,7 @@
 		gtk_container_add (GTK_CONTAINER (sia->ebox), flagImg);
 		g_object_unref (G_OBJECT (scaled));
 	} else {
-		gpointer pcounter = NULL; 
+		gpointer pcounter = NULL;
 		char *prevLayoutName = NULL;
 		char *labelTitle = NULL;
 		int counter = 0;
@@ -359,12 +375,15 @@
 		GtkWidget *align, *label;
 		static GHashTable *shortDescrs = NULL;
 		if (group == 0)
-			shortDescrs = g_hash_table_new_full (g_str_hash, g_str_equal,
-							     g_free, NULL);
+			shortDescrs =
+			    g_hash_table_new_full (g_str_hash, g_str_equal,
+						   g_free, NULL);
 
-		if (XklGetBackendFeatures() & XKLF_MULTIPLE_LAYOUTS_SUPPORTED) {
+		if (xkl_engine_get_features (globals.engine) &
+		    XKLF_MULTIPLE_LAYOUTS_SUPPORTED) {
 			char *fullLayoutName =
-			    (char *) g_slist_nth_data (globals.kbdConfig.layouts, 
+			    (char *) g_slist_nth_data (globals.kbdConfig.
+						       layouts,
 						       group);
 			char *variantName;
 			if (!GSwitchItKbdConfigSplitItems
@@ -376,44 +395,45 @@
 				    sizeof (configItem.name), "%s",
 				    layoutName);
 
-			if (XklConfigFindLayout (&configItem)) {
-				char *sd = configItem.shortDescription;
+			if (xkl_config_registry_find_layout
+			    (globals.configRegistry, &configItem)) {
+				char *sd = configItem.short_description;
 				if (sd != NULL && *sd != '\0') {
-					layoutName = 
+					layoutName =
 					    g_locale_to_utf8 (sd, -1, NULL,
 							      NULL, NULL);
 				}
 			}
 		} else
-			layoutName = g_strdup (g_slist_nth_data (globals.groupNames, group));
+			layoutName = g_strdup (globals.groupNames[group]);
 
 		if (layoutName == NULL)
 			layoutName = g_strdup ("?");
 
-		if (g_hash_table_lookup_extended (shortDescrs, layoutName, 
-						  (gpointer*)&prevLayoutName, &pcounter))
-		{
+		if (g_hash_table_lookup_extended (shortDescrs, layoutName,
+						  (gpointer *) &
+						  prevLayoutName,
+						  &pcounter)) {
 			/* "next" same description */
-			char* appendix = NULL;
-			counter = GPOINTER_TO_INT(pcounter);
+			char *appendix = NULL;
+			counter = GPOINTER_TO_INT (pcounter);
 			appendix = g_strnfill (counter, '*');
-			labelTitle = g_strconcat (layoutName, appendix, NULL);
+			labelTitle =
+			    g_strconcat (layoutName, appendix, NULL);
 			g_free (appendix);
 			/* layoutName is g_freed inside g_hash_table_insert function */
-		}
-		else
-		{
+		} else {
 			/* "first" time this description */
 			labelTitle = g_strdup (layoutName);
 		}
-		g_hash_table_insert (shortDescrs, layoutName, GINT_TO_POINTER (counter + 1));
+		g_hash_table_insert (shortDescrs, layoutName,
+				     GINT_TO_POINTER (counter + 1));
 
 		align = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
 		label = gtk_label_new (labelTitle);
 		g_free (labelTitle);
 
-		if (group == XklGetNumGroups ())
-		{
+		if (group == xkl_engine_get_num_groups (globals.engine)) {
 			g_hash_table_destroy (shortDescrs);
 			shortDescrs = NULL;
 		}
@@ -425,13 +445,11 @@
 	}
 	g_signal_connect (G_OBJECT (sia->ebox),
 			  "button_press_event",
-			  G_CALLBACK
-			  (GSwitchItAppletButtonPressed), sia);
+			  G_CALLBACK (GSwitchItAppletButtonPressed), sia);
 
 	g_signal_connect (G_OBJECT (sia->applet),
 			  "key_press_event",
-			  G_CALLBACK
-			  (GSwitchItAppletKeyPressed), sia);
+			  G_CALLBACK (GSwitchItAppletKeyPressed), sia);
 
 	return sia->ebox;
 }
@@ -440,23 +458,24 @@
 GSwitchItAppletFillNotebook (GSwitchItApplet * sia)
 {
 	int grp;
-	int totalGroups = XklGetNumGroups ();
+	int totalGroups = xkl_engine_get_num_groups (globals.engine);
 	GtkNotebook *notebook = GTK_NOTEBOOK (sia->notebook);
 
 	for (grp = 0; grp < totalGroups; grp++) {
 		GtkWidget *page, *decoratedPage;
-		XklDebug (150,
-			  "The widget for the group %d is not ready, let's prepare it!\n",
-			  grp);
+		xkl_debug (150,
+			   "The widget for the group %d is not ready, let's prepare it!\n",
+			   grp);
 		page = GSwitchItAppletPrepareDrawing (sia, grp);
 
 		decoratedPage =
-		    GSwitchItPluginManagerDecorateWidget (&globals.pluginManager,
+		    GSwitchItPluginManagerDecorateWidget (&globals.
+							  pluginManager,
 							  page, grp,
-							  g_slist_nth_data (
-								globals.groupNames,
-								grp),
-							  &globals.kbdConfig);
+							  globals.
+							  groupNames[grp],
+							  &globals.
+							  kbdConfig);
 		page = decoratedPage == NULL ? page : decoratedPage;
 
 		gtk_notebook_append_page (notebook, page, NULL);
@@ -468,11 +487,12 @@
 GSwitchItAppletRevalidateGroup (GSwitchItApplet * sia, int group)
 {
 	const char *pname;
-	XklDebug (200, "Revalidating for group %d\n", group);
+	xkl_debug (200, "Revalidating for group %d\n", group);
 
-	gtk_notebook_set_current_page (GTK_NOTEBOOK (sia->notebook), group + 1);
+	gtk_notebook_set_current_page (GTK_NOTEBOOK (sia->notebook),
+				       group + 1);
 
-	pname = g_slist_nth_data (globals.groupNames, group);
+	pname = globals.groupNames[group];
 	GSwitchItAppletSetTooltip (sia, pname);
 }
 
@@ -486,56 +506,57 @@
 	GSwitchItAppletRevalidate (sia);
 }
 
-static void 
-GSwitchItAppletSetBackground(PanelAppletBackgroundType type,
-			     GtkRcStyle * rc_style,
-			     GtkWidget * w, 
-			     GdkColor * color,
-			     GdkPixmap * pixmap)
+static void
+GSwitchItAppletSetBackground (PanelAppletBackgroundType type,
+			      GtkRcStyle * rc_style,
+			      GtkWidget * w,
+			      GdkColor * color, GdkPixmap * pixmap)
 {
 	GtkStyle *style;
 
 	gtk_widget_set_style (GTK_WIDGET (w), NULL);
 	gtk_widget_modify_style (GTK_WIDGET (w), rc_style);
 
-	switch (type)
-	{
+	switch (type) {
 	case PANEL_NO_BACKGROUND:
-	        break;
+		break;
 	case PANEL_COLOR_BACKGROUND:
-	        gtk_widget_modify_bg (GTK_WIDGET (w),
-	                              GTK_STATE_NORMAL, color);
+		gtk_widget_modify_bg (GTK_WIDGET (w),
+				      GTK_STATE_NORMAL, color);
 		break;
 	case PANEL_PIXMAP_BACKGROUND:
 		style = gtk_style_copy (w->style);
 		if (style->bg_pixmap[GTK_STATE_NORMAL])
-			g_object_unref (style->bg_pixmap[GTK_STATE_NORMAL]);
+			g_object_unref (style->
+					bg_pixmap[GTK_STATE_NORMAL]);
 		style->bg_pixmap[GTK_STATE_NORMAL] = g_object_ref (pixmap);
 		gtk_widget_set_style (w, style);
 		g_object_unref (style);
 		break;
 	}
 	/* go down */
-	if (GTK_IS_CONTAINER (w))
-	{
-		GList * child = gtk_container_get_children (GTK_CONTAINER (w));
-		while (child != NULL)
-		{
+	if (GTK_IS_CONTAINER (w)) {
+		GList *child =
+		    gtk_container_get_children (GTK_CONTAINER (w));
+		while (child != NULL) {
 			GSwitchItAppletSetBackground (type, rc_style,
-			     GTK_WIDGET (child->data), color, pixmap);
+						      GTK_WIDGET (child->
+								  data),
+						      color, pixmap);
 			child = child->next;
 		}
 	}
 }
 
 static void
-GSwitchItAppletChangeBackground (PanelApplet * widget, 
+GSwitchItAppletChangeBackground (PanelApplet * widget,
 				 PanelAppletBackgroundType type,
 				 GdkColor * color, GdkPixmap * pixmap,
 				 GSwitchItApplet * sia)
 {
 	GtkRcStyle *rc_style = gtk_rc_style_new ();
-	GSwitchItAppletSetBackground(type, rc_style, sia->applet, color, pixmap);
+	GSwitchItAppletSetBackground (type, rc_style, sia->applet, color,
+				      pixmap);
 	gtk_rc_style_unref (rc_style);
 }
 
@@ -552,7 +573,7 @@
 	case GDK_Return:
 	case GDK_space:
 	case GDK_KP_Space:
-		GSwitchItConfigLockNextGroup ();
+		GSwitchItConfigLockNextGroup (&globals.config);
 		return TRUE;
 	default:
 		break;
@@ -566,13 +587,12 @@
 			      GdkEventButton *
 			      event, GSwitchItAppletConfig * config)
 {
-	GtkWidget * img = gtk_bin_get_child (GTK_BIN (widget));
-	XklDebug (150, "Flag img size %d x %d\n", 
-			img->allocation.width,
-			img->allocation.height);
+	GtkWidget *img = gtk_bin_get_child (GTK_BIN (widget));
+	xkl_debug (150, "Flag img size %d x %d\n",
+		   img->allocation.width, img->allocation.height);
 	if (event->button == 1 && event->type == GDK_BUTTON_PRESS) {
-		XklDebug (150, "Mouse button pressed on applet\n");
-		GSwitchItConfigLockNextGroup ();
+		xkl_debug (150, "Mouse button pressed on applet\n");
+		GSwitchItConfigLockNextGroup (&globals.config);
 		return TRUE;
 	}
 	return FALSE;
@@ -595,114 +615,150 @@
 	}
 }
 
-static void 
-GSwitchItPreviewResponse (GtkWidget *dialog, gint resp)
+static void
+GSwitchItPreviewResponse (GtkWidget * dialog, gint resp)
 {
-	switch (resp) 
-	{
-		case GTK_RESPONSE_HELP:
-			GSwitchItHelp (GTK_WIDGET (dialog),
-				       "layout-view");
-			break;
-		case GTK_RESPONSE_CLOSE:
-			gtk_widget_destroy (dialog);
-		default:;
+	GdkRectangle rect;
+
+	switch (resp) {
+	case GTK_RESPONSE_HELP:
+		GSwitchItHelp (GTK_WIDGET (dialog), "layout-view");
+		return;
+	case GTK_RESPONSE_CLOSE:
+		gtk_window_get_position (GTK_WINDOW (dialog), &rect.x,
+					 &rect.y);
+		gtk_window_get_size (GTK_WINDOW (dialog), &rect.width,
+				     &rect.height);
+		GSwitchItPreviewSave (&rect);
+		gtk_widget_destroy (dialog);
 	}
 }
 
-static void 
-GSwitchItPreviewDestroy (GtkWidget *dialog, gint group)
+static void
+GSwitchItPreviewDestroy (GtkWidget * dialog, gint group)
 {
-	GladeXML *gladeData = GLADE_XML (gtk_object_get_data (GTK_OBJECT (dialog), "gladeData"));
+	GladeXML *gladeData =
+	    GLADE_XML (gtk_object_get_data
+		       (GTK_OBJECT (dialog), "gladeData"));
 	g_object_unref (G_OBJECT (gladeData));
-	g_hash_table_remove (globals.previewDialogs, GINT_TO_POINTER (group));
+	g_hash_table_remove (globals.previewDialogs,
+			     GINT_TO_POINTER (group));
 }
 
 void
 GSwitchItAppletCmdPreview (BonoboUIComponent *
 			   uic, GSwitchItApplet * sia, const gchar * verb)
 {
-	static KeyboardDrawingGroupLevel groupsLevels[] = { {0,1}, {0,3}, {0,0}, {0,2} };
-	static KeyboardDrawingGroupLevel * pGroupsLevels[] = {
-		groupsLevels, groupsLevels + 1, groupsLevels + 2, groupsLevels + 3 };
+	static KeyboardDrawingGroupLevel groupsLevels[] =
+	    { {0, 1}, {0, 3}, {0, 0}, {0, 2} };
+	static KeyboardDrawingGroupLevel *pGroupsLevels[] = {
+		groupsLevels, groupsLevels + 1, groupsLevels + 2,
+		groupsLevels + 3
+	};
 #ifdef HAVE_XKB
 	GladeXML *gladeData;
 	GtkWidget *dialog, *kbdraw;
 	XkbComponentNamesRec componentNames;
-	XklConfigRec xklData;
+	XklConfigRec *xklData;
+	GdkRectangle *rect;
 #endif
-	XklState *xklState = XklGetCurrentState ();
-	gpointer p = g_hash_table_lookup (globals.previewDialogs, GINT_TO_POINTER (xklState->group));
-	if (p != NULL)
-	{
+	XklState *xklState =
+	    xkl_engine_get_current_state (globals.config.engine);
+	gpointer p = g_hash_table_lookup (globals.previewDialogs,
+					  GINT_TO_POINTER (xklState->
+							   group));
+	if (p != NULL) {
 		/* existing window */
 		gtk_window_present (GTK_WINDOW (p));
 		return;
 	}
 #ifdef HAVE_XKB
-	gladeData = glade_xml_new (GNOME_GLADEDIR "/gswitchit.glade", "gswitchit_layout_view", NULL);
-        dialog = glade_xml_get_widget (gladeData, "gswitchit_layout_view");
+	gladeData =
+	    glade_xml_new (GNOME_GLADEDIR "/gswitchit.glade",
+			   "gswitchit_layout_view", NULL);
+	dialog = glade_xml_get_widget (gladeData, "gswitchit_layout_view");
 	kbdraw = keyboard_drawing_new ();
 
-	if (xklState->group >= 0 && 
-	    xklState->group < g_slist_length (globals.groupNames))
-	{
+	if (xklState->group >= 0 &&
+	    xklState->group < g_strv_length (globals.groupNames)) {
 		char title[128];
 		snprintf (title, sizeof (title),
-			  _("Keyboard Layout \"%s\""), 
-			  g_slist_nth_data (globals.groupNames, xklState->group));
-		gtk_window_set_title (GTK_WINDOW(dialog), title);
-	}
-
-  	keyboard_drawing_set_groups_levels (KEYBOARD_DRAWING (kbdraw), pGroupsLevels);
-
-	XklConfigRecInit (&xklData);
-      	if (XklConfigGetFromServer (&xklData))
-	{
-		if (xklState->group >= 0 && 
-		    xklState->group < xklData.numLayouts &&
-		    xklState->group < xklData.numVariants)
-		{
-			char * l = g_strdup (xklData.layouts[xklState->group]);
-			char * v = g_strdup (xklData.variants[xklState->group]);
-			char ** p;
+			  _("Keyboard Layout \"%s\""),
+			  globals.groupNames[xklState->group]);
+		gtk_window_set_title (GTK_WINDOW (dialog), title);
+	}
+
+	keyboard_drawing_set_groups_levels (KEYBOARD_DRAWING (kbdraw),
+					    pGroupsLevels);
+
+	xklData = xkl_config_rec_new ();
+	if (xkl_config_rec_get_from_server (xklData, globals.engine)) {
+		int numLayouts = g_strv_length (xklData->layouts);
+		int numVariants = g_strv_length (xklData->variants);
+		if (xklState->group >= 0 &&
+		    xklState->group < numLayouts &&
+		    xklState->group < numVariants) {
+			char *l =
+			    g_strdup (xklData->layouts[xklState->group]);
+			char *v =
+			    g_strdup (xklData->variants[xklState->group]);
+			char **p;
 			int i;
 
-			if( ( p = xklData.layouts ) != NULL )
-				for( i = xklData.numLayouts; --i >= 0; )
-					free( *p++ );
-
-			if( ( p = xklData.variants ) != NULL )
-				for( i = xklData.numVariants; --i >= 0; )
-					free( *p++ );
-
-			xklData.numLayouts = xklData.numVariants = 1;
-			xklData.layouts  = realloc (xklData.layouts, sizeof (char*));
-			xklData.variants = realloc (xklData.variants, sizeof (char*));
-			xklData.layouts[0] = l;
-			xklData.variants[0] = v;
+			if ((p = xklData->layouts) != NULL)
+				for (i = numLayouts; --i >= 0;)
+					g_free (*p++);
+
+			if ((p = xklData->variants) != NULL)
+				for (i = numVariants; --i >= 0;)
+					g_free (*p++);
+
+			xklData->layouts =
+			    g_realloc (xklData->layouts,
+				       sizeof (char *) * 2);
+			xklData->variants =
+			    g_realloc (xklData->variants,
+				       sizeof (char *) * 2);
+			xklData->layouts[0] = l;
+			xklData->variants[0] = v;
+			xklData->layouts[1] = xklData->variants[1] = NULL;
 		}
 
-		if (_XklXkbConfigPrepareNative (&xklData, &componentNames))
-		{
-			keyboard_drawing_set_keyboard (KEYBOARD_DRAWING (kbdraw), &componentNames);
-			_XklXkbConfigCleanupNative (&componentNames);
+		if (xkl_xkb_config_native_prepare
+		    (globals.engine, xklData, &componentNames)) {
+			keyboard_drawing_set_keyboard (KEYBOARD_DRAWING
+						       (kbdraw),
+						       &componentNames);
+			xkl_xkb_config_native_cleanup (globals.engine,
+						       &componentNames);
 		}
 	}
-	XklConfigRecDestroy (&xklData);
+	g_object_unref (G_OBJECT (xklData));
 
 	gtk_object_set_data (GTK_OBJECT (dialog), "gladeData", gladeData);
 	g_signal_connect (GTK_OBJECT (dialog),
 			  "destroy", G_CALLBACK (GSwitchItPreviewDestroy),
 			  GINT_TO_POINTER (xklState->group));
-	g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK(GSwitchItPreviewResponse), NULL);
+	g_signal_connect (G_OBJECT (dialog), "response",
+			  G_CALLBACK (GSwitchItPreviewResponse), NULL);
+
+	rect = GSwitchItPreviewLoad ();
+	if (rect != NULL) {
+		gtk_window_move (GTK_WINDOW (dialog), rect->x, rect->y);
+		gtk_window_resize (GTK_WINDOW (dialog), rect->width,
+				   rect->height);
+		g_free (rect);
+	} else
+		gtk_window_resize (GTK_WINDOW (dialog), 700, 400);
 
-	gtk_window_resize (GTK_WINDOW (dialog), 700, 400);
 	gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE);
 
-	gtk_container_add (GTK_CONTAINER (glade_xml_get_widget (gladeData, "preview_vbox")), kbdraw);
-	
-	g_hash_table_insert (globals.previewDialogs, GINT_TO_POINTER (xklState->group), dialog);
+	gtk_container_add (GTK_CONTAINER
+			   (glade_xml_get_widget
+			    (gladeData, "preview_vbox")), kbdraw);
+
+	g_hash_table_insert (globals.previewDialogs,
+			     GINT_TO_POINTER (xklState->group), dialog);
 
 	gtk_widget_show_all (GTK_WIDGET (dialog));
 #endif
@@ -733,24 +789,26 @@
 	XklState st;
 	Window cur;
 	if (sscanf (verb, "Group_%d", &st.group) != 1) {
-		XklDebug (50, "Strange verb: [%s]\n", verb);
+		xkl_debug (50, "Strange verb: [%s]\n", verb);
 		return;
 	}
 
-	XklAllowOneSwitchToSecondaryGroup ();
-	cur = XklGetCurrentWindow ();
+	xkl_engine_allow_one_switch_to_secondary_group (globals.engine);
+	cur = xkl_engine_get_current_window (globals.engine);
 	if (cur != (Window) NULL) {
-		XklDebug (150, "Enforcing the state %d for window %lx\n",
-			  st.group, cur);
-		XklSaveState (XklGetCurrentWindow (), &st);
+		xkl_debug (150, "Enforcing the state %d for window %lx\n",
+			   st.group, cur);
+		xkl_engine_save_state (globals.engine,
+				       xkl_engine_get_current_window
+				       (globals.engine), &st);
 /*    XSetInputFocus( GDK_DISPLAY(), cur, RevertToNone, CurrentTime );*/
 	} else {
-		XklDebug (150,
-			  "??? Enforcing the state %d for unknown window\n",
-			  st.group);
+		xkl_debug (150,
+			   "??? Enforcing the state %d for unknown window\n",
+			   st.group);
 		/* strange situation - bad things can happen */
 	}
-	XklLockGroup (st.group);
+	xkl_engine_lock_group (globals.engine, st.group);
 }
 
 void
@@ -772,20 +830,25 @@
 		"Sergey V. Udaltsov<svu@gnome.org>",
 		NULL
 	};
-	
+
 	const gchar *translator_credits = _("translator-credits");
-		     
+
 	gtk_show_about_dialog (NULL,
-			       "name",         _("Keyboard Indicator"),
-			       "version",      VERSION,
+			       "name", _("Keyboard Indicator"),
+			       "version", VERSION,
 /* Translators: Please replace (C) with the proper copyright character. */
-			       "copyright",    _("Copyright (c) Sergey V. Udaltsov 1999-2004"),
-			       "comments",     _("Keyboard layout indicator applet for GNOME"),
-			       "authors",      authors,
-			       "documenters",  documenters,
-			       "translator-credits",  strcmp (translator_credits, "translator-credits") != 0 ? translator_credits : NULL,
-			       "logo-icon-name",       "gswitchit-applet",
-			       NULL);
+			       "copyright",
+			       _
+			       ("Copyright (c) Sergey V. Udaltsov 1999-2004"),
+			       "comments",
+			       _
+			       ("Keyboard layout indicator applet for GNOME"),
+			       "authors", authors, "documenters",
+			       documenters, "translator-credits",
+			       strcmp (translator_credits,
+				       "translator-credits") !=
+			       0 ? translator_credits : NULL,
+			       "logo-icon-name", "gswitchit-applet", NULL);
 }
 
 static void
@@ -795,45 +858,46 @@
 	BonoboUIComponent *popup;
 	popup =
 	    panel_applet_get_popup_component (PANEL_APPLET (sia->applet));
-	for (i = 0;;i++) {
+	for (i = 0;; i++) {
 		char path[80];
 		g_snprintf (path, sizeof (path),
 			    GROUPS_SUBMENU_PATH "/Group_%d", i);
 		if (bonobo_ui_component_path_exists (popup, path, NULL)) {
 			bonobo_ui_component_rm (popup, path, NULL);
-			XklDebug (160,
-				  "Unregistered group menu item \'%s\'\n",
-				  path);
+			xkl_debug (160,
+				   "Unregistered group menu item \'%s\'\n",
+				   path);
 		} else
 			break;
 	}
 
-	XklDebug (160, "Unregistered group submenu\n");
+	xkl_debug (160, "Unregistered group submenu\n");
 }
 
 static void
 GSwitchItAppletSetupGroupsSubmenu (GSwitchItApplet * sia)
 {
-	unsigned i, nGroups;
-	GSList *nameNode = globals.groupNames;
+	unsigned i;
+	gchar **currentName = globals.groupNames;
 	BonoboUIComponent *popup;
 	popup =
 	    panel_applet_get_popup_component (PANEL_APPLET (sia->applet));
-	XklDebug (160, "Registering group submenu\n");
-	nGroups = g_slist_length (globals.groupNames);
-	for (i = 0; i < nGroups; i++) {
+	xkl_debug (160, "Registering group submenu\n");
+	for (i = 0; *currentName; i++, currentName++) {
 		char verb[40];
 		BonoboUINode *node;
 		g_snprintf (verb, sizeof (verb), "Group_%d", i);
 		node = bonobo_ui_node_new ("menuitem");
 		bonobo_ui_node_set_attr (node, "name", verb);
 		bonobo_ui_node_set_attr (node, "verb", verb);
-		bonobo_ui_node_set_attr (node, "label", nameNode->data);
+		bonobo_ui_node_set_attr (node, "label", *currentName);
 		bonobo_ui_node_set_attr (node, "pixtype", "filename");
 		if (globals.appletConfig.showFlags) {
 			char *imageFile =
-			    GSwitchItAppletConfigGetImagesFile (&globals.appletConfig,
-								&globals.kbdConfig,
+			    GSwitchItAppletConfigGetImagesFile (&globals.
+								appletConfig,
+								&globals.
+								kbdConfig,
 								i);
 			if (imageFile != NULL) {
 				bonobo_ui_node_set_attr (node, "pixname",
@@ -846,10 +910,9 @@
 		bonobo_ui_component_add_verb (popup, verb, (BonoboUIVerbFn)
 					      GSwitchItAppletCmdSetGroup,
 					      sia);
-		XklDebug (160,
-			  "Registered group menu item \'%s\' as \'%s\'\n",
-			  verb, nameNode->data);
-		nameNode = g_slist_next (nameNode);
+		xkl_debug (160,
+			   "Registered group menu item \'%s\' as \'%s\'\n",
+			   verb, *currentName);
 	}
 }
 
@@ -874,14 +937,15 @@
 			       (GdkFilterFunc) GSwitchItAppletFilterXEvt,
 			       NULL);
 
-	XklStartListen (XKLL_TRACK_KEYBOARD_STATE);
+	xkl_engine_start_listen (globals.engine,
+				 XKLL_TRACK_KEYBOARD_STATE);
 }
 
 /* Should be called once for all applets */
 static void
 GSwitchItAppletStopListen (GSwitchItApplet * sia)
 {
-	XklStopListen ();
+	xkl_engine_stop_listen (globals.engine);
 
 	gdk_window_remove_filter (NULL, (GdkFilterFunc)
 				  GSwitchItAppletFilterXEvt, NULL);
@@ -894,13 +958,21 @@
 				 applet, GSwitchItApplet * sia);
 
 static gboolean
+GSwitchItAppletScrollCallback (GtkWidget * notebook)
+{
+	/* mouse wheel events should be ignored, otherwise funny effects appear */
+	return TRUE;
+}
+
+static gboolean
 GSwitchItAppletInit (GSwitchItApplet * sia, PanelApplet * applet)
 {
 	GtkWidget *defDrawingArea;
 	GtkNotebook *notebook;
 	GConfClient *confClient;
 
-	XklDebug (100, "Starting the applet startup process for %p\n", sia);
+	xkl_debug (100, "Starting the applet startup process for %p\n",
+		   sia);
 
 	glade_gnome_init ();
 	gtk_window_set_default_icon_name ("gswitchit-applet");
@@ -912,7 +984,6 @@
 	notebook = GTK_NOTEBOOK (sia->notebook = gtk_notebook_new ());
 	gtk_notebook_set_show_tabs (notebook, FALSE);
 	gtk_notebook_set_show_border (notebook, FALSE);
-
 	gtk_container_add (GTK_CONTAINER (sia->applet),
 			   GTK_WIDGET (notebook));
 
@@ -931,15 +1002,21 @@
 
 	if (GSwitchItAppletFirstInstance ()) {
 		/* GSwitchItInstallGlibLogAppender(  ); */
-		if (XklInit (GDK_DISPLAY ()) != 0) {
+		xkl_debug (100, "*** First instance *** \n");
+
+		memset (&globals, 0, sizeof (globals));
+
+		globals.engine = xkl_engine_get_instance (GDK_DISPLAY ());
+		if (globals.engine == NULL) {
 			GSwitchItAppletSetTooltip (sia,
-						   _("XKB initialization error"));
+						   _
+						   ("XKB initialization error"));
 			return TRUE;
 		}
-		XklDebug (100, "*** First instance *** \n");
 
-		XklConfigInit ();
-		if (!XklConfigLoadRegistry ()) {
+		globals.configRegistry =
+		    xkl_config_registry_get_instance (globals.engine);
+		if (!xkl_config_registry_load (globals.configRegistry)) {
 			GSwitchItAppletSetTooltip (sia,
 						   _
 						   ("Error loading XKB configuration registry"));
@@ -948,18 +1025,25 @@
 
 		confClient = gconf_client_get_default ();
 
-		memset (&globals, 0, sizeof(globals));
-
-		XklRegisterStateCallback ((XklStateCallback)
-					  GSwitchItAppletStateCallback, NULL);
-		XklRegisterConfigCallback ((XklConfigCallback)
-					   GSwitchItAppletKbdConfigCallback, NULL);
-		GSwitchItPluginContainerInit (&globals.pluginContainer, confClient);
-
-
-		GSwitchItConfigInit (&globals.config, confClient);
-		GSwitchItKbdConfigInit (&globals.kbdConfig, confClient);
-		GSwitchItAppletConfigInit (&globals.appletConfig, confClient);
+		g_signal_connect (globals.engine, "X-state-changed",
+				  G_CALLBACK
+				  (GSwitchItAppletStateCallback), NULL);
+		g_signal_connect (globals.engine, "X-config-changed",
+				  G_CALLBACK
+				  (GSwitchItAppletKbdConfigCallback),
+				  NULL);
+
+
+		GSwitchItPluginContainerInit (&globals.pluginContainer,
+					      confClient);
+
+
+		GSwitchItConfigInit (&globals.config, confClient,
+				     globals.engine);
+		GSwitchItKbdConfigInit (&globals.kbdConfig, confClient,
+					globals.engine);
+		GSwitchItAppletConfigInit (&globals.appletConfig,
+					   confClient, globals.engine);
 
 		g_object_unref (confClient);
 
@@ -967,37 +1051,53 @@
 		GSwitchItConfigActivate (&globals.config);
 		GSwitchItKbdConfigLoadFromXCurrent (&globals.kbdConfig);
 		GSwitchItAppletConfigLoadFromGConf (&globals.appletConfig);
-		GSwitchItAppletConfigUpdateImages (&globals.appletConfig, &globals.kbdConfig);
+		GSwitchItAppletConfigUpdateImages (&globals.appletConfig,
+						   &globals.kbdConfig);
 		GSwitchItAppletConfigActivate (&globals.appletConfig);
 
-		globals.groupNames = GSwitchItConfigLoadGroupDescriptionsUtf8 (&globals.config);
-		globals.previewDialogs = g_hash_table_new (g_direct_hash, g_direct_equal);
+		globals.groupNames =
+		    GSwitchItConfigLoadGroupDescriptionsUtf8 (&globals.
+							      config,
+							      globals.
+							      configRegistry);
+		globals.previewDialogs =
+		    g_hash_table_new (g_direct_hash, g_direct_equal);
 
 		GSwitchItPluginManagerInit (&globals.pluginManager);
-		GSwitchItPluginManagerInitEnabledPlugins (&globals.pluginManager,
-							  &globals.pluginContainer,
-							  globals.appletConfig.enabledPlugins);
+		GSwitchItPluginManagerInitEnabledPlugins (&globals.
+							  pluginManager,
+							  &globals.
+							  pluginContainer,
+							  globals.
+							  appletConfig.
+							  enabledPlugins);
 		GSwitchItConfigStartListen (&globals.config,
 					    (GConfClientNotifyFunc)
-					    GSwitchItConfigChanged,
-					    NULL);
+					    GSwitchItConfigChanged, NULL);
 		GSwitchItAppletConfigStartListen (&globals.appletConfig,
 						  (GConfClientNotifyFunc)
 						  GSwitchItAppletConfigChanged,
 						  NULL);
 		GSwitchItAppletStartListen (sia);
 
-		XklDebug (100, "*** First instance inited globals *** \n");
+		xkl_debug (100,
+			   "*** First instance inited globals *** \n");
 	}
 	GSwitchItAppletFillNotebook (sia);
 	GSwitchItAppletRevalidate (sia);
 
 	g_signal_connect (G_OBJECT (sia->applet), "change_size",
-			  G_CALLBACK (GSwitchItAppletChangePixelSize), sia);
+			  G_CALLBACK (GSwitchItAppletChangePixelSize),
+			  sia);
 	g_signal_connect (G_OBJECT (sia->applet), "change_background",
-			  G_CALLBACK (GSwitchItAppletChangeBackground), sia);
+			  G_CALLBACK (GSwitchItAppletChangeBackground),
+			  sia);
 	g_signal_connect (G_OBJECT (sia->applet), "button_press_event",
 			  G_CALLBACK (GSwitchItAppletButtonPressed), sia);
+	g_signal_connect (sia->notebook, "scroll_event",
+			  G_CALLBACK
+			  (GSwitchItAppletScrollCallback), NULL);
+
 
 	gtk_widget_add_events (sia->applet, GDK_BUTTON_PRESS_MASK);
 
@@ -1011,21 +1111,21 @@
 void
 GSwitchItAppletTerm (PanelApplet * applet, GSwitchItApplet * sia)
 {
-	XklDebug (100, "Starting the applet shutdown process for %p\n", sia);
+	xkl_debug (100, "Starting the applet shutdown process for %p\n",
+		   sia);
 	/* remove BEFORE all termination work is finished */
-	globals.appletInstances = g_slist_remove (globals.appletInstances, sia);
+	globals.appletInstances =
+	    g_slist_remove (globals.appletInstances, sia);
 
 	if (GSwitchItAppletLastInstance ()) {
-		XklDebug (100, "*** Last instance *** \n");
+		xkl_debug (100, "*** Last instance *** \n");
 		GSwitchItAppletStopListen (sia);
 
 		GSwitchItConfigStopListen (&globals.config);
 		GSwitchItAppletConfigStopListen (&globals.appletConfig);
 
-		XklRegisterStateCallback (NULL, NULL);
-		XklRegisterConfigCallback (NULL, NULL);
-
-		GSwitchItPluginManagerTermInitializedPlugins (&globals.pluginManager);
+		GSwitchItPluginManagerTermInitializedPlugins (&globals.
+							      pluginManager);
 		GSwitchItPluginManagerTerm (&globals.pluginManager);
 
 		g_hash_table_destroy (globals.previewDialogs);
@@ -1036,23 +1136,23 @@
 
 		GSwitchItPluginContainerTerm (&globals.pluginContainer);
 
-		XklConfigFreeRegistry ();
-		XklConfigTerm ();
-		XklDebug (100, "*** Last instance terminated globals *** \n");
-		XklTerm ();
+		xkl_debug (100,
+			   "*** Last instance terminated globals *** \n");
+		g_object_unref (G_OBJECT (globals.configRegistry));
+		g_object_unref (G_OBJECT (globals.engine));
 	}
 
 	GSwitchItAppletCleanupNotebook (sia);
 
 	g_free (sia);
-	XklDebug (100, "The applet successfully terminated\n");
+	xkl_debug (100, "The applet successfully terminated\n");
 }
 
 gboolean
 GSwitchItAppletNew (PanelApplet * applet)
 {
 	gboolean rv = TRUE;
-	GSwitchItApplet * sia;
+	GSwitchItApplet *sia;
 #if 0
 	GLogLevelFlags fatal_mask;
 	fatal_mask = G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
@@ -1061,8 +1161,9 @@
 	sia = g_new0 (GSwitchItApplet, 1);
 	rv = GSwitchItAppletInit (sia, applet);
 	/* append AFTER all initialization work is finished */
-	globals.appletInstances = g_slist_append (globals.appletInstances, sia);
-	XklDebug (100, "The applet successfully started: %d\n", rv);
+	globals.appletInstances =
+	    g_slist_append (globals.appletInstances, sia);
+	xkl_debug (100, "The applet successfully started: %d\n", rv);
 	return rv;
 }
 
@@ -1070,12 +1171,12 @@
 void
 GSwitchItPluginContainerReinitUi (GSwitchItPluginContainer * pc)
 {
-	ForAllApplets ()
+	ForAllApplets () {
 		GSwitchItAppletReinitUi (sia);
-	NextApplet
+	} NextApplet ();
 }
 
-GSList *
+gchar **
 GSwitchItPluginLoadLocalizedGroupNames (GSwitchItPluginContainer * pc)
 {
 	return globals.groupNames;
diff -u gnome-applets-2.14.2/gswitchit-/gswitchit-applet.h gnome-applets-2.14.2/gswitchit/gswitchit-applet.h
--- gnome-applets-2.14.2/gswitchit-/gswitchit-applet.h	2005-07-27 20:37:58.000000000 -0400
+++ gnome-applets-2.14.2/gswitchit/gswitchit-applet.h	2006-05-26 20:21:10.000000000 -0400
@@ -38,9 +38,11 @@
         GSwitchItConfig config;
         GSwitchItAppletConfig appletConfig;
         GSwitchItKbdConfig kbdConfig;
-        GSList *groupNames;
+        gchar **groupNames;
         GSList *appletInstances;
         GHashTable *previewDialogs;
+	XklEngine *engine;
+	XklConfigRegistry *configRegistry;
 } GSwitchItAppletGlobals;
 
 extern void GSwitchItAppletRevalidate (GSwitchItApplet * sia);
diff -u gnome-applets-2.14.2/gswitchit-/gswitchit-plugins-add.c gnome-applets-2.14.2/gswitchit/gswitchit-plugins-add.c
--- gnome-applets-2.14.2/gswitchit-/gswitchit-plugins-add.c	2005-03-16 07:51:35.000000000 -0500
+++ gnome-applets-2.14.2/gswitchit/gswitchit-plugins-add.c	2006-04-19 19:16:25.000000000 -0400
@@ -26,7 +26,6 @@
 #include <libbonobo.h>
 
 #include <libxklavier/xklavier.h>
-#include <libxklavier/xklavier_config.h>
 
 static void
 CappletAddAvailablePluginFunc (const char *fullPath,
diff -u gnome-applets-2.14.2/gswitchit-/gswitchit-plugins.c gnome-applets-2.14.2/gswitchit/gswitchit-plugins.c
--- gnome-applets-2.14.2/gswitchit-/gswitchit-plugins.c	2005-07-26 17:11:56.000000000 -0400
+++ gnome-applets-2.14.2/gswitchit/gswitchit-plugins.c	2006-05-26 20:21:10.000000000 -0400
@@ -28,7 +28,6 @@
 #include <libgnomeui/gnome-ui-init.h>
 
 #include <libxklavier/xklavier.h>
-#include <libxklavier/xklavier_config.h>
 
 static GSwitchItKbdConfig initialSysKbdConfig;
 
@@ -257,7 +256,9 @@
 	gtk_window_set_default_icon_name ("gswitchit-properties-capplet");
 
 	/* default domain! */
-	data = glade_xml_new (GNOME_GLADEDIR "/gswitchit-plugins.glade", "gswitchit_plugins", NULL);	
+	data =
+	    glade_xml_new (GNOME_GLADEDIR "/gswitchit-plugins.glade",
+			   "gswitchit_plugins", NULL);
 	gswic->capplet = capplet =
 	    glade_xml_get_widget (data, "gswitchit_plugins");
 
@@ -324,7 +325,7 @@
 	memset (&gswic, 0, sizeof (gswic));
 	gnome_program_init ("gswitchit", VERSION,
 			    LIBGNOMEUI_MODULE, argc, argv,
-			    GNOME_PROGRAM_STANDARD_PROPERTIES, NULL); 
+			    GNOME_PROGRAM_STANDARD_PROPERTIES, NULL);
 	if (!gconf_init (argc, argv, &gconf_error)) {
 		g_warning (_("Failed to init GConf: %s\n"),
 			   gconf_error->message);
@@ -332,24 +333,28 @@
 		return 1;
 	}
 	gconf_error = NULL;
-	/*GSwitchItInstallGlibLogAppender(  );*/
-	XklInit (GDK_DISPLAY ());
-	XklConfigInit ();
-	XklConfigLoadRegistry ();
+	/*GSwitchItInstallGlibLogAppender(  ); */
+	gswic.engine = xkl_engine_get_instance (GDK_DISPLAY ());
+	gswic.configRegistry =
+	    xkl_config_registry_get_instance (gswic.engine);
 
 	confClient = gconf_client_get_default ();
 	GSwitchItPluginContainerInit (&gswic.pluginContainer, confClient);
 	g_object_unref (confClient);
 
-	GSwitchItKbdConfigInit (&gswic.kbdConfig, confClient);
-	GSwitchItKbdConfigInit (&initialSysKbdConfig, confClient);
+	GSwitchItKbdConfigInit (&gswic.kbdConfig, confClient,
+				gswic.engine);
+	GSwitchItKbdConfigInit (&initialSysKbdConfig, confClient,
+				gswic.engine);
 
-	GSwitchItAppletConfigInit (&gswic.appletConfig, confClient);
+	GSwitchItAppletConfigInit (&gswic.appletConfig, confClient,
+				   gswic.engine);
 
 	GSwitchItPluginManagerInit (&gswic.pluginManager);
 
 	GSwitchItKbdConfigLoadFromXInitial (&initialSysKbdConfig);
-	GSwitchItKbdConfigLoadFromGConf (&gswic.kbdConfig, &initialSysKbdConfig);
+	GSwitchItKbdConfigLoadFromGConf (&gswic.kbdConfig,
+					 &initialSysKbdConfig);
 
 	GSwitchItAppletConfigLoadFromGConf (&gswic.appletConfig);
 	CappletSetup (&gswic);
@@ -363,9 +368,8 @@
 	GSwitchItKbdConfigTerm (&initialSysKbdConfig);
 
 	GSwitchItPluginContainerTerm (&gswic.pluginContainer);
-	XklConfigFreeRegistry ();
-	XklConfigTerm ();
-	XklTerm ();
+	g_object_unref (G_OBJECT (gswic.configRegistry));
+	g_object_unref (G_OBJECT (gswic.engine));
 	return 0;
 }
 
@@ -375,8 +379,10 @@
 {
 }
 
-GSList *
+gchar **
 GSwitchItPluginLoadLocalizedGroupNames (GSwitchItPluginContainer * pc)
 {
-	return GSwitchItConfigLoadGroupDescriptionsUtf8 (&(((GSwitchItPluginsCapplet *) pc)->config));
+	return
+	    GSwitchItConfigLoadGroupDescriptionsUtf8 (&
+						      (((GSwitchItPluginsCapplet *) pc)->config), (((GSwitchItPluginsCapplet *) pc)->configRegistry));
 }
diff -u gnome-applets-2.14.2/gswitchit-/gswitchit-plugins.h gnome-applets-2.14.2/gswitchit/gswitchit-plugins.h
--- gnome-applets-2.14.2/gswitchit-/gswitchit-plugins.h	2005-03-16 07:51:35.000000000 -0500
+++ gnome-applets-2.14.2/gswitchit/gswitchit-plugins.h	2006-04-19 19:16:25.000000000 -0400
@@ -32,6 +32,8 @@
 	GSwitchItAppletConfig appletConfig;
 	GSwitchItKbdConfig kbdConfig;
 	GSwitchItPluginManager pluginManager;
+	XklEngine *engine;
+	XklConfigRegistry *configRegistry;
 } GSwitchItPluginsCapplet;
 
 #define NAME_COLUMN 0
Common subdirectories: gnome-applets-2.14.2/gswitchit-/help and gnome-applets-2.14.2/gswitchit/help
Only in gnome-applets-2.14.2/gswitchit: .indent.pro
