diff -x '*orig' -uNr gtkspell-2.0.11/configure.ac gtkspell-2.0.11.patched/configure.ac
--- gtkspell-2.0.11/configure.ac	2005-05-27 23:38:33.000000000 +0200
+++ gtkspell-2.0.11.patched/configure.ac	2006-04-05 15:51:17.000000000 +0200
@@ -4,18 +4,12 @@
 AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
 AC_CONFIG_HEADERS([config.h])
 
-AC_CHECK_HEADER(aspell.h, [AC_DEFINE(HAVE_ASPELL_H,1, 
-   [Define to 1 if you have the <aspell.h> header file.] )] )
-AC_CHECK_HEADER(pspell/pspell.h, [AC_DEFINE(HAVE_PSPELL_H,1, 
-   [Define to 1 if you have the <pspell/pspell.h> header file.] )] )
-AC_CHECK_LIB(aspell, new_aspell_speller, SPELLER_LIB="-laspell",
-   [AC_CHECK_LIB(pspell, new_pspell_manager, SPELLER_LIB="-lpspell",
-      [AC_MSG_ERROR([You must have the aspell or pspell dev libraries to build gtkspell.]) ] ) ] )
+SPELLER_LIB=-lenchant
       
 AC_SUBST(SPELLER_LIB)
 GTKSPELL_PACKAGES=gtk+-2.0
 AC_SUBST(GTKSPELL_PACKAGES)
-PKG_CHECK_MODULES(GTKSPELL, $GTKSPELL_PACKAGES)
+PKG_CHECK_MODULES(GTKSPELL, $GTKSPELL_PACKAGES enchant >= 0.4.0 )
 AC_SUBST(GTKSPELL_CFLAGS)
 AC_SUBST(GTKSPELL_LIBS)
 
diff -x '*orig' -uNr gtkspell-2.0.11/gtkspell/gtkspell.c gtkspell-2.0.11.patched/gtkspell/gtkspell.c
--- gtkspell-2.0.11/gtkspell/gtkspell.c	2005-05-27 23:09:10.000000000 +0200
+++ gtkspell-2.0.11.patched/gtkspell/gtkspell.c	2006-04-05 15:52:08.000000000 +0200
@@ -14,37 +14,7 @@
 
 #define GTKSPELL_MISSPELLED_TAG "gtkspell-misspelled"
 
-#ifdef HAVE_ASPELL_H
-   #define USING_ASPELL
-   #include <aspell.h>
-#elif defined HAVE_PSPELL_H
-   #define USING_PSPELL
-   #include <pspell/pspell.h>
-   #define AspellSpeller PspellManager
-   #define speller manager
-   #define aspell_speller_check pspell_manager_check
-   #define aspell_speller_add_to_session pspell_manager_add_to_session
-   #define aspell_speller_add_to_personal pspell_manager_add_to_personal
-   #define aspell_speller_save_all_word_lists pspell_manager_save_all_word_lists
-   #define aspell_speller_store_replacement pspell_manager_store_replacement
-   #define AspellWordList PspellWordList
-   #define AspellStringEnumeration PspellStringEmulation
-   #define aspell_speller_suggest pspell_manager_suggest
-   #define aspell_word_list_elements pspell_word_list_elements
-   #define aspell_string_enumeration_next pspell_string_emulation_next
-   #define delete_aspell_string_enumeration delete_pspell_string_emulation
-   #define AspellConfig PspellConfig
-   #define AspellCanHaveError PspellCanHaveError
-   #define new_aspell_config new_pspell_config
-   #define aspell_config_replace pspell_config_replace
-   #define new_aspell_speller new_pspell_manager
-   #define delete_aspell_config delete_pspell_config
-   #define aspell_error_message pspell_error_message
-   #define delete_aspell_speller delete_pspell_manager
-   #define to_aspell_speller to_pspell_manager
-   #define aspell_error_number pspell_error_number
-   #define aspell pspell
-#endif
+#include <enchant.h>
 
 const int debug = 0;
 const int quiet = 0;
@@ -55,7 +25,8 @@
 	GtkTextMark *mark_insert_start;
 	GtkTextMark *mark_insert_end;
 	gboolean deferred_check;
-	AspellSpeller *speller;
+	EnchantBroker *broker;
+	EnchantDict *speller;
 	GtkTextMark *mark_click;
 };
 
@@ -124,10 +95,12 @@
 check_word(GtkSpell *spell, GtkTextBuffer *buffer,
            GtkTextIter *start, GtkTextIter *end) {
 	char *text;
+    if (!spell->speller)
+        return;
 	text = gtk_text_buffer_get_text(buffer, start, end, FALSE);
 	if (debug) g_print("checking: %s\n", text);
 	if (g_unichar_isdigit(*text) == FALSE) /* don't check numbers */
-		if (aspell_speller_check(spell->speller, text, -1) == FALSE)
+		if (enchant_dict_check(spell->speller, text, strlen(text)) != 0)
 			gtk_text_buffer_apply_tag(buffer, spell->tag_highlight, start, end);
 	g_free(text);
 }
@@ -302,8 +275,7 @@
 	get_word_extents_from_mark(buffer, &start, &end, spell->mark_click);
 	word = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
 	
-	aspell_speller_add_to_personal(spell->speller, word, strlen(word));
-	aspell_speller_save_all_word_lists(spell->speller);
+    enchant_dict_add_to_pwl( spell->speller, word, strlen(word));
 
 	gtkspell_recheck_all(spell);
 
@@ -321,7 +293,7 @@
 	get_word_extents_from_mark(buffer, &start, &end, spell->mark_click);
 	word = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
 	
