2007-02-18 [paul] 2.7.2cvs49
[claws.git] / src / prefs_account.c
index 73b9464064f4fef3dfa479d6ee662830e3a87adf..7e90d141a87266fc0ea23fbc4da9573292aacee3 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2005 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -54,6 +54,7 @@
 #include "imap.h"
 #include "remotefolder.h"
 #include "base64.h"
+#include "combobox.h"
 
 static gboolean cancelled;
 static gboolean new_account;
@@ -65,12 +66,21 @@ static GtkWidget *sigfile_radiobtn;
 static GtkWidget *sigcmd_radiobtn;
 static GtkWidget *entry_sigpath;
 static GtkWidget *signature_browse_button;
+static GtkWidget *signature_edit_button;
 
 static GSList *prefs_pages = NULL;
 
+struct BasicProtocol {
+       GtkWidget *combobox;
+       GtkWidget *label;
+       GtkWidget *descrlabel;
+       GtkWidget *no_imap_warn_icon;
+       GtkWidget *no_imap_warn_label;
+};
+
 static struct Basic {
        GtkWidget *acname_entry;
-       GtkWidget *default_chkbtn;
+       GtkWidget *default_checkbtn;
 
        GtkWidget *name_entry;
        GtkWidget *addr_entry;
@@ -78,7 +88,7 @@ static struct Basic {
 
        GtkWidget *serv_frame;
        GtkWidget *serv_table;
-       GtkWidget *protocol_optmenu;
+       gpointer *protocol_optmenu;
        GtkWidget *recvserv_label;
        GtkWidget *smtpserv_label;
        GtkWidget *nntpserv_label;
@@ -87,10 +97,10 @@ static struct Basic {
        GtkWidget *recvserv_entry;
        GtkWidget *smtpserv_entry;
        GtkWidget *nntpserv_entry;
-       GtkWidget *nntpauth_chkbtn;
-       GtkWidget *nntpauth_onconnect_chkbtn;
+       GtkWidget *nntpauth_checkbtn;
+       GtkWidget *nntpauth_onconnect_checkbtn;
        GtkWidget *localmbox_entry;
-       GtkWidget *mailcmd_chkbtn;
+       GtkWidget *mailcmd_checkbtn;
        GtkWidget *mailcmd_entry;
        GtkWidget *uid_label;
        GtkWidget *pass_label;
@@ -100,11 +110,11 @@ static struct Basic {
 
 static struct Receive {
        GtkWidget *pop3_frame;
-       GtkWidget *use_apop_chkbtn;
-       GtkWidget *rmmail_chkbtn;
+       GtkWidget *use_apop_checkbtn;
+       GtkWidget *rmmail_checkbtn;
        GtkWidget *leave_time_entry;
-       GtkWidget *getall_chkbtn;
-       GtkWidget *size_limit_chkbtn;
+       GtkWidget *getall_checkbtn;
+       GtkWidget *size_limit_checkbtn;
        GtkWidget *size_limit_entry;
        GtkWidget *inbox_label;
        GtkWidget *inbox_entry;
@@ -115,13 +125,14 @@ static struct Receive {
        GtkWidget *local_inbox_entry;
        GtkWidget *local_inbox_btn;
 
-       GtkWidget *filter_on_recv_chkbtn;
-       GtkWidget *recvatgetall_chkbtn;
+       GtkWidget *filter_on_recv_checkbtn;
+       GtkWidget *recvatgetall_checkbtn;
        
        GtkWidget *imap_frame;
        GtkWidget *imap_auth_type_optmenu;
        GtkWidget *imapdir_label;
        GtkWidget *imapdir_entry;
+       GtkWidget *subsonly_checkbtn;
 
        GtkWidget *frame_maxarticle;
        GtkWidget *maxarticle_label;
@@ -130,15 +141,16 @@ static struct Receive {
 } receive;
 
 static struct Send {
-       GtkWidget *date_chkbtn;
-       GtkWidget *msgid_chkbtn;
-       GtkWidget *customhdr_chkbtn;
-       GtkWidget *smtp_auth_chkbtn;
+       GtkWidget *msgid_checkbtn;
+       GtkWidget *customhdr_checkbtn;
+       GtkWidget *smtp_auth_checkbtn;
        GtkWidget *smtp_auth_type_optmenu;
        GtkWidget *smtp_uid_entry;
        GtkWidget *smtp_pass_entry;
-       GtkWidget *pop_bfr_smtp_chkbtn;
+       GtkWidget *pop_bfr_smtp_checkbtn;
        GtkWidget *pop_bfr_smtp_tm_entry;
+       GtkWidget *pop_auth_timeout_lbl;
+       GtkWidget *pop_auth_minutes_lbl;
 } p_send;
 
 static struct Compose {
@@ -146,20 +158,27 @@ static struct Compose {
        GtkWidget *entry_sigpath;
        GtkWidget *checkbtn_autosig;
        GtkWidget *entry_sigsep;
-       GtkWidget *autocc_chkbtn;
+       GtkWidget *autocc_checkbtn;
        GtkWidget *autocc_entry;
-       GtkWidget *autobcc_chkbtn;
+       GtkWidget *autobcc_checkbtn;
        GtkWidget *autobcc_entry;
-       GtkWidget *autoreplyto_chkbtn;
+       GtkWidget *autoreplyto_checkbtn;
        GtkWidget *autoreplyto_entry;
+#ifdef USE_ASPELL
+       GtkWidget *checkbtn_enable_default_dictionary;
+       GtkWidget *optmenu_default_dictionary;
+       GtkWidget *checkbtn_enable_default_alt_dictionary;
+       GtkWidget *optmenu_default_alt_dictionary;
+#endif
 } compose;
 
 static struct Privacy {
        GtkWidget *default_privacy_system;
-       GtkWidget *default_encrypt_chkbtn;
-       GtkWidget *default_encrypt_reply_chkbtn;
-       GtkWidget *default_sign_chkbtn;
-       GtkWidget *save_clear_text_chkbtn;
+       GtkWidget *default_encrypt_checkbtn;
+       GtkWidget *default_encrypt_reply_checkbtn;
+       GtkWidget *default_sign_checkbtn;
+       GtkWidget *save_clear_text_checkbtn;
+       GtkWidget *encrypt_to_self_checkbtn;
 } privacy;
 
 #if USE_OPENSSL
@@ -183,45 +202,54 @@ static struct SSLPrefs {
        GtkWidget *smtp_ssltunnel_radiobtn;
        GtkWidget *smtp_starttls_radiobtn;
 
-       GtkWidget *use_nonblocking_ssl_chkbtn;
+       GtkWidget *use_nonblocking_ssl_checkbtn;
 } ssl;
 #endif /* USE_OPENSSL */
 
 static struct Advanced {
-       GtkWidget *smtpport_chkbtn;
+       GtkWidget *smtpport_checkbtn;
        GtkWidget *smtpport_entry;
        GtkWidget *popport_hbox;
-       GtkWidget *popport_chkbtn;
+       GtkWidget *popport_checkbtn;
        GtkWidget *popport_entry;
        GtkWidget *imapport_hbox;
-       GtkWidget *imapport_chkbtn;
+       GtkWidget *imapport_checkbtn;
        GtkWidget *imapport_entry;
        GtkWidget *nntpport_hbox;
-       GtkWidget *nntpport_chkbtn;
+       GtkWidget *nntpport_checkbtn;
        GtkWidget *nntpport_entry;
-       GtkWidget *domain_chkbtn;
+       GtkWidget *domain_checkbtn;
        GtkWidget *domain_entry;
-       GtkWidget *crosspost_chkbtn;
+       GtkWidget *crosspost_checkbtn;
        GtkWidget *crosspost_colormenu;
 
-       GtkWidget *tunnelcmd_chkbtn;
+       GtkWidget *tunnelcmd_checkbtn;
        GtkWidget *tunnelcmd_entry;
 
-       GtkWidget *sent_folder_chkbtn;
+       GtkWidget *sent_folder_checkbtn;
        GtkWidget *sent_folder_entry;
-       GtkWidget *queue_folder_chkbtn;
+       GtkWidget *queue_folder_checkbtn;
        GtkWidget *queue_folder_entry;
-       GtkWidget *draft_folder_chkbtn;
+       GtkWidget *draft_folder_checkbtn;
        GtkWidget *draft_folder_entry;
-       GtkWidget *trash_folder_chkbtn;
+       GtkWidget *trash_folder_checkbtn;
        GtkWidget *trash_folder_entry;
 } advanced;
 
-static void prefs_account_fix_size                     (void);
+static char *protocol_names[] = {
+       N_("POP3"),
+       NULL,           /* APOP, deprecated */
+       NULL,           /* RPOP, deprecated */
+       N_("IMAP4"),
+       N_("News (NNTP)"),
+       N_("Local mbox file"),
+       N_("None (SMTP only)")
+};
 
 static void prefs_account_protocol_set_data_from_optmenu(PrefParam *pparam);
 static void prefs_account_protocol_set_optmenu         (PrefParam *pparam);
-static void prefs_account_protocol_activated           (GtkMenuItem *menuitem);
+static void prefs_account_protocol_changed             (GtkComboBox *combobox,
+                                                       gpointer data);
 
 static void prefs_account_set_string_from_optmenu      (PrefParam *pparam);
 static void prefs_account_set_optmenu_from_string      (PrefParam *pparam);
@@ -244,6 +272,13 @@ static void prefs_account_nntpauth_toggled(GtkToggleButton *button,
 static void prefs_account_mailcmd_toggled(GtkToggleButton *button,
                                          gpointer user_data);
 
+#if USE_ASPELL
+static void prefs_account_compose_default_dictionary_set_string_from_optmenu
+                                                       (PrefParam *pparam);
+static void prefs_account_compose_default_dictionary_set_optmenu_from_string
+                                                       (PrefParam *pparam);
+#endif
+
 static gchar *privacy_prefs;
 
 static PrefParam param[] = {
@@ -252,7 +287,7 @@ static PrefParam param[] = {
         &basic.acname_entry, prefs_set_data_from_entry, prefs_set_entry},
 
        {"is_default", "FALSE", &tmp_ac_prefs.is_default, P_BOOL,
-        &basic.default_chkbtn,
+        &basic.default_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"name", NULL, &tmp_ac_prefs.name, P_STRING,
@@ -265,7 +300,7 @@ static PrefParam param[] = {
         &basic.org_entry, prefs_set_data_from_entry, prefs_set_entry},
 
        {"protocol", NULL, &tmp_ac_prefs.protocol, P_ENUM,
-        &basic.protocol_optmenu,
+        (GtkWidget **)&basic.protocol_optmenu,
         prefs_account_protocol_set_data_from_optmenu,
         prefs_account_protocol_set_optmenu},
 
@@ -282,17 +317,17 @@ static PrefParam param[] = {
         &basic.localmbox_entry, prefs_set_data_from_entry, prefs_set_entry},
 
        {"use_mail_command", "FALSE", &tmp_ac_prefs.use_mail_command, P_BOOL,
-        &basic.mailcmd_chkbtn, prefs_set_data_from_toggle, prefs_set_toggle},
+        &basic.mailcmd_checkbtn, prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"mail_command", DEFAULT_SENDMAIL_CMD, &tmp_ac_prefs.mail_command, P_STRING,
         &basic.mailcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
 
        {"use_nntp_auth", "FALSE", &tmp_ac_prefs.use_nntp_auth, P_BOOL,
-        &basic.nntpauth_chkbtn,
+        &basic.nntpauth_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
        
        {"use_nntp_auth_onconnect", "FALSE", &tmp_ac_prefs.use_nntp_auth_onconnect, P_BOOL,
-        &basic.nntpauth_onconnect_chkbtn,
+        &basic.nntpauth_onconnect_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"user_id", "ENV_USER", &tmp_ac_prefs.userid, P_STRING,
@@ -309,30 +344,30 @@ static PrefParam param[] = {
 
        /* Receive */
        {"use_apop_auth", "FALSE", &tmp_ac_prefs.use_apop_auth, P_BOOL,
-        &receive.use_apop_chkbtn,
+        &receive.use_apop_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"remove_mail", "TRUE", &tmp_ac_prefs.rmmail, P_BOOL,
-        &receive.rmmail_chkbtn,
+        &receive.rmmail_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
-       {"message_leave_time", "0", &tmp_ac_prefs.msg_leave_time, P_INT,
+       {"message_leave_time", "7", &tmp_ac_prefs.msg_leave_time, P_INT,
         &receive.leave_time_entry,
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"get_all_mail", "FALSE", &tmp_ac_prefs.getall, P_BOOL,
-        &receive.getall_chkbtn,
+        &receive.getall_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"enable_size_limit", "FALSE", &tmp_ac_prefs.enable_size_limit, P_BOOL,
-        &receive.size_limit_chkbtn,
+        &receive.size_limit_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
        {"size_limit", "1024", &tmp_ac_prefs.size_limit, P_INT,
         &receive.size_limit_entry,
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"filter_on_receive", "TRUE", &tmp_ac_prefs.filter_on_recv, P_BOOL,
-        &receive.filter_on_recv_chkbtn,
+        &receive.filter_on_recv_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"imap_auth_method", "0", &tmp_ac_prefs.imap_auth_type, P_ENUM,
@@ -341,7 +376,7 @@ static PrefParam param[] = {
         prefs_account_imap_auth_type_set_optmenu},
 
        {"receive_at_get_all", "TRUE", &tmp_ac_prefs.recv_at_getall, P_BOOL,
-        &receive.recvatgetall_chkbtn,
+        &receive.recvatgetall_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"max_news_articles", "300", &tmp_ac_prefs.max_articles, P_INT,
@@ -349,20 +384,16 @@ static PrefParam param[] = {
         prefs_set_data_from_spinbtn, prefs_set_spinbtn},
 
        /* Send */
-       {"add_date", "TRUE", &tmp_ac_prefs.add_date, P_BOOL,
-        &p_send.date_chkbtn,
-        prefs_set_data_from_toggle, prefs_set_toggle},
-
        {"generate_msgid", "TRUE", &tmp_ac_prefs.gen_msgid, P_BOOL,
-        &p_send.msgid_chkbtn,
+        &p_send.msgid_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"add_custom_header", "FALSE", &tmp_ac_prefs.add_customhdr, P_BOOL,
-        &p_send.customhdr_chkbtn,
+        &p_send.customhdr_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"use_smtp_auth", "FALSE", &tmp_ac_prefs.use_smtp_auth, P_BOOL,
-        &p_send.smtp_auth_chkbtn,
+        &p_send.smtp_auth_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"smtp_auth_method", "0", &tmp_ac_prefs.smtp_auth_type, P_ENUM,
@@ -376,7 +407,7 @@ static PrefParam param[] = {
         &p_send.smtp_pass_entry, prefs_set_data_from_entry, prefs_set_entry},
 
        {"pop_before_smtp", "FALSE", &tmp_ac_prefs.pop_before_smtp, P_BOOL,
-        &p_send.pop_bfr_smtp_chkbtn,
+        &p_send.pop_bfr_smtp_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"pop_before_smtp_timeout", "5", &tmp_ac_prefs.pop_before_smtp_timeout, P_INT,
@@ -401,7 +432,7 @@ static PrefParam param[] = {
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"set_autocc", "FALSE", &tmp_ac_prefs.set_autocc, P_BOOL,
-        &compose.autocc_chkbtn,
+        &compose.autocc_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"auto_cc", NULL, &tmp_ac_prefs.auto_cc, P_STRING,
@@ -409,7 +440,7 @@ static PrefParam param[] = {
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"set_autobcc", "FALSE", &tmp_ac_prefs.set_autobcc, P_BOOL,
-        &compose.autobcc_chkbtn,
+        &compose.autobcc_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"auto_bcc", NULL, &tmp_ac_prefs.auto_bcc, P_STRING,
@@ -417,28 +448,51 @@ static PrefParam param[] = {
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"set_autoreplyto", "FALSE", &tmp_ac_prefs.set_autoreplyto, P_BOOL,
-        &compose.autoreplyto_chkbtn,
+        &compose.autoreplyto_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"auto_replyto", NULL, &tmp_ac_prefs.auto_replyto, P_STRING,
         &compose.autoreplyto_entry,
         prefs_set_data_from_entry, prefs_set_entry},
 
+#if USE_ASPELL
+       {"enable_default_dictionary", "", &tmp_ac_prefs.enable_default_dictionary, P_BOOL,
+        &compose.checkbtn_enable_default_dictionary,
+        prefs_set_data_from_toggle, prefs_set_toggle},
+
+       {"default_dictionary", NULL, &tmp_ac_prefs.default_dictionary, P_STRING,
+        &compose.optmenu_default_dictionary,
+        prefs_account_compose_default_dictionary_set_string_from_optmenu,
+        prefs_account_compose_default_dictionary_set_optmenu_from_string},
+
+       {"enable_default_alt_dictionary", "", &tmp_ac_prefs.enable_default_alt_dictionary, P_BOOL,
+        &compose.checkbtn_enable_default_alt_dictionary,
+        prefs_set_data_from_toggle, prefs_set_toggle},
+
+       {"default_alt_dictionary", NULL, &tmp_ac_prefs.default_alt_dictionary, P_STRING,
+        &compose.optmenu_default_alt_dictionary,
+        prefs_account_compose_default_dictionary_set_string_from_optmenu,
+        prefs_account_compose_default_dictionary_set_optmenu_from_string},
+#endif  
+
        /* Privacy */
        {"default_privacy_system", "", &tmp_ac_prefs.default_privacy_system, P_STRING,
         &privacy.default_privacy_system,
         prefs_account_set_string_from_optmenu, prefs_account_set_optmenu_from_string},
        {"default_encrypt", "FALSE", &tmp_ac_prefs.default_encrypt, P_BOOL,
-        &privacy.default_encrypt_chkbtn,
+        &privacy.default_encrypt_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
        {"default_encrypt_reply", "TRUE", &tmp_ac_prefs.default_encrypt_reply, P_BOOL,
-        &privacy.default_encrypt_reply_chkbtn,
+        &privacy.default_encrypt_reply_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
        {"default_sign", "FALSE", &tmp_ac_prefs.default_sign, P_BOOL,
-        &privacy.default_sign_chkbtn,
+        &privacy.default_sign_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
        {"save_clear_text", "FALSE", &tmp_ac_prefs.save_encrypted_as_clear_text, P_BOOL,
-        &privacy.save_clear_text_chkbtn,
+        &privacy.save_clear_text_checkbtn,
+        prefs_set_data_from_toggle, prefs_set_toggle},
+       {"encrypt_to_self", "FALSE", &tmp_ac_prefs.encrypt_to_self, P_BOOL,
+        &privacy.encrypt_to_self_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
        {"privacy_prefs", "", &privacy_prefs, P_STRING,
         NULL, NULL, NULL},
@@ -462,7 +516,7 @@ static PrefParam param[] = {
         prefs_account_enum_set_radiobtn},
 
        {"use_nonblocking_ssl", "1", &tmp_ac_prefs.use_nonblocking_ssl, P_BOOL,
-        &ssl.use_nonblocking_ssl_chkbtn,
+        &ssl.use_nonblocking_ssl_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 #else
        /* SSL */
@@ -481,7 +535,7 @@ static PrefParam param[] = {
 
        /* Advanced */
        {"set_smtpport", "FALSE", &tmp_ac_prefs.set_smtpport, P_BOOL,
-        &advanced.smtpport_chkbtn,
+        &advanced.smtpport_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"smtp_port", "25", &tmp_ac_prefs.smtpport, P_USHORT,
@@ -489,7 +543,7 @@ static PrefParam param[] = {
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"set_popport", "FALSE", &tmp_ac_prefs.set_popport, P_BOOL,
-        &advanced.popport_chkbtn,
+        &advanced.popport_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"pop_port", "110", &tmp_ac_prefs.popport, P_USHORT,
@@ -497,7 +551,7 @@ static PrefParam param[] = {
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"set_imapport", "FALSE", &tmp_ac_prefs.set_imapport, P_BOOL,
-        &advanced.imapport_chkbtn,
+        &advanced.imapport_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"imap_port", "143", &tmp_ac_prefs.imapport, P_USHORT,
@@ -505,7 +559,7 @@ static PrefParam param[] = {
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"set_nntpport", "FALSE", &tmp_ac_prefs.set_nntpport, P_BOOL,
-        &advanced.nntpport_chkbtn,
+        &advanced.nntpport_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"nntp_port", "119", &tmp_ac_prefs.nntpport, P_USHORT,
@@ -513,7 +567,7 @@ static PrefParam param[] = {
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"set_domain", "FALSE", &tmp_ac_prefs.set_domain, P_BOOL,
-        &advanced.domain_chkbtn,
+        &advanced.domain_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"domain", NULL, &tmp_ac_prefs.domain, P_STRING,
@@ -521,7 +575,7 @@ static PrefParam param[] = {
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"set_tunnelcmd", "FALSE", &tmp_ac_prefs.set_tunnelcmd, P_BOOL,
-        &advanced.tunnelcmd_chkbtn,
+        &advanced.tunnelcmd_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"tunnelcmd", NULL, &tmp_ac_prefs.tunnelcmd, P_STRING,
@@ -529,7 +583,7 @@ static PrefParam param[] = {
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"mark_crosspost_read", "FALSE", &tmp_ac_prefs.mark_crosspost_read, P_BOOL,
-        &advanced.crosspost_chkbtn,
+        &advanced.crosspost_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
        {"crosspost_color", NULL, &tmp_ac_prefs.crosspost_col, P_ENUM,
@@ -540,29 +594,33 @@ static PrefParam param[] = {
        {"imap_directory", NULL, &tmp_ac_prefs.imap_dir, P_STRING,
         &receive.imapdir_entry, prefs_set_data_from_entry, prefs_set_entry},
 
+       {"imap_subsonly", "TRUE", &tmp_ac_prefs.imap_subsonly, P_BOOL,
+        &receive.subsonly_checkbtn,
+        prefs_set_data_from_toggle, prefs_set_toggle},
+
        {"set_sent_folder", "FALSE", &tmp_ac_prefs.set_sent_folder, P_BOOL,
-        &advanced.sent_folder_chkbtn,
+        &advanced.sent_folder_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
        {"sent_folder", NULL, &tmp_ac_prefs.sent_folder, P_STRING,
         &advanced.sent_folder_entry,
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"set_queue_folder", "FALSE", &tmp_ac_prefs.set_queue_folder, P_BOOL,
-        &advanced.queue_folder_chkbtn,
+        &advanced.queue_folder_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
        {"queue_folder", NULL, &tmp_ac_prefs.queue_folder, P_STRING,
         &advanced.queue_folder_entry,
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"set_draft_folder", "FALSE", &tmp_ac_prefs.set_draft_folder, P_BOOL,
-        &advanced.draft_folder_chkbtn,
+        &advanced.draft_folder_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
        {"draft_folder", NULL, &tmp_ac_prefs.draft_folder, P_STRING,
         &advanced.draft_folder_entry,
         prefs_set_data_from_entry, prefs_set_entry},
 
        {"set_trash_folder", "FALSE", &tmp_ac_prefs.set_trash_folder, P_BOOL,
-        &advanced.trash_folder_chkbtn,
+        &advanced.trash_folder_checkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
        {"trash_folder", NULL, &tmp_ac_prefs.trash_folder, P_STRING,
         &advanced.trash_folder_entry,
@@ -596,6 +654,9 @@ static void prefs_account_sigcmd_radiobtn_cb        (GtkWidget      *widget,
 static void prefs_account_signature_browse_cb  (GtkWidget      *widget,
                                                 gpointer        data);
 
+static void prefs_account_signature_edit_cb    (GtkWidget      *widget,
+                                                gpointer        data);
+
 static void pop_bfr_smtp_tm_set_sens           (GtkWidget      *widget,
                                                 gpointer        data);
 
@@ -621,13 +682,20 @@ static void privacy_system_activated(GtkMenuItem *menuitem)
        
        privacy_enabled = strcmp(system_id, "");
 
-       gtk_widget_set_sensitive (privacy.default_encrypt_chkbtn, privacy_enabled);
-       gtk_widget_set_sensitive (privacy.default_encrypt_reply_chkbtn, privacy_enabled);
-       gtk_widget_set_sensitive (privacy.default_sign_chkbtn, privacy_enabled);
-       gtk_widget_set_sensitive (privacy.save_clear_text_chkbtn, privacy_enabled);
+       if (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_DATA) == NULL ||
+           GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menuitem), MENU_VAL_DATA)) == FALSE)
+               privacy_enabled = FALSE;
+
+       gtk_widget_set_sensitive (privacy.default_encrypt_checkbtn, privacy_enabled);
+       gtk_widget_set_sensitive (privacy.default_encrypt_reply_checkbtn, privacy_enabled);
+       gtk_widget_set_sensitive (privacy.default_sign_checkbtn, privacy_enabled);
+       gtk_widget_set_sensitive (privacy.encrypt_to_self_checkbtn, privacy_enabled);
+       gtk_widget_set_sensitive (privacy.save_clear_text_checkbtn, 
+               privacy_enabled && !gtk_toggle_button_get_active(
+                                       GTK_TOGGLE_BUTTON(privacy.encrypt_to_self_checkbtn)));
 }
 
-void update_privacy_system_menu() {
+static void update_privacy_system_menu() {
        GtkWidget *menu;
        GtkWidget *menuitem;
        GSList *system_ids, *cur;
@@ -637,6 +705,7 @@ void update_privacy_system_menu() {
        menuitem = gtk_menu_item_new_with_label(_("None"));
        gtk_widget_show(menuitem);
        g_object_set_data(G_OBJECT(menuitem), MENU_VAL_ID, "");
+       g_object_set_data(G_OBJECT(menuitem), MENU_VAL_DATA, GINT_TO_POINTER(FALSE));
        gtk_menu_append(GTK_MENU(menu), menuitem);
 
        g_signal_connect(G_OBJECT(menuitem), "activate",
@@ -652,6 +721,8 @@ void update_privacy_system_menu() {
                menuitem = gtk_menu_item_new_with_label(name);
                gtk_widget_show(menuitem);
                g_object_set_data_full(G_OBJECT(menuitem), MENU_VAL_ID, id, g_free);
+               g_object_set_data(G_OBJECT(menuitem), MENU_VAL_DATA, GINT_TO_POINTER(TRUE));
+
                gtk_menu_append(GTK_MENU(menu), menuitem);
 
                g_signal_connect(G_OBJECT(menuitem), "activate",
@@ -677,6 +748,19 @@ static void create_widget_func(PrefsPage * _page,
 
        if (notebook == NULL)
                prefs_account_create();
+       else {
+#ifdef USE_ASPELL
+               /* reset gtkaspell menus */
+               gtk_option_menu_remove_menu(GTK_OPTION_MENU(compose.optmenu_default_dictionary));
+               gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_default_dictionary), 
+                               gtkaspell_dictionary_option_menu_new(
+                               prefs_common.aspell_path));
+               gtk_option_menu_remove_menu(GTK_OPTION_MENU(compose.optmenu_default_alt_dictionary));
+               gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_default_alt_dictionary), 
+                               gtkaspell_dictionary_option_menu_new_with_refresh(
+                               prefs_common.aspell_path, FALSE));
+#endif
+       }
        gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
        gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
 
@@ -701,12 +785,6 @@ static void create_widget_func(PrefsPage * _page,
                        gtk_entry_set_text(GTK_ENTRY(basic.org_entry),
                                           def_ac->organization ? def_ac->organization : "");
                }
-               menu_set_sensitive_all
-                       (GTK_MENU_SHELL
-                               (gtk_option_menu_get_menu
-                                       (GTK_OPTION_MENU
-                                               (basic.protocol_optmenu))),
-                        TRUE);
        } else
                prefs_set_dialog(param);
 
@@ -740,7 +818,7 @@ void prefs_account_init()
        static gchar *path[2];
 
        path[0] = _("Account");
-       path[2] = NULL;
+       path[1] = NULL;
         
        account_page.page.path = path;
        account_page.page.weight = 1000.0;
@@ -938,12 +1016,23 @@ static gint prefs_account_get_new_id(void)
        return last_id + 1;
 }
 
-void destroy_dialog(gpointer data)
+static void destroy_dialog(gpointer data)
 {
        PrefsAccount *ac_prefs = (PrefsAccount *) data;
-       if (!cancelled)
+       if (!cancelled) {
+               gboolean update_fld_list = FALSE;
+               if (ac_prefs->protocol == A_IMAP4 && !new_account) {
+                       if ((&tmp_ac_prefs)->imap_subsonly != ac_prefs->imap_subsonly) {
+                               update_fld_list = TRUE;
+                       } 
+               }
                *ac_prefs = tmp_ac_prefs;
+               if (update_fld_list)
+                       folderview_rescan_tree(ac_prefs->folder, FALSE);
+       } else /* the customhdr_list may have changed, update it anyway */
+               ac_prefs->customhdr_list = (&tmp_ac_prefs)->customhdr_list;
 
+       
        gtk_main_quit();
 }
 
@@ -1004,49 +1093,21 @@ static void prefs_account_create(void)
 
        /* create all widgets on notebook */
        prefs_account_basic_create();
-       SET_NOTEBOOK_LABEL(notebook, _("Basic"), page++);
+       SET_NOTEBOOK_LABEL(notebook, _("_Basic"), page++);
        prefs_account_receive_create();
-       SET_NOTEBOOK_LABEL(notebook, _("Receive"), page++);
+       SET_NOTEBOOK_LABEL(notebook, _("_Receive"), page++);
        prefs_account_send_create();
-       SET_NOTEBOOK_LABEL(notebook, _("Send"), page++);
+       SET_NOTEBOOK_LABEL(notebook, _("_Send"), page++);
        prefs_account_compose_create();
-       SET_NOTEBOOK_LABEL(notebook, _("Compose"), page++);
+       SET_NOTEBOOK_LABEL(notebook, _("Co_mpose"), page++);
        prefs_account_privacy_create();
-       SET_NOTEBOOK_LABEL(notebook, _("Privacy"), page++);
+       SET_NOTEBOOK_LABEL(notebook, _("_Privacy"), page++);
 #if USE_OPENSSL
        prefs_account_ssl_create();
-       SET_NOTEBOOK_LABEL(notebook, _("SSL"), page++);
+       SET_NOTEBOOK_LABEL(notebook, _("SS_L"), page++);
 #endif /* USE_OPENSSL */
        prefs_account_advanced_create();
-       SET_NOTEBOOK_LABEL(notebook, _("Advanced"), page++);
-
-       prefs_account_fix_size();
-}
-
-/**
- * prefs_account_fix_size:
- * 
- * Fix the window size after creating widgets by selecting "Local"
- * protocol (currently it has the largest size of parameter widgets).
- * Without this the window gets too large.
- **/
-static void prefs_account_fix_size(void)
-{
-       GtkOptionMenu *optmenu = GTK_OPTION_MENU (basic.protocol_optmenu);
-       GtkWidget *menu;
-       GtkWidget *menuitem;
-
-       gtk_option_menu_set_history (optmenu, 4); /* local */
-       menu = gtk_option_menu_get_menu (optmenu);
-       menuitem = gtk_menu_get_active (GTK_MENU (menu));
-       gtk_menu_item_activate (GTK_MENU_ITEM (menuitem));
-}
-
-#define SET_ACTIVATE(menuitem) \
-{ \
-       g_signal_connect(G_OBJECT(menuitem), "activate", \
-                        G_CALLBACK(prefs_account_protocol_activated), \
-                        NULL); \
+       SET_NOTEBOOK_LABEL(notebook, _("A_dvanced"), page++);
 }
 
 #define TABLE_YPAD 2
@@ -1057,7 +1118,7 @@ static void prefs_account_basic_create(void)
        GtkWidget *hbox;
        GtkWidget *label;
        GtkWidget *acname_entry;
-       GtkWidget *default_chkbtn;
+       GtkWidget *default_checkbtn;
        GtkWidget *frame1;
        GtkWidget *table1;
        GtkWidget *name_entry;
@@ -1066,9 +1127,11 @@ static void prefs_account_basic_create(void)
 
        GtkWidget *serv_frame;
        GtkWidget *vbox2;
+       GtkWidget *optmenubox;
        GtkWidget *optmenu;
-       GtkWidget *optmenu_menu;
-       GtkWidget *menuitem;
+       GtkWidget *optlabel;
+       GtkWidget *no_imap_warn_icon;
+       GtkWidget *no_imap_warn_label;
        GtkWidget *serv_table;
        GtkWidget *recvserv_label;
        GtkWidget *smtpserv_label;
@@ -1078,15 +1141,20 @@ static void prefs_account_basic_create(void)
        GtkWidget *recvserv_entry;
        GtkWidget *smtpserv_entry;
        GtkWidget *nntpserv_entry;
-       GtkWidget *nntpauth_chkbtn;
-       GtkWidget *nntpauth_onconnect_chkbtn;
+       GtkWidget *nntpauth_checkbtn;
+       GtkWidget *nntpauth_onconnect_checkbtn;
        GtkWidget *localmbox_entry;
-       GtkWidget *mailcmd_chkbtn;
+       GtkWidget *mailcmd_checkbtn;
        GtkWidget *mailcmd_entry;
        GtkWidget *uid_label;
        GtkWidget *pass_label;
        GtkWidget *uid_entry;
        GtkWidget *pass_entry;
+       GtkListStore *menu;
+       GtkTreeIter iter;
+
+       struct BasicProtocol *protocol_optmenu;
+       gint i;
 
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
        gtk_widget_show (vbox1);
@@ -1106,9 +1174,9 @@ static void prefs_account_basic_create(void)
        gtk_widget_set_size_request (acname_entry, DEFAULT_ENTRY_WIDTH, -1);
        gtk_box_pack_start (GTK_BOX (hbox), acname_entry, TRUE, TRUE, 0);
 
-       default_chkbtn = gtk_check_button_new_with_label (_("Set as default"));
-       gtk_widget_show (default_chkbtn);
-       gtk_box_pack_end (GTK_BOX (hbox), default_chkbtn, FALSE, FALSE, 0);
+       default_checkbtn = gtk_check_button_new_with_label (_("Set as default"));
+       gtk_widget_show (default_checkbtn);
+       gtk_box_pack_end (GTK_BOX (hbox), default_checkbtn, TRUE, FALSE, 0);
 
        PACK_FRAME (vbox1, frame1, _("Personal information"));
 
@@ -1155,12 +1223,7 @@ static void prefs_account_basic_create(void)
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
 
-       PACK_FRAME (vbox1, serv_frame, _("Server information"));
-
-       vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
-       gtk_widget_show (vbox2);
-       gtk_container_add (GTK_CONTAINER (serv_frame), vbox2);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+       vbox2 = gtkut_get_options_frame(vbox1, &serv_frame, _("Server information"));
 
        hbox = gtk_hbox_new (FALSE, 8);
        gtk_widget_show (hbox);
@@ -1170,24 +1233,44 @@ static void prefs_account_basic_create(void)
        gtk_widget_show (label);
        gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
 
-       optmenu = gtk_option_menu_new ();
-       gtk_widget_show (optmenu);
-       gtk_box_pack_start (GTK_BOX (hbox), optmenu, FALSE, FALSE, 0);
-
-       optmenu_menu = gtk_menu_new ();
-
-       MENUITEM_ADD (optmenu_menu, menuitem, _("POP3"),  A_POP3);
-       SET_ACTIVATE (menuitem);
-       MENUITEM_ADD (optmenu_menu, menuitem, _("IMAP4"), A_IMAP4);
-       SET_ACTIVATE (menuitem);
-       MENUITEM_ADD (optmenu_menu, menuitem, _("News (NNTP)"), A_NNTP);
-       SET_ACTIVATE (menuitem);
-       MENUITEM_ADD (optmenu_menu, menuitem, _("Local mbox file"), A_LOCAL);
-       SET_ACTIVATE (menuitem);
-       MENUITEM_ADD (optmenu_menu, menuitem, _("None (SMTP only)"), A_NONE);
-       SET_ACTIVATE (menuitem);
-
-       gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
+       /* Create GtkHBox for protocol combobox and label */
+       optmenubox = gtk_hbox_new(FALSE, 20);
+       gtk_widget_show(optmenubox);
+       gtk_box_pack_start (GTK_BOX (hbox), optmenubox, FALSE, FALSE, 0);
+
+       /* Create and populate the combobox */
+       optmenu = gtkut_sc_combobox_create(NULL, FALSE);
+       gtk_box_pack_start(GTK_BOX (optmenubox), optmenu, FALSE, FALSE, 0);
+
+       menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(optmenu)));
+       for( i = 0; i < NUM_RECV_PROTOCOLS; i++ )
+               if( protocol_names[i] != NULL )
+                       COMBOBOX_ADD (menu, _(protocol_names[i]), i);
+
+       g_signal_connect(G_OBJECT(optmenu), "changed",
+                       G_CALLBACK(prefs_account_protocol_changed), NULL);
+
+       /* Create protocol label, empty for now */
+       optlabel = gtk_label_new("");
+       gtk_label_set_use_markup(GTK_LABEL(optlabel), TRUE);
+       gtk_label_set_justify(GTK_LABEL(optlabel), GTK_JUSTIFY_CENTER);
+       gtk_box_pack_start(GTK_BOX (optmenubox), optlabel, FALSE, FALSE, 0);
+
+       no_imap_warn_icon = gtk_image_new_from_stock
+                        (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_SMALL_TOOLBAR);
+       no_imap_warn_label = gtk_label_new(_("<span weight=\"bold\">Warning: this version of Claws Mail\n"
+                         "has been built without IMAP support.</span>"));
+       gtk_label_set_use_markup(GTK_LABEL(no_imap_warn_label), TRUE);
+
+       gtk_box_pack_start(GTK_BOX (optmenubox), no_imap_warn_icon, FALSE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX (optmenubox), no_imap_warn_label, FALSE, FALSE, 0);
+       /* Set up a struct to store pointers to necessary widgets */
+       protocol_optmenu = g_new(struct BasicProtocol, 1);
+       protocol_optmenu->combobox = optmenu;
+       protocol_optmenu->label = optlabel;
+       protocol_optmenu->descrlabel = label;
+       protocol_optmenu->no_imap_warn_icon = no_imap_warn_icon;
+       protocol_optmenu->no_imap_warn_label = no_imap_warn_label;
 
        serv_table = gtk_table_new (6, 4, FALSE);
        gtk_widget_show (serv_table);
@@ -1203,18 +1286,18 @@ static void prefs_account_basic_create(void)
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
 /*     gtk_table_set_row_spacing (GTK_TABLE (serv_table), 0, 0); */
 
-       nntpauth_chkbtn = gtk_check_button_new_with_label
+       nntpauth_checkbtn = gtk_check_button_new_with_label
                (_("This server requires authentication"));
-       gtk_widget_show (nntpauth_chkbtn);
+       gtk_widget_show (nntpauth_checkbtn);
        
-       gtk_table_attach (GTK_TABLE (serv_table), nntpauth_chkbtn, 0, 2, 6, 7,
+       gtk_table_attach (GTK_TABLE (serv_table), nntpauth_checkbtn, 0, 2, 6, 7,
                          GTK_FILL, 0, 0, 0);
 
-       nntpauth_onconnect_chkbtn = gtk_check_button_new_with_label
+       nntpauth_onconnect_checkbtn = gtk_check_button_new_with_label
                (_("Authenticate on connect"));
-       gtk_widget_show (nntpauth_onconnect_chkbtn);
+       gtk_widget_show (nntpauth_onconnect_checkbtn);
 
-       gtk_table_attach (GTK_TABLE (serv_table), nntpauth_onconnect_chkbtn, 2, 4, 6, 7,
+       gtk_table_attach (GTK_TABLE (serv_table), nntpauth_onconnect_checkbtn, 2, 4, 6, 7,
                          GTK_FILL, 0, 0, 0);
 
        recvserv_entry = gtk_entry_new ();
@@ -1282,13 +1365,13 @@ static void prefs_account_basic_create(void)
        gtk_misc_set_alignment (GTK_MISC (smtpserv_label), 1, 0.5);
 /*     gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); */
 
-       mailcmd_chkbtn = gtk_check_button_new_with_label
+       mailcmd_checkbtn = gtk_check_button_new_with_label
                (_("Use mail command rather than SMTP server"));
-       gtk_widget_show (mailcmd_chkbtn);
-       gtk_table_attach (GTK_TABLE (serv_table), mailcmd_chkbtn, 0, 4, 5, 6,
+       gtk_widget_show (mailcmd_checkbtn);
+       gtk_table_attach (GTK_TABLE (serv_table), mailcmd_checkbtn, 0, 4, 5, 6,
                          GTK_EXPAND | GTK_FILL,
                          0, 0, TABLE_YPAD);
-       g_signal_connect(G_OBJECT(mailcmd_chkbtn), "toggled",
+       g_signal_connect(G_OBJECT(mailcmd_checkbtn), "toggled",
                         G_CALLBACK(prefs_account_mailcmd_toggled),
                         NULL);
 
@@ -1310,14 +1393,14 @@ static void prefs_account_basic_create(void)
        gtk_table_attach (GTK_TABLE (serv_table), pass_label, 2, 3, 7, 8,
                          0, 0, 0, 0);
 
-       SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, uid_label);
-       SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, pass_label);
-       SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, uid_entry);
-       SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, pass_entry);
-       SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, nntpauth_onconnect_chkbtn);
+       SET_TOGGLE_SENSITIVITY (nntpauth_checkbtn, uid_label);
+       SET_TOGGLE_SENSITIVITY (nntpauth_checkbtn, pass_label);
+       SET_TOGGLE_SENSITIVITY (nntpauth_checkbtn, uid_entry);
+       SET_TOGGLE_SENSITIVITY (nntpauth_checkbtn, pass_entry);
+       SET_TOGGLE_SENSITIVITY (nntpauth_checkbtn, nntpauth_onconnect_checkbtn);
 
        basic.acname_entry   = acname_entry;
-       basic.default_chkbtn = default_chkbtn;
+       basic.default_checkbtn = default_checkbtn;
 
        basic.name_entry = name_entry;
        basic.addr_entry = addr_entry;
@@ -1325,18 +1408,18 @@ static void prefs_account_basic_create(void)
 
        basic.serv_frame       = serv_frame;
        basic.serv_table       = serv_table;
-       basic.protocol_optmenu = optmenu;
+       basic.protocol_optmenu = (gpointer)protocol_optmenu;
        basic.recvserv_label   = recvserv_label;
        basic.recvserv_entry   = recvserv_entry;
        basic.smtpserv_label   = smtpserv_label;
        basic.smtpserv_entry   = smtpserv_entry;
        basic.nntpserv_label   = nntpserv_label;
        basic.nntpserv_entry   = nntpserv_entry;
-       basic.nntpauth_chkbtn  = nntpauth_chkbtn;
-       basic.nntpauth_onconnect_chkbtn  = nntpauth_onconnect_chkbtn;
+       basic.nntpauth_checkbtn  = nntpauth_checkbtn;
+       basic.nntpauth_onconnect_checkbtn  = nntpauth_onconnect_checkbtn;
        basic.localmbox_label   = localmbox_label;
        basic.localmbox_entry   = localmbox_entry;
-       basic.mailcmd_chkbtn   = mailcmd_chkbtn;
+       basic.mailcmd_checkbtn   = mailcmd_checkbtn;
        basic.mailcmd_label   = mailcmd_label;
        basic.mailcmd_entry   = mailcmd_entry;
        basic.uid_label        = uid_label;
@@ -1350,19 +1433,19 @@ static void prefs_account_receive_create(void)
        GtkWidget *vbox1;
        GtkWidget *frame1;
        GtkWidget *vbox2;
-       GtkWidget *use_apop_chkbtn;
-       GtkWidget *rmmail_chkbtn;
+       GtkWidget *use_apop_checkbtn;
+       GtkWidget *rmmail_checkbtn;
        GtkWidget *hbox_spc;
        GtkTooltips *leave_time_tooltip;
        GtkWidget *leave_time_label;
        GtkWidget *leave_time_entry;
-       GtkWidget *getall_chkbtn;
+       GtkWidget *getall_checkbtn;
        GtkWidget *hbox1;
-       GtkWidget *size_limit_chkbtn;
+       GtkWidget *size_limit_checkbtn;
        GtkWidget *size_limit_entry;
        GtkTooltips *size_limit_tooltip;
        GtkWidget *label;
-       GtkWidget *filter_on_recv_chkbtn;
+       GtkWidget *filter_on_recv_checkbtn;
        GtkWidget *vbox3;
        GtkWidget *inbox_label;
        GtkWidget *inbox_entry;
@@ -1371,6 +1454,7 @@ static void prefs_account_receive_create(void)
        GtkWidget *imap_frame;
        GtkWidget *imapdir_label;
        GtkWidget *imapdir_entry;
+       GtkWidget *subsonly_checkbtn;
        GtkWidget *local_frame;
        GtkWidget *local_vbox;
        GtkWidget *local_hbox;
@@ -1381,7 +1465,7 @@ static void prefs_account_receive_create(void)
        GtkWidget *optmenu;
        GtkWidget *optmenu_menu;
        GtkWidget *menuitem;
-       GtkWidget *recvatgetall_chkbtn;
+       GtkWidget *recvatgetall_checkbtn;
 
        GtkWidget *hbox2;
        GtkWidget *frame2;
@@ -1398,12 +1482,7 @@ static void prefs_account_receive_create(void)
        gtk_container_add (GTK_CONTAINER (notebook), vbox1);
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
 
-       PACK_FRAME (vbox1, local_frame, _("Local"));
-
-       local_vbox = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (local_vbox);
-       gtk_container_add (GTK_CONTAINER (local_frame), local_vbox);
-       gtk_container_set_border_width (GTK_CONTAINER (local_vbox), VBOX_BORDER);
+       local_vbox = gtkut_get_options_frame(vbox1, &local_frame, _("Local"));
 
        local_hbox = gtk_hbox_new (FALSE, 8);
        gtk_widget_show (local_hbox);
@@ -1421,7 +1500,7 @@ static void prefs_account_receive_create(void)
        gtk_widget_set_size_request (local_inbox_entry, DEFAULT_ENTRY_WIDTH, -1);
        gtk_box_pack_start (GTK_BOX (local_hbox), local_inbox_entry, TRUE, TRUE, 0);
 
-       local_inbox_btn = gtkut_get_browse_file_btn(_("_Browse"));
+       local_inbox_btn = gtkut_get_browse_file_btn(_("Bro_wse"));
        gtk_widget_show (local_inbox_btn);
        gtk_tooltips_set_tip(GTK_TOOLTIPS(inbox_tooltip), local_inbox_btn,
                             _("Unfiltered messages will be stored in this folder"),
@@ -1431,17 +1510,11 @@ static void prefs_account_receive_create(void)
                          G_CALLBACK (prefs_account_select_folder_cb),
                          local_inbox_entry);
 
-       PACK_FRAME (vbox1, frame1, _("POP3"));
-
-       vbox2 = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (vbox2);
-       gtk_container_add (GTK_CONTAINER (frame1), vbox2);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
-
-       PACK_CHECK_BUTTON (vbox2, use_apop_chkbtn,
+       vbox2 = gtkut_get_options_frame(vbox1, &frame1, _("POP3"));
+       PACK_CHECK_BUTTON (vbox2, use_apop_checkbtn,
                           _("Use secure authentication (APOP)"));
 
-       PACK_CHECK_BUTTON (vbox2, rmmail_chkbtn,
+       PACK_CHECK_BUTTON (vbox2, rmmail_checkbtn,
                           _("Remove messages on server when received"));
 
        hbox1 = gtk_hbox_new (FALSE, 8);
@@ -1470,18 +1543,18 @@ static void prefs_account_receive_create(void)
        gtk_widget_show (leave_time_label);
        gtk_box_pack_start (GTK_BOX (hbox1), leave_time_label, FALSE, FALSE, 0);
 
-       SET_TOGGLE_SENSITIVITY (rmmail_chkbtn, hbox1);
+       SET_TOGGLE_SENSITIVITY (rmmail_checkbtn, hbox1);
 
-       PACK_CHECK_BUTTON (vbox2, getall_chkbtn,
+       PACK_CHECK_BUTTON (vbox2, getall_checkbtn,
                           _("Download all messages on server"));
 
        hbox1 = gtk_hbox_new (FALSE, 8);
        gtk_widget_show (hbox1);
        gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
 
-       PACK_CHECK_BUTTON (hbox1, size_limit_chkbtn, _("Receive size limit"));
+       PACK_CHECK_BUTTON (hbox1, size_limit_checkbtn, _("Receive size limit"));
 
-       gtk_tooltips_set_tip(GTK_TOOLTIPS(size_limit_tooltip), size_limit_chkbtn,
+       gtk_tooltips_set_tip(GTK_TOOLTIPS(size_limit_tooltip), size_limit_checkbtn,
                             _("Messages over this limit will be partially retrieved. "
                               "When selecting them you will be able to download them fully "
                               "or delete them."),
@@ -1496,7 +1569,7 @@ static void prefs_account_receive_create(void)
        gtk_widget_show (label);
        gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
 
-       SET_TOGGLE_SENSITIVITY (size_limit_chkbtn, size_limit_entry);
+       SET_TOGGLE_SENSITIVITY (size_limit_checkbtn, size_limit_entry);
 
        PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
 
@@ -1516,7 +1589,7 @@ static void prefs_account_receive_create(void)
        gtk_widget_set_size_request (inbox_entry, DEFAULT_ENTRY_WIDTH, -1);
        gtk_box_pack_start (GTK_BOX (hbox1), inbox_entry, TRUE, TRUE, 0);
 
-       inbox_btn = gtkut_get_browse_file_btn(_("_Browse"));
+       inbox_btn = gtkut_get_browse_file_btn(_("Bro_wse"));
        gtk_widget_show (inbox_btn);
        gtk_tooltips_set_tip(GTK_TOOLTIPS(inbox_tooltip), inbox_btn,
                             _("Unfiltered messages will be stored in this folder"),
@@ -1526,12 +1599,7 @@ static void prefs_account_receive_create(void)
                          G_CALLBACK (prefs_account_select_folder_cb),
                          inbox_entry);
 
-       PACK_FRAME(vbox1, frame2, _("NNTP"));
-
-       vbox2 = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (vbox2);
-       gtk_container_add (GTK_CONTAINER (frame2), vbox2);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
+       vbox2 = gtkut_get_options_frame(vbox1, &frame2, _("NNTP"));
 
        hbox2 = gtk_hbox_new (FALSE, 8);
        gtk_widget_show (hbox2);
@@ -1557,12 +1625,7 @@ static void prefs_account_receive_create(void)
        gtk_spin_button_set_numeric
                (GTK_SPIN_BUTTON (maxarticle_spinbtn), TRUE);
 
-       PACK_FRAME (vbox1, imap_frame, _("IMAP4"));
-
-       vbox2 = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (vbox2);
-       gtk_container_add (GTK_CONTAINER (imap_frame), vbox2);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
+       vbox2 = gtkut_get_options_frame(vbox1, &imap_frame, _("IMAP4"));
 
        hbox1 = gtk_hbox_new (FALSE, 8);
        gtk_widget_show (hbox1);
@@ -1581,6 +1644,8 @@ static void prefs_account_receive_create(void)
        MENUITEM_ADD (optmenu_menu, menuitem, _("Automatic"), 0);
        MENUITEM_ADD (optmenu_menu, menuitem, "LOGIN", IMAP_AUTH_LOGIN);
        MENUITEM_ADD (optmenu_menu, menuitem, "CRAM-MD5", IMAP_AUTH_CRAM_MD5);
+       MENUITEM_ADD (optmenu_menu, menuitem, "ANONYMOUS", IMAP_AUTH_ANON);
+       MENUITEM_ADD (optmenu_menu, menuitem, "GSSAPI", IMAP_AUTH_GSSAPI);
 
        gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
 
@@ -1601,21 +1666,28 @@ static void prefs_account_receive_create(void)
        gtk_widget_show (imapdir_entry);
        gtk_box_pack_start (GTK_BOX (hbox1), imapdir_entry, FALSE, FALSE, 0);
 
-       PACK_CHECK_BUTTON (vbox1, filter_on_recv_chkbtn,
+       hbox1 = gtk_hbox_new (FALSE, 8);
+       gtk_widget_show (hbox1);
+       gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 4);
+
+       PACK_CHECK_BUTTON (hbox1, subsonly_checkbtn,
+                          _("Show subscribed folders only"));
+
+       PACK_CHECK_BUTTON (vbox1, filter_on_recv_checkbtn,
                           _("Filter messages on receiving"));
 
        PACK_CHECK_BUTTON
-               (vbox1, recvatgetall_chkbtn,
+               (vbox1, recvatgetall_checkbtn,
                 _("'Get Mail' checks for new messages on this account"));
 
        receive.pop3_frame               = frame1;
-       receive.use_apop_chkbtn          = use_apop_chkbtn;
-       receive.rmmail_chkbtn            = rmmail_chkbtn;
+       receive.use_apop_checkbtn          = use_apop_checkbtn;
+       receive.rmmail_checkbtn            = rmmail_checkbtn;
        receive.leave_time_entry         = leave_time_entry;
-       receive.getall_chkbtn            = getall_chkbtn;
-       receive.size_limit_chkbtn        = size_limit_chkbtn;
+       receive.getall_checkbtn            = getall_checkbtn;
+       receive.size_limit_checkbtn        = size_limit_checkbtn;
        receive.size_limit_entry         = size_limit_entry;
-       receive.filter_on_recv_chkbtn    = filter_on_recv_chkbtn;
+       receive.filter_on_recv_checkbtn    = filter_on_recv_checkbtn;
        receive.inbox_label              = inbox_label;
        receive.inbox_entry              = inbox_entry;
        receive.inbox_btn                = inbox_btn;
@@ -1625,13 +1697,13 @@ static void prefs_account_receive_create(void)
 
        receive.imapdir_label           = imapdir_label;
        receive.imapdir_entry           = imapdir_entry;
-
+       receive.subsonly_checkbtn               = subsonly_checkbtn;
        receive.local_frame             = local_frame;
        receive.local_inbox_label       = local_inbox_label;
        receive.local_inbox_entry       = local_inbox_entry;
        receive.local_inbox_btn         = local_inbox_btn;
 
-       receive.recvatgetall_chkbtn      = recvatgetall_chkbtn;
+       receive.recvatgetall_checkbtn      = recvatgetall_checkbtn;
 
        receive.frame_maxarticle        = frame2;
        receive.maxarticle_spinbtn      = maxarticle_spinbtn;
@@ -1643,13 +1715,12 @@ static void prefs_account_send_create(void)
        GtkWidget *vbox1;
        GtkWidget *vbox2;
        GtkWidget *frame;
-       GtkWidget *date_chkbtn;
-       GtkWidget *msgid_chkbtn;
+       GtkWidget *msgid_checkbtn;
        GtkWidget *hbox;
-       GtkWidget *customhdr_chkbtn;
+       GtkWidget *customhdr_checkbtn;
        GtkWidget *customhdr_edit_btn;
        GtkWidget *vbox3;
-       GtkWidget *smtp_auth_chkbtn;
+       GtkWidget *smtp_auth_checkbtn;
        GtkWidget *optmenu;
        GtkWidget *optmenu_menu;
        GtkWidget *menuitem;
@@ -1659,32 +1730,28 @@ static void prefs_account_send_create(void)
        GtkWidget *smtp_uid_entry;
        GtkWidget *smtp_pass_entry;
        GtkWidget *vbox_spc;
-       GtkWidget *pop_bfr_smtp_chkbtn;
+       GtkWidget *pop_bfr_smtp_checkbtn;
        GtkWidget *pop_bfr_smtp_tm_entry;
+       GtkWidget *pop_auth_timeout_lbl;
+       GtkWidget *pop_auth_minutes_lbl;
 
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
        gtk_widget_show (vbox1);
        gtk_container_add (GTK_CONTAINER (notebook), vbox1);
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
 
-       PACK_FRAME (vbox1, frame, _("Header"));
-
-       vbox2 = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (vbox2);
-       gtk_container_add (GTK_CONTAINER (frame), vbox2);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+       vbox2 = gtkut_get_options_frame(vbox1, &frame, _("Header"));
 
-       PACK_CHECK_BUTTON (vbox2, date_chkbtn, _("Add Date"));
-       PACK_CHECK_BUTTON (vbox2, msgid_chkbtn, _("Generate Message-ID"));
+       PACK_CHECK_BUTTON (vbox2, msgid_checkbtn, _("Generate Message-ID"));
 
        hbox = gtk_hbox_new (FALSE, 12);
        gtk_widget_show (hbox);
        gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
 
-       PACK_CHECK_BUTTON (hbox, customhdr_chkbtn,
+       PACK_CHECK_BUTTON (hbox, customhdr_checkbtn,
                           _("Add user-defined header"));
 
-       customhdr_edit_btn = gtk_button_new_with_label (_(" Edit... "));
+       customhdr_edit_btn = gtk_button_new_from_stock (GTK_STOCK_EDIT);
        gtk_widget_show (customhdr_edit_btn);
        gtk_box_pack_start (GTK_BOX (hbox), customhdr_edit_btn,
                            FALSE, FALSE, 0);
@@ -1692,16 +1759,11 @@ static void prefs_account_send_create(void)
                          G_CALLBACK (prefs_account_edit_custom_header),
                          NULL);
 
-       SET_TOGGLE_SENSITIVITY (customhdr_chkbtn, customhdr_edit_btn);
-
-       PACK_FRAME (vbox1, frame, _("Authentication"));
+       SET_TOGGLE_SENSITIVITY (customhdr_checkbtn, customhdr_edit_btn);
 
-       vbox3 = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (vbox3);
-       gtk_container_add (GTK_CONTAINER (frame), vbox3);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
+       vbox3 = gtkut_get_options_frame(vbox1, &frame, _("Authentication"));
 
-       PACK_CHECK_BUTTON (vbox3, smtp_auth_chkbtn,
+       PACK_CHECK_BUTTON (vbox3, smtp_auth_checkbtn,
                _("SMTP Authentication (SMTP AUTH)"));
 
        vbox4 = gtk_vbox_new (FALSE, 0);
@@ -1786,12 +1848,12 @@ static void prefs_account_send_create(void)
        gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
        gtkut_widget_set_small_font_size (label);
 
-       SET_TOGGLE_SENSITIVITY (smtp_auth_chkbtn, vbox4);
+       SET_TOGGLE_SENSITIVITY (smtp_auth_checkbtn, vbox4);
 
-       PACK_CHECK_BUTTON (vbox3, pop_bfr_smtp_chkbtn,
+       PACK_CHECK_BUTTON (vbox3, pop_bfr_smtp_checkbtn,
                _("Authenticate with POP3 before sending"));
        
-       g_signal_connect (G_OBJECT (pop_bfr_smtp_chkbtn), "clicked",
+       g_signal_connect (G_OBJECT (pop_bfr_smtp_checkbtn), "clicked",
                          G_CALLBACK (pop_bfr_smtp_tm_set_sens),
                          NULL);
 
@@ -1804,31 +1866,32 @@ static void prefs_account_send_create(void)
        gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
        gtk_widget_set_size_request (hbox_spc, 12, -1);
 
-       label = gtk_label_new(_("POP authentication timeout: "));
-       gtk_widget_show (label);
-       gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+       pop_auth_timeout_lbl = gtk_label_new(_("POP authentication timeout: "));
+       gtk_widget_show (pop_auth_timeout_lbl);
+       gtk_box_pack_start (GTK_BOX (hbox), pop_auth_timeout_lbl, FALSE, FALSE, 0);
 
        pop_bfr_smtp_tm_entry = gtk_entry_new ();
        gtk_widget_show (pop_bfr_smtp_tm_entry);
        gtk_widget_set_size_request (pop_bfr_smtp_tm_entry, 30, -1);
        gtk_box_pack_start (GTK_BOX (hbox), pop_bfr_smtp_tm_entry, FALSE, FALSE, 0);
 
-       label = gtk_label_new(_("minutes"));
-       gtk_widget_show (label);
-       gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+       pop_auth_minutes_lbl = gtk_label_new(_("minutes"));
+       gtk_widget_show (pop_auth_minutes_lbl);
+       gtk_box_pack_start (GTK_BOX (hbox), pop_auth_minutes_lbl, FALSE, FALSE, 0);
 
 
        
-       p_send.date_chkbtn      = date_chkbtn;
-       p_send.msgid_chkbtn     = msgid_chkbtn;
-       p_send.customhdr_chkbtn = customhdr_chkbtn;
+       p_send.msgid_checkbtn     = msgid_checkbtn;
+       p_send.customhdr_checkbtn = customhdr_checkbtn;
 
-       p_send.smtp_auth_chkbtn       = smtp_auth_chkbtn;
+       p_send.smtp_auth_checkbtn       = smtp_auth_checkbtn;
        p_send.smtp_auth_type_optmenu = optmenu;
        p_send.smtp_uid_entry         = smtp_uid_entry;
        p_send.smtp_pass_entry        = smtp_pass_entry;
-       p_send.pop_bfr_smtp_chkbtn    = pop_bfr_smtp_chkbtn;
+       p_send.pop_bfr_smtp_checkbtn    = pop_bfr_smtp_checkbtn;
        p_send.pop_bfr_smtp_tm_entry  = pop_bfr_smtp_tm_entry;
+       p_send.pop_auth_timeout_lbl   = pop_auth_timeout_lbl;
+       p_send.pop_auth_minutes_lbl   = pop_auth_minutes_lbl;
 }
 
 static void prefs_account_compose_create(void)
@@ -1845,24 +1908,27 @@ static void prefs_account_compose_create(void)
        GtkWidget *entry_sigsep;
        GtkWidget *frame;
        GtkWidget *table;
-       GtkWidget *autocc_chkbtn;
+       GtkWidget *autocc_checkbtn;
        GtkWidget *autocc_entry;
-       GtkWidget *autobcc_chkbtn;
+       GtkWidget *autobcc_checkbtn;
        GtkWidget *autobcc_entry;
-       GtkWidget *autoreplyto_chkbtn;
+       GtkWidget *autoreplyto_checkbtn;
        GtkWidget *autoreplyto_entry;
+#if USE_ASPELL
+       GtkWidget *frame_dict;
+       GtkWidget *table_dict;
+       GtkWidget *checkbtn_enable_default_dictionary = NULL;
+       GtkWidget *optmenu_default_dictionary = NULL;
+       GtkWidget *checkbtn_enable_default_alt_dictionary = NULL;
+       GtkWidget *optmenu_default_alt_dictionary = NULL;
+#endif
 
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
        gtk_widget_show (vbox1);
        gtk_container_add (GTK_CONTAINER (notebook), vbox1);
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
 
-       PACK_FRAME(vbox1, frame_sig, _("Signature"));
-
-       vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
-       gtk_widget_show (vbox_sig);
-       gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
+       vbox_sig = gtkut_get_options_frame(vbox1, &frame_sig, _("Signature"));
 
        PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
                           _("Insert signature automatically"));
@@ -1916,12 +1982,18 @@ static void prefs_account_compose_create(void)
        gtk_widget_show (entry_sigpath);
        gtk_box_pack_start (GTK_BOX (hbox2), entry_sigpath, TRUE, TRUE, 0);
 
-       signature_browse_button = gtkut_get_browse_file_btn(_("_Browse"));
+       signature_browse_button = gtkut_get_browse_file_btn(_("Bro_wse"));
        gtk_widget_show (signature_browse_button);
        gtk_box_pack_start (GTK_BOX (hbox2), signature_browse_button, FALSE, FALSE, 0);
        g_signal_connect(G_OBJECT(signature_browse_button), "clicked",
                         G_CALLBACK(prefs_account_signature_browse_cb), NULL);
 
+       signature_edit_button = gtk_button_new_from_stock (GTK_STOCK_EDIT);
+       gtk_widget_show (signature_edit_button);
+       gtk_box_pack_start (GTK_BOX (hbox2), signature_edit_button, FALSE, FALSE, 0);
+       g_signal_connect(G_OBJECT(signature_edit_button), "clicked",
+                        G_CALLBACK(prefs_account_signature_edit_cb), entry_sigpath);
+
        PACK_FRAME (vbox1, frame, _("Automatically set the following addresses"));
 
        table =  gtk_table_new (3, 2, FALSE);
@@ -1931,9 +2003,9 @@ static void prefs_account_compose_create(void)
        gtk_table_set_row_spacings (GTK_TABLE (table), VSPACING_NARROW_2);
        gtk_table_set_col_spacings (GTK_TABLE (table), 8);
 
-       autocc_chkbtn = gtk_check_button_new_with_label (_("Cc"));
-       gtk_widget_show (autocc_chkbtn);
-       gtk_table_attach (GTK_TABLE (table), autocc_chkbtn, 0, 1, 0, 1,
+       autocc_checkbtn = gtk_check_button_new_with_label (_("Cc"));
+       gtk_widget_show (autocc_checkbtn);
+       gtk_table_attach (GTK_TABLE (table), autocc_checkbtn, 0, 1, 0, 1,
                          GTK_FILL, 0, 0, 0);
 
        autocc_entry = gtk_entry_new ();
@@ -1942,11 +2014,11 @@ static void prefs_account_compose_create(void)
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
 
-       SET_TOGGLE_SENSITIVITY (autocc_chkbtn, autocc_entry);
+       SET_TOGGLE_SENSITIVITY (autocc_checkbtn, autocc_entry);
 
-       autobcc_chkbtn = gtk_check_button_new_with_label (_("Bcc"));
-       gtk_widget_show (autobcc_chkbtn);
-       gtk_table_attach (GTK_TABLE (table), autobcc_chkbtn, 0, 1, 1, 2,
+       autobcc_checkbtn = gtk_check_button_new_with_label (_("Bcc"));
+       gtk_widget_show (autobcc_checkbtn);
+       gtk_table_attach (GTK_TABLE (table), autobcc_checkbtn, 0, 1, 1, 2,
                          GTK_FILL, 0, 0, 0);
 
        autobcc_entry = gtk_entry_new ();
@@ -1955,11 +2027,11 @@ static void prefs_account_compose_create(void)
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
 
-       SET_TOGGLE_SENSITIVITY (autobcc_chkbtn, autobcc_entry);
+       SET_TOGGLE_SENSITIVITY (autobcc_checkbtn, autobcc_entry);
 
-       autoreplyto_chkbtn = gtk_check_button_new_with_label (_("Reply-To"));
-       gtk_widget_show (autoreplyto_chkbtn);
-       gtk_table_attach (GTK_TABLE (table), autoreplyto_chkbtn, 0, 1, 2, 3,
+       autoreplyto_checkbtn = gtk_check_button_new_with_label (_("Reply-To"));
+       gtk_widget_show (autoreplyto_checkbtn);
+       gtk_table_attach (GTK_TABLE (table), autoreplyto_checkbtn, 0, 1, 2, 3,
                          GTK_FILL, 0, 0, 0);
 
        autoreplyto_entry = gtk_entry_new ();
@@ -1968,19 +2040,72 @@ static void prefs_account_compose_create(void)
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
 
-       SET_TOGGLE_SENSITIVITY (autoreplyto_chkbtn, autoreplyto_entry);
+       SET_TOGGLE_SENSITIVITY (autoreplyto_checkbtn, autoreplyto_entry);
+
+#if USE_ASPELL
+       PACK_FRAME (vbox1, frame_dict, _("Spell check dictionaries"));
+
+       table_dict =  gtk_table_new (2, 2, FALSE);
+       gtk_widget_show (table_dict);
+       gtk_container_add (GTK_CONTAINER (frame_dict), table_dict);
+       gtk_container_set_border_width (GTK_CONTAINER (table_dict), 8);
+       gtk_table_set_row_spacings (GTK_TABLE (table_dict), VSPACING_NARROW_2);
+       gtk_table_set_col_spacings (GTK_TABLE (table_dict), 8);
+
+       /* Default dictionary */
+       checkbtn_enable_default_dictionary = gtk_check_button_new_with_label(_("Default dictionary"));
+       gtk_table_attach(GTK_TABLE(table_dict), checkbtn_enable_default_dictionary, 0, 1,
+                       0, 1, GTK_SHRINK | GTK_FILL, GTK_SHRINK, 0, 0);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_enable_default_dictionary),
+                       tmp_ac_prefs.enable_default_dictionary);
+
+       optmenu_default_dictionary = gtk_option_menu_new();
+       gtk_table_attach(GTK_TABLE(table_dict), optmenu_default_dictionary, 1, 2,
+                       0, 1, GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0, 0);
+
+       gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_default_dictionary), 
+                       gtkaspell_dictionary_option_menu_new(
+                       prefs_common.aspell_path));
+
+       SET_TOGGLE_SENSITIVITY(checkbtn_enable_default_dictionary, optmenu_default_dictionary);
+
+       /* Default dictionary */
+       checkbtn_enable_default_alt_dictionary = gtk_check_button_new_with_label(_("Default alternate dictionary"));
+       gtk_table_attach(GTK_TABLE(table_dict), checkbtn_enable_default_alt_dictionary, 0, 1,
+                       1, 2, GTK_SHRINK | GTK_FILL, GTK_SHRINK, 0, 0);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_enable_default_alt_dictionary),
+                       tmp_ac_prefs.enable_default_alt_dictionary);
+
+       optmenu_default_alt_dictionary = gtk_option_menu_new();
+       gtk_table_attach(GTK_TABLE(table_dict), optmenu_default_alt_dictionary, 1, 2,
+                       1, 2, GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0, 0);
+
+       gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_default_alt_dictionary), 
+                       gtkaspell_dictionary_option_menu_new_with_refresh(
+                       prefs_common.aspell_path, FALSE));
+
+       SET_TOGGLE_SENSITIVITY(checkbtn_enable_default_alt_dictionary, optmenu_default_alt_dictionary);
+
+       gtk_widget_show_all(table_dict);
+#endif
 
        compose.sigfile_radiobtn = sigfile_radiobtn;
        compose.entry_sigpath      = entry_sigpath;
        compose.checkbtn_autosig   = checkbtn_autosig;
        compose.entry_sigsep       = entry_sigsep;
 
-       compose.autocc_chkbtn      = autocc_chkbtn;
+       compose.autocc_checkbtn      = autocc_checkbtn;
        compose.autocc_entry       = autocc_entry;
-       compose.autobcc_chkbtn     = autobcc_chkbtn;
+       compose.autobcc_checkbtn     = autobcc_checkbtn;
        compose.autobcc_entry      = autobcc_entry;
-       compose.autoreplyto_chkbtn = autoreplyto_chkbtn;
+       compose.autoreplyto_checkbtn = autoreplyto_checkbtn;
        compose.autoreplyto_entry  = autoreplyto_entry;
+#ifdef USE_ASPELL
+       compose.checkbtn_enable_default_dictionary = checkbtn_enable_default_dictionary;
+       compose.optmenu_default_dictionary = optmenu_default_dictionary;
+       compose.checkbtn_enable_default_alt_dictionary = checkbtn_enable_default_alt_dictionary;
+       compose.optmenu_default_alt_dictionary = optmenu_default_alt_dictionary;
+#endif
 }
 
 static void prefs_account_privacy_create(void)
@@ -1990,10 +2115,11 @@ static void prefs_account_privacy_create(void)
        GtkWidget *hbox1;
        GtkWidget *label;
        GtkWidget *default_privacy_system;
-       GtkWidget *default_encrypt_chkbtn;
-       GtkWidget *default_encrypt_reply_chkbtn;
-       GtkWidget *default_sign_chkbtn;
-       GtkWidget *save_clear_text_chkbtn;
+       GtkWidget *default_encrypt_checkbtn;
+       GtkWidget *default_encrypt_reply_checkbtn;
+       GtkWidget *default_sign_checkbtn;
+       GtkWidget *save_clear_text_checkbtn;
+       GtkWidget *encrypt_to_self_checkbtn;
 
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
        gtk_widget_show (vbox1);
@@ -2016,21 +2142,27 @@ static void prefs_account_privacy_create(void)
        gtk_widget_show (default_privacy_system);
        gtk_box_pack_start (GTK_BOX(hbox1), default_privacy_system, FALSE, TRUE, 0);
 
-       PACK_CHECK_BUTTON (vbox2, default_encrypt_chkbtn,
-                          _("Encrypt message by default"));
-       PACK_CHECK_BUTTON (vbox2, default_encrypt_reply_chkbtn,
-                          _("Encrypt message by default when replying to an "
+       PACK_CHECK_BUTTON (vbox2, default_sign_checkbtn,
+                          _("Always sign messages"));
+       PACK_CHECK_BUTTON (vbox2, default_encrypt_checkbtn,
+                          _("Always encrypt messages"));
+       PACK_CHECK_BUTTON (vbox2, default_encrypt_reply_checkbtn,
+                          _("Always encrypt messages when replying to an "
                             "encrypted message"));
-       PACK_CHECK_BUTTON (vbox2, default_sign_chkbtn,
-                          _("Sign message by default"));
-       PACK_CHECK_BUTTON (vbox2, save_clear_text_chkbtn,
+       PACK_CHECK_BUTTON (vbox2, encrypt_to_self_checkbtn,
+                          _("Encrypt sent messages with your own key in addition to recipient's"));
+       PACK_CHECK_BUTTON (vbox2, save_clear_text_checkbtn,
                           _("Save sent encrypted messages as clear text"));
 
+       SET_TOGGLE_SENSITIVITY_REVERSE(encrypt_to_self_checkbtn, save_clear_text_checkbtn);
+       SET_TOGGLE_SENSITIVITY_REVERSE(save_clear_text_checkbtn, encrypt_to_self_checkbtn);
+
        privacy.default_privacy_system = default_privacy_system;
-       privacy.default_encrypt_chkbtn = default_encrypt_chkbtn;
-       privacy.default_encrypt_reply_chkbtn = default_encrypt_reply_chkbtn;
-       privacy.default_sign_chkbtn    = default_sign_chkbtn;
-       privacy.save_clear_text_chkbtn = save_clear_text_chkbtn;
+       privacy.default_encrypt_checkbtn = default_encrypt_checkbtn;
+       privacy.default_encrypt_reply_checkbtn = default_encrypt_reply_checkbtn;
+       privacy.default_sign_checkbtn    = default_sign_checkbtn;
+       privacy.save_clear_text_checkbtn = save_clear_text_checkbtn;
+       privacy.encrypt_to_self_checkbtn = encrypt_to_self_checkbtn;
 }
 
 #if USE_OPENSSL
@@ -2090,7 +2222,7 @@ static void prefs_account_ssl_create(void)
        GtkWidget *smtp_starttls_radiobtn;
 
        GtkWidget *vbox6;
-       GtkWidget *use_nonblocking_ssl_chkbtn;
+       GtkWidget *use_nonblocking_ssl_checkbtn;
        GtkWidget *hbox;
        GtkWidget *hbox_spc;
        GtkWidget *label;
@@ -2100,11 +2232,7 @@ static void prefs_account_ssl_create(void)
        gtk_container_add (GTK_CONTAINER (notebook), vbox1);
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
 
-       PACK_FRAME (vbox1, pop_frame, _("POP3"));
-       vbox2 = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (vbox2);
-       gtk_container_add (GTK_CONTAINER (pop_frame), vbox2);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+       vbox2 = gtkut_get_options_frame(vbox1, &pop_frame, _("POP3"));
 
        CREATE_RADIO_BUTTONS(vbox2,
                             pop_nossl_radiobtn,
@@ -2117,11 +2245,7 @@ static void prefs_account_ssl_create(void)
                             _("Use STARTTLS command to start SSL session"),
                             SSL_STARTTLS);
 
-       PACK_FRAME (vbox1, imap_frame, _("IMAP4"));
-       vbox3 = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (vbox3);
-       gtk_container_add (GTK_CONTAINER (imap_frame), vbox3);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
+       vbox3 = gtkut_get_options_frame(vbox1, &imap_frame, _("IMAP4"));
 
        CREATE_RADIO_BUTTONS(vbox3,
                             imap_nossl_radiobtn,
@@ -2134,11 +2258,7 @@ static void prefs_account_ssl_create(void)
                             _("Use STARTTLS command to start SSL session"),
                             SSL_STARTTLS);
 
-       PACK_FRAME (vbox1, nntp_frame, _("NNTP"));
-       vbox4 = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (vbox4);
-       gtk_container_add (GTK_CONTAINER (nntp_frame), vbox4);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox4), 8);
+       vbox4 = gtkut_get_options_frame(vbox1, &nntp_frame, _("NNTP"));
 
        nntp_nossl_radiobtn =
                gtk_radio_button_new_with_label (NULL, _("Don't use SSL"));
@@ -2152,11 +2272,7 @@ static void prefs_account_ssl_create(void)
        CREATE_RADIO_BUTTON(vbox4, nntp_ssltunnel_radiobtn, nntp_nossl_radiobtn,
                            _("Use SSL for NNTP connection"), SSL_TUNNEL);
 
-       PACK_FRAME (vbox1, send_frame, _("Send (SMTP)"));
-       vbox5 = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (vbox5);
-       gtk_container_add (GTK_CONTAINER (send_frame), vbox5);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox5), 8);
+       vbox5 = gtkut_get_options_frame(vbox1, &send_frame, _("Send (SMTP)"));
 
        CREATE_RADIO_BUTTONS(vbox5,
                             smtp_nossl_radiobtn,
@@ -2173,7 +2289,7 @@ static void prefs_account_ssl_create(void)
        gtk_widget_show (vbox6);
        gtk_box_pack_start (GTK_BOX (vbox1), vbox6, FALSE, FALSE, 0);
 
-       PACK_CHECK_BUTTON(vbox6, use_nonblocking_ssl_chkbtn,
+       PACK_CHECK_BUTTON(vbox6, use_nonblocking_ssl_checkbtn,
                          _("Use non-blocking SSL"));
 
        hbox = gtk_hbox_new (FALSE, 0);
@@ -2210,7 +2326,7 @@ static void prefs_account_ssl_create(void)
        ssl.smtp_ssltunnel_radiobtn = smtp_ssltunnel_radiobtn;
        ssl.smtp_starttls_radiobtn  = smtp_starttls_radiobtn;
 
-       ssl.use_nonblocking_ssl_chkbtn = use_nonblocking_ssl_chkbtn;
+       ssl.use_nonblocking_ssl_checkbtn = use_nonblocking_ssl_checkbtn;
 }
 
 #undef CREATE_RADIO_BUTTONS
@@ -2222,7 +2338,7 @@ static void crosspost_color_toggled(void)
        gboolean is_active;
 
        is_active = gtk_toggle_button_get_active
-               (GTK_TOGGLE_BUTTON(advanced.crosspost_chkbtn));
+               (GTK_TOGGLE_BUTTON(advanced.crosspost_checkbtn));
        gtk_widget_set_sensitive(advanced.crosspost_colormenu, is_active);
 }
 
@@ -2277,13 +2393,13 @@ static void prefs_account_advanced_create(void)
        GtkWidget *folder_frame;
        GtkWidget *vbox3;
        GtkWidget *table;
-       GtkWidget *sent_folder_chkbtn;
+       GtkWidget *sent_folder_checkbtn;
        GtkWidget *sent_folder_entry;
-       GtkWidget *queue_folder_chkbtn;
+       GtkWidget *queue_folder_checkbtn;
        GtkWidget *queue_folder_entry;
-       GtkWidget *draft_folder_chkbtn;
+       GtkWidget *draft_folder_checkbtn;
        GtkWidget *draft_folder_entry;
-       GtkWidget *trash_folder_chkbtn;
+       GtkWidget *trash_folder_checkbtn;
        GtkWidget *trash_folder_entry;
 
 #define PACK_HBOX(hbox) \
@@ -2372,12 +2488,7 @@ static void prefs_account_advanced_create(void)
 
        /* special folder setting (maybe these options are redundant) */
 
-       PACK_FRAME (vbox1, folder_frame, _("Folder"));
-
-       vbox3 = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (vbox3);
-       gtk_container_add (GTK_CONTAINER (folder_frame), vbox3);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
+       vbox3 = gtkut_get_options_frame(vbox1, &folder_frame, _("Folder"));
 
        table = gtk_table_new (4, 3, FALSE);
        gtk_widget_show (table);
@@ -2385,13 +2496,13 @@ static void prefs_account_advanced_create(void)
        gtk_table_set_row_spacings (GTK_TABLE (table), VSPACING_NARROW_2);
        gtk_table_set_col_spacings (GTK_TABLE (table), 4);
 
-#define SET_CHECK_BTN_AND_ENTRY(label, chkbtn, entry, n)               \
+#define SET_CHECK_BTN_AND_ENTRY(label, checkbtn, entry, n)             \
 {                                                                      \
        GtkWidget *button;                                              \
                                                                        \
-       chkbtn = gtk_check_button_new_with_label (label);               \
-       gtk_widget_show (chkbtn);                                       \
-       gtk_table_attach (GTK_TABLE (table), chkbtn,                    \
+       checkbtn = gtk_check_button_new_with_label (label);             \
+       gtk_widget_show (checkbtn);                                     \
+       gtk_table_attach (GTK_TABLE (table), checkbtn,                  \
                          0, 1, n, n + 1, GTK_FILL, 0, 0, 0);           \
                                                                        \
        entry = gtk_entry_new ();                                       \
@@ -2409,60 +2520,57 @@ static void prefs_account_advanced_create(void)
                 G_CALLBACK (prefs_account_select_folder_cb),           \
                 entry);                                                \
                                                                        \
-       SET_TOGGLE_SENSITIVITY (chkbtn, entry);                         \
-       SET_TOGGLE_SENSITIVITY (chkbtn, button);                        \
+       SET_TOGGLE_SENSITIVITY (checkbtn, entry);                               \
+       SET_TOGGLE_SENSITIVITY (checkbtn, button);                      \
 }
 
        SET_CHECK_BTN_AND_ENTRY(_("Put sent messages in"),
-                               sent_folder_chkbtn, sent_folder_entry, 0);
+                               sent_folder_checkbtn, sent_folder_entry, 0);
        SET_CHECK_BTN_AND_ENTRY(_("Put queued messages in"),
-                               queue_folder_chkbtn, queue_folder_entry, 1);
+                               queue_folder_checkbtn, queue_folder_entry, 1);
        SET_CHECK_BTN_AND_ENTRY(_("Put draft messages in"),
-                               draft_folder_chkbtn, draft_folder_entry, 2);
+                               draft_folder_checkbtn, draft_folder_entry, 2);
        SET_CHECK_BTN_AND_ENTRY(_("Put deleted messages in"),
-                               trash_folder_chkbtn, trash_folder_entry, 3);
+                               trash_folder_checkbtn, trash_folder_entry, 3);
 
-       advanced.smtpport_chkbtn        = checkbtn_smtpport;
+       advanced.smtpport_checkbtn      = checkbtn_smtpport;
        advanced.smtpport_entry         = entry_smtpport;
        advanced.popport_hbox           = hbox_popport;
-       advanced.popport_chkbtn         = checkbtn_popport;
+       advanced.popport_checkbtn               = checkbtn_popport;
        advanced.popport_entry          = entry_popport;
        advanced.imapport_hbox          = hbox_imapport;
-       advanced.imapport_chkbtn        = checkbtn_imapport;
+       advanced.imapport_checkbtn      = checkbtn_imapport;
        advanced.imapport_entry         = entry_imapport;
        advanced.nntpport_hbox          = hbox_nntpport;
-       advanced.nntpport_chkbtn        = checkbtn_nntpport;
+       advanced.nntpport_checkbtn      = checkbtn_nntpport;
        advanced.nntpport_entry         = entry_nntpport;
-       advanced.domain_chkbtn          = checkbtn_domain;
+       advanced.domain_checkbtn                = checkbtn_domain;
        advanced.domain_entry           = entry_domain;
-       advanced.crosspost_chkbtn       = checkbtn_crosspost;
+       advanced.crosspost_checkbtn     = checkbtn_crosspost;
        advanced.crosspost_colormenu    = colormenu_crosspost;
 
-       advanced.tunnelcmd_chkbtn       = checkbtn_tunnelcmd;
+       advanced.tunnelcmd_checkbtn     = checkbtn_tunnelcmd;
        advanced.tunnelcmd_entry        = entry_tunnelcmd;
 
-       advanced.sent_folder_chkbtn  = sent_folder_chkbtn;
+       advanced.sent_folder_checkbtn  = sent_folder_checkbtn;
        advanced.sent_folder_entry   = sent_folder_entry;
-       advanced.queue_folder_chkbtn  = queue_folder_chkbtn;
+       advanced.queue_folder_checkbtn  = queue_folder_checkbtn;
        advanced.queue_folder_entry   = queue_folder_entry;
-       advanced.draft_folder_chkbtn = draft_folder_chkbtn;
+       advanced.draft_folder_checkbtn = draft_folder_checkbtn;
        advanced.draft_folder_entry  = draft_folder_entry;
-       advanced.trash_folder_chkbtn = trash_folder_chkbtn;
+       advanced.trash_folder_checkbtn = trash_folder_checkbtn;
        advanced.trash_folder_entry  = trash_folder_entry;
 }
 
 static gint prefs_account_apply(void)
 {
        RecvProtocol protocol;
-       GtkWidget *menu;
-       GtkWidget *menuitem;
        gchar *old_id = NULL;
        gchar *new_id = NULL;
-       
-       menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(basic.protocol_optmenu));
-       menuitem = gtk_menu_get_active(GTK_MENU(menu));
-       protocol = GPOINTER_TO_INT
-               (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+       struct BasicProtocol *protocol_optmenu = (struct BasicProtocol *) basic.protocol_optmenu;
+       GtkWidget *optmenu = protocol_optmenu->combobox;
+
+       protocol = combobox_get_active_data(GTK_COMBO_BOX(optmenu));
 
        if (*gtk_entry_get_text(GTK_ENTRY(basic.acname_entry)) == '\0') {
                alertpanel_error(_("Account name is not entered."));
@@ -2473,7 +2581,7 @@ static gint prefs_account_apply(void)
                return -1;
        }
        if (((protocol == A_POP3) || 
-            (protocol == A_LOCAL && !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(basic.mailcmd_chkbtn))) || 
+            (protocol == A_LOCAL && !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(basic.mailcmd_checkbtn))) || 
             (protocol == A_NONE)) &&
            *gtk_entry_get_text(GTK_ENTRY(basic.smtpserv_entry)) == '\0') {
                alertpanel_error(_("SMTP server is not entered."));
@@ -2489,6 +2597,15 @@ static gint prefs_account_apply(void)
                alertpanel_error(_("POP3 server is not entered."));
                return -1;
        }
+       if (protocol == A_POP3 || protocol == A_LOCAL) {
+               GtkWidget *inbox_entry = (protocol == A_POP3 ? receive.inbox_entry : receive.local_inbox_entry );
+               const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(inbox_entry));
+               FolderItem *inbox =  folder_find_item_from_identifier(mailbox);
+               if (inbox == NULL) {
+                       alertpanel_error(_("The default inbox folder doesn't exist."));
+                       return -1;
+               }
+       }
        if (protocol == A_IMAP4 &&
            *gtk_entry_get_text(GTK_ENTRY(basic.recvserv_entry)) == '\0') {
                alertpanel_error(_("IMAP4 server is not entered."));
@@ -2507,7 +2624,7 @@ static gint prefs_account_apply(void)
        }
 
        if (protocol == A_LOCAL &&
-           gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(basic.mailcmd_chkbtn)) && *gtk_entry_get_text(GTK_ENTRY(basic.mailcmd_entry)) == '\0') {
+           gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(basic.mailcmd_checkbtn)) && *gtk_entry_get_text(GTK_ENTRY(basic.mailcmd_entry)) == '\0') {
                alertpanel_error(_("mail command is not entered."));
                return -1;
        }
@@ -2528,13 +2645,18 @@ static gint prefs_account_apply(void)
                g_free(old_id);
                g_free(new_id);
        }
+       
        return 0;
 }
 
 static void pop_bfr_smtp_tm_set_sens(GtkWidget *widget, gpointer data)
 {
        gtk_widget_set_sensitive(p_send.pop_bfr_smtp_tm_entry, 
-                                gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_chkbtn)));
+                                gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_checkbtn)));
+       gtk_widget_set_sensitive(p_send.pop_auth_timeout_lbl, 
+                                gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_checkbtn)));
+       gtk_widget_set_sensitive(p_send.pop_auth_minutes_lbl, 
+                                gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_checkbtn)));
 }
 
 static void prefs_account_select_folder_cb(GtkWidget *widget, gpointer data)
@@ -2555,11 +2677,13 @@ static void prefs_account_select_folder_cb(GtkWidget *widget, gpointer data)
 static void prefs_account_sigfile_radiobtn_cb(GtkWidget *widget, gpointer data)
 {
        gtk_widget_set_sensitive(GTK_WIDGET(signature_browse_button), TRUE);
+       gtk_widget_set_sensitive(GTK_WIDGET(signature_edit_button), TRUE);
 }
 
 static void prefs_account_sigcmd_radiobtn_cb(GtkWidget *widget, gpointer data)
 {
        gtk_widget_set_sensitive(GTK_WIDGET(signature_browse_button), FALSE);
+       gtk_widget_set_sensitive(GTK_WIDGET(signature_edit_button), FALSE);
 }
 
 static void prefs_account_signature_browse_cb(GtkWidget *widget, gpointer data)
@@ -2579,6 +2703,12 @@ static void prefs_account_signature_browse_cb(GtkWidget *widget, gpointer data)
        g_free(utf8_filename);
 }
 
+static void prefs_account_signature_edit_cb(GtkWidget *widget, gpointer data)
+{
+       const gchar *sigpath = gtk_entry_get_text(GTK_ENTRY(data));
+       open_txt_editor(sigpath, prefs_common.ext_editor_cmd);
+}
+
 static void prefs_account_edit_custom_header(void)
 {
        prefs_custom_header_open(&tmp_ac_prefs);
@@ -2624,35 +2754,52 @@ static void prefs_account_enum_set_radiobtn(PrefParam *pparam)
 
 static void prefs_account_protocol_set_data_from_optmenu(PrefParam *pparam)
 {
-       GtkWidget *menu;
-       GtkWidget *menuitem;
+       struct BasicProtocol *protocol_optmenu =
+               (struct BasicProtocol *)*pparam->widget;
+       GtkWidget *optmenu = protocol_optmenu->combobox;
 
-       menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
-       menuitem = gtk_menu_get_active(GTK_MENU(menu));
-       *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT
-               (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+       *((RecvProtocol *)pparam->data) =
+               combobox_get_active_data(GTK_COMBO_BOX(optmenu));
 }
 
 static void prefs_account_protocol_set_optmenu(PrefParam *pparam)
 {
        RecvProtocol protocol;
-       GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
-       GtkWidget *menu;
-       GtkWidget *menuitem;
-       gint index;
+       struct BasicProtocol *protocol_optmenu =
+               (struct BasicProtocol *)*pparam->widget;
+       GtkWidget *optmenu = protocol_optmenu->combobox;
+       GtkWidget *optlabel = protocol_optmenu->label;
+       GtkWidget *descrlabel = protocol_optmenu->descrlabel;
+       gchar *label = NULL;
 
        protocol = *((RecvProtocol *)pparam->data);
-       index = menu_find_option_menu_index
-               (optmenu, GINT_TO_POINTER(protocol), NULL);
-       if (index < 0) return;
-       gtk_option_menu_set_history(optmenu, index);
-
-       menu = gtk_option_menu_get_menu(optmenu);
-       menu_set_insensitive_all(GTK_MENU_SHELL(menu));
 
-       menuitem = gtk_menu_get_active(GTK_MENU(menu));
-       gtk_widget_set_sensitive(menuitem, TRUE);
-       gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
+       /* Set combobox to correct value even if it will be hidden, so
+        * we won't break existing accounts when saving. */
+       combobox_select_by_data(GTK_COMBO_BOX(optmenu), protocol);
+
+       /* Set up widgets accordingly */
+       if( new_account ) {
+               gtk_label_set_text(GTK_LABEL(descrlabel), _("Protocol"));
+               gtk_widget_hide(optlabel);
+               gtk_widget_show(optmenu);
+       } else {
+               gtk_label_set_text(GTK_LABEL(descrlabel), _("Protocol:"));
+               label = g_markup_printf_escaped("<b>%s</b>", protocol_names[protocol]);
+               gtk_label_set_markup(GTK_LABEL(optlabel), label);
+               g_free(label);
+               gtk_widget_hide(optmenu);
+               gtk_widget_show(optlabel);
+#ifndef HAVE_LIBETPAN
+               if (protocol == A_IMAP4) {
+                       gtk_widget_show(protocol_optmenu->no_imap_warn_icon);
+                       gtk_widget_show(protocol_optmenu->no_imap_warn_label);
+               } else {
+                       gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
+                       gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
+               }
+#endif
+       }
 }
 
 static void prefs_account_imap_auth_type_set_data_from_optmenu(PrefParam *pparam)
@@ -2680,6 +2827,12 @@ static void prefs_account_imap_auth_type_set_optmenu(PrefParam *pparam)
        case IMAP_AUTH_CRAM_MD5:
                gtk_option_menu_set_history(optmenu, 2);
                break;
+       case IMAP_AUTH_ANON:
+               gtk_option_menu_set_history(optmenu, 3);
+               break;
+       case IMAP_AUTH_GSSAPI:
+               gtk_option_menu_set_history(optmenu, 4);
+               break;
        case 0:
        default:
                gtk_option_menu_set_history(optmenu, 0);
@@ -2775,6 +2928,7 @@ static void prefs_account_set_optmenu_from_string(PrefParam *pparam)
                if (id != NULL && strcmp(id, prefsid) == 0) {
                        found = TRUE;
                        gtk_option_menu_set_history(GTK_OPTION_MENU(optionmenu), i);
+                       privacy_system_activated(GTK_MENU_ITEM(item));
                }
                i++;
        }
@@ -2783,38 +2937,47 @@ static void prefs_account_set_optmenu_from_string(PrefParam *pparam)
                gchar *name;
                GtkWidget *menuitem;
 
-               name = g_strdup_printf(_("Unsupported (%s)"), prefsid);
+               name = g_strdup_printf(_("%s (plugin not loaded)"), prefsid);
                menuitem = gtk_menu_item_new_with_label(name);
                gtk_widget_show(menuitem);
-               g_object_set_data_full(G_OBJECT(menuitem), MENU_VAL_ID, g_strdup(prefsid), g_free);
+               g_object_set_data(G_OBJECT(menuitem), MENU_VAL_ID, prefsid);
+               g_object_set_data(G_OBJECT(menuitem), MENU_VAL_DATA, GINT_TO_POINTER(FALSE));
                gtk_menu_append(GTK_MENU(menu), menuitem);
                g_free(name);
 
                gtk_option_menu_set_history(GTK_OPTION_MENU(optionmenu), i);
+               privacy_system_activated(GTK_MENU_ITEM(menuitem));
+               g_signal_connect(G_OBJECT(menuitem), "activate",
+                                G_CALLBACK(privacy_system_activated),
+                                NULL);
        }
 
        g_list_free(children);
 }
 
-static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
+static void prefs_account_protocol_changed(GtkComboBox *combobox, gpointer data)
 {
        RecvProtocol protocol;
+       struct BasicProtocol *protocol_optmenu = (struct BasicProtocol *)basic.protocol_optmenu;
 
-       protocol = GPOINTER_TO_INT
-               (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+       protocol = combobox_get_active_data(combobox);
 
+       gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
+       gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
        switch(protocol) {
        case A_NNTP:
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
                gtk_widget_show(basic.nntpserv_label);
                gtk_widget_show(basic.nntpserv_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           0, VSPACING_NARROW);
 
-               gtk_widget_set_sensitive(basic.nntpauth_chkbtn, TRUE);
-               gtk_widget_show(basic.nntpauth_chkbtn);
+               gtk_widget_set_sensitive(basic.nntpauth_checkbtn, TRUE);
+               gtk_widget_show(basic.nntpauth_checkbtn);
 
-               gtk_widget_set_sensitive(basic.nntpauth_onconnect_chkbtn, TRUE);
-               gtk_widget_show(basic.nntpauth_onconnect_chkbtn);
+               gtk_widget_set_sensitive(basic.nntpauth_onconnect_checkbtn, TRUE);
+               gtk_widget_show(basic.nntpauth_onconnect_checkbtn);
 
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           1, VSPACING_NARROW);
@@ -2834,7 +2997,7 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(basic.mailcmd_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           6, 0);
-               gtk_widget_hide(basic.mailcmd_chkbtn);
+               gtk_widget_hide(basic.mailcmd_checkbtn);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           5, 0);
                gtk_widget_show(basic.uid_label);
@@ -2852,25 +3015,25 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                /* update userid/passwd sensitive state */
 
                prefs_account_nntpauth_toggled
-                       (GTK_TOGGLE_BUTTON(basic.nntpauth_chkbtn), NULL);
+                       (GTK_TOGGLE_BUTTON(basic.nntpauth_checkbtn), NULL);
                gtk_widget_hide(receive.pop3_frame);
                gtk_widget_hide(receive.imap_frame);
                gtk_widget_hide(receive.local_frame);
                gtk_widget_show(receive.frame_maxarticle);
-               gtk_widget_set_sensitive(receive.filter_on_recv_chkbtn, TRUE);
-               gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, TRUE);
+               gtk_widget_set_sensitive(receive.filter_on_recv_checkbtn, TRUE);
+               gtk_widget_set_sensitive(receive.recvatgetall_checkbtn, TRUE);
                /* update pop_before_smtp sensitivity */
                gtk_toggle_button_set_active
-                       (GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_chkbtn), FALSE);
-               gtk_widget_set_sensitive(p_send.pop_bfr_smtp_chkbtn, FALSE);
+                       (GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_checkbtn), FALSE);
+               gtk_widget_set_sensitive(p_send.pop_bfr_smtp_checkbtn, FALSE);
                gtk_widget_set_sensitive(p_send.pop_bfr_smtp_tm_entry, FALSE);
                
                if (!tmp_ac_prefs.account_name) {
                        gtk_toggle_button_set_active
-                               (GTK_TOGGLE_BUTTON(receive.filter_on_recv_chkbtn), 
+                               (GTK_TOGGLE_BUTTON(receive.filter_on_recv_checkbtn), 
                                TRUE);
                        gtk_toggle_button_set_active
-                               (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
+                               (GTK_TOGGLE_BUTTON(receive.recvatgetall_checkbtn),
                                 FALSE);
                }
 
@@ -2883,23 +3046,26 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(advanced.popport_hbox);
                gtk_widget_hide(advanced.imapport_hbox);
                gtk_widget_show(advanced.nntpport_hbox);
-               gtk_widget_show(advanced.crosspost_chkbtn);
+               gtk_widget_show(advanced.crosspost_checkbtn);
                gtk_widget_show(advanced.crosspost_colormenu);
-               gtk_widget_hide(advanced.tunnelcmd_chkbtn);
+               gtk_widget_hide(advanced.tunnelcmd_checkbtn);
                gtk_widget_hide(advanced.tunnelcmd_entry);
                gtk_widget_hide(receive.imapdir_label);
                gtk_widget_hide(receive.imapdir_entry);
+               gtk_widget_hide(receive.subsonly_checkbtn);
                break;
        case A_LOCAL:
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
                gtk_widget_hide(basic.nntpserv_label);
                gtk_widget_hide(basic.nntpserv_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           0, 0);
-               gtk_widget_set_sensitive(basic.nntpauth_chkbtn, FALSE);
-               gtk_widget_hide(basic.nntpauth_chkbtn);
+               gtk_widget_set_sensitive(basic.nntpauth_checkbtn, FALSE);
+               gtk_widget_hide(basic.nntpauth_checkbtn);
 
-               gtk_widget_set_sensitive(basic.nntpauth_onconnect_chkbtn, FALSE);
-               gtk_widget_hide(basic.nntpauth_onconnect_chkbtn);
+               gtk_widget_set_sensitive(basic.nntpauth_onconnect_checkbtn, FALSE);
+               gtk_widget_hide(basic.nntpauth_onconnect_checkbtn);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           1, 0);
                gtk_widget_hide(basic.recvserv_label);
@@ -2918,7 +3084,7 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_show(basic.mailcmd_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           6, VSPACING_NARROW);
-               gtk_widget_show(basic.mailcmd_chkbtn);
+               gtk_widget_show(basic.mailcmd_checkbtn);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           5, VSPACING_NARROW);
                gtk_widget_hide(basic.uid_label);
@@ -2936,23 +3102,23 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(receive.imap_frame);
                gtk_widget_show(receive.local_frame);
                gtk_widget_hide(receive.frame_maxarticle);
-               gtk_widget_set_sensitive(receive.filter_on_recv_chkbtn, TRUE);
-               gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, TRUE);
+               gtk_widget_set_sensitive(receive.filter_on_recv_checkbtn, TRUE);
+               gtk_widget_set_sensitive(receive.recvatgetall_checkbtn, TRUE);
                prefs_account_mailcmd_toggled
-                       (GTK_TOGGLE_BUTTON(basic.mailcmd_chkbtn), NULL);
+                       (GTK_TOGGLE_BUTTON(basic.mailcmd_checkbtn), NULL);
 
                /* update pop_before_smtp sensitivity */
                gtk_toggle_button_set_active
-                       (GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_chkbtn), FALSE);
-               gtk_widget_set_sensitive(p_send.pop_bfr_smtp_chkbtn, FALSE);
+                       (GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_checkbtn), FALSE);
+               gtk_widget_set_sensitive(p_send.pop_bfr_smtp_checkbtn, FALSE);
                gtk_widget_set_sensitive(p_send.pop_bfr_smtp_tm_entry, FALSE);
 
                if (!tmp_ac_prefs.account_name) {
                        gtk_toggle_button_set_active
-                               (GTK_TOGGLE_BUTTON(receive.filter_on_recv_chkbtn), 
+                               (GTK_TOGGLE_BUTTON(receive.filter_on_recv_checkbtn), 
                                TRUE);
                        gtk_toggle_button_set_active
-                               (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
+                               (GTK_TOGGLE_BUTTON(receive.recvatgetall_checkbtn),
                                 TRUE);
                }
 
@@ -2965,23 +3131,28 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(advanced.popport_hbox);
                gtk_widget_hide(advanced.imapport_hbox);
                gtk_widget_hide(advanced.nntpport_hbox);
-               gtk_widget_hide(advanced.crosspost_chkbtn);
+               gtk_widget_hide(advanced.crosspost_checkbtn);
                gtk_widget_hide(advanced.crosspost_colormenu);
-               gtk_widget_hide(advanced.tunnelcmd_chkbtn);
+               gtk_widget_hide(advanced.tunnelcmd_checkbtn);
                gtk_widget_hide(advanced.tunnelcmd_entry);
                gtk_widget_hide(receive.imapdir_label);
                gtk_widget_hide(receive.imapdir_entry);
+               gtk_widget_hide(receive.subsonly_checkbtn);
                break;
        case A_IMAP4:
+#ifndef HAVE_LIBETPAN
+               gtk_widget_show(protocol_optmenu->no_imap_warn_icon);
+               gtk_widget_show(protocol_optmenu->no_imap_warn_label);
+#endif
                gtk_widget_hide(basic.nntpserv_label);
                gtk_widget_hide(basic.nntpserv_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           0, 0);
-               gtk_widget_set_sensitive(basic.nntpauth_chkbtn, FALSE);
-               gtk_widget_hide(basic.nntpauth_chkbtn);
+               gtk_widget_set_sensitive(basic.nntpauth_checkbtn, FALSE);
+               gtk_widget_hide(basic.nntpauth_checkbtn);
 
-               gtk_widget_set_sensitive(basic.nntpauth_onconnect_chkbtn, FALSE);
-               gtk_widget_hide(basic.nntpauth_onconnect_chkbtn);
+               gtk_widget_set_sensitive(basic.nntpauth_onconnect_checkbtn, FALSE);
+               gtk_widget_hide(basic.nntpauth_onconnect_checkbtn);
 
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           1, 0);
@@ -3003,7 +3174,7 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(basic.mailcmd_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           6, 0);
-               gtk_widget_hide(basic.mailcmd_chkbtn);
+               gtk_widget_hide(basic.mailcmd_checkbtn);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           5, 0);
                gtk_widget_show(basic.uid_label);
@@ -3021,23 +3192,23 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_show(receive.imap_frame);
                gtk_widget_hide(receive.local_frame);
                gtk_widget_hide(receive.frame_maxarticle);
-               gtk_widget_set_sensitive(receive.filter_on_recv_chkbtn, TRUE);
-               gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, TRUE);
+               gtk_widget_set_sensitive(receive.filter_on_recv_checkbtn, TRUE);
+               gtk_widget_set_sensitive(receive.recvatgetall_checkbtn, TRUE);
                gtk_widget_set_sensitive(basic.smtpserv_entry, TRUE);
                gtk_widget_set_sensitive(basic.smtpserv_label, TRUE);
 
                /* update pop_before_smtp sensitivity */
                gtk_toggle_button_set_active
-                       (GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_chkbtn), FALSE);
-               gtk_widget_set_sensitive(p_send.pop_bfr_smtp_chkbtn, FALSE);
+                       (GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_checkbtn), FALSE);
+               gtk_widget_set_sensitive(p_send.pop_bfr_smtp_checkbtn, FALSE);
                gtk_widget_set_sensitive(p_send.pop_bfr_smtp_tm_entry, FALSE);
 
                if (!tmp_ac_prefs.account_name) {
                        gtk_toggle_button_set_active
-                               (GTK_TOGGLE_BUTTON(receive.filter_on_recv_chkbtn), 
+                               (GTK_TOGGLE_BUTTON(receive.filter_on_recv_checkbtn), 
                                TRUE);
                        gtk_toggle_button_set_active
-                               (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
+                               (GTK_TOGGLE_BUTTON(receive.recvatgetall_checkbtn),
                                 FALSE);
                }
 
@@ -3050,23 +3221,26 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(advanced.popport_hbox);
                gtk_widget_show(advanced.imapport_hbox);
                gtk_widget_hide(advanced.nntpport_hbox);
-               gtk_widget_hide(advanced.crosspost_chkbtn);
+               gtk_widget_hide(advanced.crosspost_checkbtn);
                gtk_widget_hide(advanced.crosspost_colormenu);
-               gtk_widget_show(advanced.tunnelcmd_chkbtn);
+               gtk_widget_show(advanced.tunnelcmd_checkbtn);
                gtk_widget_show(advanced.tunnelcmd_entry);
                gtk_widget_show(receive.imapdir_label);
                gtk_widget_show(receive.imapdir_entry);
+               gtk_widget_show(receive.subsonly_checkbtn);
                break;
        case A_NONE:
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
                gtk_widget_hide(basic.nntpserv_label);
                gtk_widget_hide(basic.nntpserv_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           0, 0);
-               gtk_widget_set_sensitive(basic.nntpauth_chkbtn, FALSE);
-               gtk_widget_hide(basic.nntpauth_chkbtn);
+               gtk_widget_set_sensitive(basic.nntpauth_checkbtn, FALSE);
+               gtk_widget_hide(basic.nntpauth_checkbtn);
 
-               gtk_widget_set_sensitive(basic.nntpauth_onconnect_chkbtn, FALSE);
-               gtk_widget_hide(basic.nntpauth_onconnect_chkbtn);
+               gtk_widget_set_sensitive(basic.nntpauth_onconnect_checkbtn, FALSE);
+               gtk_widget_hide(basic.nntpauth_onconnect_checkbtn);
 
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           1, 0);
@@ -3088,7 +3262,7 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(basic.mailcmd_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           6, 0);
-               gtk_widget_hide(basic.mailcmd_chkbtn);
+               gtk_widget_hide(basic.mailcmd_checkbtn);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           5, 0);
                gtk_widget_hide(basic.uid_label);
@@ -3107,20 +3281,20 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(receive.imap_frame);
                gtk_widget_hide(receive.local_frame);
                gtk_widget_hide(receive.frame_maxarticle);
-               gtk_widget_set_sensitive(receive.filter_on_recv_chkbtn, FALSE);
-               gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, FALSE);
+               gtk_widget_set_sensitive(receive.filter_on_recv_checkbtn, FALSE);
+               gtk_widget_set_sensitive(receive.recvatgetall_checkbtn, FALSE);
 
                gtk_widget_set_sensitive(basic.smtpserv_entry, TRUE);
                gtk_widget_set_sensitive(basic.smtpserv_label, TRUE);
 
                /* update pop_before_smtp sensitivity */
-               gtk_widget_set_sensitive(p_send.pop_bfr_smtp_chkbtn, FALSE);
+               gtk_widget_set_sensitive(p_send.pop_bfr_smtp_checkbtn, FALSE);
                pop_bfr_smtp_tm_set_sens(NULL, NULL);
        
                gtk_toggle_button_set_active
-                       (GTK_TOGGLE_BUTTON(receive.filter_on_recv_chkbtn), FALSE);
+                       (GTK_TOGGLE_BUTTON(receive.filter_on_recv_checkbtn), FALSE);
                gtk_toggle_button_set_active
-                       (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn), FALSE);
+                       (GTK_TOGGLE_BUTTON(receive.recvatgetall_checkbtn), FALSE);
 
 #if USE_OPENSSL
                gtk_widget_hide(ssl.pop_frame);
@@ -3131,24 +3305,27 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(advanced.popport_hbox);
                gtk_widget_hide(advanced.imapport_hbox);
                gtk_widget_hide(advanced.nntpport_hbox);
-               gtk_widget_hide(advanced.crosspost_chkbtn);
+               gtk_widget_hide(advanced.crosspost_checkbtn);
                gtk_widget_hide(advanced.crosspost_colormenu);
-               gtk_widget_hide(advanced.tunnelcmd_chkbtn);
+               gtk_widget_hide(advanced.tunnelcmd_checkbtn);
                gtk_widget_hide(advanced.tunnelcmd_entry);
                gtk_widget_hide(receive.imapdir_label);
                gtk_widget_hide(receive.imapdir_entry);
+               gtk_widget_hide(receive.subsonly_checkbtn);
                break;
        case A_POP3:
        default:
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
                gtk_widget_hide(basic.nntpserv_label);
                gtk_widget_hide(basic.nntpserv_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           0, 0);
-               gtk_widget_set_sensitive(basic.nntpauth_chkbtn, FALSE);
-               gtk_widget_hide(basic.nntpauth_chkbtn);
+               gtk_widget_set_sensitive(basic.nntpauth_checkbtn, FALSE);
+               gtk_widget_hide(basic.nntpauth_checkbtn);
 
-               gtk_widget_set_sensitive(basic.nntpauth_onconnect_chkbtn, FALSE);
-               gtk_widget_hide(basic.nntpauth_onconnect_chkbtn);
+               gtk_widget_set_sensitive(basic.nntpauth_onconnect_checkbtn, FALSE);
+               gtk_widget_hide(basic.nntpauth_onconnect_checkbtn);
 
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           1, 0);
@@ -3170,7 +3347,7 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(basic.mailcmd_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           6, 0);
-               gtk_widget_hide(basic.mailcmd_chkbtn);
+               gtk_widget_hide(basic.mailcmd_checkbtn);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           5, 0);
                gtk_widget_show(basic.uid_label);
