Index: pan/gui/group-prefs-dialog.cc
===================================================================
--- pan/gui/group-prefs-dialog.cc	(revision 360)
+++ pan/gui/group-prefs-dialog.cc	(working copy)
@@ -73,6 +73,10 @@
   // save path...
   const char * pch (file_entry_get (_save_path));
   _group_prefs.set_string (_group, "default-group-save-path", pch);
+
+  // spellchecker language
+  pch = (const char*)gtk_entry_get_text(GTK_ENTRY(_spellchecker_language));
+  _group_prefs.set_string (_group, "spellcheck-language", pch);
 }
 
 void
@@ -118,8 +122,29 @@
 
     return w;
   }
+
+  GtkWidget*
+  create_spellcheck_combo_box ( const Quark      & group,
+                             const GroupPrefs & group_prefs)
+  {
+    /*TODO:
+     * get a list of all the available spellchecking languages (
+           - This depends on GtkSpell or adding enchant as a dependency
+     * list them in a combo box
+     */
+
+    GtkWidget * e = gtk_entry_new ();
+
+    // get the custom spell checking language from the group preferences
+    std::string lang;
+    lang = group_prefs.get_string(group, "spellcheck-language","");
+    gtk_entry_set_text(GTK_ENTRY(e),lang.c_str());
+
+    return e;
 }
+}
 
+
 GroupPrefsDialog :: GroupPrefsDialog (Data         & data,
                                       const Quark  & group,
                                       GroupPrefs   & group_prefs,
@@ -144,20 +169,31 @@
   g_snprintf (buf, sizeof(buf), _("Properties for %s"), group.c_str());
   HIG::workarea_add_section_title (t, &row, buf);
     HIG :: workarea_add_section_spacer (t, row, 3);
+
+    /* Character encoding widget */
     _charset = e_charset_picker_new (_group_prefs.get_string (group, "character-encoding", "UTF-8").c_str());
     w = gtk_option_menu_new ();
     gtk_option_menu_set_menu (GTK_OPTION_MENU (w), _charset);
     HIG :: workarea_add_row (t, &row, _("Character _encoding:"), w);
+
+    /* Save path widget */
     w = _save_path = file_entry_new (_("Directory for Saving Attachments"));
     char * pch = g_build_filename (g_get_home_dir(), "News", NULL);
     const std::string dir (_group_prefs.get_string (_group, "default-group-save-path", pch));
     g_free (pch);
     file_entry_set (w, dir.c_str());
     HIG :: workarea_add_row (t, &row, _("Directory for _saving attachments:"), w);
+
+    /* profile widget */
     w = _profile = create_profiles_combo_box (data, group, group_prefs);
     l = HIG :: workarea_add_row (t, &row, _("Posting _profile:"), w);
     gtk_widget_set_sensitive (l, GTK_WIDGET_SENSITIVE(w));
 
+    /* spellchecker languages widget */
+    w = _spellchecker_language = create_spellcheck_combo_box ( group, group_prefs);
+    l = HIG :: workarea_add_row (t, &row, _("Spellchecker _language:"), w);
+    gtk_widget_set_sensitive (l, GTK_WIDGET_SENSITIVE(w));
+
   gtk_widget_show_all (t);
   gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), t, true, true, 0);
   _root = dialog;
Index: pan/gui/post-ui.h
===================================================================
--- pan/gui/post-ui.h	(revision 360)
+++ pan/gui/post-ui.h	(working copy)
@@ -112,6 +112,7 @@
       std::string _unchanged_body;
       int _wrap_pixels;
       GtkTooltips * _ttips;
+      std::string _spellcheck_language;
 
     private:
       void add_actions (GtkWidget* box);
Index: pan/gui/group-prefs-dialog.h
===================================================================
--- pan/gui/group-prefs-dialog.h	(revision 360)
+++ pan/gui/group-prefs-dialog.h	(working copy)
@@ -44,6 +44,7 @@
       GtkWidget    * _root;
       GtkWidget    * _charset;
       GtkWidget    * _profile;
+      GtkWidget    * _spellchecker_language;
       GtkWidget    * _save_path;
 
     private:
Index: pan/gui/post-ui.cc
===================================================================
--- pan/gui/post-ui.cc	(revision 360)
+++ pan/gui/post-ui.cc	(working copy)
@@ -88,12 +88,33 @@
 #ifdef HAVE_GTKSPELL
     GtkTextView * view = GTK_TEXT_VIEW(_body_view);
     GError * err (0);
-    const char * locale = NULL;
-    gtkspell_new_attach (view, locale, &err);
+
+    // set the language
+    if(!_spellcheck_language.empty())	// some language was set
+    {
+    	g_debug("custom spellchecker\n");
+      gtkspell_new_attach (view, _spellcheck_language.c_str(), &err);	// sets custom spell checker
     if (err) {
+    	g_debug("custom spellchecker failed. defaulted to system locale.\n");
+        Log::add_err_va (_("Error setting custom spellchecker: %s"), err->message);
+        g_clear_error (&err);
+	// custom spellchecker failed. defaults to env spellchecker
+        gtkspell_new_attach (view, NULL, &err);	// tries default env language
+          if (err) {
       Log::add_err_va (_("Error setting spellchecker: %s"), err->message);
       g_clear_error (&err);
     }
+      }
+    }
+    else
+    {
+    	g_debug("default spellchecker\n");
+      gtkspell_new_attach (view, NULL, &err);	// tries default env language
+        if (err) {
+        Log::add_err_va (_("Error setting spellchecker: %s"), err->message);
+        g_clear_error (&err);
+      }
+    }
 #else
     GtkWidget * w = gtk_message_dialog_new_with_markup (
       GTK_WINDOW(_root),
@@ -1874,6 +1895,23 @@
   g_assert (profiles.has_profiles());
   g_return_if_fail (message != 0);
 
+  #ifdef HAVE_GTKSPELL
+  // set the spellchecker language according to the first destination newsgroup's options
+  StringView line (g_mime_message_get_header (message, "Newsgroups"));
+  StringView groupname;
+  // get the first newsgroup
+  while (line.pop_token (groupname, ',')) {
+    groupname.trim ();
+    if (groupname.empty())
+      continue;
+    // set the language as defined in the newsgroup's options or, if it doesn't have one, the system locale
+    _spellcheck_language = group_prefs.get_string (groupname, "spellcheck-language", ""); 
+
+    if (!_spellcheck_language.empty())
+      break;
+  }
+  #endif
+
   // create the window
   _root = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   g_signal_connect (_root, "delete-event", G_CALLBACK(delete_event_cb), this);