-	aspell_speller_add_to_session(spell->speller, word, strlen(word));
+	enchant_dict_add_to_session(spell->speller, word, strlen(word));
 
 	gtkspell_recheck_all(spell);
 
@@ -335,6 +307,9 @@
 	GtkTextIter start, end;
 	GtkTextBuffer *buffer;
 	
+    if (!spell->speller)
+        return;
+
 	buffer = gtk_text_view_get_buffer(spell->view);
 
 	get_word_extents_from_mark(buffer, &start, &end, spell->mark_click);
@@ -350,33 +325,33 @@
 	gtk_text_buffer_delete(buffer, &start, &end);
 	gtk_text_buffer_insert(buffer, &start, newword, -1);
 
-	aspell_speller_store_replacement(spell->speller, 
+	enchant_dict_store_replacement(spell->speller, 
 			oldword, strlen(oldword),
 			newword, strlen(newword));
 
 	g_free(oldword);
 }
 
-GtkWidget*
+static GtkWidget*
 build_suggestion_menu(GtkSpell *spell, GtkTextBuffer *buffer,
                       const char *word) {
 	const char *suggestion;
 	GtkWidget *topmenu, *menu;
 	GtkWidget *mi;
 	GtkWidget *hbox;
-	int count = 0;
 	void *spelldata;
-	const AspellWordList *suggestions;
-	AspellStringEnumeration *elements;
+    char **suggestions;
+    size_t n_suggs, i;
 	char *label;
 	
 	topmenu = menu = gtk_menu_new();
 
-	suggestions = aspell_speller_suggest(spell->speller, word, -1);
-	elements = aspell_word_list_elements(suggestions);
+    if (!spell->speller)
+        return topmenu;
 
-	suggestion = aspell_string_enumeration_next(elements);
-	if (suggestion == NULL) {
+    suggestions = enchant_dict_suggest(spell->speller, word, strlen(word), &n_suggs);
+
+	if (suggestions == NULL || !n_suggs) {
 		/* no suggestions.  put something in the menu anyway... */
 		GtkWidget *label;
 		label = gtk_label_new("");
@@ -388,8 +363,8 @@
 		gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), mi);
 	} else {
 		/* build a set of menus with suggestions. */
-		while (suggestion != NULL) {
-			if (count == 10) {
+        for (i = 0; i < n_suggs; i++ ) {
+			if (i > 0 && i % 10 == 0) {
 				mi = gtk_menu_item_new();
 				gtk_widget_show(mi);
 				gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
@@ -400,19 +375,16 @@
 
 				menu = gtk_menu_new();
 				gtk_menu_item_set_submenu(GTK_MENU_ITEM(mi), menu);
-				count = 0;
 			}
-			mi = gtk_menu_item_new_with_label(suggestion);
+			mi = gtk_menu_item_new_with_label(suggestions[i]);
 			g_signal_connect(G_OBJECT(mi), "activate",
 					G_CALLBACK(replace_word), spell);
 			gtk_widget_show(mi);
 			gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
-			count++;
-			suggestion = aspell_string_enumeration_next(elements);
 		}
 	}
 
-	delete_aspell_string_enumeration(elements);
+	enchant_dict_free_suggestions(spell->speller, suggestions);
 
 	/* Separator */
 	mi = gtk_menu_item_new();
@@ -517,9 +489,6 @@
 
 static gboolean
 gtkspell_set_language_internal(GtkSpell *spell, const gchar *lang, GError **error) {
-	AspellConfig *config;
-	AspellCanHaveError *err;
-	AspellSpeller *speller;
 
 	if (lang == NULL) {
 		lang = g_getenv("LANG");
@@ -531,26 +500,25 @@
 		}
 	}
 
-	config = new_aspell_config();
-	if (lang)
-		aspell_config_replace(config, "language-tag", lang);
-	aspell_config_replace(config, "encoding", "utf-8");
-	err = new_aspell_speller(config);
-	delete_aspell_config(config);
+    if (!spell->broker)
+        spell->broker = enchant_broker_init();
 
-	if (aspell_error_number(err) != 0) {
-#ifdef USING_ASPELL
-		g_set_error(error, GTKSPELL_ERROR, GTKSPELL_ERROR_BACKEND,
-				"aspell: %s", aspell_error_message(err));
-#elif defined USING_PSPELL
+    if (spell->speller) {
+        enchant_broker_free_dict(spell->broker, spell->speller);
+        spell->speller = NULL;
+    }
+
+    if (!lang) {
+        lang = "en";
+    }
+
+    spell->speller = enchant_broker_request_dict(spell->broker, lang );
+
+    if (!spell->speller) {
 		g_set_error(error, GTKSPELL_ERROR, GTKSPELL_ERROR_BACKEND,
-				"pspell: %s", aspell_error_message(err));
-#endif
+                _("enchant error for language: %s"),lang);
 		return FALSE;
 	} 
-	if (spell->speller)
-		delete_aspell_speller(spell->speller);
-	spell->speller = to_aspell_speller(err);
 
 	return TRUE;
 }
@@ -713,8 +681,13 @@
 	gtk_text_buffer_delete_mark(buffer, spell->mark_insert_end);
 	gtk_text_buffer_delete_mark(buffer, spell->mark_click);
 
-	delete_aspell_speller(spell->speller);
 
+    if (spell->broker) {
+        if (spell->speller) {
+            enchant_broker_free_dict(spell->broker, spell->speller);
+        }
+        enchant_broker_free(spell->broker);
+    }
 	g_signal_handlers_disconnect_matched(spell->view,
 			G_SIGNAL_MATCH_DATA,
 			0, 0, NULL, NULL,