@@ -3189,22 +3366,22 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(receive.imap_frame);
                gtk_widget_hide(receive.local_frame);
                gtk_widget_hide(receive.frame_maxarticle);
-               gtk_widget_set_sensitive(receive.filter_on_recv_chkbtn, TRUE);
-               gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, TRUE);
+               gtk_widget_set_sensitive(receive.filter_on_recv_checkbtn, TRUE);
+               gtk_widget_set_sensitive(receive.recvatgetall_checkbtn, TRUE);
 
                gtk_widget_set_sensitive(basic.smtpserv_entry, TRUE);
                gtk_widget_set_sensitive(basic.smtpserv_label, TRUE);
 
                /* update pop_before_smtp sensitivity */
-               gtk_widget_set_sensitive(p_send.pop_bfr_smtp_chkbtn, TRUE);
+               gtk_widget_set_sensitive(p_send.pop_bfr_smtp_checkbtn, TRUE);
                pop_bfr_smtp_tm_set_sens(NULL, NULL);
                
                if (!tmp_ac_prefs.account_name) {
                        gtk_toggle_button_set_active
-                               (GTK_TOGGLE_BUTTON(receive.filter_on_recv_chkbtn), 
+                               (GTK_TOGGLE_BUTTON(receive.filter_on_recv_checkbtn), 
                                TRUE);
                        gtk_toggle_button_set_active
-                               (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
+                               (GTK_TOGGLE_BUTTON(receive.recvatgetall_checkbtn),
                                 TRUE);
                }
 
@@ -3217,12 +3394,13 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_show(advanced.popport_hbox);
                gtk_widget_hide(advanced.imapport_hbox);
                gtk_widget_hide(advanced.nntpport_hbox);
-               gtk_widget_hide(advanced.crosspost_chkbtn);
+               gtk_widget_hide(advanced.crosspost_checkbtn);
                gtk_widget_hide(advanced.crosspost_colormenu);
-               gtk_widget_hide(advanced.tunnelcmd_chkbtn);
+               gtk_widget_hide(advanced.tunnelcmd_checkbtn);
                gtk_widget_hide(advanced.tunnelcmd_entry);
                gtk_widget_hide(receive.imapdir_label);
                gtk_widget_hide(receive.imapdir_entry);
+               gtk_widget_hide(receive.subsonly_checkbtn);
                break;
        }
 
@@ -3241,7 +3419,7 @@ static void prefs_account_nntpauth_toggled(GtkToggleButton *button,
        gtk_widget_set_sensitive(basic.pass_label, auth);
        gtk_widget_set_sensitive(basic.uid_entry,  auth);
        gtk_widget_set_sensitive(basic.pass_entry, auth);
-       gtk_widget_set_sensitive(basic.nntpauth_onconnect_chkbtn, auth);
+       gtk_widget_set_sensitive(basic.nntpauth_onconnect_checkbtn, auth);
 }
 
 static void prefs_account_mailcmd_toggled(GtkToggleButton *button,
@@ -3259,6 +3437,49 @@ static void prefs_account_mailcmd_toggled(GtkToggleButton *button,
        gtk_widget_set_sensitive(basic.pass_entry, !use_mailcmd);
 }
 
+#if USE_ASPELL
+static void prefs_account_compose_default_dictionary_set_string_from_optmenu
+                                                       (PrefParam *pparam)
+{
+       GtkWidget *menu;
+       GtkWidget *menuitem;
+       gchar **str;
+
+       g_return_if_fail(*pparam->widget != NULL);
+
+       menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
+       menuitem = gtk_menu_get_active(GTK_MENU(menu));
+       if (menuitem == NULL)
+               return;
+
+       str = (gchar **) pparam->data;
+       g_free(*str);
+       *str = gtkaspell_get_dictionary_menu_active_item(menu);
+}
+
+static void prefs_account_compose_default_dictionary_set_optmenu_from_string
+                                                       (PrefParam *pparam)
+{
+       GtkWidget *optionmenu;
+       GtkWidget *menu;
+       GtkWidget *menuitem;
+       gchar *dictionary;
+
+       g_return_if_fail(*pparam->widget != NULL);
+
+       dictionary = *((gchar **) pparam->data);
+       if (dictionary == NULL)
+               return;
+
+       optionmenu = *pparam->widget;
+       menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optionmenu));
+       if (dictionary)
+               gtkaspell_set_dictionary_menu_active_item(optionmenu, dictionary);
+       menuitem = gtk_menu_get_active(GTK_MENU(menu));
+       gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
+}
+#endif
+
 void prefs_account_register_page(PrefsPage *page)
 {
        prefs_pages = g_slist_append(prefs_pages, page);