Move header window to src/widgets
[modest] / src / modest-ui-actions.c
index ecb7d75..0c8dd2e 100644 (file)
@@ -1,5 +1,5 @@
 /* Copyright (c) 2006, Nokia Corporation
 /* Copyright (c) 2006, Nokia Corporation
- * All rights reserved. 
+ * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -26,7 +26,7 @@
  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif /*HAVE_CONFIG_H*/
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif /*HAVE_CONFIG_H*/
 #include "modest-platform.h"
 #include "modest-debug.h"
 #include <tny-mime-part.h>
 #include "modest-platform.h"
 #include "modest-debug.h"
 #include <tny-mime-part.h>
+#include <tny-error.h>
 #include <tny-camel-folder.h>
 #include <tny-camel-imap-folder.h>
 #include <tny-camel-pop-folder.h>
 #include <tny-camel-folder.h>
 #include <tny-camel-imap-folder.h>
 #include <tny-camel-pop-folder.h>
+#include <widgets/modest-header-window.h>
 #ifdef MODEST_TOOLKIT_HILDON2
 #include <modest-accounts-window.h>
 #ifdef MODEST_TOOLKIT_HILDON2
 #include <modest-accounts-window.h>
-#include <hildon/hildon-pannable-area.h>
 #include <hildon/hildon-gtk.h>
 #include <hildon/hildon-gtk.h>
-#include <modest-header-window.h>
 #include <modest-folder-window.h>
 #include <modest-maemo-utils.h>
 #endif
 #include <modest-folder-window.h>
 #include <modest-maemo-utils.h>
 #endif
-
-#ifdef MODEST_PLATFORM_MAEMO
-#include "maemo/modest-osso-state-saving.h"
-#endif /* MODEST_PLATFORM_MAEMO */
-#ifndef MODEST_TOOLKIT_GTK
-#include "maemo/modest-hildon-includes.h"
-#include "maemo/modest-connection-specific-smtp-window.h"
-#endif /* !MODEST_TOOLKIT_GTK */
-#include <modest-utils.h>
-
+#include "modest-utils.h"
+#include "widgets/modest-connection-specific-smtp-window.h"
 #include "widgets/modest-ui-constants.h"
 #include <widgets/modest-main-window.h>
 #include <widgets/modest-msg-view-window.h>
 #include "widgets/modest-ui-constants.h"
 #include <widgets/modest-main-window.h>
 #include <widgets/modest-msg-view-window.h>
 
 #include <gtkhtml/gtkhtml.h>
 
 
 #include <gtkhtml/gtkhtml.h>
 
-#define MIN_FREE_SPACE 5 * 1024 * 1024
 #define MODEST_MOVE_TO_DIALOG_FOLDER_VIEW "move-to-dialog-folder-view"
 
 #define MODEST_MOVE_TO_DIALOG_FOLDER_VIEW "move-to-dialog-folder-view"
 
-typedef struct _GetMsgAsyncHelper {    
+typedef struct _GetMsgAsyncHelper {
        ModestWindow *window;
        ModestMailOperation *mail_op;
        TnyIterator *iter;
        guint num_ops;
        ModestWindow *window;
        ModestMailOperation *mail_op;
        TnyIterator *iter;
        guint num_ops;
-       GFunc func;     
+       GFunc func;
        gpointer user_data;
 } GetMsgAsyncHelper;
 
        gpointer user_data;
 } GetMsgAsyncHelper;
 
@@ -109,6 +100,7 @@ typedef struct _ReplyForwardHelper {
        guint reply_forward_type;
        ReplyForwardAction action;
        gchar *account_name;
        guint reply_forward_type;
        ReplyForwardAction action;
        gchar *account_name;
+       gchar *mailbox;
        GtkWidget *parent_window;
        TnyHeader *header;
 } ReplyForwardHelper;
        GtkWidget *parent_window;
        TnyHeader *header;
 } ReplyForwardHelper;
@@ -134,19 +126,19 @@ typedef struct {
  */
 typedef void (*HeadersFunc) (TnyHeader *header, ModestWindow *win, gpointer user_data);
 
  */
 typedef void (*HeadersFunc) (TnyHeader *header, ModestWindow *win, gpointer user_data);
 
-static void     do_headers_action     (ModestWindow *win, 
+static void     do_headers_action     (ModestWindow *win,
                                       HeadersFunc func,
                                       gpointer user_data);
 
                                       HeadersFunc func,
                                       gpointer user_data);
 
-static void     open_msg_cb            (ModestMailOperation *mail_op, 
-                                       TnyHeader *header, 
+static void     open_msg_cb            (ModestMailOperation *mail_op,
+                                       TnyHeader *header,
                                        gboolean canceled,
                                        TnyMsg *msg,
                                        GError *err,
                                        gpointer user_data);
 
                                        gboolean canceled,
                                        TnyMsg *msg,
                                        GError *err,
                                        gpointer user_data);
 
-static void     reply_forward_cb       (ModestMailOperation *mail_op, 
-                                       TnyHeader *header, 
+static void     reply_forward_cb       (ModestMailOperation *mail_op,
+                                       TnyHeader *header,
                                        gboolean canceled,
                                        TnyMsg *msg,
                                        GError *err,
                                        gboolean canceled,
                                        TnyMsg *msg,
                                        GError *err,
@@ -154,12 +146,14 @@ static void     reply_forward_cb       (ModestMailOperation *mail_op,
 
 static void     reply_forward          (ReplyForwardAction action, ModestWindow *win);
 
 
 static void     reply_forward          (ReplyForwardAction action, ModestWindow *win);
 
-static void     folder_refreshed_cb    (ModestMailOperation *mail_op, 
-                                       TnyFolder *folder, 
+#ifndef MODEST_TOOLKIT_HILDON2
+static void     folder_refreshed_cb    (ModestMailOperation *mail_op,
+                                       TnyFolder *folder,
                                        gpointer user_data);
 
                                        gpointer user_data);
 
-static void     on_send_receive_finished (ModestMailOperation  *mail_op, 
+static void     on_send_receive_finished (ModestMailOperation  *mail_op,
                                          gpointer user_data);
                                          gpointer user_data);
+#endif
 
 static gint header_list_count_uncached_msgs (TnyList *header_list);
 
 
 static gint header_list_count_uncached_msgs (TnyList *header_list);
 
@@ -169,17 +163,19 @@ static gboolean connect_to_get_msg (ModestWindow *win,
 
 static gboolean remote_folder_has_leave_on_server (TnyFolderStore *folder);
 
 
 static gboolean remote_folder_has_leave_on_server (TnyFolderStore *folder);
 
-static void     do_create_folder (GtkWindow *window, 
-                                 TnyFolderStore *parent_folder, 
+static void     do_create_folder (GtkWindow *window,
+                                 TnyFolderStore *parent_folder,
                                  const gchar *suggested_name);
 
 static TnyAccount *get_account_from_folder_store (TnyFolderStore *folder_store);
 
                                  const gchar *suggested_name);
 
 static TnyAccount *get_account_from_folder_store (TnyFolderStore *folder_store);
 
+#ifndef MODEST_TOOLKIT_HILDON2
 static void modest_ui_actions_on_main_window_move_to (GtkAction *action,
                                                      GtkWidget *folder_view,
                                                      TnyFolderStore *dst_folder,
                                                      ModestMainWindow *win);
 static void modest_ui_actions_on_main_window_move_to (GtkAction *action,
                                                      GtkWidget *folder_view,
                                                      TnyFolderStore *dst_folder,
                                                      ModestMainWindow *win);
-#ifdef MODEST_TOOLKIT_HILDON2
+
+#else
 static void modest_ui_actions_on_folder_window_move_to (GtkWidget *folder_view,
                                                        TnyFolderStore *dst_folder,
                                                        TnyList *selection,
 static void modest_ui_actions_on_folder_window_move_to (GtkWidget *folder_view,
                                                        TnyFolderStore *dst_folder,
                                                        TnyList *selection,
@@ -201,7 +197,7 @@ remote_folder_has_leave_on_server (TnyFolderStore *folder)
        gboolean result;
 
         g_return_val_if_fail (TNY_IS_FOLDER_STORE (folder), FALSE);
        gboolean result;
 
         g_return_val_if_fail (TNY_IS_FOLDER_STORE (folder), FALSE);
-       
+
        account = get_account_from_folder_store (folder);
        result = (modest_protocol_registry_protocol_type_has_leave_on_server (modest_runtime_get_protocol_registry (),
                                                                              modest_tny_account_get_protocol_type (account)));
        account = get_account_from_folder_store (folder);
        result = (modest_protocol_registry_protocol_type_has_leave_on_server (modest_runtime_get_protocol_registry (),
                                                                              modest_tny_account_get_protocol_type (account)));
@@ -226,7 +222,7 @@ modest_ui_actions_run_account_setup_wizard (ModestWindow *win)
        modest_window_mgr_set_modal (modest_runtime_get_window_mgr(), GTK_WINDOW (wizard), (GtkWindow *) win);
 
 #ifndef MODEST_TOOLKIT_HILDON2
        modest_window_mgr_set_modal (modest_runtime_get_window_mgr(), GTK_WINDOW (wizard), (GtkWindow *) win);
 
 #ifndef MODEST_TOOLKIT_HILDON2
-       /* always present a main window in the background 
+       /* always present a main window in the background
         * we do it here, so we cannot end up with two wizards (as this
         * function might be called in modest_window_mgr_get_main_window as well */
        if (!win)
         * we do it here, so we cannot end up with two wizards (as this
         * function might be called in modest_window_mgr_get_main_window as well */
        if (!win)
@@ -241,7 +237,6 @@ modest_ui_actions_run_account_setup_wizard (ModestWindow *win)
 
                window_list = modest_window_mgr_get_window_list (mgr);
                if (window_list == NULL) {
 
                window_list = modest_window_mgr_get_window_list (mgr);
                if (window_list == NULL) {
-                       ModestWindow *old_win;
                        win = MODEST_WINDOW (modest_accounts_window_new ());
                        if (modest_window_mgr_register_window (mgr, win, NULL)) {
                                gtk_widget_show_all (GTK_WIDGET (win));
                        win = MODEST_WINDOW (modest_accounts_window_new ());
                        if (modest_window_mgr_register_window (mgr, win, NULL)) {
                                gtk_widget_show_all (GTK_WIDGET (win));
@@ -250,14 +245,6 @@ modest_ui_actions_run_account_setup_wizard (ModestWindow *win)
                                win = NULL;
                        }
 
                                win = NULL;
                        }
 
-                       old_win = win;
-                       win = MODEST_WINDOW (modest_folder_window_new (NULL));
-                       if (modest_window_mgr_register_window (mgr, win, NULL)) {
-                               gtk_widget_show_all (GTK_WIDGET (win));
-                       } else {
-                               gtk_widget_destroy (GTK_WIDGET (win));
-                               win = old_win;
-                       }
                } else {
                        g_list_free (window_list);
                }
                } else {
                        g_list_free (window_list);
                }
@@ -294,7 +281,7 @@ modest_ui_actions_run_account_setup_wizard (ModestWindow *win)
 }
 
 
 }
 
 
-void   
+void
 modest_ui_actions_on_about (GtkAction *action, ModestWindow *win)
 {
        GtkWidget *about;
 modest_ui_actions_on_about (GtkAction *action, ModestWindow *win)
 {
        GtkWidget *about;
@@ -317,7 +304,7 @@ modest_ui_actions_on_about (GtkAction *action, ModestWindow *win)
        gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(about), "http://modest.garage.maemo.org");
        gtk_window_set_transient_for (GTK_WINDOW (about), GTK_WINDOW (win));
        gtk_window_set_modal (GTK_WINDOW (about), TRUE);
        gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(about), "http://modest.garage.maemo.org");
        gtk_window_set_transient_for (GTK_WINDOW (about), GTK_WINDOW (win));
        gtk_window_set_modal (GTK_WINDOW (about), TRUE);
-       
+
        gtk_dialog_run (GTK_DIALOG (about));
        gtk_widget_destroy(about);
 }
        gtk_dialog_run (GTK_DIALOG (about));
        gtk_widget_destroy(about);
 }
@@ -333,18 +320,11 @@ modest_ui_actions_on_about (GtkAction *action, ModestWindow *win)
 static TnyList *
 get_selected_headers (ModestWindow *win)
 {
 static TnyList *
 get_selected_headers (ModestWindow *win)
 {
-       if (MODEST_IS_MAIN_WINDOW(win)) {
-               GtkWidget *header_view;         
-               
-               header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
-                                                                  MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
-               return modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
-               
-       } else if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
+       if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
                /* for MsgViewWindows, we simply return a list with one element */
                TnyHeader *header;
                TnyList *list = NULL;
                /* for MsgViewWindows, we simply return a list with one element */
                TnyHeader *header;
                TnyList *list = NULL;
-               
+
                header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
                if (header != NULL) {
                        list = tny_simple_list_new ();
                header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
                if (header != NULL) {
                        list = tny_simple_list_new ();
@@ -353,18 +333,26 @@ get_selected_headers (ModestWindow *win)
                }
 
                return list;
                }
 
                return list;
+#ifndef MODEST_TOOLKIT_HILDON2
+       } else if (MODEST_IS_MAIN_WINDOW(win)) {
+               GtkWidget *header_view;
 
 
-#ifdef MODEST_TOOLKIT_HILDON2
+               header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
+                                                                  MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
+               return modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
+#else
        } else if (MODEST_IS_HEADER_WINDOW (win)) {
                GtkWidget *header_view;
 
                header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (win)));
                return modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
 #endif
        } else if (MODEST_IS_HEADER_WINDOW (win)) {
                GtkWidget *header_view;
 
                header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (win)));
                return modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
 #endif
-       } else
+       } else {
                return NULL;
                return NULL;
+       }
 }
 
 }
 
+#ifndef MODEST_TOOLKIT_HILDON2
 static GtkTreeRowReference *
 get_next_after_selected_headers (ModestHeaderView *header_view)
 {
 static GtkTreeRowReference *
 get_next_after_selected_headers (ModestHeaderView *header_view)
 {
@@ -393,6 +381,7 @@ get_next_after_selected_headers (ModestHeaderView *header_view)
 
        return result;
 }
 
        return result;
 }
+#endif
 
 static void
 headers_action_mark_as_read (TnyHeader *header,
 
 static void
 headers_action_mark_as_read (TnyHeader *header,
@@ -423,17 +412,17 @@ headers_action_mark_as_unread (TnyHeader *header,
        }
 }
 
        }
 }
 
-/** After deleing a message that is currently visible in a window, 
+/** After deleing a message that is currently visible in a window,
  * show the next message from the list, or close the window if there are no more messages.
  **/
  * show the next message from the list, or close the window if there are no more messages.
  **/
-void 
+void
 modest_ui_actions_refresh_message_window_after_delete (ModestMsgViewWindow* win)
 {
        /* Close msg view window or select next */
        if (!modest_msg_view_window_select_next_message (win) &&
            !modest_msg_view_window_select_previous_message (win)) {
                gboolean ret_value;
 modest_ui_actions_refresh_message_window_after_delete (ModestMsgViewWindow* win)
 {
        /* Close msg view window or select next */
        if (!modest_msg_view_window_select_next_message (win) &&
            !modest_msg_view_window_select_previous_message (win)) {
                gboolean ret_value;
-               g_signal_emit_by_name (G_OBJECT (win), "delete-event", NULL, &ret_value);       
+               g_signal_emit_by_name (G_OBJECT (win), "delete-event", NULL, &ret_value);
        }
 }
 
        }
 }
 
@@ -454,26 +443,29 @@ modest_ui_actions_on_edit_mode_delete_message (ModestWindow *win)
        gchar *desc = NULL;
        gint response;
        ModestWindowMgr *mgr;
        gchar *desc = NULL;
        gint response;
        ModestWindowMgr *mgr;
-       GtkWidget *header_view = NULL;
        gboolean retval = TRUE;
 
        g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
        gboolean retval = TRUE;
 
        g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
-       
+
+#ifndef MODEST_TOOLKIT_HILDON2
        /* Check first if the header view has the focus */
        if (MODEST_IS_MAIN_WINDOW (win)) {
        /* Check first if the header view has the focus */
        if (MODEST_IS_MAIN_WINDOW (win)) {
-               header_view = 
+               GtkWidget *header_view = NULL;
+
+               header_view =
                        modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
                                                             MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
                if (!gtk_widget_is_focus (header_view))
                        return FALSE;
        }
                        modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
                                                             MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
                if (!gtk_widget_is_focus (header_view))
                        return FALSE;
        }
-       
+#endif
        /* Get the headers, either from the header view (if win is the main window),
         * or from the message view window: */
        header_list = get_selected_headers (win);
        if (!header_list) return FALSE;
        /* Get the headers, either from the header view (if win is the main window),
         * or from the message view window: */
        header_list = get_selected_headers (win);
        if (!header_list) return FALSE;
-                       
+
        /* Check if any of the headers are already opened, or in the process of being opened */
        /* Check if any of the headers are already opened, or in the process of being opened */
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (win)) {
                gint opened_headers = 0;
 
        if (MODEST_IS_MAIN_WINDOW (win)) {
                gint opened_headers = 0;
 
@@ -493,16 +485,17 @@ modest_ui_actions_on_edit_mode_delete_message (ModestWindow *win)
                if (opened_headers > 0) {
                        gchar *msg;
 
                if (opened_headers > 0) {
                        gchar *msg;
 
-                       msg = g_strdup_printf (_("mcen_nc_unable_to_delete_n_messages"), 
+                       msg = g_strdup_printf (_("mcen_nc_unable_to_delete_n_messages"),
                                               opened_headers);
 
                        modest_platform_run_information_dialog (GTK_WINDOW (win), (const gchar *) msg, FALSE);
                                               opened_headers);
 
                        modest_platform_run_information_dialog (GTK_WINDOW (win), (const gchar *) msg, FALSE);
-                       
+
                        g_free (msg);
                        g_object_unref (header_list);
                        return FALSE;
                }
        }
                        g_free (msg);
                        g_object_unref (header_list);
                        return FALSE;
                }
        }
+#endif
 
        /* Select message */
        if (tny_list_get_length(header_list) == 1) {
 
        /* Select message */
        if (tny_list_get_length(header_list) == 1) {
@@ -513,35 +506,34 @@ modest_ui_actions_on_edit_mode_delete_message (ModestWindow *win)
                        subject = tny_header_dup_subject (header);
                        if (!subject)
                                subject = g_strdup (_("mail_va_no_subject"));
                        subject = tny_header_dup_subject (header);
                        if (!subject)
                                subject = g_strdup (_("mail_va_no_subject"));
-                       desc = g_strdup_printf ("%s", subject); 
+                       desc = g_strdup_printf ("%s", subject);
                        g_free (subject);
                        g_object_unref (header);
                }
 
                g_object_unref (iter);
        }
                        g_free (subject);
                        g_object_unref (header);
                }
 
                g_object_unref (iter);
        }
-       message = g_strdup_printf(ngettext("emev_nc_delete_message", "emev_nc_delete_messages", 
+       message = g_strdup_printf(ngettext("emev_nc_delete_message", "emev_nc_delete_messages",
                                           tny_list_get_length(header_list)), desc);
 
        /* Confirmation dialog */
        response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
                                                            message);
                                           tny_list_get_length(header_list)), desc);
 
        /* Confirmation dialog */
        response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
                                                            message);
-       
 
 
-       if (response == GTK_RESPONSE_OK) {      
-               ModestWindow *main_window = NULL;
-               ModestWindowMgr *mgr = NULL;
-               GtkTreeModel *model = NULL;
+       if (response == GTK_RESPONSE_OK) {
                GtkTreeSelection *sel = NULL;
                GtkTreeSelection *sel = NULL;
-               GList *sel_list = NULL, *tmp = NULL;
-               GtkTreeRowReference *next_row_reference = NULL;
-               GtkTreeRowReference *prev_row_reference = NULL;
-               GtkTreePath *next_path = NULL;
-               GtkTreePath *prev_path = NULL;
+               GList *sel_list = NULL;
                ModestMailOperation *mail_op = NULL;
 
                ModestMailOperation *mail_op = NULL;
 
-               /* Find last selected row */                    
+               /* Find last selected row */
+#ifndef MODEST_TOOLKIT_HILDON2
                if (MODEST_IS_MAIN_WINDOW (win)) {
                if (MODEST_IS_MAIN_WINDOW (win)) {
+                       GList *tmp = NULL;
+                       ModestWindowMgr *mgr = NULL;
+                       GtkTreeModel *model = NULL;
+                       GtkTreeRowReference *next_row_reference = NULL, *prev_row_reference = NULL;
+                       GtkTreePath *next_path = NULL, *prev_path = NULL;
+
                        model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
                        sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (header_view));
                        sel_list = gtk_tree_selection_get_selected_rows (sel, &model);
                        model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
                        sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (header_view));
                        sel_list = gtk_tree_selection_get_selected_rows (sel, &model);
@@ -558,9 +550,10 @@ modest_ui_actions_on_edit_mode_delete_message (ModestWindow *win)
                                }
                        }
                }
                                }
                        }
                }
-               
+#endif
+
                /* Disable window dimming management */
                /* Disable window dimming management */
-               modest_window_disable_dimming (MODEST_WINDOW(win));
+               modest_window_disable_dimming (win);
 
                /* Remove each header. If it's a view window header_view == NULL */
                mail_op = modest_mail_operation_new ((GObject *) win);
 
                /* Remove each header. If it's a view window header_view == NULL */
                mail_op = modest_mail_operation_new ((GObject *) win);
@@ -568,47 +561,43 @@ modest_ui_actions_on_edit_mode_delete_message (ModestWindow *win)
                                                 mail_op);
                modest_mail_operation_remove_msgs (mail_op, header_list, FALSE);
                g_object_unref (mail_op);
                                                 mail_op);
                modest_mail_operation_remove_msgs (mail_op, header_list, FALSE);
                g_object_unref (mail_op);
-               
+
                /* Enable window dimming management */
                if (sel != NULL) {
                        gtk_tree_selection_unselect_all (sel);
                }
                /* Enable window dimming management */
                if (sel != NULL) {
                        gtk_tree_selection_unselect_all (sel);
                }
-               modest_window_enable_dimming (MODEST_WINDOW(win));
-               
+               modest_window_enable_dimming (win);
+
                if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
                        modest_ui_actions_refresh_message_window_after_delete (MODEST_MSG_VIEW_WINDOW (win));
                if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
                        modest_ui_actions_refresh_message_window_after_delete (MODEST_MSG_VIEW_WINDOW (win));
-                       
+
                        /* Get main window */
                        mgr = modest_runtime_get_window_mgr ();
                        /* Get main window */
                        mgr = modest_runtime_get_window_mgr ();
-                       main_window = modest_window_mgr_get_main_window (mgr, FALSE); /* don't create */
+#ifndef MODEST_TOOLKIT_HILDON2
                } else if (MODEST_IS_MAIN_WINDOW (win)) {
                } else if (MODEST_IS_MAIN_WINDOW (win)) {
-                       /* Move cursor to next row */
-                       main_window = win; 
-
                        /* Select next or previous row */
                        if (gtk_tree_row_reference_valid (next_row_reference)) {
                                gtk_tree_selection_select_path (sel, next_path);
                        }
                        /* Select next or previous row */
                        if (gtk_tree_row_reference_valid (next_row_reference)) {
                                gtk_tree_selection_select_path (sel, next_path);
                        }
-                       else if (gtk_tree_row_reference_valid (prev_row_reference)) {                           
+                       else if (gtk_tree_row_reference_valid (prev_row_reference)) {
                                gtk_tree_selection_select_path (sel, prev_path);
                        }
 
                        /* Free */
                                gtk_tree_selection_select_path (sel, prev_path);
                        }
 
                        /* Free */
-                       if (gtk_tree_row_reference_valid (next_row_reference)) 
+                       if (gtk_tree_row_reference_valid (next_row_reference))
                                gtk_tree_row_reference_free (next_row_reference);
                                gtk_tree_row_reference_free (next_row_reference);
-                       if (next_path != NULL) 
-                               gtk_tree_path_free (next_path);                         
-                       if (gtk_tree_row_reference_valid (prev_row_reference)) 
+                       if (next_path != NULL)
+                               gtk_tree_path_free (next_path);
+                       if (gtk_tree_row_reference_valid (prev_row_reference))
                                gtk_tree_row_reference_free (prev_row_reference);
                                gtk_tree_row_reference_free (prev_row_reference);
-                       if (prev_path != NULL) 
+                       if (prev_path != NULL)
                                gtk_tree_path_free (prev_path);
                                gtk_tree_path_free (prev_path);
+#endif
                }
                }
-               
+
                /* Update toolbar dimming state */
                /* Update toolbar dimming state */
-               if (main_window) {
-                       modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (main_window));
-                       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
-               }
+               modest_ui_actions_check_menu_dimming_rules (win);
+               modest_ui_actions_check_toolbar_dimming_rules (win);
 
                /* Free */
                g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL);
 
                /* Free */
                g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL);
@@ -634,8 +623,9 @@ void
 modest_ui_actions_on_delete_message_or_folder (GtkAction *action, ModestWindow *win)
 {
        g_return_if_fail (MODEST_IS_WINDOW(win));
 modest_ui_actions_on_delete_message_or_folder (GtkAction *action, ModestWindow *win)
 {
        g_return_if_fail (MODEST_IS_WINDOW(win));
-       
+
        /* Check first if the header view has the focus */
        /* Check first if the header view has the focus */
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (win)) {
                GtkWidget *w;
                w = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
        if (MODEST_IS_MAIN_WINDOW (win)) {
                GtkWidget *w;
                w = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
@@ -645,16 +635,17 @@ modest_ui_actions_on_delete_message_or_folder (GtkAction *action, ModestWindow *
                        return;
                }
        }
                        return;
                }
        }
+#endif
        modest_ui_actions_on_delete_message (action, win);
 }
 
 void
 modest_ui_actions_on_quit (GtkAction *action, ModestWindow *win)
        modest_ui_actions_on_delete_message (action, win);
 }
 
 void
 modest_ui_actions_on_quit (GtkAction *action, ModestWindow *win)
-{      
+{
        ModestWindowMgr *mgr = NULL;
        ModestWindowMgr *mgr = NULL;
-       
+
 #ifdef MODEST_PLATFORM_MAEMO
 #ifdef MODEST_PLATFORM_MAEMO
-       modest_osso_save_state();
+       modest_window_mgr_save_state_for_all_windows (modest_runtime_get_window_mgr ());
 #endif /* MODEST_PLATFORM_MAEMO */
 
        g_debug ("closing down, clearing %d item(s) from operation queue",
 #endif /* MODEST_PLATFORM_MAEMO */
 
        g_debug ("closing down, clearing %d item(s) from operation queue",
@@ -662,13 +653,13 @@ modest_ui_actions_on_quit (GtkAction *action, ModestWindow *win)
                 (modest_runtime_get_mail_operation_queue()));
 
        /* cancel all outstanding operations */
                 (modest_runtime_get_mail_operation_queue()));
 
        /* cancel all outstanding operations */
-       modest_mail_operation_queue_cancel_all 
+       modest_mail_operation_queue_cancel_all
                (modest_runtime_get_mail_operation_queue());
                (modest_runtime_get_mail_operation_queue());
-       
+
        g_debug ("queue has been cleared");
 
 
        g_debug ("queue has been cleared");
 
 
-       /* Check if there are opened editing windows */ 
+       /* Check if there are opened editing windows */
        mgr = modest_runtime_get_window_mgr ();
        modest_window_mgr_close_all_windows (mgr);
 
        mgr = modest_runtime_get_window_mgr ();
        modest_window_mgr_close_all_windows (mgr);
 
@@ -701,9 +692,10 @@ modest_ui_actions_on_close_window (GtkAction *action, ModestWindow *win)
 void
 modest_ui_actions_add_to_contacts (GtkAction *action, ModestWindow *win)
 {
 void
 modest_ui_actions_add_to_contacts (GtkAction *action, ModestWindow *win)
 {
-       g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win));
-       
-       modest_msg_view_window_add_to_contacts (MODEST_MSG_VIEW_WINDOW (win));
+       if (MODEST_IS_MSG_VIEW_WINDOW (win))
+               modest_msg_view_window_add_to_contacts (MODEST_MSG_VIEW_WINDOW (win));
+       else if (MODEST_IS_MSG_EDIT_WINDOW (win))
+               modest_msg_edit_window_add_to_contacts (MODEST_MSG_EDIT_WINDOW (win));
 }
 
 void
 }
 
 void
@@ -715,12 +707,8 @@ modest_ui_actions_on_add_to_contacts (GtkAction *action, ModestWindow *win)
        clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
        selection = gtk_clipboard_wait_for_text (clipboard);
 
        clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
        selection = gtk_clipboard_wait_for_text (clipboard);
 
-       /* Question: why is the clipboard being used here? 
-        * It doesn't really make a lot of sense. */
-
-       if (selection)
-       {
-               modest_address_book_add_address (selection);
+       if (selection) {
+               modest_address_book_add_address (selection, (GtkWindow *) win);
                g_free (selection);
        }
 }
                g_free (selection);
        }
 }
@@ -729,7 +717,9 @@ void
 modest_ui_actions_on_new_account (GtkAction *action,
                                  ModestWindow *window)
 {
 modest_ui_actions_on_new_account (GtkAction *action,
                                  ModestWindow *window)
 {
-       modest_ui_actions_run_account_setup_wizard (window);
+       if (!modest_ui_actions_run_account_setup_wizard (window)) {
+               g_debug ("%s: wizard was already running", __FUNCTION__);
+       }
 }
 
 void
 }
 
 void
@@ -748,7 +738,7 @@ modest_ui_actions_on_accounts (GtkAction *action,
 
                /* The accounts dialog must be modal */
                modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (account_win), (GtkWindow *) win);
 
                /* The accounts dialog must be modal */
                modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (account_win), (GtkWindow *) win);
-               modest_utils_show_dialog_and_forget (GTK_WINDOW (win), GTK_DIALOG (account_win)); 
+               modest_utils_show_dialog_and_forget (GTK_WINDOW (win), GTK_DIALOG (account_win));
        }
 }
 
        }
 }
 
@@ -756,7 +746,7 @@ void
 modest_ui_actions_on_smtp_servers (GtkAction *action, ModestWindow *win)
 {
        /* This is currently only implemented for Maemo,
 modest_ui_actions_on_smtp_servers (GtkAction *action, ModestWindow *win)
 {
        /* This is currently only implemented for Maemo,
-        * because it requires an API (libconic) to detect different connection 
+        * because it requires an API (libconic) to detect different connection
         * possiblities.
         */
 #ifndef MODEST_TOOLKIT_GTK /* Defined in config.h */
         * possiblities.
         */
 #ifndef MODEST_TOOLKIT_GTK /* Defined in config.h */
@@ -764,16 +754,64 @@ modest_ui_actions_on_smtp_servers (GtkAction *action, ModestWindow *win)
        /* Create the window if necessary: */
        GtkWidget *specific_window = GTK_WIDGET (modest_connection_specific_smtp_window_new ());
        modest_connection_specific_smtp_window_fill_with_connections (
        /* Create the window if necessary: */
        GtkWidget *specific_window = GTK_WIDGET (modest_connection_specific_smtp_window_new ());
        modest_connection_specific_smtp_window_fill_with_connections (
-               MODEST_CONNECTION_SPECIFIC_SMTP_WINDOW (specific_window), 
+               MODEST_CONNECTION_SPECIFIC_SMTP_WINDOW (specific_window),
                modest_runtime_get_account_mgr());
 
        /* Show the window: */
                modest_runtime_get_account_mgr());
 
        /* Show the window: */
-       modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), 
+       modest_window_mgr_set_modal (modest_runtime_get_window_mgr (),
                                     GTK_WINDOW (specific_window), (GtkWindow *) win);
        gtk_widget_show (specific_window);
 #endif /* !MODEST_TOOLKIT_GTK */
 }
 
                                     GTK_WINDOW (specific_window), (GtkWindow *) win);
        gtk_widget_show (specific_window);
 #endif /* !MODEST_TOOLKIT_GTK */
 }
 
+static guint64
+count_part_size (const gchar *part)
+{
+       GnomeVFSURI *vfs_uri;
+       gchar *escaped_filename;
+       gchar *filename;
+       GnomeVFSFileInfo *info;
+       guint64 result;
+
+       /* Estimation of attachment size if we cannot get it from file info */
+       result = 32768;
+
+       vfs_uri = gnome_vfs_uri_new (part);
+
+       escaped_filename = g_path_get_basename (gnome_vfs_uri_get_path (vfs_uri));
+       filename = gnome_vfs_unescape_string_for_display (escaped_filename);
+       g_free (escaped_filename);
+       gnome_vfs_uri_unref (vfs_uri);
+
+       info = gnome_vfs_file_info_new ();
+       
+       if (gnome_vfs_get_file_info (part, 
+                                    info, 
+                                    GNOME_VFS_FILE_INFO_GET_MIME_TYPE)
+           == GNOME_VFS_OK) {
+               if (info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_SIZE) {
+                       result = info->size;
+               }
+       }
+       g_free (filename);
+       gnome_vfs_file_info_unref (info);
+
+       return result;
+}
+
+static guint64 
+count_parts_size (GSList *parts)
+{
+       GSList *node;
+       guint64 result = 0;
+
+       for (node = parts; node != NULL; node = g_slist_next (node)) {
+               result += count_part_size ((const gchar *) node->data);
+       }
+
+       return result;
+}
+
 void
 modest_ui_actions_compose_msg(ModestWindow *win,
                              const gchar *to_str,
 void
 modest_ui_actions_compose_msg(ModestWindow *win,
                              const gchar *to_str,
@@ -785,22 +823,51 @@ modest_ui_actions_compose_msg(ModestWindow *win,
                              gboolean set_as_modified)
 {
        gchar *account_name = NULL;
                              gboolean set_as_modified)
 {
        gchar *account_name = NULL;
+       const gchar *mailbox;
        TnyMsg *msg = NULL;
        TnyAccount *account = NULL;
        TnyFolder *folder = NULL;
        gchar *from_str = NULL, *signature = NULL, *body = NULL;
        TnyMsg *msg = NULL;
        TnyAccount *account = NULL;
        TnyFolder *folder = NULL;
        gchar *from_str = NULL, *signature = NULL, *body = NULL;
+       gchar *recipient = NULL;
        gboolean use_signature = FALSE;
        ModestWindow *msg_win = NULL;
        ModestAccountMgr *mgr = modest_runtime_get_account_mgr();
        ModestTnyAccountStore *store = modest_runtime_get_account_store();
        GnomeVFSFileSize total_size, allowed_size;
        gboolean use_signature = FALSE;
        ModestWindow *msg_win = NULL;
        ModestAccountMgr *mgr = modest_runtime_get_account_mgr();
        ModestTnyAccountStore *store = modest_runtime_get_account_store();
        GnomeVFSFileSize total_size, allowed_size;
+       guint64 available_disk, expected_size, parts_size;
+       guint parts_count;
 
        /* we check for low-mem */
        if (modest_platform_check_memory_low (win, TRUE))
                goto cleanup;
 
 
        /* we check for low-mem */
        if (modest_platform_check_memory_low (win, TRUE))
                goto cleanup;
 
+       available_disk = modest_utils_get_available_space (NULL);
+       parts_count = g_slist_length (attachments);
+       parts_size = count_parts_size (attachments);
+       expected_size = modest_tny_msg_estimate_size (body, NULL, parts_count, parts_size);
+
+       /* Double check: disk full condition or message too big */
+       if (available_disk < MODEST_TNY_ACCOUNT_STORE_MIN_FREE_SPACE ||
+           expected_size > available_disk) {
+               gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
+               modest_platform_system_banner (NULL, NULL, msg);
+               g_free (msg);
+
+               return;
+       }
+
+       if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) {
+               modest_platform_run_information_dialog (
+                       GTK_WINDOW(win),
+                       _("mail_ib_error_attachment_size"),
+                       TRUE);
+               return;
+       }
+
+
 #ifdef MODEST_TOOLKIT_HILDON2
 #ifdef MODEST_TOOLKIT_HILDON2
-       account_name = g_strdup (modest_window_get_active_account(win));
+       if (win)
+               account_name = g_strdup (modest_window_get_active_account(win));
 #endif
        if (!account_name) {
                account_name = modest_account_mgr_get_default_account(mgr);
 #endif
        if (!account_name) {
                account_name = modest_account_mgr_get_default_account(mgr);
@@ -809,6 +876,11 @@ modest_ui_actions_compose_msg(ModestWindow *win,
                g_printerr ("modest: no account found\n");
                goto cleanup;
        }
                g_printerr ("modest: no account found\n");
                goto cleanup;
        }
+
+       if (win)
+               mailbox = modest_window_get_active_mailbox (win);
+       else
+               mailbox = NULL;
        account = modest_tny_account_store_get_server_account (store, account_name, TNY_ACCOUNT_TYPE_STORE);
        if (!account) {
                g_printerr ("modest: failed to get tnyaccount for '%s'\n", account_name);
        account = modest_tny_account_store_get_server_account (store, account_name, TNY_ACCOUNT_TYPE_STORE);
        if (!account) {
                g_printerr ("modest: failed to get tnyaccount for '%s'\n", account_name);
@@ -819,20 +891,25 @@ modest_ui_actions_compose_msg(ModestWindow *win,
                g_printerr ("modest: failed to find Drafts folder\n");
                goto cleanup;
        }
                g_printerr ("modest: failed to find Drafts folder\n");
                goto cleanup;
        }
-       from_str = modest_account_mgr_get_from_string (mgr, account_name);
+       from_str = modest_account_mgr_get_from_string (mgr, account_name, mailbox);
        if (!from_str) {
                g_printerr ("modest: failed get from string for '%s'\n", account_name);
                goto cleanup;
        }
 
        if (!from_str) {
                g_printerr ("modest: failed get from string for '%s'\n", account_name);
                goto cleanup;
        }
 
-       signature = modest_account_mgr_get_signature (mgr, account_name, &use_signature);
+       recipient = modest_text_utils_get_email_address (from_str);
+       signature = modest_account_mgr_get_signature_from_recipient (mgr, recipient, &use_signature);
+       g_free (recipient);
        if (body_str != NULL) {
        if (body_str != NULL) {
-               body = use_signature ? g_strconcat(body_str, "\n--\n", signature, NULL) : g_strdup(body_str);
+               body = use_signature ? g_strconcat(body_str, "\n",
+                                                  MODEST_TEXT_UTILS_SIGNATURE_MARKER,
+                                                  "\n", signature, NULL) : g_strdup(body_str);
        } else {
        } else {
-               body = use_signature ? g_strconcat("\n--\n", signature, NULL) : g_strdup("");
+               body = use_signature ? g_strconcat("\n", MODEST_TEXT_UTILS_SIGNATURE_MARKER,
+                                                  "\n", signature, NULL) : g_strdup("");
        }
 
        }
 
-       msg = modest_tny_msg_new (to_str, from_str, cc_str, bcc_str, subject_str, body, NULL, NULL, NULL);
+       msg = modest_tny_msg_new (to_str, from_str, cc_str, bcc_str, subject_str, NULL, NULL, body, NULL, NULL, NULL);
        if (!msg) {
                g_printerr ("modest: failed to create new msg\n");
                goto cleanup;
        if (!msg) {
                g_printerr ("modest: failed to create new msg\n");
                goto cleanup;
@@ -842,7 +919,7 @@ modest_ui_actions_compose_msg(ModestWindow *win,
        /* This is destroyed by TODO. */
        total_size = 0;
        allowed_size = MODEST_MAX_ATTACHMENT_SIZE;
        /* This is destroyed by TODO. */
        total_size = 0;
        allowed_size = MODEST_MAX_ATTACHMENT_SIZE;
-       msg_win = modest_msg_edit_window_new (msg, account_name, FALSE);
+       msg_win = modest_msg_edit_window_new (msg, account_name, mailbox, FALSE);
 
        if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr(), msg_win, win)) {
                gtk_widget_destroy (GTK_WIDGET (msg_win));
 
        if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr(), msg_win, win)) {
                gtk_widget_destroy (GTK_WIDGET (msg_win));
@@ -852,16 +929,18 @@ modest_ui_actions_compose_msg(ModestWindow *win,
        gtk_widget_show_all (GTK_WIDGET (msg_win));
 
        while (attachments) {
        gtk_widget_show_all (GTK_WIDGET (msg_win));
 
        while (attachments) {
-               total_size +=
+               GnomeVFSFileSize att_size;
+               att_size =
                        modest_msg_edit_window_attach_file_one((ModestMsgEditWindow *)msg_win,
                                                               attachments->data, allowed_size);
                        modest_msg_edit_window_attach_file_one((ModestMsgEditWindow *)msg_win,
                                                               attachments->data, allowed_size);
+               total_size += att_size;
 
 
-               if (total_size > allowed_size) {
-                       g_warning ("%s: total size: %u",
-                                  __FUNCTION__, (unsigned int)total_size);
+               if (att_size > allowed_size) {
+                       g_debug ("%s: total size: %u",
+                                __FUNCTION__, (unsigned int)total_size);
                        break;
                }
                        break;
                }
-               allowed_size -= total_size;
+               allowed_size -= att_size;
 
                attachments = g_slist_next(attachments);
        }
 
                attachments = g_slist_next(attachments);
        }
@@ -871,7 +950,7 @@ cleanup:
        g_free (signature);
        g_free (body);
        g_free (account_name);
        g_free (signature);
        g_free (body);
        g_free (account_name);
-       if (account) 
+       if (account)
                g_object_unref (G_OBJECT(account));
        if (folder)
                g_object_unref (G_OBJECT(folder));
                g_object_unref (G_OBJECT(account));
        if (folder)
                g_object_unref (G_OBJECT(folder));
@@ -886,12 +965,12 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win)
        if (!modest_account_mgr_has_accounts (modest_runtime_get_account_mgr(), TRUE))
                if (!modest_ui_actions_run_account_setup_wizard (win))
                        return;
        if (!modest_account_mgr_has_accounts (modest_runtime_get_account_mgr(), TRUE))
                if (!modest_ui_actions_run_account_setup_wizard (win))
                        return;
-               
+
        modest_ui_actions_compose_msg(win, NULL, NULL, NULL, NULL, NULL, NULL, FALSE);
 }
 
 
        modest_ui_actions_compose_msg(win, NULL, NULL, NULL, NULL, NULL, NULL, FALSE);
 }
 
 
-gboolean 
+gboolean
 modest_ui_actions_msg_retrieval_check (ModestMailOperation *mail_op,
                                       TnyHeader *header,
                                       TnyMsg *msg)
 modest_ui_actions_msg_retrieval_check (ModestMailOperation *mail_op,
                                       TnyHeader *header,
                                       TnyMsg *msg)
@@ -918,23 +997,42 @@ modest_ui_actions_msg_retrieval_check (ModestMailOperation *mail_op,
                              error->code == TNY_SERVICE_ERROR_MESSAGE_NOT_AVAILABLE)) {
                        gchar *subject, *msg, *format = NULL;
                        TnyAccount *account;
                              error->code == TNY_SERVICE_ERROR_MESSAGE_NOT_AVAILABLE)) {
                        gchar *subject, *msg, *format = NULL;
                        TnyAccount *account;
-                       subject = tny_header_dup_subject (header);
+
+                       subject = (header) ? tny_header_dup_subject (header) : NULL;
                        if (!subject)
                                subject = g_strdup (_("mail_va_no_subject"));
 
                        account = modest_mail_operation_get_account (mail_op);
                        if (account) {
                        if (!subject)
                                subject = g_strdup (_("mail_va_no_subject"));
 
                        account = modest_mail_operation_get_account (mail_op);
                        if (account) {
-                               ModestProtocol *protocol;
-                               ModestProtocolType proto;
-                               proto = modest_tny_account_get_protocol_type (account);
-                               protocol = modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (), proto);
-                               if (protocol)
-                                 format = modest_protocol_get_translation (protocol, MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE, subject);
+                               ModestProtocolType proto = modest_tny_account_get_protocol_type (account);
+                               ModestProtocol *protocol = modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (), proto);
+
+                               if (protocol) {
+                                       if (tny_account_get_connection_status (account) ==
+                                           TNY_CONNECTION_STATUS_CONNECTED) {
+                                               if (header) {
+                                                       format = modest_protocol_get_translation (protocol,
+                                                                                                 MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE,
+                                                                                                 subject);
+                                               } else {
+                                                       format = modest_protocol_get_translation (protocol,
+                                                                                                 MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE_LOST_HEADER);
+                                               }
+                                       } else {
+                                               format = g_strdup_printf (_("mail_ib_backend_server_invalid"),
+                                                                         tny_account_get_hostname (account));
+                                       }
+                               }
                                g_object_unref (account);
                        }
 
                                g_object_unref (account);
                        }
 
-                       if (!format)
-                               format = g_strdup (_("emev_ni_ui_imap_message_not_available_in_server"));
+                       if (!format) {
+                               if (header) {
+                                       format = g_strdup (_("emev_ni_ui_imap_message_not_available_in_server"));
+                               } else {
+                                       format = g_strdup (_("emev_ni_ui_pop3_msg_recv_error"));
+                               }
+                       }
 
                        msg = g_strdup_printf (format, subject);
                        modest_platform_run_information_dialog (NULL, msg, FALSE);
 
                        msg = g_strdup_printf (format, subject);
                        modest_platform_run_information_dialog (NULL, msg, FALSE);
@@ -944,7 +1042,7 @@ modest_ui_actions_msg_retrieval_check (ModestMailOperation *mail_op,
                }
 
                /* Remove the header from the preregistered uids */
                }
 
                /* Remove the header from the preregistered uids */
-               modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (),  
+               modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (),
                                                     header);
 
                return FALSE;
                                                     header);
 
                return FALSE;
@@ -962,6 +1060,7 @@ typedef struct {
 typedef struct {
        GtkTreeModel *model;
        TnyHeader *header;
 typedef struct {
        GtkTreeModel *model;
        TnyHeader *header;
+       ModestWindow *caller_window;
        OpenMsgBannerInfo *banner_info;
        GtkTreeRowReference *rowref;
 } OpenMsgHelper;
        OpenMsgBannerInfo *banner_info;
        GtkTreeRowReference *rowref;
 } OpenMsgHelper;
@@ -974,13 +1073,12 @@ open_msg_banner_idle (gpointer userdata)
        gdk_threads_enter ();
        banner_info->idle_handler = 0;
        banner_info->banner = modest_platform_animation_banner (NULL, NULL, banner_info->message);
        gdk_threads_enter ();
        banner_info->idle_handler = 0;
        banner_info->banner = modest_platform_animation_banner (NULL, NULL, banner_info->message);
-       if (banner_info)
+       if (banner_info->banner)
                g_object_ref (banner_info->banner);
                g_object_ref (banner_info->banner);
-       
+
        gdk_threads_leave ();
 
        return FALSE;
        gdk_threads_leave ();
 
        return FALSE;
-       
 }
 
 static GtkWidget *
 }
 
 static GtkWidget *
@@ -988,11 +1086,12 @@ get_header_view_from_window (ModestWindow *window)
 {
        GtkWidget *header_view;
 
 {
        GtkWidget *header_view;
 
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (window)) {
                header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
        if (MODEST_IS_MAIN_WINDOW (window)) {
                header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
-#ifdef MODEST_TOOLKIT_HILDON2
-       } else if (MODEST_IS_HEADER_WINDOW (window)){
+#else
+       if (MODEST_IS_HEADER_WINDOW (window)){
                header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (window)));
 #endif
        } else {
                header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (window)));
 #endif
        } else {
@@ -1072,10 +1171,10 @@ get_info_from_header (TnyHeader *header, gboolean *is_draft, gboolean *can_open)
 }
 
 static void
 }
 
 static void
-open_msg_cb (ModestMailOperation *mail_op, 
-            TnyHeader *header,  
+open_msg_cb (ModestMailOperation *mail_op,
+            TnyHeader *header,
             gboolean canceled,
             gboolean canceled,
-            TnyMsg *msg, 
+            TnyMsg *msg,
             GError *err,
             gpointer user_data)
 {
             GError *err,
             gpointer user_data)
 {
@@ -1109,6 +1208,7 @@ open_msg_cb (ModestMailOperation *mail_op,
        if (open_in_editor) {
                ModestAccountMgr *mgr = modest_runtime_get_account_mgr ();
                gchar *from_header = NULL, *acc_name;
        if (open_in_editor) {
                ModestAccountMgr *mgr = modest_runtime_get_account_mgr ();
                gchar *from_header = NULL, *acc_name;
+               gchar *mailbox = NULL;
 
                from_header = tny_header_dup_from (header);
 
 
                from_header = tny_header_dup_from (header);
 
@@ -1122,22 +1222,28 @@ open_msg_cb (ModestMailOperation *mail_op,
                        }
                }
 
                        }
                }
 
-               acc_name = modest_utils_get_account_name_from_recipient (from_header);
+               acc_name = modest_utils_get_account_name_from_recipient (from_header, &mailbox);
                g_free (from_header);
                if (acc_name) {
                        g_free (account);
                        account = acc_name;
                }
 
                g_free (from_header);
                if (acc_name) {
                        g_free (account);
                        account = acc_name;
                }
 
-               win = modest_msg_edit_window_new (msg, account, TRUE);
+               win = modest_msg_edit_window_new (msg, account, mailbox, TRUE);
+               if (mailbox)
+                       g_free (mailbox);
        } else {
                gchar *uid = modest_tny_folder_get_header_unique_id (header);
        } else {
                gchar *uid = modest_tny_folder_get_header_unique_id (header);
+               const gchar *mailbox = NULL;
+
+               if (parent_win && MODEST_IS_WINDOW (parent_win))
+                       mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (parent_win));
 
                if (helper->rowref && helper->model) {
 
                if (helper->rowref && helper->model) {
-                       win = modest_msg_view_window_new_with_header_model (msg, account, (const gchar*) uid,
+                       win = modest_msg_view_window_new_with_header_model (msg, account, mailbox, (const gchar*) uid,
                                                                            helper->model, helper->rowref);
                } else {
                                                                            helper->model, helper->rowref);
                } else {
-                       win = modest_msg_view_window_new_for_attachment (msg, account, (const gchar*) uid);
+                       win = modest_msg_view_window_new_for_attachment (msg, account, mailbox, (const gchar*) uid);
                }
                g_free (uid);
        }
                }
                g_free (uid);
        }
@@ -1152,10 +1258,12 @@ open_msg_cb (ModestMailOperation *mail_op,
                gtk_widget_show_all (GTK_WIDGET(win));
        }
 
                gtk_widget_show_all (GTK_WIDGET(win));
        }
 
+#ifndef MODEST_TOOLKIT_HILDON2
        /* Update toolbar dimming state */
        if (MODEST_IS_MAIN_WINDOW (parent_win)) {
                modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (parent_win));
        }
        /* Update toolbar dimming state */
        if (MODEST_IS_MAIN_WINDOW (parent_win)) {
                modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (parent_win));
        }
+#endif
 
 cleanup:
        /* Free */
 
 cleanup:
        /* Free */
@@ -1163,77 +1271,6 @@ cleanup:
        g_object_unref (parent_win);
 }
 
        g_object_unref (parent_win);
 }
 
-static gboolean
-is_memory_full_error (GError *error, ModestMailOperation *mail_op)
-{
-       gboolean enough_free_space = TRUE;
-       GnomeVFSURI *cache_dir_uri;
-       const gchar *cache_dir = NULL;
-       GnomeVFSFileSize free_space;
-       TnyAccountStore *acc_store;
-
-       acc_store = TNY_ACCOUNT_STORE (modest_runtime_get_account_store ());
-
-       /* Cache dir is different in case we're using an external storage (like MMC account) */
-       if (mail_op) {
-               TnyAccount *account = modest_mail_operation_get_account (mail_op);
-               if (account) {
-                       if (modest_tny_account_is_memory_card_account (account)) {
-                               cache_dir = g_getenv (MODEST_MMC1_VOLUMEPATH_ENV);
-                       }
-                       g_object_unref (account);
-               }
-       }
-
-       /* Get the default local cache dir */
-       if (!cache_dir)
-               cache_dir = tny_account_store_get_cache_dir (acc_store);
-
-       cache_dir_uri = gnome_vfs_uri_new (cache_dir);
-       if (cache_dir_uri) {
-               if (gnome_vfs_get_volume_free_space (cache_dir_uri, &free_space) == GNOME_VFS_OK) {
-                       if (free_space < MIN_FREE_SPACE)
-                               enough_free_space = FALSE;
-               }
-               gnome_vfs_uri_unref (cache_dir_uri);
-       }
-
-       if ((error->code == TNY_SYSTEM_ERROR_MEMORY ||
-            /* When asking for a mail and no space left on device
-               tinymail returns this error */
-            error->code == TNY_SERVICE_ERROR_MESSAGE_NOT_AVAILABLE ||
-            /* When the folder summary could not be read or
-               written */
-            error->code == TNY_IO_ERROR_WRITE ||
-            error->code == TNY_IO_ERROR_READ) && 
-           !enough_free_space) {
-               return TRUE;
-       } else {
-               return FALSE;
-       }
-}
-
-static gboolean
-check_memory_full_error (GtkWidget *parent_window, GError *err)
-{
-       if (err == NULL)
-               return FALSE;
-
-       if (is_memory_full_error (err, NULL))
-               modest_platform_information_banner (parent_window,
-                                                   NULL, _KR("cerm_device_memory_full"));
-       else if (err->code == TNY_SYSTEM_ERROR_MEMORY)
-               /* If the account was created in memory full
-                  conditions then tinymail won't be able to
-                  connect so it'll return this error code */
-               modest_platform_information_banner (parent_window,
-                                                   NULL, _("emev_ui_imap_inbox_select_error"));
-       else
-               return FALSE;
-
-       return TRUE;
-}
-
 void
 modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op,
                                                 gpointer user_data)
 void
 modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op,
                                                 gpointer user_data)
@@ -1249,9 +1286,12 @@ modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op,
        /* If the mail op has been cancelled then it's not an error:
           don't show any message */
        if (status != MODEST_MAIL_OPERATION_STATUS_CANCELED) {
        /* If the mail op has been cancelled then it's not an error:
           don't show any message */
        if (status != MODEST_MAIL_OPERATION_STATUS_CANCELED) {
-               if (is_memory_full_error ((GError *) error, mail_op)) {
-                       modest_platform_information_banner ((GtkWidget *) win,
-                                                           NULL, _KR("cerm_device_memory_full"));
+               TnyAccount *account = modest_mail_operation_get_account (mail_op);
+               if (modest_tny_account_store_is_disk_full_error (modest_runtime_get_account_store(),
+                                                                (GError *) error, account)) {
+                       gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
+                       modest_platform_information_banner ((GtkWidget *) win, NULL, msg);
+                       g_free (msg);
                } else if (error->code == TNY_SYSTEM_ERROR_MEMORY) {
                        modest_platform_information_banner ((GtkWidget *) win,
                                                            NULL, _("emev_ui_imap_inbox_select_error"));
                } else if (error->code == TNY_SYSTEM_ERROR_MEMORY) {
                        modest_platform_information_banner ((GtkWidget *) win,
                                                            NULL, _("emev_ui_imap_inbox_select_error"));
@@ -1260,9 +1300,11 @@ modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op,
                        modest_platform_information_banner ((GtkWidget *) win,
                                                            NULL, _CS ("sfil_ni_unable_to_open_file_not_found"));
                } else if (user_data) {
                        modest_platform_information_banner ((GtkWidget *) win,
                                                            NULL, _CS ("sfil_ni_unable_to_open_file_not_found"));
                } else if (user_data) {
-                       modest_platform_information_banner ((GtkWidget *) win, 
+                       modest_platform_information_banner ((GtkWidget *) win,
                                                            NULL, user_data);
                }
                                                            NULL, user_data);
                }
+               if (account)
+                       g_object_unref (account);
        }
 
        if (win)
        }
 
        if (win)
@@ -1282,14 +1324,14 @@ get_account_from_header_list (TnyList *headers)
                TnyIterator *iter = tny_list_create_iterator (headers);
                TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter));
                TnyFolder *folder = tny_header_get_folder (header);
                TnyIterator *iter = tny_list_create_iterator (headers);
                TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter));
                TnyFolder *folder = tny_header_get_folder (header);
-               
+
                if (!folder) {
                        g_object_unref (header);
                if (!folder) {
                        g_object_unref (header);
-                       
+
                        while (!tny_iterator_is_done (iter)) {
                                header = TNY_HEADER (tny_iterator_get_current (iter));
                                folder = tny_header_get_folder (header);
                        while (!tny_iterator_is_done (iter)) {
                                header = TNY_HEADER (tny_iterator_get_current (iter));
                                folder = tny_header_get_folder (header);
-                               if (folder) 
+                               if (folder)
                                        break;
                                g_object_unref (header);
                                header = NULL;
                                        break;
                                g_object_unref (header);
                                header = NULL;
@@ -1301,10 +1343,10 @@ get_account_from_header_list (TnyList *headers)
                        account = tny_folder_get_account (folder);
                        g_object_unref (folder);
                }
                        account = tny_folder_get_account (folder);
                        g_object_unref (folder);
                }
-               
+
                if (header)
                        g_object_unref (header);
                if (header)
                        g_object_unref (header);
-               
+
                g_object_unref (iter);
        }
        return account;
                g_object_unref (iter);
        }
        return account;
@@ -1317,7 +1359,7 @@ get_account_from_header (TnyHeader *header)
        TnyFolder *folder;
 
        folder = tny_header_get_folder (header);
        TnyFolder *folder;
 
        folder = tny_header_get_folder (header);
-               
+
        if (folder) {
                account = tny_folder_get_account (folder);
                g_object_unref (folder);
        if (folder) {
                account = tny_folder_get_account (folder);
                g_object_unref (folder);
@@ -1326,10 +1368,22 @@ get_account_from_header (TnyHeader *header)
 }
 
 static void
 }
 
 static void
+caller_win_destroyed (OpenMsgHelper *helper, GObject *object)
+{
+       if (helper->caller_window)
+               helper->caller_window = NULL;
+}
+
+static void
 open_msg_helper_destroyer (gpointer user_data)
 {
        OpenMsgHelper *helper = (OpenMsgHelper *) user_data;
 
 open_msg_helper_destroyer (gpointer user_data)
 {
        OpenMsgHelper *helper = (OpenMsgHelper *) user_data;
 
+       if (helper->caller_window) {
+               g_object_weak_unref ((GObject *) helper->caller_window, (GWeakNotify) caller_win_destroyed, helper);
+               helper->caller_window = NULL;
+       }
+
        if (helper->banner_info) {
                g_free (helper->banner_info->message);
                if (helper->banner_info->idle_handler > 0) {
        if (helper->banner_info) {
                g_free (helper->banner_info->message);
                if (helper->banner_info->idle_handler > 0) {
@@ -1351,14 +1405,14 @@ open_msg_helper_destroyer (gpointer user_data)
 }
 
 static void
 }
 
 static void
-open_msg_performer(gboolean canceled, 
+open_msg_performer(gboolean canceled,
                    GError *err,
                    GtkWindow *parent_window,
                    TnyAccount *account,
                    gpointer user_data)
 {
        ModestMailOperation *mail_op = NULL;
                    GError *err,
                    GtkWindow *parent_window,
                    TnyAccount *account,
                    gpointer user_data)
 {
        ModestMailOperation *mail_op = NULL;
-       gchar *error_msg;
+       gchar *error_msg = NULL;
        ModestProtocolType proto;
        TnyConnectionStatus status;
        OpenMsgHelper *helper = NULL;
        ModestProtocolType proto;
        TnyConnectionStatus status;
        OpenMsgHelper *helper = NULL;
@@ -1369,13 +1423,15 @@ open_msg_performer(gboolean canceled,
        helper = (OpenMsgHelper *) user_data;
 
        status = tny_account_get_connection_status (account);
        helper = (OpenMsgHelper *) user_data;
 
        status = tny_account_get_connection_status (account);
-       if (err || canceled) {
+       if (err || canceled || helper->caller_window == NULL) {
                modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (), helper->header);
                /* Free the helper */
                open_msg_helper_destroyer (helper);
 
                modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (), helper->header);
                /* Free the helper */
                open_msg_helper_destroyer (helper);
 
-               /* In memory full conditions we could get this error here */
-               check_memory_full_error ((GtkWidget *) parent_window, err);
+               /* In disk full conditions we could get this error here */
+               modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+                                                               (GtkWidget *) parent_window, err,
+                                                               account, NULL);
 
                goto clean;
        }
 
                goto clean;
        }
@@ -1402,7 +1458,7 @@ open_msg_performer(gboolean canceled,
        gboolean show_open_draft = FALSE;
        if (modest_protocol_registry_protocol_type_has_tag (protocol_registry,
                                                            proto,
        gboolean show_open_draft = FALSE;
        if (modest_protocol_registry_protocol_type_has_tag (protocol_registry,
                                                            proto,
-                                                           MODEST_PROTOCOL_REGISTRY_LOCAL_STORE_PROTOCOLS)) { 
+                                                           MODEST_PROTOCOL_REGISTRY_LOCAL_STORE_PROTOCOLS)) {
                TnyFolder *folder;
                TnyFolderType folder_type;
 
                TnyFolder *folder;
                TnyFolderType folder_type;
 
@@ -1433,8 +1489,10 @@ open_msg_performer(gboolean canceled,
                header_view = get_header_view_from_window (MODEST_WINDOW (parent_window));
                uid = modest_tny_folder_get_header_unique_id (helper->header);
                if (header_view) {
                header_view = get_header_view_from_window (MODEST_WINDOW (parent_window));
                uid = modest_tny_folder_get_header_unique_id (helper->header);
                if (header_view) {
+                       const gchar *mailbox = NULL;
+                       mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (parent_window));
                        window = modest_msg_view_window_new_from_header_view 
                        window = modest_msg_view_window_new_from_header_view 
-                               (MODEST_HEADER_VIEW (header_view), account_name, uid, helper->rowref);
+                               (MODEST_HEADER_VIEW (header_view), account_name, mailbox, uid, helper->rowref);
                        if (window != NULL) {
                                if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr (),
                                                                        window, NULL)) {
                        if (window != NULL) {
                                if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr (),
                                                                        window, NULL)) {
@@ -1452,10 +1510,10 @@ open_msg_performer(gboolean canceled,
        g_free (account_name);
 #endif
        /* Create the mail operation */
        g_free (account_name);
 #endif
        /* Create the mail operation */
-       mail_op = 
+       mail_op =
                modest_mail_operation_new_with_error_handling ((GObject *) parent_window,
                                                               modest_ui_actions_disk_operations_error_handler,
                modest_mail_operation_new_with_error_handling ((GObject *) parent_window,
                                                               modest_ui_actions_disk_operations_error_handler,
-                                                              error_msg, g_free);
+                                                              g_strdup (error_msg), g_free);
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                         mail_op);
 
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                         mail_op);
 
@@ -1465,7 +1523,7 @@ open_msg_performer(gboolean canceled,
                helper->banner_info = g_slice_new (OpenMsgBannerInfo);
                helper->banner_info->message = g_strdup (_("mail_ib_opening_draft_message"));
                helper->banner_info->banner = NULL;
                helper->banner_info = g_slice_new (OpenMsgBannerInfo);
                helper->banner_info->message = g_strdup (_("mail_ib_opening_draft_message"));
                helper->banner_info->banner = NULL;
-               helper->banner_info->idle_handler = g_timeout_add (500, open_msg_banner_idle, 
+               helper->banner_info->idle_handler = g_timeout_add (500, open_msg_banner_idle,
                                                                   helper->banner_info);
        }
 #endif
                                                                   helper->banner_info);
        }
 #endif
@@ -1483,6 +1541,8 @@ open_msg_performer(gboolean canceled,
 
        /* Frees */
  clean:
 
        /* Frees */
  clean:
+       if (error_msg)
+               g_free (error_msg);
        if (mail_op)
                g_object_unref (mail_op);
        g_object_unref (account);
        if (mail_op)
                g_object_unref (mail_op);
        g_object_unref (account);
@@ -1504,7 +1564,7 @@ open_msg_from_header (TnyHeader *header, GtkTreeRowReference *rowref, ModestWind
        OpenMsgHelper *helper;
        ModestWindow *window;
 
        OpenMsgHelper *helper;
        ModestWindow *window;
 
-       g_return_if_fail (header != NULL && rowref != NULL);
+       g_return_if_fail (header != NULL && rowref != NULL && gtk_tree_row_reference_valid (rowref));
 
        mgr = modest_runtime_get_window_mgr ();
 
 
        mgr = modest_runtime_get_window_mgr ();
 
@@ -1562,17 +1622,19 @@ open_msg_from_header (TnyHeader *header, GtkTreeRowReference *rowref, ModestWind
           (the user could switch between folders) */
        helper = g_slice_new (OpenMsgHelper);
        helper->model = g_object_ref (gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)));
           (the user could switch between folders) */
        helper = g_slice_new (OpenMsgHelper);
        helper->model = g_object_ref (gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)));
+       helper->caller_window = win;
+       g_object_weak_ref ((GObject *) helper->caller_window, (GWeakNotify) caller_win_destroyed, helper);
        helper->header = g_object_ref (header);
        helper->rowref = gtk_tree_row_reference_copy (rowref);
        helper->banner_info = NULL;
 
        /* Connect to the account and perform */
        if (!cached) {
        helper->header = g_object_ref (header);
        helper->rowref = gtk_tree_row_reference_copy (rowref);
        helper->banner_info = NULL;
 
        /* Connect to the account and perform */
        if (!cached) {
-               modest_platform_connect_and_perform ((GtkWindow *) win, TRUE, g_object_ref (account), 
+               modest_platform_connect_and_perform ((GtkWindow *) win, TRUE, g_object_ref (account),
                                                     open_msg_performer, helper);
        } else {
                /* Call directly the performer, do not need to connect */
                                                     open_msg_performer, helper);
        } else {
                /* Call directly the performer, do not need to connect */
-               open_msg_performer (FALSE, NULL, (GtkWindow *) win, 
+               open_msg_performer (FALSE, NULL, (GtkWindow *) win,
                                    g_object_ref (account), helper);
        }
 cleanup:
                                    g_object_ref (account), helper);
        }
 cleanup:
@@ -1588,7 +1650,7 @@ modest_ui_actions_on_open (GtkAction *action, ModestWindow *win)
        TnyHeader *header;
        gint headers_count;
        TnyIterator *iter;
        TnyHeader *header;
        gint headers_count;
        TnyIterator *iter;
-       
+
        /* we check for low-mem; in that case, show a warning, and don't allow
         * opening
         */
        /* we check for low-mem; in that case, show a warning, and don't allow
         * opening
         */
@@ -1634,28 +1696,30 @@ rf_helper_window_closed (gpointer data,
 }
 
 static ReplyForwardHelper*
 }
 
 static ReplyForwardHelper*
-create_reply_forward_helper (ReplyForwardAction action, 
+create_reply_forward_helper (ReplyForwardAction action,
                             ModestWindow *win,
                             guint reply_forward_type,
                             TnyHeader *header)
 {
        ReplyForwardHelper *rf_helper = NULL;
        const gchar *active_acc = modest_window_get_active_account (win);
                             ModestWindow *win,
                             guint reply_forward_type,
                             TnyHeader *header)
 {
        ReplyForwardHelper *rf_helper = NULL;
        const gchar *active_acc = modest_window_get_active_account (win);
+       const gchar *active_mailbox = modest_window_get_active_mailbox (win);
 
        rf_helper = g_slice_new0 (ReplyForwardHelper);
        rf_helper->reply_forward_type = reply_forward_type;
        rf_helper->action = action;
        rf_helper->parent_window = (MODEST_IS_WINDOW (win)) ? GTK_WIDGET (win) : NULL;
        rf_helper->header = (header) ? g_object_ref (header) : NULL;
 
        rf_helper = g_slice_new0 (ReplyForwardHelper);
        rf_helper->reply_forward_type = reply_forward_type;
        rf_helper->action = action;
        rf_helper->parent_window = (MODEST_IS_WINDOW (win)) ? GTK_WIDGET (win) : NULL;
        rf_helper->header = (header) ? g_object_ref (header) : NULL;
-       rf_helper->account_name = (active_acc) ? 
+       rf_helper->account_name = (active_acc) ?
                g_strdup (active_acc) :
                modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());
                g_strdup (active_acc) :
                modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());
+       rf_helper->mailbox = g_strdup (active_mailbox);
 
        /* Note that window could be destroyed just AFTER calling
           register_window so we must ensure that this pointer does
           not hold invalid references */
        if (rf_helper->parent_window)
 
        /* Note that window could be destroyed just AFTER calling
           register_window so we must ensure that this pointer does
           not hold invalid references */
        if (rf_helper->parent_window)
-               g_object_weak_ref (G_OBJECT (rf_helper->parent_window), 
+               g_object_weak_ref (G_OBJECT (rf_helper->parent_window),
                                   rf_helper_window_closed, rf_helper);
 
        return rf_helper;
                                   rf_helper_window_closed, rf_helper);
 
        return rf_helper;
@@ -1668,17 +1732,18 @@ free_reply_forward_helper (gpointer data)
 
        helper = (ReplyForwardHelper *) data;
        g_free (helper->account_name);
 
        helper = (ReplyForwardHelper *) data;
        g_free (helper->account_name);
+       g_free (helper->mailbox);
        if (helper->header)
                g_object_unref (helper->header);
        if (helper->header)
                g_object_unref (helper->header);
-       if (helper->parent_window) 
-               g_object_weak_unref (G_OBJECT (helper->parent_window), 
+       if (helper->parent_window)
+               g_object_weak_unref (G_OBJECT (helper->parent_window),
                                     rf_helper_window_closed, helper);
        g_slice_free (ReplyForwardHelper, helper);
 }
 
 static void
                                     rf_helper_window_closed, helper);
        g_slice_free (ReplyForwardHelper, helper);
 }
 
 static void
-reply_forward_cb (ModestMailOperation *mail_op,  
-                 TnyHeader *header, 
+reply_forward_cb (ModestMailOperation *mail_op,
+                 TnyHeader *header,
                  gboolean canceled,
                  TnyMsg *msg,
                  GError *err,
                  gboolean canceled,
                  TnyMsg *msg,
                  GError *err,
@@ -1693,6 +1758,7 @@ reply_forward_cb (ModestMailOperation *mail_op,
        ModestWindowMgr *mgr = NULL;
        gchar *signature = NULL;
        gboolean use_signature;
        ModestWindowMgr *mgr = NULL;
        gchar *signature = NULL;
        gboolean use_signature;
+       gchar *recipient;
 
        /* If there was any error. The mail operation could be NULL,
           this means that we already have the message downloaded and
 
        /* If there was any error. The mail operation could be NULL,
           this means that we already have the message downloaded and
@@ -1702,31 +1768,40 @@ reply_forward_cb (ModestMailOperation *mail_op,
                goto cleanup;
 
        from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(),
                goto cleanup;
 
        from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(),
-                                                  rf_helper->account_name);
-       signature = modest_account_mgr_get_signature (modest_runtime_get_account_mgr(), 
-                                                     rf_helper->account_name, 
-                                                     &use_signature);
+                                                  rf_helper->account_name, rf_helper->mailbox);
+       recipient = modest_text_utils_get_email_address (from);
+       signature = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr(), 
+                                                                    recipient, 
+                                                                    &use_signature);
+       g_free (recipient);
 
        /* Create reply mail */
        switch (rf_helper->action) {
 
        /* Create reply mail */
        switch (rf_helper->action) {
+               /* Use the msg_header to ensure that we have all the
+                  information. The summary can lack some data */
+               TnyHeader *msg_header;
        case ACTION_REPLY:
        case ACTION_REPLY:
-               new_msg = 
-                       modest_tny_msg_create_reply_msg (msg, header, from, 
+               msg_header = tny_msg_get_header (msg);
+               new_msg =
+                       modest_tny_msg_create_reply_msg (msg, msg_header, from,
                                                         (use_signature) ? signature : NULL,
                                                         rf_helper->reply_forward_type,
                                                         MODEST_TNY_MSG_REPLY_MODE_SENDER);
                                                         (use_signature) ? signature : NULL,
                                                         rf_helper->reply_forward_type,
                                                         MODEST_TNY_MSG_REPLY_MODE_SENDER);
+               g_object_unref (msg_header);
                break;
        case ACTION_REPLY_TO_ALL:
                break;
        case ACTION_REPLY_TO_ALL:
-               new_msg = 
-                       modest_tny_msg_create_reply_msg (msg, header, from, 
-                                                        (use_signature) ? signature : NULL, 
+               msg_header = tny_msg_get_header (msg);
+               new_msg =
+                       modest_tny_msg_create_reply_msg (msg, msg_header, from,
+                                                        (use_signature) ? signature : NULL,
                                                         rf_helper->reply_forward_type,
                                                         MODEST_TNY_MSG_REPLY_MODE_ALL);
                edit_type = MODEST_EDIT_TYPE_REPLY;
                                                         rf_helper->reply_forward_type,
                                                         MODEST_TNY_MSG_REPLY_MODE_ALL);
                edit_type = MODEST_EDIT_TYPE_REPLY;
+               g_object_unref (msg_header);
                break;
        case ACTION_FORWARD:
                break;
        case ACTION_FORWARD:
-               new_msg = 
-                       modest_tny_msg_create_forward_msg (msg, from, (use_signature) ? signature : NULL, 
+               new_msg =
+                       modest_tny_msg_create_forward_msg (msg, from, (use_signature) ? signature : NULL,
                                                           rf_helper->reply_forward_type);
                edit_type = MODEST_EDIT_TYPE_FORWARD;
                break;
                                                           rf_helper->reply_forward_type);
                edit_type = MODEST_EDIT_TYPE_FORWARD;
                break;
@@ -1754,7 +1829,7 @@ reply_forward_cb (ModestMailOperation *mail_op,
        }
 
        /* Create and register the windows */
        }
 
        /* Create and register the windows */
-       msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name, FALSE);
+       msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name, rf_helper->mailbox, FALSE);
        mgr = modest_runtime_get_window_mgr ();
        modest_window_mgr_register_window (mgr, msg_win, (ModestWindow *) rf_helper->parent_window);
 
        mgr = modest_runtime_get_window_mgr ();
        modest_window_mgr_register_window (mgr, msg_win, (ModestWindow *) rf_helper->parent_window);
 
@@ -1836,10 +1911,10 @@ connect_to_get_msg (ModestWindow *win,
 }
 
 static void
 }
 
 static void
-reply_forward_performer (gboolean canceled, 
+reply_forward_performer (gboolean canceled,
                         GError *err,
                         GError *err,
-                        GtkWindow *parent_window, 
-                        TnyAccount *account, 
+                        GtkWindow *parent_window,
+                        TnyAccount *account,
                         gpointer user_data)
 {
        ReplyForwardHelper *rf_helper = NULL;
                         gpointer user_data)
 {
        ReplyForwardHelper *rf_helper = NULL;
@@ -1873,7 +1948,7 @@ reply_forward (ReplyForwardAction action, ModestWindow *win)
        ReplyForwardHelper *rf_helper = NULL;
        guint reply_forward_type;
 
        ReplyForwardHelper *rf_helper = NULL;
        guint reply_forward_type;
 
-       g_return_if_fail (MODEST_IS_WINDOW(win));
+       g_return_if_fail (win && MODEST_IS_WINDOW(win));
 
        /* we check for low-mem; in that case, show a warning, and don't allow
         * reply/forward (because it could potentially require a lot of memory */
 
        /* we check for low-mem; in that case, show a warning, and don't allow
         * reply/forward (because it could potentially require a lot of memory */
@@ -1975,15 +2050,15 @@ reply_forward (ReplyForwardAction action, ModestWindow *win)
 
                        if (download) {
                                /* Create helper */
 
                        if (download) {
                                /* Create helper */
-                               rf_helper = create_reply_forward_helper (action, win, 
+                               rf_helper = create_reply_forward_helper (action, win,
                                                                         reply_forward_type, header);
                                if (uncached_msgs > 0) {
                                                                         reply_forward_type, header);
                                if (uncached_msgs > 0) {
-                                       modest_platform_connect_and_perform (GTK_WINDOW (win), 
-                                                                            TRUE, account, 
-                                                                            reply_forward_performer, 
+                                       modest_platform_connect_and_perform (GTK_WINDOW (win),
+                                                                            TRUE, account,
+                                                                            reply_forward_performer,
                                                                             rf_helper);
                                } else {
                                                                             rf_helper);
                                } else {
-                                       reply_forward_performer (FALSE, NULL, GTK_WINDOW (win), 
+                                       reply_forward_performer (FALSE, NULL, GTK_WINDOW (win),
                                                                 account, rf_helper);
                                }
                        }
                                                                 account, rf_helper);
                                }
                        }
@@ -1993,7 +2068,7 @@ reply_forward (ReplyForwardAction action, ModestWindow *win)
                        if (folder)
                                g_object_unref (folder);
                } else {
                        if (folder)
                                g_object_unref (folder);
                } else {
-                       reply_forward_cb (NULL, header, FALSE, NULL, NULL, rf_helper);
+                       reply_forward_cb (NULL, header, FALSE, NULL, NULL, NULL);
                }
                /* Frees */
                g_object_unref (header_list);
                }
                /* Frees */
                g_object_unref (header_list);
@@ -2025,10 +2100,11 @@ modest_ui_actions_on_reply_all (GtkAction *action, ModestWindow *win)
        reply_forward (ACTION_REPLY_TO_ALL, win);
 }
 
        reply_forward (ACTION_REPLY_TO_ALL, win);
 }
 
-void 
-modest_ui_actions_on_next (GtkAction *action, 
+void
+modest_ui_actions_on_next (GtkAction *action,
                           ModestWindow *window)
 {
                           ModestWindow *window)
 {
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (window)) {
                GtkWidget *header_view;
 
        if (MODEST_IS_MAIN_WINDOW (window)) {
                GtkWidget *header_view;
 
@@ -2037,51 +2113,57 @@ modest_ui_actions_on_next (GtkAction *action,
                                MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
                if (!header_view)
                        return;
                                MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
                if (!header_view)
                        return;
-       
+
                modest_header_view_select_next (
                modest_header_view_select_next (
-                               MODEST_HEADER_VIEW(header_view)); 
-       } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
+                               MODEST_HEADER_VIEW(header_view));
+#else
+       if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
                modest_msg_view_window_select_next_message (
                                MODEST_MSG_VIEW_WINDOW (window));
                modest_msg_view_window_select_next_message (
                                MODEST_MSG_VIEW_WINDOW (window));
+#endif
        } else {
                g_return_if_reached ();
        }
 }
 
        } else {
                g_return_if_reached ();
        }
 }
 
-void 
-modest_ui_actions_on_prev (GtkAction *action, 
+void
+modest_ui_actions_on_prev (GtkAction *action,
                           ModestWindow *window)
 {
        g_return_if_fail (MODEST_IS_WINDOW(window));
 
                           ModestWindow *window)
 {
        g_return_if_fail (MODEST_IS_WINDOW(window));
 
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (window)) {
                GtkWidget *header_view;
                header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(window),
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
                if (!header_view)
                        return;
        if (MODEST_IS_MAIN_WINDOW (window)) {
                GtkWidget *header_view;
                header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(window),
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
                if (!header_view)
                        return;
-               
-               modest_header_view_select_prev (MODEST_HEADER_VIEW(header_view)); 
-       } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
+
+               modest_header_view_select_prev (MODEST_HEADER_VIEW(header_view));
+#else
+       if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
                modest_msg_view_window_select_previous_message (MODEST_MSG_VIEW_WINDOW (window));
                modest_msg_view_window_select_previous_message (MODEST_MSG_VIEW_WINDOW (window));
+#endif
        } else {
                g_return_if_reached ();
        }
 }
 
        } else {
                g_return_if_reached ();
        }
 }
 
-void 
-modest_ui_actions_on_sort (GtkAction *action, 
+void
+modest_ui_actions_on_sort (GtkAction *action,
                           ModestWindow *window)
 {
        GtkWidget *header_view = NULL;
 
        g_return_if_fail (MODEST_IS_WINDOW(window));
 
                           ModestWindow *window)
 {
        GtkWidget *header_view = NULL;
 
        g_return_if_fail (MODEST_IS_WINDOW(window));
 
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (window)) {
                header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(window),
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
        if (MODEST_IS_MAIN_WINDOW (window)) {
                header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(window),
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
-#ifdef MODEST_TOOLKIT_HILDON2
-       } else if (MODEST_IS_HEADER_WINDOW (window)) {
+#else
+       if (MODEST_IS_HEADER_WINDOW (window)) {
                header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (window)));
 #endif
        }
                header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (window)));
 #endif
        }
@@ -2097,49 +2179,126 @@ modest_ui_actions_on_sort (GtkAction *action,
 }
 
 static void
 }
 
 static void
-new_messages_arrived (ModestMailOperation *self, 
-                     TnyList *new_headers,
-                     gpointer user_data)
+sync_folder_cb (ModestMailOperation *mail_op,
+               TnyFolder *folder,
+               gpointer user_data)
 {
 {
-       GObject *source;
+       ModestHeaderView *header_view = (ModestHeaderView *) user_data;
+
+       if (modest_mail_operation_get_status (mail_op) == MODEST_MAIL_OPERATION_STATUS_SUCCESS) {
+               ModestWindow *parent = (ModestWindow *) modest_mail_operation_get_source (mail_op);
+
+               /* We must clear first, because otherwise set_folder will ignore */
+               /*    the change as the folders are the same */
+               modest_header_view_clear (header_view);
+               modest_header_view_set_folder (header_view, folder, TRUE, parent, NULL, NULL);
+
+               g_object_unref (parent);
+       }
+
+       g_object_unref (header_view);
+}
+
+static gboolean
+idle_refresh_folder (gpointer source)
+{
+       ModestHeaderView *header_view = NULL;
+
+       /* If the window still exists */
+       if (!GTK_IS_WIDGET (source) ||
+           !GTK_WIDGET_VISIBLE (source))
+               return FALSE;
+
+       /* Refresh the current view */
+#ifdef MODEST_TOOLKIT_HILDON2
+       if (MODEST_IS_HEADER_WINDOW (source))
+               header_view = modest_header_window_get_header_view ((ModestHeaderWindow *) source);
+#else
+       if (MODEST_IS_MAIN_WINDOW (source))
+               header_view = MODEST_HEADER_VIEW (modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (source),
+                                                                                      MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW));
+#endif
+       if (header_view) {
+               TnyFolder *folder = modest_header_view_get_folder (header_view);
+               if (folder) {
+                       /* Sync the folder status */
+                       ModestMailOperation *mail_op = modest_mail_operation_new (source);
+                       modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
+                       modest_mail_operation_sync_folder (mail_op, folder, FALSE, sync_folder_cb, g_object_ref (header_view));
+                       g_object_unref (folder);
+                       g_object_unref (mail_op);
+               }
+       }
+
+       return FALSE;
+}
+
+static void
+update_account_cb (ModestMailOperation *self,
+                  TnyList *new_headers,
+                  gpointer user_data)
+{
+       ModestWindow *top;
        gboolean show_visual_notifications;
 
        gboolean show_visual_notifications;
 
-       source = modest_mail_operation_get_source (self);
-       show_visual_notifications = (source) ? FALSE : TRUE;
-       if (source)
-               g_object_unref (source);
+       top = modest_window_mgr_get_current_top (modest_runtime_get_window_mgr ());
+       show_visual_notifications = (top) ? FALSE : TRUE;
 
        /* Notify new messages have been downloaded. If the
           send&receive was invoked by the user then do not show any
           visual notification, only play a sound and activate the LED
           (for the Maemo version) */
 
        /* Notify new messages have been downloaded. If the
           send&receive was invoked by the user then do not show any
           visual notification, only play a sound and activate the LED
           (for the Maemo version) */
-       if (TNY_IS_LIST(new_headers) && (tny_list_get_length (new_headers)) > 0)
-               modest_platform_on_new_headers_received (new_headers, 
-                                                        show_visual_notifications);
+       if (TNY_IS_LIST(new_headers) && (tny_list_get_length (new_headers)) > 0) {
+
+               /* We only notify about really new messages (not seen) we get */
+               TnyList *actually_new_list;
+               TnyIterator *iterator;
+               actually_new_list = TNY_LIST (tny_simple_list_new ());
+               for (iterator = tny_list_create_iterator (new_headers);
+                    !tny_iterator_is_done (iterator);
+                    tny_iterator_next (iterator)) {
+                       TnyHeader *header;
+                       TnyHeaderFlags flags;
+                       header = TNY_HEADER (tny_iterator_get_current (iterator));
+                       flags = tny_header_get_flags (header);
+
+                       if (!(flags & TNY_HEADER_FLAG_SEEN)) {
+                               /* Messages are ordered from most
+                                  recent to oldest. But we want to
+                                  show notifications starting from
+                                  the oldest message. That's why we
+                                  reverse the list */
+                               tny_list_prepend (actually_new_list, G_OBJECT (header));
+                       }
+                       g_object_unref (header);
+               }
+               g_object_unref (iterator);
 
 
-}
+               if (tny_list_get_length (actually_new_list) > 0) {
+                       GList *new_headers_list = NULL;
 
 
-gboolean
-retrieve_all_messages_cb (GObject *source,
-                         guint num_msgs,
-                         guint retrieve_limit)
-{
-       GtkWindow *window;
-       gchar *msg;
-       gint response;
+                       new_headers_list = modest_utils_create_notification_list_from_header_list (actually_new_list);
 
 
-       window = GTK_WINDOW (source);
-       msg = g_strdup_printf (_("mail_nc_msg_count_limit_exceeded"), 
-                              num_msgs, retrieve_limit);
+                       /* Send notifications */
+                       if (new_headers_list) {
+                               modest_platform_on_new_headers_received (new_headers_list,
+                                                                        show_visual_notifications);
+                               /* Free the list */
+                               modest_utils_free_notification_list (new_headers_list);
+                       }
+               }
+               g_object_unref (actually_new_list);
+       }
 
 
-       /* Ask the user if they want to retrieve all the messages */
-       response = 
-               modest_platform_run_confirmation_dialog_with_buttons (window, msg,
-                                                                     _("mcen_bd_get_all"),
-                                                                     _("mcen_bd_newest_only"));
-       /* Free and return */
-       g_free (msg);
-       return (response == GTK_RESPONSE_ACCEPT) ? TRUE : FALSE;
+       if (top) {
+               /* Refresh the current folder in an idle. We do this
+                  in order to avoid refresh cancelations if the
+                  currently viewed folder is the inbox */
+               g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+                                idle_refresh_folder,
+                                g_object_ref (top),
+                                g_object_unref);
+       }
 }
 
 typedef struct {
 }
 
 typedef struct {
@@ -2152,10 +2311,10 @@ typedef struct {
 } SendReceiveInfo;
 
 static void
 } SendReceiveInfo;
 
 static void
-do_send_receive_performer (gboolean canceled, 
+do_send_receive_performer (gboolean canceled,
                           GError *err,
                           GError *err,
-                          GtkWindow *parent_window, 
-                          TnyAccount *account, 
+                          GtkWindow *parent_window,
+                          TnyAccount *account,
                           gpointer user_data)
 {
        SendReceiveInfo *info;
                           gpointer user_data)
 {
        SendReceiveInfo *info;
@@ -2163,8 +2322,10 @@ do_send_receive_performer (gboolean canceled,
        info = (SendReceiveInfo *) user_data;
 
        if (err || canceled) {
        info = (SendReceiveInfo *) user_data;
 
        if (err || canceled) {
-               /* In memory full conditions we could get this error here */
-               check_memory_full_error ((GtkWidget *) parent_window, err);
+               /* In disk full conditions we could get this error here */
+               modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+                                                               (GtkWidget *) parent_window, err,
+                                                               account, NULL);
 
                if (info->mail_op) {
                        modest_mail_operation_queue_remove (modest_runtime_get_mail_operation_queue (),
 
                if (info->mail_op) {
                        modest_mail_operation_queue_remove (modest_runtime_get_mail_operation_queue (),
@@ -2173,21 +2334,23 @@ do_send_receive_performer (gboolean canceled,
                goto clean;
        }
 
                goto clean;
        }
 
-       /* Set send/receive operation in progress */    
+#ifndef MODEST_TOOLKIT_HILDON2
+       /* Set send/receive operation in progress */
        if (info->win && MODEST_IS_MAIN_WINDOW (info->win)) {
                modest_main_window_notify_send_receive_initied (MODEST_MAIN_WINDOW (info->win));
        }
 
        if (info->win && MODEST_IS_MAIN_WINDOW (info->win))
        if (info->win && MODEST_IS_MAIN_WINDOW (info->win)) {
                modest_main_window_notify_send_receive_initied (MODEST_MAIN_WINDOW (info->win));
        }
 
        if (info->win && MODEST_IS_MAIN_WINDOW (info->win))
-               g_signal_connect (G_OBJECT (info->mail_op), "operation-finished", 
-                                 G_CALLBACK (on_send_receive_finished), 
+               g_signal_connect (G_OBJECT (info->mail_op), "operation-finished",
+                                 G_CALLBACK (on_send_receive_finished),
                                  info->win);
                                  info->win);
+#endif
 
        /* Send & receive. */
 
        /* Send & receive. */
-       modest_mail_operation_update_account (info->mail_op, info->account_name, info->poke_status, info->interactive,
-                                             (info->win) ? retrieve_all_messages_cb : NULL, 
-                                             new_messages_arrived, info->win);
-       
+       modest_mail_operation_update_account (info->mail_op, info->account_name,
+                                             info->poke_status, info->interactive,
+                                             update_account_cb, info->win);
+
  clean:
        /* Frees */
        if (info->mail_op)
  clean:
        /* Frees */
        if (info->mail_op)
@@ -2208,7 +2371,7 @@ do_send_receive_performer (gboolean canceled,
  * be more flexible.
  */
 void
  * be more flexible.
  */
 void
-modest_ui_actions_do_send_receive (const gchar *account_name, 
+modest_ui_actions_do_send_receive (const gchar *account_name,
                                   gboolean force_connection,
                                   gboolean poke_status,
                                   gboolean interactive,
                                   gboolean force_connection,
                                   gboolean poke_status,
                                   gboolean interactive,
@@ -2217,6 +2380,7 @@ modest_ui_actions_do_send_receive (const gchar *account_name,
        gchar *acc_name = NULL;
        SendReceiveInfo *info;
        ModestTnyAccountStore *acc_store;
        gchar *acc_name = NULL;
        SendReceiveInfo *info;
        ModestTnyAccountStore *acc_store;
+       TnyAccount *account;
 
        /* If no account name was provided then get the current account, and if
           there is no current account then pick the default one: */
 
        /* If no account name was provided then get the current account, and if
           there is no current account then pick the default one: */
@@ -2226,7 +2390,7 @@ modest_ui_actions_do_send_receive (const gchar *account_name,
                if (!acc_name)
                        acc_name  = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());
                if (!acc_name) {
                if (!acc_name)
                        acc_name  = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());
                if (!acc_name) {
-                       g_printerr ("modest: cannot get default account\n");
+                       modest_platform_information_banner (NULL, NULL, _("emev_ni_internal_error"));
                        return;
                }
        } else {
                        return;
                }
        } else {
@@ -2234,6 +2398,31 @@ modest_ui_actions_do_send_receive (const gchar *account_name,
        }
 
        acc_store = modest_runtime_get_account_store ();
        }
 
        acc_store = modest_runtime_get_account_store ();
+       account = modest_tny_account_store_get_server_account (acc_store, acc_name, TNY_ACCOUNT_TYPE_STORE);
+
+       if (!account) {
+               g_free (acc_name);
+               modest_platform_information_banner (NULL, NULL, _("emev_ni_internal_error"));
+               return;
+       }
+
+       /* Do not automatically refresh accounts that are flagged as
+          NO_AUTO_UPDATE. This could be useful for accounts that
+          handle their own update times */
+       if (!interactive) {
+               ModestProtocolType proto = modest_tny_account_get_protocol_type (account);
+               if (proto != MODEST_PROTOCOL_REGISTRY_TYPE_INVALID) {
+                       const gchar *tag = MODEST_PROTOCOL_REGISTRY_NO_AUTO_UPDATE_PROTOCOLS;
+                       ModestProtocolRegistry *registry = modest_runtime_get_protocol_registry ();
+
+                       if (modest_protocol_registry_protocol_type_has_tag (registry, proto, tag)) {
+                               g_debug ("%s no auto update allowed for account %s", __FUNCTION__, account_name);
+                               g_object_unref (account);
+                               g_free (acc_name);
+                               return;
+                       }
+               }
+       }
 
        /* Create the info for the connect and perform */
        info = g_slice_new (SendReceiveInfo);
 
        /* Create the info for the connect and perform */
        info = g_slice_new (SendReceiveInfo);
@@ -2241,8 +2430,7 @@ modest_ui_actions_do_send_receive (const gchar *account_name,
        info->win = (win) ? g_object_ref (win) : NULL;
        info->poke_status = poke_status;
        info->interactive = interactive;
        info->win = (win) ? g_object_ref (win) : NULL;
        info->poke_status = poke_status;
        info->interactive = interactive;
-       info->account = modest_tny_account_store_get_server_account (acc_store, acc_name,
-                                                                    TNY_ACCOUNT_TYPE_STORE);
+       info->account = account;
        /* We need to create the operation here, because otherwise it
           could happen that the queue emits the queue-empty signal
           while we're trying to connect the account */
        /* We need to create the operation here, because otherwise it
           could happen that the queue emits the queue-empty signal
           while we're trying to connect the account */
@@ -2252,14 +2440,14 @@ modest_ui_actions_do_send_receive (const gchar *account_name,
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), info->mail_op);
 
        /* Invoke the connect and perform */
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), info->mail_op);
 
        /* Invoke the connect and perform */
-       modest_platform_connect_and_perform ((win) ? GTK_WINDOW (win) : NULL, 
-                                            force_connection, info->account, 
+       modest_platform_connect_and_perform ((win) ? GTK_WINDOW (win) : NULL,
+                                            force_connection, info->account,
                                             do_send_receive_performer, info);
 }
 
 
 static void
                                             do_send_receive_performer, info);
 }
 
 
 static void
-modest_ui_actions_do_cancel_send (const gchar *account_name,  
+modest_ui_actions_do_cancel_send (const gchar *account_name,
                                  ModestWindow *win)
 {
        TnyTransportAccount *transport_account;
                                  ModestWindow *win)
 {
        TnyTransportAccount *transport_account;
@@ -2292,20 +2480,20 @@ modest_ui_actions_do_cancel_send (const gchar *account_name,
        }
 
  frees:
        }
 
  frees:
-       if (transport_account != NULL) 
+       if (transport_account != NULL)
                g_object_unref (G_OBJECT (transport_account));
 }
 
 static void
                g_object_unref (G_OBJECT (transport_account));
 }
 
 static void
-modest_ui_actions_cancel_send_all (ModestWindow *win) 
+modest_ui_actions_cancel_send_all (ModestWindow *win)
 {
        GSList *account_names, *iter;
 
 {
        GSList *account_names, *iter;
 
-       account_names = modest_account_mgr_account_names (modest_runtime_get_account_mgr(), 
+       account_names = modest_account_mgr_account_names (modest_runtime_get_account_mgr(),
                                                          TRUE);
 
        iter = account_names;
                                                          TRUE);
 
        iter = account_names;
-       while (iter) {                  
+       while (iter) {
                modest_ui_actions_do_cancel_send ((const char*) iter->data, win);
                iter = g_slist_next (iter);
        }
                modest_ui_actions_do_cancel_send ((const char*) iter->data, win);
                iter = g_slist_next (iter);
        }
@@ -2319,14 +2507,14 @@ modest_ui_actions_cancel_send (GtkAction *action,  ModestWindow *win)
 
 {
        /* Check if accounts exist */
 
 {
        /* Check if accounts exist */
-       gboolean accounts_exist = 
+       gboolean accounts_exist =
                modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE);
                modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE);
-       
+
        /* If not, allow the user to create an account before trying to send/receive. */
        if (!accounts_exist)
                modest_ui_actions_on_accounts (NULL, win);
        /* If not, allow the user to create an account before trying to send/receive. */
        if (!accounts_exist)
                modest_ui_actions_on_accounts (NULL, win);
-       
-       /* Cancel all sending operaitons */     
+
+       /* Cancel all sending operaitons */
        modest_ui_actions_cancel_send_all (win);
 }
 
        modest_ui_actions_cancel_send_all (win);
 }
 
@@ -2335,20 +2523,20 @@ modest_ui_actions_cancel_send (GtkAction *action,  ModestWindow *win)
  * updates
  */
 void
  * updates
  */
 void
-modest_ui_actions_do_send_receive_all (ModestWindow *win, 
+modest_ui_actions_do_send_receive_all (ModestWindow *win,
                                       gboolean force_connection,
                                       gboolean poke_status,
                                       gboolean interactive)
 {
        GSList *account_names, *iter;
 
                                       gboolean force_connection,
                                       gboolean poke_status,
                                       gboolean interactive)
 {
        GSList *account_names, *iter;
 
-       account_names = modest_account_mgr_account_names (modest_runtime_get_account_mgr(), 
+       account_names = modest_account_mgr_account_names (modest_runtime_get_account_mgr(),
                                                          TRUE);
 
        iter = account_names;
                                                          TRUE);
 
        iter = account_names;
-       while (iter) {                  
-               modest_ui_actions_do_send_receive ((const char*) iter->data, 
-                                                  force_connection, 
+       while (iter) {
+               modest_ui_actions_do_send_receive ((const char*) iter->data,
+                                                  force_connection,
                                                   poke_status, interactive, win);
                iter = g_slist_next (iter);
        }
                                                   poke_status, interactive, win);
                iter = g_slist_next (iter);
        }
@@ -2368,31 +2556,32 @@ modest_ui_actions_on_send_receive (GtkAction *action, ModestWindow *win)
 
        accounts_exist =
                modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE);
 
        accounts_exist =
                modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE);
-       
+
        /* If not, allow the user to create an account before trying to send/receive. */
        if (!accounts_exist)
                modest_ui_actions_on_accounts (NULL, win);
        /* If not, allow the user to create an account before trying to send/receive. */
        if (!accounts_exist)
                modest_ui_actions_on_accounts (NULL, win);
-       
+
        /* Refresh the current folder. The if is always TRUE it's just an extra check */
        /* Refresh the current folder. The if is always TRUE it's just an extra check */
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (win)) {
                GtkWidget *folder_view;
                TnyFolderStore *folder_store;
 
        if (MODEST_IS_MAIN_WINDOW (win)) {
                GtkWidget *folder_view;
                TnyFolderStore *folder_store;
 
-               folder_view = 
-                       modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win), 
+               folder_view =
+                       modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
                                                             MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
                if (!folder_view)
                        return;
                                                             MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
                if (!folder_view)
                        return;
-               
+
                folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
                folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
-       
+
                if (folder_store)
                        g_object_unref (folder_store);
                /* Refresh the active account. Force the connection if needed
                   and poke the status of all folders */
                modest_ui_actions_do_send_receive (NULL, TRUE, TRUE, TRUE, win);
                if (folder_store)
                        g_object_unref (folder_store);
                /* Refresh the active account. Force the connection if needed
                   and poke the status of all folders */
                modest_ui_actions_do_send_receive (NULL, TRUE, TRUE, TRUE, win);
-#ifdef MODEST_TOOLKIT_HILDON2
-       } else if (MODEST_IS_ACCOUNTS_WINDOW (win)) {
+#else
+       if (MODEST_IS_ACCOUNTS_WINDOW (win)) {
                modest_ui_actions_do_send_receive_all (win, TRUE, TRUE, TRUE);
 #endif
        } else {
                modest_ui_actions_do_send_receive_all (win, TRUE, TRUE, TRUE);
 #endif
        } else {
@@ -2400,17 +2589,17 @@ modest_ui_actions_on_send_receive (GtkAction *action, ModestWindow *win)
                active_account = modest_window_get_active_account (MODEST_WINDOW (win));
 
                modest_ui_actions_do_send_receive (active_account, TRUE, TRUE, TRUE, win);
                active_account = modest_window_get_active_account (MODEST_WINDOW (win));
 
                modest_ui_actions_do_send_receive (active_account, TRUE, TRUE, TRUE, win);
-       } 
-       
-}
+       }
 
 
+}
 
 
+#ifndef MODEST_TOOLKIT_HILDON2
 void
 modest_ui_actions_toggle_header_list_view (GtkAction *action, ModestMainWindow *main_window)
 {
        ModestConf *conf;
        GtkWidget *header_view;
 void
 modest_ui_actions_toggle_header_list_view (GtkAction *action, ModestMainWindow *main_window)
 {
        ModestConf *conf;
        GtkWidget *header_view;
-       
+
        g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
 
        header_view = modest_main_window_get_child_widget (main_window,
        g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
 
        header_view = modest_main_window_get_child_widget (main_window,
@@ -2419,12 +2608,12 @@ modest_ui_actions_toggle_header_list_view (GtkAction *action, ModestMainWindow *
                return;
 
        conf = modest_runtime_get_conf ();
                return;
 
        conf = modest_runtime_get_conf ();
-       
+
        /* what is saved/restored is depending on the style; thus; we save with
         * old style, then update the style, and restore for this new style
         */
        modest_widget_memory_save (conf, G_OBJECT(header_view), MODEST_CONF_HEADER_VIEW_KEY);
        /* what is saved/restored is depending on the style; thus; we save with
         * old style, then update the style, and restore for this new style
         */
        modest_widget_memory_save (conf, G_OBJECT(header_view), MODEST_CONF_HEADER_VIEW_KEY);
-       
+
        if (modest_header_view_get_style
            (MODEST_HEADER_VIEW(header_view)) == MODEST_HEADER_VIEW_STYLE_DETAILS)
                modest_header_view_set_style (MODEST_HEADER_VIEW(header_view),
        if (modest_header_view_get_style
            (MODEST_HEADER_VIEW(header_view)) == MODEST_HEADER_VIEW_STYLE_DETAILS)
                modest_header_view_set_style (MODEST_HEADER_VIEW(header_view),
@@ -2437,21 +2626,20 @@ modest_ui_actions_toggle_header_list_view (GtkAction *action, ModestMainWindow *
                                      MODEST_CONF_HEADER_VIEW_KEY);
 }
 
                                      MODEST_CONF_HEADER_VIEW_KEY);
 }
 
-
-void 
-modest_ui_actions_on_header_selected (ModestHeaderView *header_view, 
+void
+modest_ui_actions_on_header_selected (ModestHeaderView *header_view,
                                      TnyHeader *header,
                                      ModestMainWindow *main_window)
 {
        g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
        g_return_if_fail (MODEST_IS_HEADER_VIEW (header_view));
                                      TnyHeader *header,
                                      ModestMainWindow *main_window)
 {
        g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
        g_return_if_fail (MODEST_IS_HEADER_VIEW (header_view));
-       
+
        /* in the case the folder is empty, show the empty folder message and focus
         * folder view */
        if (!header && gtk_widget_is_focus (GTK_WIDGET (header_view))) {
                if (modest_header_view_is_empty (header_view)) {
                        TnyFolder *folder = modest_header_view_get_folder (header_view);
        /* in the case the folder is empty, show the empty folder message and focus
         * folder view */
        if (!header && gtk_widget_is_focus (GTK_WIDGET (header_view))) {
                if (modest_header_view_is_empty (header_view)) {
                        TnyFolder *folder = modest_header_view_get_folder (header_view);
-                       GtkWidget *folder_view = 
+                       GtkWidget *folder_view =
                                modest_main_window_get_child_widget (main_window,
                                                                     MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
                        if (folder != NULL) {
                                modest_main_window_get_child_widget (main_window,
                                                                     MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
                        if (folder != NULL) {
@@ -2474,6 +2662,7 @@ modest_ui_actions_on_header_selected (ModestHeaderView *header_view,
        modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (main_window));
        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
 }
        modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (main_window));
        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
 }
+#endif
 
 void
 modest_ui_actions_on_header_activated (ModestHeaderView *header_view,
 
 void
 modest_ui_actions_on_header_activated (ModestHeaderView *header_view,
@@ -2481,7 +2670,6 @@ modest_ui_actions_on_header_activated (ModestHeaderView *header_view,
                                       GtkTreePath *path,
                                       ModestWindow *window)
 {
                                       GtkTreePath *path,
                                       ModestWindow *window)
 {
-       GtkWidget *open_widget;
        GtkTreeRowReference *rowref;
 
        g_return_if_fail (MODEST_IS_WINDOW(window));
        GtkTreeRowReference *rowref;
 
        g_return_if_fail (MODEST_IS_WINDOW(window));
@@ -2500,30 +2688,34 @@ modest_ui_actions_on_header_activated (ModestHeaderView *header_view,
        if (modest_platform_check_memory_low (MODEST_WINDOW(window), TRUE))
                return;
 
        if (modest_platform_check_memory_low (MODEST_WINDOW(window), TRUE))
                return;
 
+#ifndef MODEST_TOOLKIT_HILDON2
+       GtkWidget *open_widget;
        if (MODEST_IS_MAIN_WINDOW (window)) {
                modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
                open_widget = modest_window_get_action_widget (MODEST_WINDOW (window), "/MenuBar/EmailMenu/EmailOpenMenu");
                if (!GTK_WIDGET_IS_SENSITIVE (open_widget))
                        return;
        }
        if (MODEST_IS_MAIN_WINDOW (window)) {
                modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
                open_widget = modest_window_get_action_widget (MODEST_WINDOW (window), "/MenuBar/EmailMenu/EmailOpenMenu");
                if (!GTK_WIDGET_IS_SENSITIVE (open_widget))
                        return;
        }
+#endif
 
        rowref = gtk_tree_row_reference_new (gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)), path);
        open_msg_from_header (header, rowref, MODEST_WINDOW (window));
        gtk_tree_row_reference_free (rowref);
 }
 
 
        rowref = gtk_tree_row_reference_new (gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)), path);
        open_msg_from_header (header, rowref, MODEST_WINDOW (window));
        gtk_tree_row_reference_free (rowref);
 }
 
+#ifndef MODEST_TOOLKIT_HILDON2
 static void
 set_active_account_from_tny_account (TnyAccount *account,
                                     ModestWindow *window)
 {
        const gchar *server_acc_name = tny_account_get_id (account);
 static void
 set_active_account_from_tny_account (TnyAccount *account,
                                     ModestWindow *window)
 {
        const gchar *server_acc_name = tny_account_get_id (account);
-       
+
        /* We need the TnyAccount provided by the
           account store because that is the one that
           knows the name of the Modest account */
        /* We need the TnyAccount provided by the
           account store because that is the one that
           knows the name of the Modest account */
-       TnyAccount *modest_server_account = modest_server_account = 
+       TnyAccount *modest_server_account =
                modest_tny_account_store_get_tny_account_by (modest_runtime_get_account_store (),
                modest_tny_account_store_get_tny_account_by (modest_runtime_get_account_store (),
-                                                            MODEST_TNY_ACCOUNT_STORE_QUERY_ID, 
+                                                            MODEST_TNY_ACCOUNT_STORE_QUERY_ID,
                                                             server_acc_name);
        if (!modest_server_account) {
                g_warning ("%s: could not get tny account\n", __FUNCTION__);
                                                             server_acc_name);
        if (!modest_server_account) {
                g_warning ("%s: could not get tny account\n", __FUNCTION__);
@@ -2533,23 +2725,22 @@ set_active_account_from_tny_account (TnyAccount *account,
        /* Update active account, but only if it's not a pseudo-account */
        if ((!modest_tny_account_is_virtual_local_folders(modest_server_account)) &&
            (!modest_tny_account_is_memory_card_account(modest_server_account))) {
        /* Update active account, but only if it's not a pseudo-account */
        if ((!modest_tny_account_is_virtual_local_folders(modest_server_account)) &&
            (!modest_tny_account_is_memory_card_account(modest_server_account))) {
-               const gchar *modest_acc_name = 
+               const gchar *modest_acc_name =
                        modest_tny_account_get_parent_modest_account_name_for_server_account (modest_server_account);
                if (modest_acc_name)
                        modest_window_set_active_account (window, modest_acc_name);
        }
                        modest_tny_account_get_parent_modest_account_name_for_server_account (modest_server_account);
                if (modest_acc_name)
                        modest_window_set_active_account (window, modest_acc_name);
        }
-       
+
        g_object_unref (modest_server_account);
 }
 
        g_object_unref (modest_server_account);
 }
 
-
 static void
 static void
-folder_refreshed_cb (ModestMailOperation *mail_op, 
-                    TnyFolder *folder, 
+folder_refreshed_cb (ModestMailOperation *mail_op,
+                    TnyFolder *folder,
                     gpointer user_data)
 {
        ModestMainWindow *win = NULL;
                     gpointer user_data)
 {
        ModestMainWindow *win = NULL;
-       GtkWidget *folder_view;
+       GtkWidget *folder_view, *header_view;
        const GError *error;
 
        g_return_if_fail (TNY_IS_FOLDER (folder));
        const GError *error;
 
        g_return_if_fail (TNY_IS_FOLDER (folder));
@@ -2558,7 +2749,7 @@ folder_refreshed_cb (ModestMailOperation *mail_op,
 
        /* Check if the operation failed due to memory low conditions */
        error = modest_mail_operation_get_error (mail_op);
 
        /* Check if the operation failed due to memory low conditions */
        error = modest_mail_operation_get_error (mail_op);
-       if (error && error->domain == MODEST_MAIL_OPERATION_ERROR && 
+       if (error && error->domain == MODEST_MAIL_OPERATION_ERROR &&
            error->code == MODEST_MAIL_OPERATION_ERROR_LOW_MEMORY) {
                modest_platform_run_information_dialog (GTK_WINDOW (win),
                                                        _KR("memr_ib_operation_disabled"),
            error->code == MODEST_MAIL_OPERATION_ERROR_LOW_MEMORY) {
                modest_platform_run_information_dialog (GTK_WINDOW (win),
                                                        _KR("memr_ib_operation_disabled"),
@@ -2566,8 +2757,10 @@ folder_refreshed_cb (ModestMailOperation *mail_op,
                return;
        }
 
                return;
        }
 
-       folder_view = 
+       folder_view =
                modest_main_window_get_child_widget(win, MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
                modest_main_window_get_child_widget(win, MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+       header_view =
+               modest_main_window_get_child_widget(win, MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
 
        if (folder_view) {
                TnyFolderStore *current_folder;
 
        if (folder_view) {
                TnyFolderStore *current_folder;
@@ -2582,19 +2775,18 @@ folder_refreshed_cb (ModestMailOperation *mail_op,
        }
 
        /* Check if folder is empty and set headers view contents style */
        }
 
        /* Check if folder is empty and set headers view contents style */
-       if (tny_folder_get_all_count (folder) == 0)
+       if ((tny_folder_get_all_count (folder) == 0) ||
+           modest_header_view_is_empty (MODEST_HEADER_VIEW (header_view)))
                modest_main_window_set_contents_style (win,
                                                       MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY);
                modest_main_window_set_contents_style (win,
                                                       MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY);
-
 }
 
 }
 
-void 
+void
 modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
 modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
-                                              TnyFolderStore *folder_store, 
+                                              TnyFolderStore *folder_store,
                                               gboolean selected,
                                               ModestMainWindow *main_window)
 {
                                               gboolean selected,
                                               ModestMainWindow *main_window)
 {
-       ModestConf *conf;
        GtkWidget *header_view;
 
        g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
        GtkWidget *header_view;
 
        g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
@@ -2603,27 +2795,23 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
                                                          MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
        if (!header_view)
                return;
                                                          MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
        if (!header_view)
                return;
-       
-       conf = modest_runtime_get_conf ();
+
 
        if (TNY_IS_ACCOUNT (folder_store)) {
                if (selected) {
                        set_active_account_from_tny_account (TNY_ACCOUNT (folder_store), MODEST_WINDOW (main_window));
 
        if (TNY_IS_ACCOUNT (folder_store)) {
                if (selected) {
                        set_active_account_from_tny_account (TNY_ACCOUNT (folder_store), MODEST_WINDOW (main_window));
-                       
+
                        /* Show account details */
                        modest_main_window_set_contents_style (main_window, MODEST_MAIN_WINDOW_CONTENTS_STYLE_DETAILS);
                }
        } else {
                if (TNY_IS_FOLDER (folder_store) && selected) {
                        TnyAccount *account;
                        /* Show account details */
                        modest_main_window_set_contents_style (main_window, MODEST_MAIN_WINDOW_CONTENTS_STYLE_DETAILS);
                }
        } else {
                if (TNY_IS_FOLDER (folder_store) && selected) {
                        TnyAccount *account;
-                       const gchar *account_name = NULL;
 
                        /* Update the active account */
                        account = modest_tny_folder_get_account (TNY_FOLDER (folder_store));
                        if (account) {
                                set_active_account_from_tny_account (account, MODEST_WINDOW (main_window));
 
                        /* Update the active account */
                        account = modest_tny_folder_get_account (TNY_FOLDER (folder_store));
                        if (account) {
                                set_active_account_from_tny_account (account, MODEST_WINDOW (main_window));
-                               account_name = 
-                                       modest_tny_account_get_parent_modest_account_name_for_server_account (account);
                                g_object_unref (account);
                                account = NULL;
                        }
                                g_object_unref (account);
                                account = NULL;
                        }
@@ -2631,7 +2819,7 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
                        /* Set the header style by default, it could
                           be changed later by the refresh callback to
                           empty */
                        /* Set the header style by default, it could
                           be changed later by the refresh callback to
                           empty */
-                       modest_main_window_set_contents_style (main_window, 
+                       modest_main_window_set_contents_style (main_window,
                                                               MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
 
                        /* Set folder on header view. This function
                                                               MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
 
                        /* Set folder on header view. This function
@@ -2645,12 +2833,12 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
                                                       MODEST_WINDOW (main_window),
                                                       folder_refreshed_cb,
                                                       main_window);
                                                       MODEST_WINDOW (main_window),
                                                       folder_refreshed_cb,
                                                       main_window);
-                       
+
                        /* Restore configuration. We need to do this
                           *after* the set_folder because the widget
                           memory asks the header view about its
                           folder  */
                        /* Restore configuration. We need to do this
                           *after* the set_folder because the widget
                           memory asks the header view about its
                           folder  */
-                       modest_widget_memory_restore (modest_runtime_get_conf (), 
+                       modest_widget_memory_restore (modest_runtime_get_conf (),
                                                      G_OBJECT(header_view),
                                                      MODEST_CONF_HEADER_VIEW_KEY);
                } else {
                                                      G_OBJECT(header_view),
                                                      MODEST_CONF_HEADER_VIEW_KEY);
                } else {
@@ -2663,7 +2851,8 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
 #ifdef MODEST_TOOLKIT_GTK
                        if (modest_main_window_get_contents_style (main_window) ==
                            MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS)
 #ifdef MODEST_TOOLKIT_GTK
                        if (modest_main_window_get_contents_style (main_window) ==
                            MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS)
-                               modest_widget_memory_save (conf, G_OBJECT (header_view), 
+                               modest_widget_memory_save (modest_runtime_get_conf (), 
+                                                          G_OBJECT (header_view),
                                                           MODEST_CONF_HEADER_VIEW_KEY);
 #endif
                        modest_header_view_clear (MODEST_HEADER_VIEW(header_view));
                                                           MODEST_CONF_HEADER_VIEW_KEY);
 #endif
                        modest_header_view_clear (MODEST_HEADER_VIEW(header_view));
@@ -2674,8 +2863,9 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
        modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (main_window));
        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
 }
        modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (main_window));
        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
 }
+#endif
 
 
-void 
+void
 modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemType type,
                                     ModestWindow *win)
 {
 modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemType type,
                                     ModestWindow *win)
 {
@@ -2684,7 +2874,7 @@ modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemTyp
        gboolean online;
 
        item = (type == MODEST_ITEM_TYPE_FOLDER) ? "folder" : "message";
        gboolean online;
 
        item = (type == MODEST_ITEM_TYPE_FOLDER) ? "folder" : "message";
-       
+
        online = tny_device_is_online (modest_runtime_get_device());
 
        if (online) {
        online = tny_device_is_online (modest_runtime_get_device());
 
        if (online) {
@@ -2708,7 +2898,7 @@ modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemTyp
                                                      NULL);
                txt = g_strdup_printf (_("This %s is not available in offline mode.\n"
                                         "Do you want to get online?"), item);
                                                      NULL);
                txt = g_strdup_printf (_("This %s is not available in offline mode.\n"
                                         "Do you want to get online?"), item);
-               gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), 
+               gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox),
                                    gtk_label_new (txt), FALSE, FALSE, 0);
                gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
                g_free (txt);
                                    gtk_label_new (txt), FALSE, FALSE, 0);
                gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
                g_free (txt);
@@ -2726,8 +2916,8 @@ void
 modest_ui_actions_on_msg_link_hover (ModestMsgView *msgview, const gchar* link,
                                     ModestWindow *win)
 {
 modest_ui_actions_on_msg_link_hover (ModestMsgView *msgview, const gchar* link,
                                     ModestWindow *win)
 {
-       /* g_message ("%s %s", __FUNCTION__, link); */
-}      
+       /* g_debug ("%s %s", __FUNCTION__, link); */
+}
 
 
 void
 
 
 void
@@ -2762,11 +2952,11 @@ modest_ui_actions_on_msg_recpt_activated (ModestMsgView *msgview,
                                          const gchar *address,
                                          ModestWindow *win)
 {
                                          const gchar *address,
                                          ModestWindow *win)
 {
-       /* g_message ("%s %s", __FUNCTION__, address); */
+       /* g_debug ("%s %s", __FUNCTION__, address); */
 }
 
 static void
 }
 
 static void
-on_save_to_drafts_cb (ModestMailOperation *mail_op, 
+on_save_to_drafts_cb (ModestMailOperation *mail_op,
                      TnyMsg *saved_draft,
                      gpointer user_data)
 {
                      TnyMsg *saved_draft,
                      gpointer user_data)
 {
@@ -2801,13 +2991,11 @@ static gboolean
 enough_space_for_message (ModestMsgEditWindow *edit_window,
                          MsgData *data)
 {
 enough_space_for_message (ModestMsgEditWindow *edit_window,
                          MsgData *data)
 {
-       TnyAccountStore *acc_store;
        guint64 available_disk, expected_size;
        gint parts_count;
        guint64 parts_size;
 
        /* Check size */
        guint64 available_disk, expected_size;
        gint parts_count;
        guint64 parts_size;
 
        /* Check size */
-       acc_store = TNY_ACCOUNT_STORE (modest_runtime_get_account_store());
        available_disk = modest_utils_get_available_space (NULL);
        modest_msg_edit_window_get_parts_size (edit_window, &parts_count, &parts_size);
        expected_size = modest_tny_msg_estimate_size (data->plain_body,
        available_disk = modest_utils_get_available_space (NULL);
        modest_msg_edit_window_get_parts_size (edit_window, &parts_count, &parts_size);
        expected_size = modest_tny_msg_estimate_size (data->plain_body,
@@ -2815,12 +3003,13 @@ enough_space_for_message (ModestMsgEditWindow *edit_window,
                                                      parts_count,
                                                      parts_size);
 
                                                      parts_count,
                                                      parts_size);
 
-       /* Double check: memory full condition or message too big */
-       if (available_disk < MIN_FREE_SPACE || 
+       /* Double check: disk full condition or message too big */
+       if (available_disk < MODEST_TNY_ACCOUNT_STORE_MIN_FREE_SPACE ||
            expected_size > available_disk) {
            expected_size > available_disk) {
+               gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
+               modest_platform_information_banner (NULL, NULL, msg);
+               g_free (msg);
 
 
-               modest_platform_information_banner (NULL, NULL, 
-                                                   _KR("cerm_device_memory_full"));
                return FALSE;
        }
 
                return FALSE;
        }
 
@@ -2836,14 +3025,14 @@ enough_space_for_message (ModestMsgEditWindow *edit_window,
 
        /*
         * djcb: we also make sure that the attachments are smaller than the max size
 
        /*
         * djcb: we also make sure that the attachments are smaller than the max size
-        * this is for the case where we'd try to forward a message with attachments 
+        * this is for the case where we'd try to forward a message with attachments
         * bigger than our max allowed size, or sending an message from drafts which
         * somehow got past our checks when attaching.
         */
        if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) {
                modest_platform_run_information_dialog (
                        GTK_WINDOW(edit_window),
         * bigger than our max allowed size, or sending an message from drafts which
         * somehow got past our checks when attaching.
         */
        if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) {
                modest_platform_run_information_dialog (
                        GTK_WINDOW(edit_window),
-                       _KR("memr_ib_operation_disabled"),
+                       _("mail_ib_error_attachment_size"),
                        TRUE);
                return FALSE;
        }
                        TRUE);
                return FALSE;
        }
@@ -2857,13 +3046,12 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
        TnyTransportAccount *transport_account;
        ModestMailOperation *mail_operation;
        MsgData *data;
        TnyTransportAccount *transport_account;
        ModestMailOperation *mail_operation;
        MsgData *data;
-       gchar *account_name, *from;
+       gchar *account_name;
        ModestAccountMgr *account_mgr;
        gboolean had_error = FALSE;
        ModestAccountMgr *account_mgr;
        gboolean had_error = FALSE;
-       ModestMainWindow *win = NULL;
 
        g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), FALSE);
 
        g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), FALSE);
-       
+
        data = modest_msg_edit_window_get_msg_data (edit_window);
 
        /* Check size */
        data = modest_msg_edit_window_get_msg_data (edit_window);
 
        /* Check size */
@@ -2876,7 +3064,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
        account_mgr = modest_runtime_get_account_mgr();
        if (!account_name)
                account_name = g_strdup(modest_window_get_active_account (MODEST_WINDOW(edit_window)));
        account_mgr = modest_runtime_get_account_mgr();
        if (!account_name)
                account_name = g_strdup(modest_window_get_active_account (MODEST_WINDOW(edit_window)));
-       if (!account_name) 
+       if (!account_name)
                account_name = modest_account_mgr_get_default_account (account_mgr);
        if (!account_name) {
                g_printerr ("modest: no account found\n");
                account_name = modest_account_mgr_get_default_account (account_mgr);
        if (!account_name) {
                g_printerr ("modest: no account found\n");
@@ -2899,9 +3087,8 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
                modest_msg_edit_window_free_msg_data (edit_window, data);
                return FALSE;
        }
                modest_msg_edit_window_free_msg_data (edit_window, data);
                return FALSE;
        }
-       from = modest_account_mgr_get_from_string (account_mgr, account_name);
 
 
-       /* Create the mail operation */         
+       /* Create the mail operation */
        mail_operation = modest_mail_operation_new_with_error_handling (NULL, modest_ui_actions_disk_operations_error_handler,
                                                                        NULL, NULL);
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
        mail_operation = modest_mail_operation_new_with_error_handling (NULL, modest_ui_actions_disk_operations_error_handler,
                                                                        NULL, NULL);
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
@@ -2909,16 +3096,18 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
        modest_mail_operation_save_to_drafts (mail_operation,
                                              transport_account,
                                              data->draft_msg,
        modest_mail_operation_save_to_drafts (mail_operation,
                                              transport_account,
                                              data->draft_msg,
-                                             from,
+                                             data->from,
                                              data->to, 
                                              data->cc, 
                                              data->bcc,
                                              data->to, 
                                              data->cc, 
                                              data->bcc,
-                                             data->subject, 
-                                             data->plain_body, 
+                                             data->subject,
+                                             data->plain_body,
                                              data->html_body,
                                              data->attachments,
                                              data->images,
                                              data->priority_flags,
                                              data->html_body,
                                              data->attachments,
                                              data->images,
                                              data->priority_flags,
+                                             data->references,
+                                             data->in_reply_to,
                                              on_save_to_drafts_cb,
                                              g_object_ref(edit_window));
 
                                              on_save_to_drafts_cb,
                                              g_object_ref(edit_window));
 
@@ -2930,6 +3119,8 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
        modest_platform_information_banner (NULL, NULL, text);
        g_free (text);
 #else
        modest_platform_information_banner (NULL, NULL, text);
        g_free (text);
 #else
+       ModestMainWindow *win = NULL;
+
        /* Use the main window as the parent of the banner, if the
           main window does not exist it won't be shown, if the parent
           window exists then it's properly shown. We don't use the
        /* Use the main window as the parent of the banner, if the
           main window does not exist it won't be shown, if the parent
           window exists then it's properly shown. We don't use the
@@ -2946,13 +3137,13 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
        modest_msg_edit_window_set_modified (edit_window, FALSE);
 
        /* Frees */
        modest_msg_edit_window_set_modified (edit_window, FALSE);
 
        /* Frees */
-       g_free (from);
        g_free (account_name);
        g_object_unref (G_OBJECT (transport_account));
        g_object_unref (G_OBJECT (mail_operation));
 
        modest_msg_edit_window_free_msg_data (edit_window, data);
 
        g_free (account_name);
        g_object_unref (G_OBJECT (transport_account));
        g_object_unref (G_OBJECT (mail_operation));
 
        modest_msg_edit_window_free_msg_data (edit_window, data);
 
+#ifndef MODEST_TOOLKIT_HILDON2
        /* ** FIXME **
         * If the drafts folder is selected then make the header view
         * insensitive while the message is being saved to drafts
        /* ** FIXME **
         * If the drafts folder is selected then make the header view
         * insensitive while the message is being saved to drafts
@@ -2987,6 +3178,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
                        if (folder != NULL) g_object_unref(folder);
                }
        }
                        if (folder != NULL) g_object_unref(folder);
                }
        }
+#endif
 
        return !had_error;
 }
 
        return !had_error;
 }
@@ -3000,16 +3192,29 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
        MsgData *data;
        ModestAccountMgr *account_mgr;
        gchar *account_name;
        MsgData *data;
        ModestAccountMgr *account_mgr;
        gchar *account_name;
-       gchar *from;
        ModestMailOperation *mail_operation;
        ModestMailOperation *mail_operation;
+       gchar *recipients;
 
        g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), TRUE);
 
 
        g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), TRUE);
 
-       if (!modest_msg_edit_window_check_names (edit_window, TRUE))
+       /* Check names but do not automatically add them to addressbook */
+       if (!modest_msg_edit_window_check_names (edit_window, FALSE))
                return TRUE;
                return TRUE;
-       
+
        data = modest_msg_edit_window_get_msg_data (edit_window);
 
        data = modest_msg_edit_window_get_msg_data (edit_window);
 
+       recipients = g_strconcat (data->to?data->to:"", 
+                                 data->cc?data->cc:"",
+                                 data->bcc?data->bcc:"",
+                                 NULL);
+       if (recipients == NULL || recipients[0] == '\0') {
+               /* Empty subject -> no send */
+               g_free (recipients);
+               modest_msg_edit_window_free_msg_data (edit_window, data);
+               return FALSE;
+       }
+       g_free (recipients);
+
        /* Check size */
        if (!enough_space_for_message (edit_window, data)) {
                modest_msg_edit_window_free_msg_data (edit_window, data);
        /* Check size */
        if (!enough_space_for_message (edit_window, data)) {
                modest_msg_edit_window_free_msg_data (edit_window, data);
@@ -3021,9 +3226,9 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
        if (!account_name)
                account_name = g_strdup(modest_window_get_active_account (MODEST_WINDOW(edit_window)));
 
        if (!account_name)
                account_name = g_strdup(modest_window_get_active_account (MODEST_WINDOW(edit_window)));
 
-       if (!account_name) 
+       if (!account_name)
                account_name = modest_account_mgr_get_default_account (account_mgr);
                account_name = modest_account_mgr_get_default_account (account_mgr);
-               
+
        if (!account_name) {
                modest_msg_edit_window_free_msg_data (edit_window, data);
                /* Run account setup wizard */
        if (!account_name) {
                modest_msg_edit_window_free_msg_data (edit_window, data);
                /* Run account setup wizard */
@@ -3031,46 +3236,46 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
                        return TRUE;
                }
        }
                        return TRUE;
                }
        }
-       
+
        /* Get the currently-active transport account for this modest account: */
        /* Get the currently-active transport account for this modest account: */
-       if (strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) != 0) {
-               transport_account = 
+       if (account_name && strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) != 0) {
+               transport_account =
                        TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
                        TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
-                                             (modest_runtime_get_account_store (), 
+                                             (modest_runtime_get_account_store (),
                                               account_name, TNY_ACCOUNT_TYPE_TRANSPORT));
        }
                                               account_name, TNY_ACCOUNT_TYPE_TRANSPORT));
        }
-       
+
        if (!transport_account) {
                modest_msg_edit_window_free_msg_data (edit_window, data);
                /* Run account setup wizard */
                if (!modest_ui_actions_run_account_setup_wizard(MODEST_WINDOW(edit_window)))
                        return TRUE;
        }
        if (!transport_account) {
                modest_msg_edit_window_free_msg_data (edit_window, data);
                /* Run account setup wizard */
                if (!modest_ui_actions_run_account_setup_wizard(MODEST_WINDOW(edit_window)))
                        return TRUE;
        }
-       
+
 
        /* Create the mail operation */
 
        /* Create the mail operation */
-       from = modest_account_mgr_get_from_string (account_mgr, account_name);
        mail_operation = modest_mail_operation_new_with_error_handling (NULL, modest_ui_actions_disk_operations_error_handler, NULL, NULL);
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
 
        modest_mail_operation_send_new_mail (mail_operation,
                                             transport_account,
                                             data->draft_msg,
        mail_operation = modest_mail_operation_new_with_error_handling (NULL, modest_ui_actions_disk_operations_error_handler, NULL, NULL);
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
 
        modest_mail_operation_send_new_mail (mail_operation,
                                             transport_account,
                                             data->draft_msg,
-                                            from,
+                                            data->from,
                                             data->to,
                                             data->to,
-                                            data->cc, 
+                                            data->cc,
                                             data->bcc,
                                             data->bcc,
-                                            data->subject, 
-                                            data->plain_body, 
+                                            data->subject,
+                                            data->plain_body,
                                             data->html_body,
                                             data->attachments,
                                             data->images,
                                             data->html_body,
                                             data->attachments,
                                             data->images,
+                                            data->references,
+                                            data->in_reply_to,
                                             data->priority_flags);
 
        if (modest_mail_operation_get_status (mail_operation) == MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS)
                modest_platform_information_banner (NULL, NULL, _("mcen_ib_outbox_waiting_to_be_sent"));
 
                                             data->priority_flags);
 
        if (modest_mail_operation_get_status (mail_operation) == MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS)
                modest_platform_information_banner (NULL, NULL, _("mcen_ib_outbox_waiting_to_be_sent"));
 
-
        if (modest_mail_operation_get_error (mail_operation) != NULL) {
                const GError *error = modest_mail_operation_get_error (mail_operation);
                if (error->domain == MODEST_MAIL_OPERATION_ERROR &&
        if (modest_mail_operation_get_error (mail_operation) != NULL) {
                const GError *error = modest_mail_operation_get_error (mail_operation);
                if (error->domain == MODEST_MAIL_OPERATION_ERROR &&
@@ -3080,9 +3285,8 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
                        had_error = TRUE;
                }
        }
                        had_error = TRUE;
                }
        }
-                                            
+
        /* Free data: */
        /* Free data: */
-       g_free (from);
        g_free (account_name);
        g_object_unref (G_OBJECT (transport_account));
        g_object_unref (G_OBJECT (mail_operation));
        g_free (account_name);
        g_object_unref (G_OBJECT (transport_account));
        g_object_unref (G_OBJECT (mail_operation));
@@ -3099,7 +3303,7 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
        return !had_error;
 }
 
        return !had_error;
 }
 
-void 
+void
 modest_ui_actions_on_toggle_bold (GtkToggleAction *action,
                                  ModestMsgEditWindow *window)
 {
 modest_ui_actions_on_toggle_bold (GtkToggleAction *action,
                                  ModestMsgEditWindow *window)
 {
@@ -3117,10 +3321,10 @@ modest_ui_actions_on_toggle_bold (GtkToggleAction *action,
        format_state->bold = gtk_toggle_action_get_active (action);
        modest_msg_edit_window_set_format_state (window, format_state);
        g_free (format_state);
        format_state->bold = gtk_toggle_action_get_active (action);
        modest_msg_edit_window_set_format_state (window, format_state);
        g_free (format_state);
-       
+
 }
 
 }
 
-void 
+void
 modest_ui_actions_on_toggle_italics (GtkToggleAction *action,
                                     ModestMsgEditWindow *window)
 {
 modest_ui_actions_on_toggle_italics (GtkToggleAction *action,
                                     ModestMsgEditWindow *window)
 {
@@ -3138,10 +3342,10 @@ modest_ui_actions_on_toggle_italics (GtkToggleAction *action,
        format_state->italics = gtk_toggle_action_get_active (action);
        modest_msg_edit_window_set_format_state (window, format_state);
        g_free (format_state);
        format_state->italics = gtk_toggle_action_get_active (action);
        modest_msg_edit_window_set_format_state (window, format_state);
        g_free (format_state);
-       
+
 }
 
 }
 
-void 
+void
 modest_ui_actions_on_toggle_bullets (GtkToggleAction *action,
                                     ModestMsgEditWindow *window)
 {
 modest_ui_actions_on_toggle_bullets (GtkToggleAction *action,
                                     ModestMsgEditWindow *window)
 {
@@ -3159,10 +3363,10 @@ modest_ui_actions_on_toggle_bullets (GtkToggleAction *action,
        format_state->bullet = gtk_toggle_action_get_active (action);
        modest_msg_edit_window_set_format_state (window, format_state);
        g_free (format_state);
        format_state->bullet = gtk_toggle_action_get_active (action);
        modest_msg_edit_window_set_format_state (window, format_state);
        g_free (format_state);
-       
+
 }
 
 }
 
-void 
+void
 modest_ui_actions_on_change_justify (GtkRadioAction *action,
                                     GtkRadioAction *selected,
                                     ModestMsgEditWindow *window)
 modest_ui_actions_on_change_justify (GtkRadioAction *action,
                                     GtkRadioAction *selected,
                                     ModestMsgEditWindow *window)
@@ -3185,7 +3389,7 @@ modest_ui_actions_on_change_justify (GtkRadioAction *action,
        g_free (format_state);
 }
 
        g_free (format_state);
 }
 
-void 
+void
 modest_ui_actions_on_select_editor_color (GtkAction *action,
                                          ModestMsgEditWindow *window)
 {
 modest_ui_actions_on_select_editor_color (GtkAction *action,
                                          ModestMsgEditWindow *window)
 {
@@ -3198,7 +3402,7 @@ modest_ui_actions_on_select_editor_color (GtkAction *action,
        modest_msg_edit_window_select_color (window);
 }
 
        modest_msg_edit_window_select_color (window);
 }
 
-void 
+void
 modest_ui_actions_on_select_editor_background_color (GtkAction *action,
                                                     ModestMsgEditWindow *window)
 {
 modest_ui_actions_on_select_editor_background_color (GtkAction *action,
                                                     ModestMsgEditWindow *window)
 {
@@ -3211,7 +3415,7 @@ modest_ui_actions_on_select_editor_background_color (GtkAction *action,
        modest_msg_edit_window_select_background_color (window);
 }
 
        modest_msg_edit_window_select_background_color (window);
 }
 
-void 
+void
 modest_ui_actions_on_insert_image (GObject *object,
                                   ModestMsgEditWindow *window)
 {
 modest_ui_actions_on_insert_image (GObject *object,
                                   ModestMsgEditWindow *window)
 {
@@ -3227,7 +3431,7 @@ modest_ui_actions_on_insert_image (GObject *object,
        modest_msg_edit_window_insert_image (window);
 }
 
        modest_msg_edit_window_insert_image (window);
 }
 
-void 
+void
 modest_ui_actions_on_attach_file (GtkAction *action,
                                  ModestMsgEditWindow *window)
 {
 modest_ui_actions_on_attach_file (GtkAction *action,
                                  ModestMsgEditWindow *window)
 {
@@ -3236,11 +3440,11 @@ modest_ui_actions_on_attach_file (GtkAction *action,
 
        if (modest_platform_check_memory_low (MODEST_WINDOW(window), TRUE))
                return;
 
        if (modest_platform_check_memory_low (MODEST_WINDOW(window), TRUE))
                return;
-       
+
        modest_msg_edit_window_offer_attach_file (window);
 }
 
        modest_msg_edit_window_offer_attach_file (window);
 }
 
-void 
+void
 modest_ui_actions_on_remove_attachments (GtkAction *action,
                                         ModestMsgEditWindow *window)
 {
 modest_ui_actions_on_remove_attachments (GtkAction *action,
                                         ModestMsgEditWindow *window)
 {
@@ -3249,49 +3453,20 @@ modest_ui_actions_on_remove_attachments (GtkAction *action,
        modest_msg_edit_window_remove_attachments (window, NULL);
 }
 
        modest_msg_edit_window_remove_attachments (window, NULL);
 }
 
-
-#ifndef MODEST_TOOLKIT_GTK
-typedef struct {
-       guint handler;
-       gchar *name;
-       GtkWindow *win;
-       TnyFolderStore *folder;
-} CreateFolderHelper;
-
-static gboolean
-show_create_folder_in_timeout (gpointer data)
-{
-       CreateFolderHelper *helper = (CreateFolderHelper *) data;
-
-       /* Remove the timeout ASAP, we can not wait until the dialog
-          is shown because it could take a lot of time and so the
-          timeout could be called twice or more times */
-       g_source_remove (helper->handler);
-
-       gdk_threads_enter ();
-       do_create_folder (helper->win, helper->folder, helper->name);
-       gdk_threads_leave ();
-
-       g_object_unref (helper->win);
-       g_object_unref (helper->folder);
-       g_free (helper->name);
-       g_slice_free (CreateFolderHelper, helper);
-
-       return FALSE;
-}
-#endif
-
 static void
 do_create_folder_cb (ModestMailOperation *mail_op,
 static void
 do_create_folder_cb (ModestMailOperation *mail_op,
-                    TnyFolderStore *parent_folder, 
+                    TnyFolderStore *parent_folder,
                     TnyFolder *new_folder,
                     gpointer user_data)
 {
        gchar *suggested_name = (gchar *) user_data;
        GtkWindow *source_win = (GtkWindow *) modest_mail_operation_get_source (mail_op);
                     TnyFolder *new_folder,
                     gpointer user_data)
 {
        gchar *suggested_name = (gchar *) user_data;
        GtkWindow *source_win = (GtkWindow *) modest_mail_operation_get_source (mail_op);
+       const GError *error;
 
 
-       if (modest_mail_operation_get_error (mail_op)) {
-
+       error = modest_mail_operation_get_error (mail_op);
+       if (error) {
+               gboolean disk_full = FALSE;
+               TnyAccount *account;
                /* Show an error. If there was some problem writing to
                   disk, show it, otherwise show the generic folder
                   create error. We do it here and not in an error
                /* Show an error. If there was some problem writing to
                   disk, show it, otherwise show the generic folder
                   create error. We do it here and not in an error
@@ -3299,37 +3474,36 @@ do_create_folder_cb (ModestMailOperation *mail_op,
                   stop the main loop in a gtk_dialog_run and then,
                   the message won't be shown until that dialog is
                   closed */
                   stop the main loop in a gtk_dialog_run and then,
                   the message won't be shown until that dialog is
                   closed */
-               modest_ui_actions_disk_operations_error_handler (mail_op,
-                                                                _("mail_in_ui_folder_create_error"));
+               account = modest_mail_operation_get_account (mail_op);
+               if (account) {
+                       disk_full =
+                               modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+                                                                               (GtkWidget *) source_win,
+                                                                               (GError *) error,
+                                                                               account,
+                                                                               _("mail_in_ui_folder_create_error_memory"));
+                       g_object_unref (account);
+               }
+               if (!disk_full) {
+                       /* Show an error and try again if there is no
+                          full memory condition */
+                       modest_platform_information_banner ((GtkWidget *) source_win, NULL,
+                                                           _("mail_in_ui_folder_create_error"));
+                       do_create_folder (source_win, parent_folder, (const gchar *) suggested_name);
+               }
 
 
-               /* Try again. Do *NOT* show any error because the mail
-                  operations system will do it for us because we
-                  created the mail_op with new_with_error_handler */
-#ifndef MODEST_TOOLKIT_GTK
-               CreateFolderHelper *helper;
-               helper = g_slice_new0 (CreateFolderHelper);
-               helper->name = g_strdup (suggested_name);
-               helper->folder = g_object_ref (parent_folder);
-               helper->win = g_object_ref (source_win);
-
-               /* Ugly but neccesary stuff. The problem is that the
-                  dialog when is shown calls a function that destroys
-                  all the temporary windows, so the banner is
-                  destroyed */
-               helper->handler = g_timeout_add (2000, show_create_folder_in_timeout, helper);
-#else
-               do_create_folder (source_win, parent_folder, (const gchar *) suggested_name);
-#endif
        } else {
                /* the 'source_win' is either the ModestMainWindow, or the 'Move to folder'-dialog
                 * FIXME: any other? */
                GtkWidget *folder_view;
 
        } else {
                /* the 'source_win' is either the ModestMainWindow, or the 'Move to folder'-dialog
                 * FIXME: any other? */
                GtkWidget *folder_view;
 
-               if (MODEST_IS_MAIN_WINDOW(source_win)) 
-                       folder_view = 
+#ifndef MODEST_TOOLKIT_HILDON2
+               if (MODEST_IS_MAIN_WINDOW(source_win))
+                       folder_view =
                                modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (source_win),
                                                                     MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
                else
                                modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (source_win),
                                                                     MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
                else
+#endif
                        folder_view = GTK_WIDGET(g_object_get_data (G_OBJECT (source_win),
                                                                    MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
 
                        folder_view = GTK_WIDGET(g_object_get_data (G_OBJECT (source_win),
                                                                    MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
 
@@ -3352,23 +3526,38 @@ typedef struct {
 } CreateFolderConnect;
 
 static void
 } CreateFolderConnect;
 
 static void
-do_create_folder_performer (gboolean canceled, 
+do_create_folder_performer (gboolean canceled,
                         GError *err,
                         GError *err,
-                        GtkWindow *parent_window, 
-                        TnyAccount *account, 
+                        GtkWindow *parent_window,
+                        TnyAccount *account,
                         gpointer user_data)
 {
        CreateFolderConnect *helper = (CreateFolderConnect *) user_data;
        ModestMailOperation *mail_op;
 
        if (canceled || err) {
                         gpointer user_data)
 {
        CreateFolderConnect *helper = (CreateFolderConnect *) user_data;
        ModestMailOperation *mail_op;
 
        if (canceled || err) {
-               /* In memory full conditions we could get this error here */
-               check_memory_full_error ((GtkWidget *) parent_window, err);
+               /* In disk full conditions we could get this error here */
+               modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+                                                               (GtkWidget *) parent_window, err,
+                                                               NULL, _("mail_in_ui_folder_create_error_memory"));
+
+               /* This happens if we have selected the outbox folder
+                  as the parent */
+               if (err && err->code == TNY_SERVICE_ERROR_UNKNOWN &&
+                   TNY_IS_MERGE_FOLDER (helper->parent)) {
+                       /* Show an error and retry */
+                       modest_platform_information_banner ((GtkWidget *) parent_window,
+                                                           NULL,
+                                                           _("mail_in_ui_folder_create_error"));
+
+                       do_create_folder (parent_window, helper->parent, helper->folder_name);
+               }
+
                goto frees;
        }
 
        mail_op  = modest_mail_operation_new ((GObject *) parent_window);
                goto frees;
        }
 
        mail_op  = modest_mail_operation_new ((GObject *) parent_window);
-       modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), 
+       modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                         mail_op);
        modest_mail_operation_create_folder (mail_op,
                                             helper->parent,
                                         mail_op);
        modest_mail_operation_create_folder (mail_op,
                                             helper->parent,
@@ -3387,8 +3576,8 @@ do_create_folder_performer (gboolean canceled,
 
 
 static void
 
 
 static void
-do_create_folder (GtkWindow *parent_window, 
-                 TnyFolderStore *suggested_parent, 
+do_create_folder (GtkWindow *parent_window,
+                 TnyFolderStore *suggested_parent,
                  const gchar *suggested_name)
 {
        gint result;
                  const gchar *suggested_name)
 {
        gint result;
@@ -3421,20 +3610,21 @@ do_create_folder (GtkWindow *parent_window,
 
 static void
 modest_ui_actions_create_folder(GtkWidget *parent_window,
 
 static void
 modest_ui_actions_create_folder(GtkWidget *parent_window,
-                                GtkWidget *folder_view)
+                                GtkWidget *folder_view,
+                               TnyFolderStore *parent_folder)
 {
 {
-       TnyFolderStore *parent_folder;
-
+       if (!parent_folder) {
 #ifdef MODEST_TOOLKIT_HILDON2
 #ifdef MODEST_TOOLKIT_HILDON2
-       ModestTnyAccountStore *acc_store;
+               ModestTnyAccountStore *acc_store;
 
 
-       acc_store = modest_runtime_get_account_store ();
+               acc_store = modest_runtime_get_account_store ();
 
 
-       parent_folder = (TnyFolderStore *) 
-               modest_tny_account_store_get_local_folders_account (acc_store);
+               parent_folder = (TnyFolderStore *)
+                       modest_tny_account_store_get_local_folders_account (acc_store);
 #else
 #else
-       parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
+               parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
 #endif
 #endif
+       }
 
        if (parent_folder) {
                do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL);
 
        if (parent_folder) {
                do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL);
@@ -3448,6 +3638,7 @@ modest_ui_actions_on_new_folder (GtkAction *action, ModestWindow *window)
 
        g_return_if_fail (MODEST_IS_WINDOW(window));
 
 
        g_return_if_fail (MODEST_IS_WINDOW(window));
 
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (window)) {
                GtkWidget *folder_view;
 
        if (MODEST_IS_MAIN_WINDOW (window)) {
                GtkWidget *folder_view;
 
@@ -3456,13 +3647,13 @@ modest_ui_actions_on_new_folder (GtkAction *action, ModestWindow *window)
                if (!folder_view)
                        return;
 
                if (!folder_view)
                        return;
 
-               modest_ui_actions_create_folder (GTK_WIDGET (window), folder_view);
-#ifdef MODEST_TOOLKIT_HILDON2
-       } else if (MODEST_IS_FOLDER_WINDOW (window)) {
+               modest_ui_actions_create_folder (GTK_WIDGET (window), folder_view, NULL);
+#else
+       if (MODEST_IS_FOLDER_WINDOW (window)) {
                GtkWidget *folder_view;
 
                folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
                GtkWidget *folder_view;
 
                folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
-               modest_ui_actions_create_folder (GTK_WIDGET (window), folder_view);
+               modest_ui_actions_create_folder (GTK_WIDGET (window), folder_view, NULL);
 #endif
        } else {
                g_assert_not_reached ();
 #endif
        } else {
                g_assert_not_reached ();
@@ -3474,15 +3665,21 @@ modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op,
                                               gpointer user_data)
 {
        const GError *error = NULL;
                                               gpointer user_data)
 {
        const GError *error = NULL;
-       const gchar *message = NULL;
-       
+       gchar *message = NULL;
+       gboolean mem_full;
+       TnyAccount *account = modest_mail_operation_get_account (mail_op);
+
        /* Get error message */
        error = modest_mail_operation_get_error (mail_op);
        if (!error)
                g_return_if_reached ();
 
        /* Get error message */
        error = modest_mail_operation_get_error (mail_op);
        if (!error)
                g_return_if_reached ();
 
-       if (error->domain == MODEST_MAIL_OPERATION_ERROR &&
-           error->code == MODEST_MAIL_OPERATION_ERROR_FOLDER_EXISTS) {
+       mem_full = modest_tny_account_store_is_disk_full_error (modest_runtime_get_account_store(),
+                                                               (GError *) error, account);
+       if (mem_full) {
+               message = g_strdup_printf (_KR("cerm_device_memory_full"), "");
+       } else if (error->domain == MODEST_MAIL_OPERATION_ERROR &&
+                  error->code == MODEST_MAIL_OPERATION_ERROR_FOLDER_EXISTS) {
                message = _CS("ckdg_ib_folder_already_exists");
        } else if (error->domain == TNY_ERROR_DOMAIN &&
                   error->code == TNY_SERVICE_ERROR_STATE) {
                message = _CS("ckdg_ib_folder_already_exists");
        } else if (error->domain == TNY_ERROR_DOMAIN &&
                   error->code == TNY_SERVICE_ERROR_STATE) {
@@ -3496,6 +3693,11 @@ modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op,
        /* We don't set a parent for the dialog because the dialog
           will be destroyed so the banner won't appear */
        modest_platform_information_banner (NULL, NULL, message);
        /* We don't set a parent for the dialog because the dialog
           will be destroyed so the banner won't appear */
        modest_platform_information_banner (NULL, NULL, message);
+
+       if (account)
+               g_object_unref (account);
+       if (mem_full)
+               g_free (message);
 }
 
 typedef struct {
 }
 
 typedef struct {
@@ -3504,7 +3706,7 @@ typedef struct {
 } RenameFolderInfo;
 
 static void
 } RenameFolderInfo;
 
 static void
-on_rename_folder_cb (ModestMailOperation *mail_op, 
+on_rename_folder_cb (ModestMailOperation *mail_op,
                     TnyFolder *new_folder,
                     gpointer user_data)
 {
                     TnyFolder *new_folder,
                     gpointer user_data)
 {
@@ -3519,17 +3721,19 @@ on_rename_folder_cb (ModestMailOperation *mail_op,
        /* Note that if the rename fails new_folder will be NULL */
        if (new_folder) {
                modest_folder_view_select_folder (folder_view, new_folder, FALSE);
        /* Note that if the rename fails new_folder will be NULL */
        if (new_folder) {
                modest_folder_view_select_folder (folder_view, new_folder, FALSE);
+#ifndef MODEST_TOOLKIT_HILDON2
        } else {
                modest_folder_view_select_first_inbox_or_local (folder_view);
        } else {
                modest_folder_view_select_first_inbox_or_local (folder_view);
+#endif
        }
        gtk_widget_grab_focus (GTK_WIDGET (folder_view));
 }
 
 static void
        }
        gtk_widget_grab_focus (GTK_WIDGET (folder_view));
 }
 
 static void
-on_rename_folder_performer (gboolean canceled, 
-                           GError *err, 
-                           GtkWindow *parent_window, 
-                           TnyAccount *account, 
+on_rename_folder_performer (gboolean canceled,
+                           GError *err,
+                           GtkWindow *parent_window,
+                           TnyAccount *account,
                            gpointer user_data)
 {
        ModestMailOperation *mail_op = NULL;
                            gpointer user_data)
 {
        ModestMailOperation *mail_op = NULL;
@@ -3538,8 +3742,10 @@ on_rename_folder_performer (gboolean canceled,
        RenameFolderInfo *data = (RenameFolderInfo*)user_data;
 
        if (canceled || err) {
        RenameFolderInfo *data = (RenameFolderInfo*)user_data;
 
        if (canceled || err) {
-               /* In memory full conditions we could get this error here */
-               check_memory_full_error ((GtkWidget *) parent_window, err);
+               /* In disk full conditions we could get this error here */
+               modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+                                                               (GtkWidget *) parent_window, err,
+                                                               account, NULL);
        } else {
 
                mail_op =
        } else {
 
                mail_op =
@@ -3549,15 +3755,15 @@ on_rename_folder_performer (gboolean canceled,
 
                modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                mail_op);
 
                modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                mail_op);
-
+#ifndef MODEST_TOOLKIT_HILDON2
                if (MODEST_IS_MAIN_WINDOW(parent_window)) {
 
                        folder_view = modest_main_window_get_child_widget (
                                MODEST_MAIN_WINDOW (parent_window),
                                MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
                if (MODEST_IS_MAIN_WINDOW(parent_window)) {
 
                        folder_view = modest_main_window_get_child_widget (
                                MODEST_MAIN_WINDOW (parent_window),
                                MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
-               } 
-#ifdef MODEST_TOOLKIT_HILDON2
-               else if (MODEST_IS_FOLDER_WINDOW (parent_window)) {
+               }
+#else
+               if (MODEST_IS_FOLDER_WINDOW (parent_window)) {
                        ModestFolderWindow *folder_window = (ModestFolderWindow *) parent_window;
                        folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (folder_window));
                }
                        ModestFolderWindow *folder_window = (ModestFolderWindow *) parent_window;
                        folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (folder_window));
                }
@@ -3581,14 +3787,14 @@ on_rename_folder_performer (gboolean canceled,
        g_free (data);
 }
 
        g_free (data);
 }
 
-void 
+void
 modest_ui_actions_on_rename_folder (GtkAction *action,
                                     ModestWindow *window)
 {
        modest_ui_actions_on_edit_mode_rename_folder (window);
 }
 
 modest_ui_actions_on_rename_folder (GtkAction *action,
                                     ModestWindow *window)
 {
        modest_ui_actions_on_edit_mode_rename_folder (window);
 }
 
-gboolean 
+gboolean
 modest_ui_actions_on_edit_mode_rename_folder (ModestWindow *window)
 {
        TnyFolderStore *folder;
 modest_ui_actions_on_edit_mode_rename_folder (ModestWindow *window)
 {
        TnyFolderStore *folder;
@@ -3597,14 +3803,14 @@ modest_ui_actions_on_edit_mode_rename_folder (ModestWindow *window)
 
        g_return_val_if_fail (MODEST_IS_WINDOW(window), FALSE);
 
 
        g_return_val_if_fail (MODEST_IS_WINDOW(window), FALSE);
 
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (window)) {
                folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
                if (!folder_view)
                        return FALSE;
        if (MODEST_IS_MAIN_WINDOW (window)) {
                folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
                if (!folder_view)
                        return FALSE;
-
-#ifdef MODEST_TOOLKIT_HILDON2
-       } else if (MODEST_IS_FOLDER_WINDOW (window)) {
+#else
+       if (MODEST_IS_FOLDER_WINDOW (window)) {
                folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
 #endif
        } else {
                folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
 #endif
        } else {
@@ -3625,7 +3831,7 @@ modest_ui_actions_on_edit_mode_rename_folder (ModestWindow *window)
                current_name = tny_folder_get_name (TNY_FOLDER (folder));
                parent = tny_folder_get_folder_store (TNY_FOLDER (folder));
                response = modest_platform_run_rename_folder_dialog (GTK_WINDOW (window),
                current_name = tny_folder_get_name (TNY_FOLDER (folder));
                parent = tny_folder_get_folder_store (TNY_FOLDER (folder));
                response = modest_platform_run_rename_folder_dialog (GTK_WINDOW (window),
-                                                                    parent, current_name, 
+                                                                    parent, current_name,
                                                                     &folder_name);
                g_object_unref (parent);
 
                                                                     &folder_name);
                g_object_unref (parent);
 
@@ -3661,29 +3867,37 @@ typedef struct {
 } DeleteFolderInfo;
 
 static void
 } DeleteFolderInfo;
 
 static void
-on_delete_folder_cb (gboolean canceled, 
+on_delete_folder_cb (gboolean canceled,
                  GError *err,
                  GError *err,
-                 GtkWindow *parent_window, 
-                 TnyAccount *account, 
+                 GtkWindow *parent_window,
+                 TnyAccount *account,
                  gpointer user_data)
 {
        DeleteFolderInfo *info = (DeleteFolderInfo*) user_data;
        GtkWidget *folder_view;
        ModestMailOperation *mail_op;
        GtkTreeSelection *sel;
                  gpointer user_data)
 {
        DeleteFolderInfo *info = (DeleteFolderInfo*) user_data;
        GtkWidget *folder_view;
        ModestMailOperation *mail_op;
        GtkTreeSelection *sel;
-       
+
        if (!MODEST_IS_WINDOW(parent_window) || canceled || (err!=NULL)) {
        if (!MODEST_IS_WINDOW(parent_window) || canceled || (err!=NULL)) {
+               /* Note that the connection process can fail due to
+                  memory low conditions as it can not successfully
+                  store the summary */
+               if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+                                                                    (GtkWidget*) parent_window, err,
+                                                                    account, NULL))
+                       g_debug ("Error connecting when trying to delete a folder");
                g_object_unref (G_OBJECT (info->folder));
                g_free (info);
                return;
        }
                g_object_unref (G_OBJECT (info->folder));
                g_free (info);
                return;
        }
-       
+
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (parent_window)) {
                folder_view = modest_main_window_get_child_widget (
                        MODEST_MAIN_WINDOW (parent_window),
                        MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
        if (MODEST_IS_MAIN_WINDOW (parent_window)) {
                folder_view = modest_main_window_get_child_widget (
                        MODEST_MAIN_WINDOW (parent_window),
                        MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
-#ifdef MODEST_TOOLKIT_HILDON2
-       } else if (MODEST_IS_FOLDER_WINDOW (parent_window)) {
+#else
+       if (MODEST_IS_FOLDER_WINDOW (parent_window)) {
                folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (parent_window)));
 #endif
        } else {
                folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (parent_window)));
 #endif
        } else {
@@ -3705,11 +3919,13 @@ on_delete_folder_cb (gboolean canceled,
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                        mail_op);
        modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (info->folder), info->move_to_trash);
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                        mail_op);
        modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (info->folder), info->move_to_trash);
-       
+
+#ifndef MODEST_TOOLKIT_HILDON2
        modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (folder_view));
        modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (folder_view));
+#endif
 
 
-       g_object_unref (G_OBJECT (mail_op));
-       g_object_unref (G_OBJECT (info->folder));
+       g_object_unref (mail_op);
+       g_object_unref (info->folder);
        g_free (info);
 }
 
        g_free (info);
 }
 
@@ -3720,15 +3936,16 @@ delete_folder (ModestWindow *window, gboolean move_to_trash)
        GtkWidget *folder_view;
        gint response;
        gchar *message;
        GtkWidget *folder_view;
        gint response;
        gchar *message;
-       
+
        g_return_val_if_fail (MODEST_IS_WINDOW(window), FALSE);
 
        g_return_val_if_fail (MODEST_IS_WINDOW(window), FALSE);
 
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (window)) {
 
                folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
        if (MODEST_IS_MAIN_WINDOW (window)) {
 
                folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
-#ifdef MODEST_TOOLKIT_HILDON2
-       } else if (MODEST_IS_FOLDER_WINDOW (window)) {
+#else
+       if (MODEST_IS_FOLDER_WINDOW (window)) {
                folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
 #endif
        } else {
                folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
 #endif
        } else {
@@ -3752,29 +3969,30 @@ delete_folder (ModestWindow *window, gboolean move_to_trash)
        }
 
        /* Ask the user */
        }
 
        /* Ask the user */
-       message =  g_strdup_printf (_("mcen_nc_delete_folder_text"), 
+       message =  g_strdup_printf (_("mcen_nc_delete_folder_text"),
                                    tny_folder_get_name (TNY_FOLDER (folder)));
        response = modest_platform_run_confirmation_dialog (GTK_WINDOW (window),
                                                            (const gchar *) message);
        g_free (message);
 
        if (response == GTK_RESPONSE_OK) {
                                    tny_folder_get_name (TNY_FOLDER (folder)));
        response = modest_platform_run_confirmation_dialog (GTK_WINDOW (window),
                                                            (const gchar *) message);
        g_free (message);
 
        if (response == GTK_RESPONSE_OK) {
-               DeleteFolderInfo *info;
+               TnyAccount *account = NULL;
+               DeleteFolderInfo *info = NULL;
                info = g_new0(DeleteFolderInfo, 1);
                info = g_new0(DeleteFolderInfo, 1);
-               info->folder = folder;
+               info->folder = g_object_ref (folder);
                info->move_to_trash = move_to_trash;
                info->move_to_trash = move_to_trash;
-               g_object_ref (G_OBJECT (info->folder));
-               TnyAccount *account = tny_folder_get_account (TNY_FOLDER (folder));
-               modest_platform_connect_if_remote_and_perform (GTK_WINDOW (window), 
+
+               account = tny_folder_get_account (TNY_FOLDER (folder));
+               modest_platform_connect_if_remote_and_perform (GTK_WINDOW (window),
                                                               TRUE,
                                                               TRUE,
-                                                              TNY_FOLDER_STORE (account), 
+                                                              TNY_FOLDER_STORE (account),
                                                               on_delete_folder_cb, info);
                g_object_unref (account);
                                                               on_delete_folder_cb, info);
                g_object_unref (account);
+               g_object_unref (folder);
                return TRUE;
        } else {
                return FALSE;
        }
                return TRUE;
        } else {
                return FALSE;
        }
-       g_object_unref (G_OBJECT (folder));
 }
 
 void
 }
 
 void
@@ -3788,18 +4006,19 @@ gboolean
 modest_ui_actions_on_edit_mode_delete_folder (ModestWindow *window)
 {
        g_return_val_if_fail (MODEST_IS_WINDOW(window), TRUE);
 modest_ui_actions_on_edit_mode_delete_folder (ModestWindow *window)
 {
        g_return_val_if_fail (MODEST_IS_WINDOW(window), TRUE);
-       
+
        return delete_folder (window, FALSE);
 }
 
        return delete_folder (window, FALSE);
 }
 
-void 
+#ifndef MODEST_TOOLKIT_HILDON2
+void
 modest_ui_actions_on_move_folder_to_trash_folder (GtkAction *action, ModestMainWindow *main_window)
 {
        g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
 modest_ui_actions_on_move_folder_to_trash_folder (GtkAction *action, ModestMainWindow *main_window)
 {
        g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
-       
+
        delete_folder (MODEST_WINDOW (main_window), TRUE);
 }
        delete_folder (MODEST_WINDOW (main_window), TRUE);
 }
-
+#endif
 
 typedef struct _PasswordDialogFields {
        GtkWidget *username;
 
 typedef struct _PasswordDialogFields {
        GtkWidget *username;
@@ -3814,19 +4033,11 @@ password_dialog_check_field (GtkEditable *editable,
        const gchar *value;
        gboolean any_value_empty = FALSE;
 
        const gchar *value;
        gboolean any_value_empty = FALSE;
 
-#ifdef MODEST_TOOLKIT_HILDON2
-       value = hildon_entry_get_text (HILDON_ENTRY (fields->username));
-#else
-       value = gtk_entry_get_text (GTK_ENTRY (fields->username));
-#endif
+       value = modest_entry_get_text (fields->username);
        if ((value == NULL) || value[0] == '\0') {
                any_value_empty = TRUE;
        }
        if ((value == NULL) || value[0] == '\0') {
                any_value_empty = TRUE;
        }
-#ifdef MODEST_TOOLKIT_HILDON2
-       value = hildon_entry_get_text (HILDON_ENTRY (fields->password));
-#else
-       value = gtk_entry_get_text (GTK_ENTRY (fields->password));
-#endif
+       value = modest_entry_get_text (fields->password);
        if ((value == NULL) || value[0] == '\0') {
                any_value_empty = TRUE;
        }
        if ((value == NULL) || value[0] == '\0') {
                any_value_empty = TRUE;
        }
@@ -3865,7 +4076,7 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
                                             _HL("wdgt_bd_done"),
                                             GTK_RESPONSE_ACCEPT,
                                             NULL);
                                             _HL("wdgt_bd_done"),
                                             GTK_RESPONSE_ACCEPT,
                                             NULL);
-       gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 
+       gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox),
                                        HILDON_MARGIN_DOUBLE);
 #else
        GtkWidget *dialog =
                                        HILDON_MARGIN_DOUBLE);
 #else
        GtkWidget *dialog =
@@ -3879,7 +4090,7 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
                                             NULL);
 #endif /* MODEST_TOOLKIT_HILDON2 */
 #else
                                             NULL);
 #endif /* MODEST_TOOLKIT_HILDON2 */
 #else
-       GtkWidget *dialog = 
+       GtkWidget *dialog =
                gtk_dialog_new_with_buttons (_("mail_ti_password_protected"),
                                             NULL,
                                             GTK_DIALOG_MODAL,
                gtk_dialog_new_with_buttons (_("mail_ti_password_protected"),
                                             NULL,
                                             GTK_DIALOG_MODAL,
@@ -3915,15 +4126,10 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
        gchar *initial_username = modest_account_mgr_get_server_account_username (
                modest_runtime_get_account_mgr(), server_account_name);
 
        gchar *initial_username = modest_account_mgr_get_server_account_username (
                modest_runtime_get_account_mgr(), server_account_name);
 
-#ifdef MODEST_TOOLKIT_HILDON2
-       GtkWidget *entry_username = hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);
+       GtkWidget *entry_username = modest_toolkit_factory_create_entry (modest_runtime_get_toolkit_factory ());
        if (initial_username)
        if (initial_username)
-               hildon_entry_set_text (HILDON_ENTRY (entry_username), initial_username);
-#else
-       GtkWidget *entry_username = gtk_entry_new ();
-       if (initial_username)
-               gtk_entry_set_text (GTK_ENTRY (entry_username), initial_username);
-#endif
+               modest_entry_set_text (entry_username, initial_username);
+
        /* Dim this if a connection has ever succeeded with this username,
         * as per the UI spec: */
        /* const gboolean username_known =  */
        /* Dim this if a connection has ever succeeded with this username,
         * as per the UI spec: */
        /* const gboolean username_known =  */
@@ -3936,7 +4142,6 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
         */
        gtk_widget_set_sensitive (entry_username, FALSE);
 
         */
        gtk_widget_set_sensitive (entry_username, FALSE);
 
-#ifndef MODEST_TOOLKIT_GTK
        /* Auto-capitalization is the default, so let's turn it off: */
        hildon_gtk_entry_set_input_mode (GTK_ENTRY (entry_username), HILDON_GTK_INPUT_MODE_FULL);
 
        /* Auto-capitalization is the default, so let's turn it off: */
        hildon_gtk_entry_set_input_mode (GTK_ENTRY (entry_username), HILDON_GTK_INPUT_MODE_FULL);
 
@@ -3945,54 +4150,33 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
         * We use GTK_SIZE_GROUP_HORIZONTAL, so that the widths are the same. */
        GtkSizeGroup *sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
         * We use GTK_SIZE_GROUP_HORIZONTAL, so that the widths are the same. */
        GtkSizeGroup *sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
-#ifdef MODEST_TOOLKIT_HILDON2
-       GtkWidget *caption = modest_maemo_utils_create_captioned (sizegroup, NULL, 
-                                                                 _("mail_fi_username"), FALSE,
-                                                                 entry_username);
-#else
-       GtkWidget *caption = hildon_caption_new (sizegroup, 
-               _("mail_fi_username"), entry_username, NULL, HILDON_CAPTION_MANDATORY);
-#endif
+       GtkWidget *caption = modest_toolkit_utils_create_captioned (sizegroup, NULL,
+                                                                   _("mail_fi_username"), FALSE,
+                                                                   entry_username);
        gtk_widget_show (entry_username);
        gtk_widget_show (entry_username);
-       gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), caption, 
+       gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), caption,
                FALSE, FALSE, MODEST_MARGIN_HALF);
        gtk_widget_show (caption);
                FALSE, FALSE, MODEST_MARGIN_HALF);
        gtk_widget_show (caption);
-#else
-       gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry_username,
-                           TRUE, FALSE, 0);
-#endif /* !MODEST_TOOLKIT_GTK */
 
        /* password: */
 
        /* password: */
-#ifdef MODEST_TOOLKIT_HILDON2
-       GtkWidget *entry_password = hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);
-#else
-       GtkWidget *entry_password = gtk_entry_new ();
-#endif
+       GtkWidget *entry_password = modest_toolkit_factory_create_entry (modest_runtime_get_toolkit_factory ());
        gtk_entry_set_visibility (GTK_ENTRY(entry_password), FALSE);
        /* gtk_entry_set_invisible_char (GTK_ENTRY(entry_password), "*"); */
 
        gtk_entry_set_visibility (GTK_ENTRY(entry_password), FALSE);
        /* gtk_entry_set_invisible_char (GTK_ENTRY(entry_password), "*"); */
 
-#ifndef MODEST_TOOLKIT_GTK
        /* Auto-capitalization is the default, so let's turn it off: */
        /* Auto-capitalization is the default, so let's turn it off: */
+#ifdef MAEMO_CHANGES
        hildon_gtk_entry_set_input_mode (GTK_ENTRY (entry_password),
                HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_INVISIBLE);
        hildon_gtk_entry_set_input_mode (GTK_ENTRY (entry_password),
                HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_INVISIBLE);
-
-#ifdef MODEST_TOOLKIT_HILDON2
-       caption = modest_maemo_utils_create_captioned (sizegroup, NULL,
-                                                      _("mail_fi_password"), FALSE,
-                                                      entry_password);
-#else
-       caption = hildon_caption_new (sizegroup,
-               _("mail_fi_password"), entry_password, NULL, HILDON_CAPTION_MANDATORY);
 #endif
 #endif
+
+       caption = modest_toolkit_utils_create_captioned (sizegroup, NULL,
+                                                        _("mail_fi_password"), FALSE,
+                                                        entry_password);
        gtk_widget_show (entry_password);
        gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), caption,
                FALSE, FALSE, MODEST_MARGIN_HALF);
        gtk_widget_show (caption);
        g_object_unref (sizegroup);
        gtk_widget_show (entry_password);
        gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), caption,
                FALSE, FALSE, MODEST_MARGIN_HALF);
        gtk_widget_show (caption);
        g_object_unref (sizegroup);
-#else
-       gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry_password,
-                           TRUE, FALSE, 0);
-#endif /* !MODEST_TOOLKIT_GTK */
 
        if (initial_username != NULL)
                gtk_widget_grab_focus (GTK_WIDGET (entry_password));
 
        if (initial_username != NULL)
                gtk_widget_grab_focus (GTK_WIDGET (entry_password));
@@ -4018,20 +4202,16 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
 
                if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
                        if (username) {
 
                if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
                        if (username) {
-#ifdef MODEST_TOOLKIT_HILDON2
-                               *username = g_strdup (hildon_entry_get_text (HILDON_ENTRY(entry_username)));
-#else
-                               *username = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry_username)));
-#endif
+                               *username = g_strdup (modest_entry_get_text (entry_username));
 
                                /* Note that an empty field becomes the "" string */
                                if (*username && strlen (*username) > 0) {
 
                                /* Note that an empty field becomes the "" string */
                                if (*username && strlen (*username) > 0) {
-                                       modest_account_mgr_set_server_account_username (modest_runtime_get_account_mgr(), 
-                                                                                       server_account_name, 
+                                       modest_account_mgr_set_server_account_username (modest_runtime_get_account_mgr(),
+                                                                                       server_account_name,
                                                                                        *username);
                                        completed = TRUE;
 
                                                                                        *username);
                                        completed = TRUE;
 
-                                       const gboolean username_was_changed = 
+                                       const gboolean username_was_changed =
                                                (strcmp (*username, initial_username) != 0);
                                        if (username_was_changed) {
                                                g_warning ("%s: tinymail does not yet support changing the "
                                                (strcmp (*username, initial_username) != 0);
                                        if (username_was_changed) {
                                                g_warning ("%s: tinymail does not yet support changing the "
@@ -4041,24 +4221,20 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
                                        g_free (*username);
                                        *username = NULL;
                                        /* Show error */
                                        g_free (*username);
                                        *username = NULL;
                                        /* Show error */
-                                       modest_platform_information_banner (GTK_WIDGET (dialog), NULL, 
+                                       modest_platform_information_banner (GTK_WIDGET (dialog), NULL,
                                                                            _("mcen_ib_username_pw_incorrect"));
                                        completed = FALSE;
                                }
                        }
 
                                                                            _("mcen_ib_username_pw_incorrect"));
                                        completed = FALSE;
                                }
                        }
 
-                       if (password) {
-#ifdef MODEST_TOOLKIT_HILDON2
-                               *password = g_strdup (hildon_entry_get_text (HILDON_ENTRY(entry_password)));
-#else
-                               *password = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry_password)));
-#endif
-
-                               /* We do not save the password in the configuration, 
-                                * because this function is only called for passwords that should 
+                       if (password) {
+                               *password = g_strdup (modest_entry_get_text (entry_password));
+
+                               /* We do not save the password in the configuration,
+                                * because this function is only called for passwords that should
                                 * not be remembered:
                                 modest_server_account_set_password (
                                 * not be remembered:
                                 modest_server_account_set_password (
-                                modest_runtime_get_account_mgr(), server_account_name, 
+                                modest_runtime_get_account_mgr(), server_account_name,
                                 *password);
                                 */
                        }
                                 *password);
                                 */
                        }
@@ -4089,7 +4265,7 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
        g_free (initial_username);
        gtk_widget_destroy (dialog);
        g_slice_free (PasswordDialogFields, fields);
        g_free (initial_username);
        gtk_widget_destroy (dialog);
        g_slice_free (PasswordDialogFields, fields);
-       
+
        /* printf ("DEBUG: %s: cancel=%d\n", __FUNCTION__, *cancel); */
 }
 
        /* printf ("DEBUG: %s: cancel=%d\n", __FUNCTION__, *cancel); */
 }
 
@@ -4225,16 +4401,16 @@ void
 modest_ui_actions_on_undo (GtkAction *action,
                           ModestWindow *window)
 {
 modest_ui_actions_on_undo (GtkAction *action,
                           ModestWindow *window)
 {
-       ModestEmailClipboard *clipboard = NULL;
-
        if (MODEST_IS_MSG_EDIT_WINDOW (window)) {
                modest_msg_edit_window_undo (MODEST_MSG_EDIT_WINDOW (window));
        if (MODEST_IS_MSG_EDIT_WINDOW (window)) {
                modest_msg_edit_window_undo (MODEST_MSG_EDIT_WINDOW (window));
+#ifndef MODEST_TOOLKIT_HILDON2
        } else if (MODEST_IS_MAIN_WINDOW (window)) {
        } else if (MODEST_IS_MAIN_WINDOW (window)) {
+               ModestEmailClipboard *clipboard = NULL;
                /* Clear clipboard source */
                clipboard = modest_runtime_get_email_clipboard ();
                /* Clear clipboard source */
                clipboard = modest_runtime_get_email_clipboard ();
-               modest_email_clipboard_clear (clipboard);               
-       }
-       else {
+               modest_email_clipboard_clear (clipboard);
+#endif
+       } else {
                g_return_if_reached ();
        }
 }
                g_return_if_reached ();
        }
 }
@@ -4253,7 +4429,7 @@ modest_ui_actions_on_redo (GtkAction *action,
 
 
 static void
 
 
 static void
-destroy_information_note (ModestMailOperation *mail_op, 
+destroy_information_note (ModestMailOperation *mail_op,
                          gpointer user_data)
 {
        /* destroy information note */
                          gpointer user_data)
 {
        /* destroy information note */
@@ -4261,7 +4437,7 @@ destroy_information_note (ModestMailOperation *mail_op,
 }
 
 static void
 }
 
 static void
-destroy_folder_information_note (ModestMailOperation *mail_op, 
+destroy_folder_information_note (ModestMailOperation *mail_op,
                                 TnyFolder *new_folder,
                                 gpointer user_data)
 {
                                 TnyFolder *new_folder,
                                 gpointer user_data)
 {
@@ -4295,7 +4471,7 @@ paste_msg_as_attachment_cb (ModestMailOperation *mail_op,
                return;
 
        modest_msg_edit_window_add_part (MODEST_MSG_EDIT_WINDOW (helper->window), TNY_MIME_PART (msg));
                return;
 
        modest_msg_edit_window_add_part (MODEST_MSG_EDIT_WINDOW (helper->window), TNY_MIME_PART (msg));
-       
+
 }
 
 void
 }
 
 void
@@ -4336,16 +4512,16 @@ modest_ui_actions_on_paste (GtkAction *action,
                        }
 
                        if (data != NULL) {
                        }
 
                        if (data != NULL) {
-                               modest_mail_operation_get_msgs_full (mail_op, 
+                               modest_mail_operation_get_msgs_full (mail_op,
                                                                     data,
                                                                     (GetMsgAsyncUserCallback) paste_msg_as_attachment_cb,
                                                                     helper,
                                                                     paste_as_attachment_free);
                        }
                        /* Free */
                                                                     data,
                                                                     (GetMsgAsyncUserCallback) paste_msg_as_attachment_cb,
                                                                     helper,
                                                                     paste_as_attachment_free);
                        }
                        /* Free */
-                       if (data) 
+                       if (data)
                                g_object_unref (data);
                                g_object_unref (data);
-                       if (src_folder) 
+                       if (src_folder)
                                g_object_unref (src_folder);
 
                }
                                g_object_unref (src_folder);
 
                }
@@ -4353,20 +4529,20 @@ modest_ui_actions_on_paste (GtkAction *action,
                ModestEmailClipboard *clipboard = NULL;
                TnyFolder *src_folder = NULL;
                TnyFolderStore *folder_store = NULL;
                ModestEmailClipboard *clipboard = NULL;
                TnyFolder *src_folder = NULL;
                TnyFolderStore *folder_store = NULL;
-               TnyList *data = NULL;           
+               TnyList *data = NULL;
                gboolean delete = FALSE;
                gboolean delete = FALSE;
-               
+
                /* Check clipboard source */
                clipboard = modest_runtime_get_email_clipboard ();
                /* Check clipboard source */
                clipboard = modest_runtime_get_email_clipboard ();
-               if (modest_email_clipboard_cleared (clipboard)) 
+               if (modest_email_clipboard_cleared (clipboard))
                        return;
                        return;
-               
+
                /* Get elements to paste */
                modest_email_clipboard_get_data (clipboard, &src_folder, &data, &delete);
 
                /* Create a new mail operation */
                mail_op = modest_mail_operation_new (G_OBJECT(window));
                /* Get elements to paste */
                modest_email_clipboard_get_data (clipboard, &src_folder, &data, &delete);
 
                /* Create a new mail operation */
                mail_op = modest_mail_operation_new (G_OBJECT(window));
-               
+
                /* Get destination folder */
                folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (focused_widget));
 
                /* Get destination folder */
                folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (focused_widget));
 
@@ -4375,15 +4551,15 @@ modest_ui_actions_on_paste (GtkAction *action,
                        gint response = 0;
 
                        /* Ask for user confirmation */
                        gint response = 0;
 
                        /* Ask for user confirmation */
-                       response = 
-                               modest_ui_actions_msgs_move_to_confirmation (window, 
-                                                                            TNY_FOLDER (folder_store), 
+                       response =
+                               modest_ui_actions_msgs_move_to_confirmation (window,
+                                                                            TNY_FOLDER (folder_store),
                                                                             delete,
                                                                             data);
                                                                             delete,
                                                                             data);
-                       
+
                        if (response == GTK_RESPONSE_OK) {
                                /* Launch notification */
                        if (response == GTK_RESPONSE_OK) {
                                /* Launch notification */
-                               inf_note = modest_platform_animation_banner (GTK_WIDGET (window), NULL, 
+                               inf_note = modest_platform_animation_banner (GTK_WIDGET (window), NULL,
                                                                             _CS("ckct_nw_pasting"));
                                if (inf_note != NULL)  {
                                        gtk_window_set_modal (GTK_WINDOW(inf_note), FALSE);
                                                                             _CS("ckct_nw_pasting"));
                                if (inf_note != NULL)  {
                                        gtk_window_set_modal (GTK_WINDOW(inf_note), FALSE);
@@ -4391,27 +4567,27 @@ modest_ui_actions_on_paste (GtkAction *action,
                                }
 
                                modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
                                }
 
                                modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
-                               modest_mail_operation_xfer_msgs (mail_op, 
+                               modest_mail_operation_xfer_msgs (mail_op,
                                                                 data,
                                                                 TNY_FOLDER (folder_store),
                                                                 delete,
                                                                 destroy_information_note,
                                                                 data,
                                                                 TNY_FOLDER (folder_store),
                                                                 delete,
                                                                 destroy_information_note,
-                                                                inf_note);                             
+                                                                inf_note);
                        } else {
                                g_object_unref (mail_op);
                        }
                        } else {
                                g_object_unref (mail_op);
                        }
-                       
-               } else if (src_folder != NULL) {                        
+
+               } else if (src_folder != NULL) {
                        /* Launch notification */
                        /* Launch notification */
-                       inf_note = modest_platform_animation_banner (GTK_WIDGET (window), NULL, 
+                       inf_note = modest_platform_animation_banner (GTK_WIDGET (window), NULL,
                                                                     _CS("ckct_nw_pasting"));
                        if (inf_note != NULL)  {
                                gtk_window_set_modal (GTK_WINDOW(inf_note), FALSE);
                                gtk_widget_show (GTK_WIDGET(inf_note));
                        }
                                                                     _CS("ckct_nw_pasting"));
                        if (inf_note != NULL)  {
                                gtk_window_set_modal (GTK_WINDOW(inf_note), FALSE);
                                gtk_widget_show (GTK_WIDGET(inf_note));
                        }
-                       
+
                        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
                        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
-                       modest_mail_operation_xfer_folder (mail_op, 
+                       modest_mail_operation_xfer_folder (mail_op,
                                                           src_folder,
                                                           folder_store,
                                                           delete,
                                                           src_folder,
                                                           folder_store,
                                                           delete,
@@ -4420,11 +4596,11 @@ modest_ui_actions_on_paste (GtkAction *action,
                }
 
                /* Free */
                }
 
                /* Free */
-               if (data != NULL) 
+               if (data != NULL)
                        g_object_unref (data);
                        g_object_unref (data);
-               if (src_folder != NULL) 
+               if (src_folder != NULL)
                        g_object_unref (src_folder);
                        g_object_unref (src_folder);
-               if (folder_store != NULL) 
+               if (folder_store != NULL)
                        g_object_unref (folder_store);
        }
 }
                        g_object_unref (folder_store);
        }
 }
@@ -4453,18 +4629,19 @@ modest_ui_actions_on_select_all (GtkAction *action,
                gtk_text_buffer_select_range (buffer, &start, &end);
        } else if (GTK_IS_HTML (focused_widget)) {
                gtk_html_select_all (GTK_HTML (focused_widget));
                gtk_text_buffer_select_range (buffer, &start, &end);
        } else if (GTK_IS_HTML (focused_widget)) {
                gtk_html_select_all (GTK_HTML (focused_widget));
+#ifndef MODEST_TOOLKIT_HILDON2
        } else if (MODEST_IS_MAIN_WINDOW (window)) {
                GtkWidget *header_view = focused_widget;
                GtkTreeSelection *selection = NULL;
        } else if (MODEST_IS_MAIN_WINDOW (window)) {
                GtkWidget *header_view = focused_widget;
                GtkTreeSelection *selection = NULL;
-               
+
                if (!(MODEST_IS_HEADER_VIEW (focused_widget))) {
                        header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
                                                                           MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
                }
                if (!(MODEST_IS_HEADER_VIEW (focused_widget))) {
                        header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
                                                                           MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
                }
-                               
+
                /* Disable window dimming management */
                modest_window_disable_dimming (MODEST_WINDOW(window));
                /* Disable window dimming management */
                modest_window_disable_dimming (MODEST_WINDOW(window));
-               
+
                /* Select all messages */
                selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view));
                gtk_tree_selection_select_all (selection);
                /* Select all messages */
                selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view));
                gtk_tree_selection_select_all (selection);
@@ -4476,6 +4653,7 @@ modest_ui_actions_on_select_all (GtkAction *action,
                modest_window_enable_dimming (MODEST_WINDOW(window));
                modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
                modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
                modest_window_enable_dimming (MODEST_WINDOW(window));
                modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
                modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+#endif
        }
 
 }
        }
 
 }
@@ -4483,9 +4661,9 @@ modest_ui_actions_on_select_all (GtkAction *action,
 void
 modest_ui_actions_on_mark_as_read (GtkAction *action,
                                   ModestWindow *window)
 void
 modest_ui_actions_on_mark_as_read (GtkAction *action,
                                   ModestWindow *window)
-{      
+{
        g_return_if_fail (MODEST_IS_WINDOW(window));
        g_return_if_fail (MODEST_IS_WINDOW(window));
-               
+
        /* Mark each header as read */
        do_headers_action (window, headers_action_mark_as_read, NULL);
 }
        /* Mark each header as read */
        do_headers_action (window, headers_action_mark_as_read, NULL);
 }
@@ -4493,9 +4671,9 @@ modest_ui_actions_on_mark_as_read (GtkAction *action,
 void
 modest_ui_actions_on_mark_as_unread (GtkAction *action,
                                     ModestWindow *window)
 void
 modest_ui_actions_on_mark_as_unread (GtkAction *action,
                                     ModestWindow *window)
-{      
+{
        g_return_if_fail (MODEST_IS_WINDOW(window));
        g_return_if_fail (MODEST_IS_WINDOW(window));
-               
+
        /* Mark each header as read */
        do_headers_action (window, headers_action_mark_as_unread, NULL);
 }
        /* Mark each header as read */
        do_headers_action (window, headers_action_mark_as_unread, NULL);
 }
@@ -4548,7 +4726,7 @@ modest_ui_actions_on_zoom_plus (GtkAction *action,
        modest_window_zoom_plus (MODEST_WINDOW (window));
 }
 
        modest_window_zoom_plus (MODEST_WINDOW (window));
 }
 
-void     
+void
 modest_ui_actions_on_zoom_minus (GtkAction *action,
                                 ModestWindow *window)
 {
 modest_ui_actions_on_zoom_minus (GtkAction *action,
                                 ModestWindow *window)
 {
@@ -4557,7 +4735,7 @@ modest_ui_actions_on_zoom_minus (GtkAction *action,
        modest_window_zoom_minus (MODEST_WINDOW (window));
 }
 
        modest_window_zoom_minus (MODEST_WINDOW (window));
 }
 
-void     
+void
 modest_ui_actions_on_toggle_fullscreen    (GtkToggleAction *toggle,
                                           ModestWindow *window)
 {
 modest_ui_actions_on_toggle_fullscreen    (GtkToggleAction *toggle,
                                           ModestWindow *window)
 {
@@ -4596,8 +4774,8 @@ modest_ui_actions_on_change_fullscreen (GtkAction *action,
 #endif
 }
 
 #endif
 }
 
-/* 
- * Used by modest_ui_actions_on_details to call do_headers_action 
+/*
+ * Used by modest_ui_actions_on_details to call do_headers_action
  */
 static void
 headers_action_show_details (TnyHeader *header,
  */
 static void
 headers_action_show_details (TnyHeader *header,
@@ -4605,7 +4783,18 @@ headers_action_show_details (TnyHeader *header,
                             gpointer user_data)
 
 {
                             gpointer user_data)
 
 {
-       modest_platform_run_header_details_dialog (GTK_WINDOW (window), header);
+       gboolean async_retrieval;
+       TnyMsg *msg = NULL;
+
+       if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
+               async_retrieval = TRUE;
+               msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW (window));
+       } else {
+               async_retrieval = FALSE;
+       }
+       modest_platform_run_header_details_dialog (GTK_WINDOW (window), header, async_retrieval, msg);
+       if (msg)
+               g_object_unref (msg);
 }
 
 /*
 }
 
 /*
@@ -4629,7 +4818,7 @@ modest_ui_actions_on_details (GtkAction *action,
                        g_object_unref (header);
                }
                g_object_unref (msg);
                        g_object_unref (header);
                }
                g_object_unref (msg);
-
+#ifndef MODEST_TOOLKIT_HILDON2
        } else if (MODEST_IS_MAIN_WINDOW (win)) {
                GtkWidget *folder_view, *header_view;
 
        } else if (MODEST_IS_MAIN_WINDOW (win)) {
                GtkWidget *folder_view, *header_view;
 
@@ -4641,13 +4830,13 @@ modest_ui_actions_on_details (GtkAction *action,
                                = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
                        if (!folder_store) {
                                g_warning ("%s: No item was selected.\n", __FUNCTION__);
                                = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
                        if (!folder_store) {
                                g_warning ("%s: No item was selected.\n", __FUNCTION__);
-                               return; 
+                               return;
                        }
                        /* Show only when it's a folder */
                        }
                        /* Show only when it's a folder */
-                       /* This function should not be called for account items, 
+                       /* This function should not be called for account items,
                         * because we dim the menu item for them. */
                        if (TNY_IS_FOLDER (folder_store)) {
                         * because we dim the menu item for them. */
                        if (TNY_IS_FOLDER (folder_store)) {
-                               modest_platform_run_folder_details_dialog (GTK_WINDOW (win), 
+                               modest_platform_run_folder_details_dialog (GTK_WINDOW (win),
                                                                           TNY_FOLDER (folder_store));
                        }
 
                                                                           TNY_FOLDER (folder_store));
                        }
 
@@ -4659,7 +4848,7 @@ modest_ui_actions_on_details (GtkAction *action,
                        /* Show details of each header */
                        do_headers_action (win, headers_action_show_details, header_view);
                }
                        /* Show details of each header */
                        do_headers_action (win, headers_action_show_details, header_view);
                }
-#ifdef MODEST_TOOLKIT_HILDON2
+#else
        } else if (MODEST_IS_HEADER_WINDOW (win)) {
                TnyFolder *folder;
                GtkWidget *header_view;
        } else if (MODEST_IS_HEADER_WINDOW (win)) {
                TnyFolder *folder;
                GtkWidget *header_view;
@@ -4667,7 +4856,7 @@ modest_ui_actions_on_details (GtkAction *action,
                header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (win)));
                folder = modest_header_view_get_folder (MODEST_HEADER_VIEW (header_view));
                if (folder) {
                header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (win)));
                folder = modest_header_view_get_folder (MODEST_HEADER_VIEW (header_view));
                if (folder) {
-                       modest_platform_run_folder_details_dialog (GTK_WINDOW (win), 
+                       modest_platform_run_folder_details_dialog (GTK_WINDOW (win),
                                                                   folder);
                        g_object_unref (folder);
                }
                                                                   folder);
                        g_object_unref (folder);
                }
@@ -4675,7 +4864,17 @@ modest_ui_actions_on_details (GtkAction *action,
        }
 }
 
        }
 }
 
-void     
+void
+modest_ui_actions_on_limit_error (GtkAction *action,
+                                 ModestWindow *win)
+{
+       g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win));
+
+       modest_platform_information_banner ((GtkWidget *) win, NULL, _CS("ckdg_ib_maximum_characters_reached"));
+
+}
+
+void
 modest_ui_actions_on_toggle_show_cc (GtkToggleAction *toggle,
                                     ModestMsgEditWindow *window)
 {
 modest_ui_actions_on_toggle_show_cc (GtkToggleAction *toggle,
                                     ModestMsgEditWindow *window)
 {
@@ -4684,7 +4883,7 @@ modest_ui_actions_on_toggle_show_cc (GtkToggleAction *toggle,
        modest_msg_edit_window_show_cc (window, gtk_toggle_action_get_active (toggle));
 }
 
        modest_msg_edit_window_show_cc (window, gtk_toggle_action_get_active (toggle));
 }
 
-void     
+void
 modest_ui_actions_on_toggle_show_bcc (GtkToggleAction *toggle,
                                      ModestMsgEditWindow *window)
 {
 modest_ui_actions_on_toggle_show_bcc (GtkToggleAction *toggle,
                                      ModestMsgEditWindow *window)
 {
@@ -4693,8 +4892,9 @@ modest_ui_actions_on_toggle_show_bcc (GtkToggleAction *toggle,
        modest_msg_edit_window_show_bcc (window, gtk_toggle_action_get_active (toggle));
 }
 
        modest_msg_edit_window_show_bcc (window, gtk_toggle_action_get_active (toggle));
 }
 
+#ifndef MODEST_TOOLKIT_HILDON2
 void
 void
-modest_ui_actions_toggle_folders_view (GtkAction *action, 
+modest_ui_actions_toggle_folders_view (GtkAction *action,
                                       ModestMainWindow *main_window)
 {
        g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
                                       ModestMainWindow *main_window)
 {
        g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
@@ -4704,9 +4904,10 @@ modest_ui_actions_toggle_folders_view (GtkAction *action,
        else
                modest_main_window_set_style (main_window, MODEST_MAIN_WINDOW_STYLE_SIMPLE);
 }
        else
                modest_main_window_set_style (main_window, MODEST_MAIN_WINDOW_STYLE_SIMPLE);
 }
+#endif
 
 
-void 
-modest_ui_actions_on_toggle_toolbar (GtkToggleAction *toggle, 
+void
+modest_ui_actions_on_toggle_toolbar (GtkToggleAction *toggle,
                                     ModestWindow *window)
 {
        gboolean active, fullscreen = FALSE;
                                     ModestWindow *window)
 {
        gboolean active, fullscreen = FALSE;
@@ -4716,7 +4917,7 @@ modest_ui_actions_on_toggle_toolbar (GtkToggleAction *toggle,
 
        /* Check if we want to toggle the toolbar view in fullscreen
           or normal mode */
 
        /* Check if we want to toggle the toolbar view in fullscreen
           or normal mode */
-       if (!strcmp (gtk_action_get_name (GTK_ACTION (toggle)), 
+       if (!strcmp (gtk_action_get_name (GTK_ACTION (toggle)),
                     "ViewShowToolbarFullScreen")) {
                fullscreen = TRUE;
        }
                     "ViewShowToolbarFullScreen")) {
                fullscreen = TRUE;
        }
@@ -4726,7 +4927,7 @@ modest_ui_actions_on_toggle_toolbar (GtkToggleAction *toggle,
        modest_window_mgr_show_toolbars (mgr, G_TYPE_FROM_INSTANCE (window), active, fullscreen);
 }
 
        modest_window_mgr_show_toolbars (mgr, G_TYPE_FROM_INSTANCE (window), active, fullscreen);
 }
 
-void     
+void
 modest_ui_actions_msg_edit_on_select_font (GtkAction *action,
                                           ModestMsgEditWindow *window)
 {
 modest_ui_actions_msg_edit_on_select_font (GtkAction *action,
                                           ModestMsgEditWindow *window)
 {
@@ -4894,7 +5095,7 @@ on_move_to_dialog_folder_selection_changed (ModestFolderView* self,
                        if (header)
                                g_object_unref (header);
                } else {
                        if (header)
                                g_object_unref (header);
                } else {
-                       src_folder = 
+                       src_folder =
                                TNY_FOLDER (modest_folder_view_get_selected
                                            (MODEST_FOLDER_VIEW (folder_view)));
                }
                                TNY_FOLDER (modest_folder_view_get_selected
                                            (MODEST_FOLDER_VIEW (folder_view)));
                }
@@ -4925,18 +5126,21 @@ on_move_to_dialog_response (GtkDialog *dialog,
        GtkWidget *parent_win;
        MoveToInfo *helper = NULL;
        ModestFolderView *folder_view;
        GtkWidget *parent_win;
        MoveToInfo *helper = NULL;
        ModestFolderView *folder_view;
+       gboolean unset_edit_mode = FALSE;
 
        helper = (MoveToInfo *) user_data;
 
        parent_win = (GtkWidget *) helper->win;
        folder_view = MODEST_FOLDER_VIEW (g_object_get_data (G_OBJECT (dialog),
                                                             MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
 
        helper = (MoveToInfo *) user_data;
 
        parent_win = (GtkWidget *) helper->win;
        folder_view = MODEST_FOLDER_VIEW (g_object_get_data (G_OBJECT (dialog),
                                                             MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
-
        switch (response) {
                TnyFolderStore *dst_folder;
        switch (response) {
                TnyFolderStore *dst_folder;
+               TnyFolderStore *selected;
 
        case MODEST_GTK_RESPONSE_NEW_FOLDER:
 
        case MODEST_GTK_RESPONSE_NEW_FOLDER:
-               modest_ui_actions_create_folder (GTK_WIDGET (dialog), GTK_WIDGET (folder_view));
+               selected = modest_folder_view_get_selected (folder_view);
+               modest_ui_actions_create_folder (GTK_WIDGET (dialog), GTK_WIDGET (folder_view), selected);
+               g_object_unref (selected);
                return;
        case GTK_RESPONSE_NONE:
        case GTK_RESPONSE_CANCEL:
                return;
        case GTK_RESPONSE_NONE:
        case GTK_RESPONSE_CANCEL:
@@ -4945,6 +5149,7 @@ on_move_to_dialog_response (GtkDialog *dialog,
        case GTK_RESPONSE_OK:
                dst_folder = modest_folder_view_get_selected (folder_view);
 
        case GTK_RESPONSE_OK:
                dst_folder = modest_folder_view_get_selected (folder_view);
 
+#ifndef MODEST_TOOLKIT_HILDON2
                if (MODEST_IS_MAIN_WINDOW (parent_win)) {
                        /* Clean list to move used for filtering */
                        modest_folder_view_set_list_to_move (folder_view, NULL);
                if (MODEST_IS_MAIN_WINDOW (parent_win)) {
                        /* Clean list to move used for filtering */
                        modest_folder_view_set_list_to_move (folder_view, NULL);
@@ -4953,8 +5158,8 @@ on_move_to_dialog_response (GtkDialog *dialog,
                                                                  GTK_WIDGET (folder_view),
                                                                  dst_folder,
                                                                  MODEST_MAIN_WINDOW (parent_win));
                                                                  GTK_WIDGET (folder_view),
                                                                  dst_folder,
                                                                  MODEST_MAIN_WINDOW (parent_win));
-#ifdef MODEST_TOOLKIT_HILDON2
-               } else if (MODEST_IS_FOLDER_WINDOW (parent_win)) {
+#else
+               if (MODEST_IS_FOLDER_WINDOW (parent_win)) {
                        /* Clean list to move used for filtering */
                        modest_folder_view_set_list_to_move (folder_view, NULL);
 
                        /* Clean list to move used for filtering */
                        modest_folder_view_set_list_to_move (folder_view, NULL);
 
@@ -4976,13 +5181,14 @@ on_move_to_dialog_response (GtkDialog *dialog,
 
                        /* Moving from headers window in edit mode */
                        modest_ui_actions_on_window_move_to (NULL, helper->list,
 
                        /* Moving from headers window in edit mode */
                        modest_ui_actions_on_window_move_to (NULL, helper->list,
-                                                            dst_folder, 
+                                                            dst_folder,
                                                             MODEST_WINDOW (parent_win));
                }
 
                if (dst_folder)
                        g_object_unref (dst_folder);
 
                                                             MODEST_WINDOW (parent_win));
                }
 
                if (dst_folder)
                        g_object_unref (dst_folder);
 
+               unset_edit_mode = TRUE;
                break;
        default:
                g_warning ("%s unexpected response id %d", __FUNCTION__, response);
                break;
        default:
                g_warning ("%s unexpected response id %d", __FUNCTION__, response);
@@ -4991,6 +5197,11 @@ on_move_to_dialog_response (GtkDialog *dialog,
        /* Free the helper and exit */
        if (helper->list)
                g_object_unref (helper->list);
        /* Free the helper and exit */
        if (helper->list)
                g_object_unref (helper->list);
+       if (unset_edit_mode) {
+#ifdef MODEST_TOOLKIT_HILDON2
+               modest_hildon2_window_unset_edit_mode (MODEST_HILDON2_WINDOW (helper->win));
+#endif
+       }
        g_slice_free (MoveToInfo, helper);
        gtk_widget_destroy (GTK_WIDGET (dialog));
 }
        g_slice_free (MoveToInfo, helper);
        gtk_widget_destroy (GTK_WIDGET (dialog));
 }
@@ -5023,10 +5234,10 @@ create_move_to_dialog (GtkWindow *win,
 
                modest_folder_view_set_style (MODEST_FOLDER_VIEW (tree_view),
                                              MODEST_FOLDER_VIEW_STYLE_SHOW_ALL);
 
                modest_folder_view_set_style (MODEST_FOLDER_VIEW (tree_view),
                                              MODEST_FOLDER_VIEW_STYLE_SHOW_ALL);
-               modest_folder_view_copy_model (MODEST_FOLDER_VIEW(folder_view), 
+               modest_folder_view_copy_model (MODEST_FOLDER_VIEW(folder_view),
                                               MODEST_FOLDER_VIEW(tree_view));
 
                                               MODEST_FOLDER_VIEW(tree_view));
 
-               visible_id = 
+               visible_id =
                        modest_folder_view_get_account_id_of_visible_server_account (MODEST_FOLDER_VIEW(folder_view));
 
                /* Show the same account than the one that is shown in the main window */
                        modest_folder_view_get_account_id_of_visible_server_account (MODEST_FOLDER_VIEW(folder_view));
 
                /* Show the same account than the one that is shown in the main window */
@@ -5040,8 +5251,8 @@ create_move_to_dialog (GtkWindow *win,
 
                modest_folder_view_set_style (MODEST_FOLDER_VIEW (tree_view),
                                              MODEST_FOLDER_VIEW_STYLE_SHOW_ALL);
 
                modest_folder_view_set_style (MODEST_FOLDER_VIEW (tree_view),
                                              MODEST_FOLDER_VIEW_STYLE_SHOW_ALL);
-               modest_folder_view_update_model (MODEST_FOLDER_VIEW (tree_view),
-                                                TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()));
+               /* modest_folder_view_update_model (MODEST_FOLDER_VIEW (tree_view), */
+               /*                               TNY_ACCOUNT_STORE (modest_runtime_get_account_store ())); */
 
                active_account_name = modest_window_get_active_account (MODEST_WINDOW (win));
                mgr = modest_runtime_get_account_mgr ();
 
                active_account_name = modest_window_get_active_account (MODEST_WINDOW (win));
                mgr = modest_runtime_get_account_mgr ();
@@ -5066,7 +5277,9 @@ create_move_to_dialog (GtkWindow *win,
        g_object_set_data (G_OBJECT(dialog), MODEST_MOVE_TO_DIALOG_FOLDER_VIEW, tree_view);
 
        /* Hide special folders */
        g_object_set_data (G_OBJECT(dialog), MODEST_MOVE_TO_DIALOG_FOLDER_VIEW, tree_view);
 
        /* Hide special folders */
+#ifndef MODEST_TOOLKIT_HILDON2
        modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (tree_view), FALSE);
        modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (tree_view), FALSE);
+#endif
        if (list_to_move)
                modest_folder_view_set_list_to_move (MODEST_FOLDER_VIEW (tree_view), list_to_move);
 #ifndef MODEST_TOOLKIT_HILDON2
        if (list_to_move)
                modest_folder_view_set_list_to_move (MODEST_FOLDER_VIEW (tree_view), list_to_move);
 #ifndef MODEST_TOOLKIT_HILDON2
@@ -5114,7 +5327,7 @@ modest_ui_actions_msgs_move_to_confirmation (ModestWindow *win,
        g_object_unref (iter);
 
        /* if no src_folder, message may be an attahcment */
        g_object_unref (iter);
 
        /* if no src_folder, message may be an attahcment */
-       if (src_folder == NULL) 
+       if (src_folder == NULL)
                return GTK_RESPONSE_CANCEL;
 
        /* If the source is a local or MMC folder */
                return GTK_RESPONSE_CANCEL;
 
        /* If the source is a local or MMC folder */
@@ -5157,7 +5370,7 @@ move_to_helper_destroyer (gpointer user_data)
 }
 
 static void
 }
 
 static void
-move_to_cb (ModestMailOperation *mail_op, 
+move_to_cb (ModestMailOperation *mail_op,
            gpointer user_data)
 {
        MoveToHelper *helper = (MoveToHelper *) user_data;
            gpointer user_data)
 {
        MoveToHelper *helper = (MoveToHelper *) user_data;
@@ -5165,7 +5378,7 @@ move_to_cb (ModestMailOperation *mail_op,
 
        /* Note that the operation could have failed, in that case do
           nothing */
 
        /* Note that the operation could have failed, in that case do
           nothing */
-       if (modest_mail_operation_get_status (mail_op) != 
+       if (modest_mail_operation_get_status (mail_op) !=
            MODEST_MAIL_OPERATION_STATUS_SUCCESS)
                goto frees;
 
            MODEST_MAIL_OPERATION_STATUS_SUCCESS)
                goto frees;
 
@@ -5177,7 +5390,8 @@ move_to_cb (ModestMailOperation *mail_op,
                        /* No more messages to view, so close this window */
                        modest_ui_actions_on_close_window (NULL, MODEST_WINDOW(self));
                }
                        /* No more messages to view, so close this window */
                        modest_ui_actions_on_close_window (NULL, MODEST_WINDOW(self));
                }
-       } else if (MODEST_IS_MAIN_WINDOW (object) && 
+#ifndef MODEST_TOOLKIT_HILDON2
+       } else if (MODEST_IS_MAIN_WINDOW (object) &&
                   gtk_tree_row_reference_valid (helper->reference)) {
                GtkWidget *header_view;
                GtkTreePath *path;
                   gtk_tree_row_reference_valid (helper->reference)) {
                GtkWidget *header_view;
                GtkTreePath *path;
@@ -5193,6 +5407,7 @@ move_to_cb (ModestMailOperation *mail_op,
                gtk_tree_selection_unselect_all (sel);
                gtk_tree_selection_select_path (sel, path);
                gtk_tree_path_free (path);
                gtk_tree_selection_unselect_all (sel);
                gtk_tree_selection_select_path (sel, path);
                gtk_tree_path_free (path);
+#endif
        }
        g_object_unref (object);
 
        }
        g_object_unref (object);
 
@@ -5202,15 +5417,16 @@ move_to_cb (ModestMailOperation *mail_op,
 }
 
 static void
 }
 
 static void
-folder_move_to_cb (ModestMailOperation *mail_op, 
+folder_move_to_cb (ModestMailOperation *mail_op,
                   TnyFolder *new_folder,
                   gpointer user_data)
 {
                   TnyFolder *new_folder,
                   gpointer user_data)
 {
-       GtkWidget *folder_view;
        GObject *object;
 
        object = modest_mail_operation_get_source (mail_op);
        GObject *object;
 
        object = modest_mail_operation_get_source (mail_op);
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (object)) {
        if (MODEST_IS_MAIN_WINDOW (object)) {
+               GtkWidget *folder_view;
                folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(object),
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
                g_object_ref (folder_view);
                folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(object),
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
                g_object_ref (folder_view);
@@ -5219,22 +5435,27 @@ folder_move_to_cb (ModestMailOperation *mail_op,
                modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view), new_folder, FALSE);
                g_object_unref (folder_view);
        } else {
                modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view), new_folder, FALSE);
                g_object_unref (folder_view);
        } else {
+#else
+               {
+#endif
                move_to_cb (mail_op, user_data);
        }
 }
 
 static void
                move_to_cb (mail_op, user_data);
        }
 }
 
 static void
-msgs_move_to_cb (ModestMailOperation *mail_op, 
+msgs_move_to_cb (ModestMailOperation *mail_op,
                 gpointer user_data)
 {
        move_to_cb (mail_op, user_data);
 }
 
 void
                 gpointer user_data)
 {
        move_to_cb (mail_op, user_data);
 }
 
 void
-modest_ui_actions_move_folder_error_handler (ModestMailOperation *mail_op, 
+modest_ui_actions_move_folder_error_handler (ModestMailOperation *mail_op,
                                             gpointer user_data)
 {
        GObject *win = NULL;
                                             gpointer user_data)
 {
        GObject *win = NULL;
+       const GError *error;
+       TnyAccount *account = NULL;
 
 #ifndef MODEST_TOOLKIT_HILDON2
        ModestWindow *main_window = NULL;
 
 #ifndef MODEST_TOOLKIT_HILDON2
        ModestWindow *main_window = NULL;
@@ -5242,33 +5463,48 @@ modest_ui_actions_move_folder_error_handler (ModestMailOperation *mail_op,
        /* Disable next automatic folder selection */
        main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (),
                                                         FALSE); /* don't create */
        /* Disable next automatic folder selection */
        main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (),
                                                         FALSE); /* don't create */
+
+       /* Show notification dialog only if the main window exists */
        if (main_window) {
                GtkWidget *folder_view = NULL;
 
                folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (main_window),
        if (main_window) {
                GtkWidget *folder_view = NULL;
 
                folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (main_window),
-                                                                  MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW); 
+                                                                  MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
                modest_folder_view_disable_next_folder_selection (MODEST_FOLDER_VIEW(folder_view));
 
                if (user_data && TNY_IS_FOLDER (user_data)) {
                modest_folder_view_disable_next_folder_selection (MODEST_FOLDER_VIEW(folder_view));
 
                if (user_data && TNY_IS_FOLDER (user_data)) {
-                       modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view), 
+                       modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view),
                                                          TNY_FOLDER (user_data), FALSE);
                }
        }
 #endif
                                                          TNY_FOLDER (user_data), FALSE);
                }
        }
 #endif
-       /* Show notification dialog only if the main window exists */
        win = modest_mail_operation_get_source (mail_op);
        win = modest_mail_operation_get_source (mail_op);
-       modest_platform_run_information_dialog ((GtkWindow *) win, 
-                                               _("mail_in_ui_folder_move_target_error"), 
-                                               FALSE);
+       error = modest_mail_operation_get_error (mail_op);
+
+       if (TNY_IS_FOLDER (user_data))
+               account = modest_tny_folder_get_account (TNY_FOLDER (user_data));
+       else if (TNY_IS_ACCOUNT (user_data))
+               account = g_object_ref (user_data);
+
+       /* If it's not a disk full error then show a generic error */
+       if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+                                                            (GtkWidget *) win, (GError *) error,
+                                                            account, NULL))
+               modest_platform_run_information_dialog ((GtkWindow *) win,
+                                                       _("mail_in_ui_folder_move_target_error"),
+                                                       FALSE);
+       if (account)
+               g_object_unref (account);
        if (win)
                g_object_unref (win);
 }
 
        if (win)
                g_object_unref (win);
 }
 
+#ifndef MODEST_TOOLKIT_HILDON2
 static void
 static void
-open_msg_for_purge_cb (ModestMailOperation *mail_op, 
-                      TnyHeader *header, 
+open_msg_for_purge_cb (ModestMailOperation *mail_op,
+                      TnyHeader *header,
                       gboolean canceled,
                       gboolean canceled,
-                      TnyMsg *msg, 
+                      TnyMsg *msg,
                       GError *err,
                       gpointer user_data)
 {
                       GError *err,
                       gpointer user_data)
 {
@@ -5308,7 +5544,7 @@ open_msg_for_purge_cb (ModestMailOperation *mail_op,
                tny_iterator_next (iter);
        }
        g_object_unref (iter);
                tny_iterator_next (iter);
        }
        g_object_unref (iter);
-       
+
 
        if (pending_purges>0) {
                gint response;
 
        if (pending_purges>0) {
                gint response;
@@ -5321,7 +5557,7 @@ open_msg_for_purge_cb (ModestMailOperation *mail_op,
                        iter = tny_list_create_iterator (parts);
                        while (!tny_iterator_is_done (iter)) {
                                TnyMimePart *part;
                        iter = tny_list_create_iterator (parts);
                        while (!tny_iterator_is_done (iter)) {
                                TnyMimePart *part;
-                               
+
                                part = TNY_MIME_PART (tny_iterator_get_current (iter));
                                if (part && (tny_mime_part_is_attachment (part) || TNY_IS_MSG (part)))
                                        tny_mime_part_set_purged (part);
                                part = TNY_MIME_PART (tny_iterator_get_current (iter));
                                if (part && (tny_mime_part_is_attachment (part) || TNY_IS_MSG (part)))
                                        tny_mime_part_set_purged (part);
@@ -5332,7 +5568,7 @@ open_msg_for_purge_cb (ModestMailOperation *mail_op,
                                tny_iterator_next (iter);
                        }
                        g_object_unref (iter);
                                tny_iterator_next (iter);
                        }
                        g_object_unref (iter);
-                       
+
                        tny_msg_rewrite_cache (msg);
 
                        gtk_widget_destroy (info);
                        tny_msg_rewrite_cache (msg);
 
                        gtk_widget_destroy (info);
@@ -5365,30 +5601,30 @@ modest_ui_actions_on_main_window_remove_attachments (GtkAction *action,
                g_warning ("%s: no header selected", __FUNCTION__);
                return;
        }
                g_warning ("%s: no header selected", __FUNCTION__);
                return;
        }
-       
+
        if (tny_list_get_length (header_list) == 1) {
                TnyIterator *iter = tny_list_create_iterator (header_list);
                header = TNY_HEADER (tny_iterator_get_current (iter));
                g_object_unref (iter);
        } else
                return;
        if (tny_list_get_length (header_list) == 1) {
                TnyIterator *iter = tny_list_create_iterator (header_list);
                header = TNY_HEADER (tny_iterator_get_current (iter));
                g_object_unref (iter);
        } else
                return;
-       
+
        if (!header || !TNY_IS_HEADER(header)) {
                g_warning ("%s: header is not valid", __FUNCTION__);
                return;
        }
        if (!header || !TNY_IS_HEADER(header)) {
                g_warning ("%s: header is not valid", __FUNCTION__);
                return;
        }
-       
+
        found = modest_window_mgr_find_registered_header (modest_runtime_get_window_mgr (),
                                                          header, &msg_view_window);
        flags = tny_header_get_flags (header);
        if (!(flags & TNY_HEADER_FLAG_CACHED))
                return;
        if (found) {
        found = modest_window_mgr_find_registered_header (modest_runtime_get_window_mgr (),
                                                          header, &msg_view_window);
        flags = tny_header_get_flags (header);
        if (!(flags & TNY_HEADER_FLAG_CACHED))
                return;
        if (found) {
-               if (msg_view_window != NULL) 
+               if (msg_view_window != NULL)
                        modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (msg_view_window), TRUE);
                else {
                        /* do nothing; uid was registered before, so window is probably on it's way */
                        modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (msg_view_window), TRUE);
                else {
                        /* do nothing; uid was registered before, so window is probably on it's way */
-                       g_warning ("debug: header %p has already been registered", header);
+                       g_debug ("header %p has already been registered", header);
                }
        } else {
                ModestMailOperation *mail_op = NULL;
                }
        } else {
                ModestMailOperation *mail_op = NULL;
@@ -5398,7 +5634,7 @@ modest_ui_actions_on_main_window_remove_attachments (GtkAction *action,
                                                                         NULL, NULL);
                modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
                modest_mail_operation_get_msg (mail_op, header, FALSE, open_msg_for_purge_cb, win);
                                                                         NULL, NULL);
                modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
                modest_mail_operation_get_msg (mail_op, header, FALSE, open_msg_for_purge_cb, win);
-               
+
                g_object_unref (mail_op);
        }
        if (header)
                g_object_unref (mail_op);
        }
        if (header)
@@ -5406,6 +5642,7 @@ modest_ui_actions_on_main_window_remove_attachments (GtkAction *action,
        if (header_list)
                g_object_unref (header_list);
 }
        if (header_list)
                g_object_unref (header_list);
 }
+#endif
 
 /*
  * Checks if we need a connection to do the transfer and if the user
 
 /*
  * Checks if we need a connection to do the transfer and if the user
@@ -5437,7 +5674,7 @@ modest_ui_actions_xfer_messages_check (GtkWindow *parent_window,
 
        /* We must ask for a connection when
         *
 
        /* We must ask for a connection when
         *
-        *   - the message(s) is not already cached   OR 
+        *   - the message(s) is not already cached   OR
         *   - the message(s) is cached but the leave_on_server setting
         * is FALSE (because we need to sync the source folder to
         * delete the message from the server (for IMAP we could do it
         *   - the message(s) is cached but the leave_on_server setting
         * is FALSE (because we need to sync the source folder to
         * delete the message from the server (for IMAP we could do it
@@ -5487,22 +5724,29 @@ modest_ui_actions_xfer_messages_check (GtkWindow *parent_window,
 }
 
 static void
 }
 
 static void
-xfer_messages_error_handler (ModestMailOperation *mail_op, 
+xfer_messages_error_handler (ModestMailOperation *mail_op,
                             gpointer user_data)
 {
        GObject *win;
        const GError *error;
                             gpointer user_data)
 {
        GObject *win;
        const GError *error;
+       TnyAccount *account;
 
        win = modest_mail_operation_get_source (mail_op);
        error = modest_mail_operation_get_error (mail_op);
 
 
        win = modest_mail_operation_get_source (mail_op);
        error = modest_mail_operation_get_error (mail_op);
 
-       if (error && is_memory_full_error ((GError *) error, mail_op))
-               modest_platform_information_banner ((GtkWidget *) win,
-                                                   NULL, _KR("cerm_device_memory_full"));
-       else
-               modest_platform_run_information_dialog ((GtkWindow *) win, 
-                                                       _("mail_in_ui_folder_move_target_error"), 
+       /* We cannot get the account from the mail op as that is the
+          source account and for checking memory full conditions we
+          need the destination one */
+       account = TNY_ACCOUNT (user_data);
+
+       if (error &&
+           !modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+                                                            (GtkWidget *) win, (GError*) error,
+                                                            account, _KR("cerm_memory_card_full"))) {
+               modest_platform_run_information_dialog ((GtkWindow *) win,
+                                                       _("mail_in_ui_folder_move_target_error"),
                                                        FALSE);
                                                        FALSE);
+       }
        if (win)
                g_object_unref (win);
 }
        if (win)
                g_object_unref (win);
 }
@@ -5517,10 +5761,10 @@ typedef struct {
  * and the msg view window when using the "Move to" dialog
  */
 static void
  * and the msg view window when using the "Move to" dialog
  */
 static void
-xfer_messages_performer  (gboolean canceled, 
+xfer_messages_performer  (gboolean canceled,
                          GError *err,
                          GError *err,
-                         GtkWindow *parent_window, 
-                         TnyAccount *account, 
+                         GtkWindow *parent_window,
+                         TnyAccount *account,
                          gpointer user_data)
 {
        ModestWindow *win = MODEST_WINDOW (parent_window);
                          gpointer user_data)
 {
        ModestWindow *win = MODEST_WINDOW (parent_window);
@@ -5533,7 +5777,9 @@ xfer_messages_performer  (gboolean canceled,
        helper = (XferMsgsHelper *) user_data;
 
        if (canceled || err) {
        helper = (XferMsgsHelper *) user_data;
 
        if (canceled || err) {
-               if (!check_memory_full_error ((GtkWidget *) parent_window, err)) {
+               if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+                                                                    (GtkWidget *) parent_window, err,
+                                                                    account, NULL)) {
                        /* Show the proper error message */
                        modest_ui_actions_on_account_connection_error (parent_window, account);
                }
                        /* Show the proper error message */
                        modest_ui_actions_on_account_connection_error (parent_window, account);
                }
@@ -5545,8 +5791,7 @@ xfer_messages_performer  (gboolean canceled,
        /* tinymail will return NULL for local folders it seems */
        dst_forbids_message_add = modest_protocol_registry_protocol_type_has_tag (modest_runtime_get_protocol_registry (),
                                                                                  modest_tny_account_get_protocol_type (dst_account),
        /* tinymail will return NULL for local folders it seems */
        dst_forbids_message_add = modest_protocol_registry_protocol_type_has_tag (modest_runtime_get_protocol_registry (),
                                                                                  modest_tny_account_get_protocol_type (dst_account),
-                                                                                 MODEST_PROTOCOL_REGISTRY_STORE_FORBID_MESSAGE_ADD);
-       g_object_unref (dst_account);
+                                                                                 MODEST_PROTOCOL_REGISTRY_STORE_FORBID_INCOMING_XFERS);
 
        if (dst_forbids_message_add) {
                modest_platform_information_banner (GTK_WIDGET (win),
 
        if (dst_forbids_message_add) {
                modest_platform_information_banner (GTK_WIDGET (win),
@@ -5566,23 +5811,24 @@ xfer_messages_performer  (gboolean canceled,
                g_object_ref (movehelper->banner);
                gtk_widget_show (GTK_WIDGET (movehelper->banner));
        }
                g_object_ref (movehelper->banner);
                gtk_widget_show (GTK_WIDGET (movehelper->banner));
        }
-#endif
 
        if (MODEST_IS_MAIN_WINDOW (win)) {
 
        if (MODEST_IS_MAIN_WINDOW (win)) {
-               GtkWidget *header_view = 
+               GtkWidget *header_view =
                        modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
                                                             MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
                movehelper->reference = get_next_after_selected_headers (MODEST_HEADER_VIEW (header_view));
        }
                        modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
                                                             MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
                movehelper->reference = get_next_after_selected_headers (MODEST_HEADER_VIEW (header_view));
        }
+#endif
 
        /* Perform the mail operation */
        mail_op = modest_mail_operation_new_with_error_handling (G_OBJECT(win),
                                                                 xfer_messages_error_handler,
 
        /* Perform the mail operation */
        mail_op = modest_mail_operation_new_with_error_handling (G_OBJECT(win),
                                                                 xfer_messages_error_handler,
-                                                                movehelper, NULL);
-       modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), 
+                                                                g_object_ref (dst_account),
+                                                                g_object_unref);
+       modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                         mail_op);
 
                                         mail_op);
 
-       modest_mail_operation_xfer_msgs (mail_op, 
+       modest_mail_operation_xfer_msgs (mail_op,
                                         helper->headers,
                                         TNY_FOLDER (helper->dst_folder),
                                         TRUE,
                                         helper->headers,
                                         TNY_FOLDER (helper->dst_folder),
                                         TRUE,
@@ -5591,6 +5837,8 @@ xfer_messages_performer  (gboolean canceled,
 
        g_object_unref (G_OBJECT (mail_op));
  end:
 
        g_object_unref (G_OBJECT (mail_op));
  end:
+       if (dst_account)
+               g_object_unref (dst_account);
        g_object_unref (helper->dst_folder);
        g_object_unref (helper->headers);
        g_slice_free (XferMsgsHelper, helper);
        g_object_unref (helper->dst_folder);
        g_object_unref (helper->headers);
        g_slice_free (XferMsgsHelper, helper);
@@ -5604,14 +5852,25 @@ typedef struct {
 } MoveFolderInfo;
 
 static void
 } MoveFolderInfo;
 
 static void
-on_move_folder_cb (gboolean canceled, GError *err, GtkWindow *parent_window, 
-               TnyAccount *account, gpointer user_data)
+on_move_folder_cb (gboolean canceled,
+                  GError *err,
+                  GtkWindow *parent_window,
+                  TnyAccount *account,
+                  gpointer user_data)
 {
        MoveFolderInfo *info = (MoveFolderInfo*)user_data;
        GtkTreeSelection *sel;
        ModestMailOperation *mail_op = NULL;
 
        if (canceled || err || !MODEST_IS_WINDOW (parent_window)) {
 {
        MoveFolderInfo *info = (MoveFolderInfo*)user_data;
        GtkTreeSelection *sel;
        ModestMailOperation *mail_op = NULL;
 
        if (canceled || err || !MODEST_IS_WINDOW (parent_window)) {
+               /* Note that the connection process can fail due to
+                  memory low conditions as it can not successfully
+                  store the summary */
+               if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+                                                                    (GtkWidget*) parent_window, err,
+                                                                    account, NULL))
+                       g_debug ("Error connecting when trying to move a folder");
+
                g_object_unref (G_OBJECT (info->src_folder));
                g_object_unref (G_OBJECT (info->dst_folder));
                g_free (info);
                g_object_unref (G_OBJECT (info->src_folder));
                g_object_unref (G_OBJECT (info->dst_folder));
                g_free (info);
@@ -5636,37 +5895,34 @@ on_move_folder_cb (gboolean canceled, GError *err, GtkWindow *parent_window,
           folder *before* issuing the mail operation
           so we need the signal handler of selection
           changed to happen before the mail
           folder *before* issuing the mail operation
           so we need the signal handler of selection
           changed to happen before the mail
-          operation 
+          operation
        while (gtk_events_pending ())
                gtk_main_iteration ();   */
 
        mail_op =
                modest_mail_operation_new_with_error_handling (G_OBJECT(parent_window),
        while (gtk_events_pending ())
                gtk_main_iteration ();   */
 
        mail_op =
                modest_mail_operation_new_with_error_handling (G_OBJECT(parent_window),
-                               modest_ui_actions_move_folder_error_handler,
-                               info->src_folder, NULL);
+                                                              modest_ui_actions_move_folder_error_handler,
+                                                              g_object_ref (info->dst_folder), g_object_unref);
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
-                       mail_op);
-
-       /* Select *after* the changes */
-       /* TODO: this function hangs UI after transfer */ 
-       /*                      modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view), */
-       /*                                                        TNY_FOLDER (src_folder), TRUE); */
+                                        mail_op);
 
 
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (parent_window)) {
                modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view),
                                                  TNY_FOLDER (info->dst_folder), TRUE);
        }
        if (MODEST_IS_MAIN_WINDOW (parent_window)) {
                modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view),
                                                  TNY_FOLDER (info->dst_folder), TRUE);
        }
+#endif
        modest_mail_operation_xfer_folder (mail_op,
                        TNY_FOLDER (info->src_folder),
                        info->dst_folder,
        modest_mail_operation_xfer_folder (mail_op,
                        TNY_FOLDER (info->src_folder),
                        info->dst_folder,
-                       info->delete_original, 
-                       folder_move_to_cb, 
+                       info->delete_original,
+                       folder_move_to_cb,
                        helper);
        g_object_unref (G_OBJECT (info->src_folder));
 
        /* if (modest_mail_operation_get_status (mail_op) == MODEST_MAIL_OPERATION_STATUS_SUCCESS) {        */
        /* } */
                        helper);
        g_object_unref (G_OBJECT (info->src_folder));
 
        /* if (modest_mail_operation_get_status (mail_op) == MODEST_MAIL_OPERATION_STATUS_SUCCESS) {        */
        /* } */
-       
+
        /* Unref mail operation */
        g_object_unref (G_OBJECT (mail_op));
        g_object_unref (G_OBJECT (info->dst_folder));
        /* Unref mail operation */
        g_object_unref (G_OBJECT (mail_op));
        g_object_unref (G_OBJECT (info->dst_folder));
@@ -5674,7 +5930,7 @@ on_move_folder_cb (gboolean canceled, GError *err, GtkWindow *parent_window,
 }
 
 static TnyAccount *
 }
 
 static TnyAccount *
-get_account_from_folder_store (TnyFolderStore *folder_store) 
+get_account_from_folder_store (TnyFolderStore *folder_store)
 {
        if (TNY_IS_ACCOUNT (folder_store))
                return g_object_ref (folder_store);
 {
        if (TNY_IS_ACCOUNT (folder_store))
                return g_object_ref (folder_store);
@@ -5682,12 +5938,13 @@ get_account_from_folder_store (TnyFolderStore *folder_store)
                return tny_folder_get_account (TNY_FOLDER (folder_store));
 }
 
                return tny_folder_get_account (TNY_FOLDER (folder_store));
 }
 
+#ifndef MODEST_TOOLKIT_HILDON2
 /*
  * UI handler for the "Move to" action when invoked from the
  * ModestMainWindow
  */
 /*
  * UI handler for the "Move to" action when invoked from the
  * ModestMainWindow
  */
-static void 
-modest_ui_actions_on_main_window_move_to (GtkAction *action, 
+static void
+modest_ui_actions_on_main_window_move_to (GtkAction *action,
                                          GtkWidget *folder_view,
                                          TnyFolderStore *dst_folder,
                                          ModestMainWindow *win)
                                          GtkWidget *folder_view,
                                          TnyFolderStore *dst_folder,
                                          ModestMainWindow *win)
@@ -5709,7 +5966,7 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action,
                gboolean do_xfer = TRUE;
 
                /* Allow only to transfer folders to the local root folder */
                gboolean do_xfer = TRUE;
 
                /* Allow only to transfer folders to the local root folder */
-               if (TNY_IS_ACCOUNT (dst_folder) && 
+               if (TNY_IS_ACCOUNT (dst_folder) &&
                    !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (dst_folder) &&
                    !modest_tny_account_is_memory_card_account (TNY_ACCOUNT (dst_folder))) {
                        do_xfer = FALSE;
                    !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (dst_folder) &&
                    !modest_tny_account_is_memory_card_account (TNY_ACCOUNT (dst_folder))) {
                        do_xfer = FALSE;
@@ -5732,7 +5989,7 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action,
                        connect_info->data = info;
 
                        modest_platform_double_connect_and_perform(GTK_WINDOW (win), TRUE,
                        connect_info->data = info;
 
                        modest_platform_double_connect_and_perform(GTK_WINDOW (win), TRUE,
-                                                                  TNY_FOLDER_STORE (src_folder), 
+                                                                  TNY_FOLDER_STORE (src_folder),
                                                                   connect_info);
                }
        } else if (gtk_widget_is_focus (GTK_WIDGET(header_view))) {
                                                                   connect_info);
                }
        } else if (gtk_widget_is_focus (GTK_WIDGET(header_view))) {
@@ -5741,7 +5998,7 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action,
                headers = modest_header_view_get_selected_headers(header_view);
 
                /* Transfer the messages */
                headers = modest_header_view_get_selected_headers(header_view);
 
                /* Transfer the messages */
-               modest_ui_actions_transfer_messages_helper (GTK_WINDOW (win), TNY_FOLDER (src_folder), 
+               modest_ui_actions_transfer_messages_helper (GTK_WINDOW (win), TNY_FOLDER (src_folder),
                                                            headers, TNY_FOLDER (dst_folder));
 
                g_object_unref (headers);
                                                            headers, TNY_FOLDER (dst_folder));
 
                g_object_unref (headers);
@@ -5750,13 +6007,14 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action,
        /* Frees */
        g_object_unref (src_folder);
 }
        /* Frees */
        g_object_unref (src_folder);
 }
+#endif
 
 #ifdef MODEST_TOOLKIT_HILDON2
 /*
  * UI handler for the "Move to" action when invoked from the
  * ModestFolderWindow
  */
 
 #ifdef MODEST_TOOLKIT_HILDON2
 /*
  * UI handler for the "Move to" action when invoked from the
  * ModestFolderWindow
  */
-static void 
+static void
 modest_ui_actions_on_folder_window_move_to (GtkWidget *folder_view,
                                            TnyFolderStore *dst_folder,
                                            TnyList *selection,
 modest_ui_actions_on_folder_window_move_to (GtkWidget *folder_view,
                                            TnyFolderStore *dst_folder,
                                            TnyList *selection,
@@ -5776,7 +6034,7 @@ modest_ui_actions_on_folder_window_move_to (GtkWidget *folder_view,
        gboolean do_xfer = TRUE;
 
        /* Allow only to transfer folders to the local root folder */
        gboolean do_xfer = TRUE;
 
        /* Allow only to transfer folders to the local root folder */
-       if (TNY_IS_ACCOUNT (dst_folder) && 
+       if (TNY_IS_ACCOUNT (dst_folder) &&
            !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (dst_folder) &&
            !modest_tny_account_is_memory_card_account (TNY_ACCOUNT (dst_folder))) {
                do_xfer = FALSE;
            !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (dst_folder) &&
            !modest_tny_account_is_memory_card_account (TNY_ACCOUNT (dst_folder))) {
                do_xfer = FALSE;
@@ -5803,7 +6061,7 @@ modest_ui_actions_on_folder_window_move_to (GtkWidget *folder_view,
                connect_info->data = info;
 
                modest_platform_double_connect_and_perform(GTK_WINDOW (win), TRUE,
                connect_info->data = info;
 
                modest_platform_double_connect_and_perform(GTK_WINDOW (win), TRUE,
-                                                          TNY_FOLDER_STORE (src_folder), 
+                                                          TNY_FOLDER_STORE (src_folder),
                                                           connect_info);
        }
 
                                                           connect_info);
        }
 
@@ -5826,10 +6084,10 @@ modest_ui_actions_transfer_messages_helper (GtkWindow *win,
        g_return_if_fail (TNY_IS_FOLDER (src_folder));
        g_return_if_fail (TNY_IS_FOLDER (dst_folder));
        g_return_if_fail (TNY_IS_LIST (headers));
        g_return_if_fail (TNY_IS_FOLDER (src_folder));
        g_return_if_fail (TNY_IS_FOLDER (dst_folder));
        g_return_if_fail (TNY_IS_LIST (headers));
-       
-       modest_ui_actions_xfer_messages_check (win, TNY_FOLDER_STORE (src_folder), 
+
+       modest_ui_actions_xfer_messages_check (win, TNY_FOLDER_STORE (src_folder),
                                               headers, TNY_FOLDER (dst_folder),
                                               headers, TNY_FOLDER (dst_folder),
-                                              TRUE, &need_connection, 
+                                              TRUE, &need_connection,
                                               &do_xfer);
 
        /* If we don't want to transfer just return */
                                               &do_xfer);
 
        /* If we don't want to transfer just return */
@@ -5846,9 +6104,9 @@ modest_ui_actions_transfer_messages_helper (GtkWindow *win,
                connect_info->callback = xfer_messages_performer;
                connect_info->dst_account = tny_folder_get_account (TNY_FOLDER (dst_folder));
                connect_info->data = helper;
                connect_info->callback = xfer_messages_performer;
                connect_info->dst_account = tny_folder_get_account (TNY_FOLDER (dst_folder));
                connect_info->data = helper;
-               
+
                modest_platform_double_connect_and_perform(GTK_WINDOW (win), TRUE,
                modest_platform_double_connect_and_perform(GTK_WINDOW (win), TRUE,
-                                                          TNY_FOLDER_STORE (src_folder), 
+                                                          TNY_FOLDER_STORE (src_folder),
                                                           connect_info);
        } else {
                TnyAccount *src_account = get_account_from_folder_store (TNY_FOLDER_STORE (src_folder));
                                                           connect_info);
        } else {
                TnyAccount *src_account = get_account_from_folder_store (TNY_FOLDER_STORE (src_folder));
@@ -5881,7 +6139,7 @@ modest_ui_actions_on_window_move_to (GtkAction *action,
                src_folder = tny_header_get_folder (header);
 
                /* Transfer the messages */
                src_folder = tny_header_get_folder (header);
 
                /* Transfer the messages */
-               modest_ui_actions_transfer_messages_helper (GTK_WINDOW (win), src_folder, 
+               modest_ui_actions_transfer_messages_helper (GTK_WINDOW (win), src_folder,
                                                            headers,
                                                            TNY_FOLDER (dst_folder));
 
                                                            headers,
                                                            TNY_FOLDER (dst_folder));
 
@@ -5892,14 +6150,14 @@ modest_ui_actions_on_window_move_to (GtkAction *action,
        }
 }
 
        }
 }
 
-void 
-modest_ui_actions_on_move_to (GtkAction *action, 
+void
+modest_ui_actions_on_move_to (GtkAction *action,
                              ModestWindow *win)
 {
        modest_ui_actions_on_edit_mode_move_to (win);
 }
 
                              ModestWindow *win)
 {
        modest_ui_actions_on_edit_mode_move_to (win);
 }
 
-gboolean 
+gboolean
 modest_ui_actions_on_edit_mode_move_to (ModestWindow *win)
 {
        GtkWidget *dialog = NULL;
 modest_ui_actions_on_edit_mode_move_to (ModestWindow *win)
 {
        GtkWidget *dialog = NULL;
@@ -5914,7 +6172,7 @@ modest_ui_actions_on_edit_mode_move_to (ModestWindow *win)
        if (MODEST_IS_MAIN_WINDOW (win))
                main_window = MODEST_MAIN_WINDOW (win);
        else
        if (MODEST_IS_MAIN_WINDOW (win))
                main_window = MODEST_MAIN_WINDOW (win);
        else
-               main_window = 
+               main_window =
                        MODEST_MAIN_WINDOW (modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (),
                                                                               FALSE)); /* don't create */
 #endif
                        MODEST_MAIN_WINDOW (modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (),
                                                                               FALSE)); /* don't create */
 #endif
@@ -5931,8 +6189,8 @@ modest_ui_actions_on_edit_mode_move_to (ModestWindow *win)
 
        /* Create and run the dialog */
        dialog = create_move_to_dialog (GTK_WINDOW (win), NULL, list_to_move);
 
        /* Create and run the dialog */
        dialog = create_move_to_dialog (GTK_WINDOW (win), NULL, list_to_move);
-       modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), 
-                                    GTK_WINDOW (dialog), 
+       modest_window_mgr_set_modal (modest_runtime_get_window_mgr (),
+                                    GTK_WINDOW (dialog),
                                     (GtkWindow *) win);
 
        /* Create helper */
                                     (GtkWindow *) win);
 
        /* Create helper */
@@ -5946,7 +6204,7 @@ modest_ui_actions_on_edit_mode_move_to (ModestWindow *win)
        /* Show the dialog */
        gtk_widget_show (dialog);
 
        /* Show the dialog */
        gtk_widget_show (dialog);
 
-       return TRUE;
+       return FALSE;
 }
 
 /*
 }
 
 /*
@@ -5954,7 +6212,7 @@ modest_ui_actions_on_edit_mode_move_to (ModestWindow *win)
  * window or the message currently being shown in the msg view window
  */
 static void
  * window or the message currently being shown in the msg view window
  */
 static void
-do_headers_action (ModestWindow *win, 
+do_headers_action (ModestWindow *win,
                   HeadersFunc func,
                   gpointer user_data)
 {
                   HeadersFunc func,
                   gpointer user_data)
 {
@@ -5996,7 +6254,7 @@ do_headers_action (ModestWindow *win,
        g_object_unref (headers_list);
 }
 
        g_object_unref (headers_list);
 }
 
-void 
+void
 modest_ui_actions_view_attachment (GtkAction *action,
                                   ModestWindow *window)
 {
 modest_ui_actions_view_attachment (GtkAction *action,
                                   ModestWindow *window)
 {
@@ -6028,9 +6286,13 @@ void
 modest_ui_actions_remove_attachments (GtkAction *action,
                                      ModestWindow *window)
 {
 modest_ui_actions_remove_attachments (GtkAction *action,
                                      ModestWindow *window)
 {
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (window)) {
                modest_ui_actions_on_main_window_remove_attachments (action, MODEST_MAIN_WINDOW (window));
        } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
        if (MODEST_IS_MAIN_WINDOW (window)) {
                modest_ui_actions_on_main_window_remove_attachments (action, MODEST_MAIN_WINDOW (window));
        } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
+#else
+       if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
+#endif
                modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (window), FALSE);
        } else {
                /* not supported window for this action */
                modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (window), FALSE);
        } else {
                /* not supported window for this action */
@@ -6038,8 +6300,8 @@ modest_ui_actions_remove_attachments (GtkAction *action,
        }
 }
 
        }
 }
 
-void 
-modest_ui_actions_on_settings (GtkAction *action, 
+void
+modest_ui_actions_on_settings (GtkAction *action,
                               ModestWindow *win)
 {
        GtkWidget *dialog;
                               ModestWindow *win)
 {
        GtkWidget *dialog;
@@ -6054,8 +6316,8 @@ modest_ui_actions_on_settings (GtkAction *action,
        gtk_widget_destroy (dialog);
 }
 
        gtk_widget_destroy (dialog);
 }
 
-void 
-modest_ui_actions_on_help (GtkAction *action, 
+void
+modest_ui_actions_on_help (GtkAction *action,
                           GtkWindow *win)
 {
        /* Help app is not available at all in fremantle */
                           GtkWindow *win)
 {
        /* Help app is not available at all in fremantle */
@@ -6063,7 +6325,7 @@ modest_ui_actions_on_help (GtkAction *action,
        const gchar *help_id;
 
        g_return_if_fail (win && GTK_IS_WINDOW(win));
        const gchar *help_id;
 
        g_return_if_fail (win && GTK_IS_WINDOW(win));
-       
+
        help_id = modest_window_mgr_get_help_id (modest_runtime_get_window_mgr(), win);
 
         if (help_id)
        help_id = modest_window_mgr_get_help_id (modest_runtime_get_window_mgr(), win);
 
         if (help_id)
@@ -6071,8 +6333,8 @@ modest_ui_actions_on_help (GtkAction *action,
 #endif
 }
 
 #endif
 }
 
-void 
-modest_ui_actions_on_csm_help (GtkAction *action, 
+void
+modest_ui_actions_on_csm_help (GtkAction *action,
                               GtkWindow *win)
 {
        /* Help app is not available at all in fremantle */
                               GtkWindow *win)
 {
        /* Help app is not available at all in fremantle */
@@ -6103,9 +6365,9 @@ modest_ui_actions_on_csm_help (GtkAction *action,
 #endif
 }
 
 #endif
 }
 
-static void     
-retrieve_contents_cb (ModestMailOperation *mail_op, 
-                     TnyHeader *header, 
+static void
+retrieve_contents_cb (ModestMailOperation *mail_op,
+                     TnyHeader *header,
                      gboolean canceled,
                      TnyMsg *msg,
                      GError *err,
                      gboolean canceled,
                      TnyMsg *msg,
                      GError *err,
@@ -6113,27 +6375,31 @@ retrieve_contents_cb (ModestMailOperation *mail_op,
 {
        /* We only need this callback to show an error in case of
           memory low condition */
 {
        /* We only need this callback to show an error in case of
           memory low condition */
-       modest_ui_actions_msg_retrieval_check (mail_op, header, msg);
+       if (!modest_ui_actions_msg_retrieval_check (mail_op, header, msg)) {
+               g_debug ("%s: message failed to retrieve. Memory low?", __FUNCTION__);
+       }
 }
 
 static void
 }
 
 static void
-retrieve_msg_contents_performer (gboolean canceled, 
+retrieve_msg_contents_performer (gboolean canceled,
                                 GError *err,
                                 GError *err,
-                                GtkWindow *parent_window, 
-                                TnyAccount *account, 
+                                GtkWindow *parent_window,
+                                TnyAccount *account,
                                 gpointer user_data)
 {
        ModestMailOperation *mail_op;
        TnyList *headers = TNY_LIST (user_data);
 
        if (err || canceled) {
                                 gpointer user_data)
 {
        ModestMailOperation *mail_op;
        TnyList *headers = TNY_LIST (user_data);
 
        if (err || canceled) {
-               check_memory_full_error ((GtkWidget *) parent_window, err);
+               modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+                                                               (GtkWidget *) parent_window, err,
+                                                               account, NULL);
                goto out;
        }
 
        /* Create mail operation */
        mail_op = modest_mail_operation_new_with_error_handling ((GObject *) parent_window,
                goto out;
        }
 
        /* Create mail operation */
        mail_op = modest_mail_operation_new_with_error_handling ((GObject *) parent_window,
-                                                                modest_ui_actions_disk_operations_error_handler, 
+                                                                modest_ui_actions_disk_operations_error_handler,
                                                                 NULL, NULL);
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
        modest_mail_operation_get_msgs_full (mail_op, headers, retrieve_contents_cb, NULL, NULL);
                                                                 NULL, NULL);
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
        modest_mail_operation_get_msgs_full (mail_op, headers, retrieve_contents_cb, NULL, NULL);
@@ -6145,7 +6411,7 @@ retrieve_msg_contents_performer (gboolean canceled,
        g_object_unref (account);
 }
 
        g_object_unref (account);
 }
 
-void 
+void
 modest_ui_actions_on_retrieve_msg_contents (GtkAction *action,
                                            ModestWindow *window)
 {
 modest_ui_actions_on_retrieve_msg_contents (GtkAction *action,
                                            ModestWindow *window)
 {
@@ -6171,8 +6437,8 @@ modest_ui_actions_on_retrieve_msg_contents (GtkAction *action,
 
        /* Connect and perform the message retrieval */
        modest_platform_connect_and_perform ((GtkWindow *) window, TRUE,
 
        /* Connect and perform the message retrieval */
        modest_platform_connect_and_perform ((GtkWindow *) window, TRUE,
-                                            g_object_ref (account), 
-                                            retrieve_msg_contents_performer, 
+                                            g_object_ref (account),
+                                            retrieve_msg_contents_performer,
                                             g_object_ref (headers));
 
        /* Frees */
                                             g_object_ref (headers));
 
        /* Frees */
@@ -6203,7 +6469,7 @@ modest_ui_actions_on_email_menu_activated (GtkAction *action,
                                          ModestWindow *window)
 {
        g_return_if_fail (MODEST_IS_WINDOW (window));
                                          ModestWindow *window)
 {
        g_return_if_fail (MODEST_IS_WINDOW (window));
-       
+
        /* Update dimmed */
        modest_ui_actions_check_menu_dimming_rules (window);
 }
        /* Update dimmed */
        modest_ui_actions_check_menu_dimming_rules (window);
 }
@@ -6298,11 +6564,11 @@ modest_ui_actions_on_search_messages (GtkAction *action, ModestWindow *window)
         */
        if (modest_platform_check_memory_low (window, TRUE))
                return;
         */
        if (modest_platform_check_memory_low (window, TRUE))
                return;
-       
+
        modest_platform_show_search_messages (GTK_WINDOW (window));
 }
 
        modest_platform_show_search_messages (GTK_WINDOW (window));
 }
 
-void     
+void
 modest_ui_actions_on_open_addressbook (GtkAction *action, ModestWindow *win)
 {
        g_return_if_fail (MODEST_IS_WINDOW (win));
 modest_ui_actions_on_open_addressbook (GtkAction *action, ModestWindow *win)
 {
        g_return_if_fail (MODEST_IS_WINDOW (win));
@@ -6331,48 +6597,49 @@ modest_ui_actions_on_toggle_find_in_page (GtkAction *action,
        else
                active = TRUE;
 
        else
                active = TRUE;
 
-       modest_msg_edit_window_toggle_find_toolbar (MODEST_MSG_EDIT_WINDOW (window), 
-                                                   active);
+       modest_msg_edit_window_toggle_isearch_toolbar (MODEST_MSG_EDIT_WINDOW (window),
+                                                      active);
 }
 
 }
 
-static void 
-on_send_receive_finished (ModestMailOperation  *mail_op, 
+#ifndef MODEST_TOOLKIT_HILDON2
+static void
+on_send_receive_finished (ModestMailOperation  *mail_op,
                           gpointer user_data)
 {
        GtkWidget *header_view, *folder_view;
        TnyFolderStore *folder_store;
        ModestMainWindow *main_win = MODEST_MAIN_WINDOW (user_data);
 
                           gpointer user_data)
 {
        GtkWidget *header_view, *folder_view;
        TnyFolderStore *folder_store;
        ModestMainWindow *main_win = MODEST_MAIN_WINDOW (user_data);
 
-       /* Set send/receive operation finished */       
+       /* Set send/receive operation finished */
        modest_main_window_notify_send_receive_completed (main_win);
 
        /* Don't refresh the current folder if there were any errors */
        if (modest_mail_operation_get_status (mail_op) !=
            MODEST_MAIL_OPERATION_STATUS_SUCCESS)
                return;
        modest_main_window_notify_send_receive_completed (main_win);
 
        /* Don't refresh the current folder if there were any errors */
        if (modest_mail_operation_get_status (mail_op) !=
            MODEST_MAIL_OPERATION_STATUS_SUCCESS)
                return;
-       
+
        /* Refresh the current folder if we're viewing a window. We do
           this because the user won't be able to see the new mails in
           the selected folder after a Send&Receive because it only
           performs a poke_status, i.e, only the number of read/unread
           messages is updated, but the new headers are not
           downloaded */
        /* Refresh the current folder if we're viewing a window. We do
           this because the user won't be able to see the new mails in
           the selected folder after a Send&Receive because it only
           performs a poke_status, i.e, only the number of read/unread
           messages is updated, but the new headers are not
           downloaded */
-       folder_view = modest_main_window_get_child_widget (main_win, 
+       folder_view = modest_main_window_get_child_widget (main_win,
                                                           MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
        if (!folder_view)
                return;
 
        folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
                                                           MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
        if (!folder_view)
                return;
 
        folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
-       
+
        /* Do not need to refresh INBOX again because the
           update_account does it always automatically */
        /* Do not need to refresh INBOX again because the
           update_account does it always automatically */
-       if (folder_store && TNY_IS_FOLDER (folder_store) && 
+       if (folder_store && TNY_IS_FOLDER (folder_store) &&
            tny_folder_get_folder_type (TNY_FOLDER (folder_store)) != TNY_FOLDER_TYPE_INBOX) {
                ModestMailOperation *refresh_op;
 
                header_view = modest_main_window_get_child_widget (main_win,
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
            tny_folder_get_folder_type (TNY_FOLDER (folder_store)) != TNY_FOLDER_TYPE_INBOX) {
                ModestMailOperation *refresh_op;
 
                header_view = modest_main_window_get_child_widget (main_win,
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
-               
+
                /* We do not need to set the contents style
                   because it hasn't changed. We also do not
                   need to save the widget status. Just force
                /* We do not need to set the contents style
                   because it hasn't changed. We also do not
                   need to save the widget status. Just force
@@ -6383,17 +6650,17 @@ on_send_receive_finished (ModestMailOperation  *mail_op,
                                                      folder_refreshed_cb, main_win);
                g_object_unref (refresh_op);
        }
                                                      folder_refreshed_cb, main_win);
                g_object_unref (refresh_op);
        }
-       
+
        if (folder_store)
                g_object_unref (folder_store);
 }
        if (folder_store)
                g_object_unref (folder_store);
 }
-
+#endif
 
 void
 
 void
-modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self, 
-                                               TnyHeader *header, 
-                                               TnyMsg *msg, 
-                                               GError *err, 
+modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self,
+                                               TnyHeader *header,
+                                               TnyMsg *msg,
+                                               GError *err,
                                                gpointer user_data)
 {
        const gchar* server_name = NULL;
                                                gpointer user_data)
 {
        const gchar* server_name = NULL;
@@ -6446,7 +6713,7 @@ modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self,
        switch (err->code) {
        case TNY_SERVICE_ERROR_CONNECT:
                message = modest_protocol_get_translation (protocol,
        switch (err->code) {
        case TNY_SERVICE_ERROR_CONNECT:
                message = modest_protocol_get_translation (protocol,
-                                                          MODEST_PROTOCOL_TRANSLATION_ACCOUNT_CONNECTION_ERROR, 
+                                                          MODEST_PROTOCOL_TRANSLATION_ACCOUNT_CONNECTION_ERROR,
                                                           server_name);
                break;
        case TNY_SERVICE_ERROR_SEND:
                                                           server_name);
                break;
        case TNY_SERVICE_ERROR_SEND:
@@ -6454,7 +6721,7 @@ modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self,
                break;
        case TNY_SERVICE_ERROR_UNAVAILABLE:
                message = modest_protocol_get_translation (protocol,
                break;
        case TNY_SERVICE_ERROR_UNAVAILABLE:
                message = modest_protocol_get_translation (protocol,
-                                                          MODEST_PROTOCOL_TRANSLATION_CONNECT_ERROR, 
+                                                          MODEST_PROTOCOL_TRANSLATION_CONNECT_ERROR,
                                                           server_name);
                break;
        default:
                                                           server_name);
                break;
        default:
@@ -6470,7 +6737,7 @@ modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self,
 
 void
 modest_ui_actions_on_send_queue_status_changed (ModestTnySendQueue *send_queue,
 
 void
 modest_ui_actions_on_send_queue_status_changed (ModestTnySendQueue *send_queue,
-                                               gchar *msg_id, 
+                                               gchar *msg_id,
                                                guint status,
                                                gpointer user_data)
 {
                                                guint status,
                                                gpointer user_data)
 {
@@ -6563,6 +6830,7 @@ modest_ui_actions_get_msg_already_deleted_error_msg (ModestWindow *win)
        ModestProtocol *protocol;
        TnyHeader *header = NULL;
 
        ModestProtocol *protocol;
        TnyHeader *header = NULL;
 
+#ifndef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_MAIN_WINDOW (win)) {
                GtkWidget *header_view;
                TnyList* headers = NULL;
        if (MODEST_IS_MAIN_WINDOW (win)) {
                GtkWidget *header_view;
                TnyList* headers = NULL;
@@ -6580,8 +6848,8 @@ modest_ui_actions_get_msg_already_deleted_error_msg (ModestWindow *win)
                folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
                g_object_unref (iter);
                g_object_unref (headers);
                folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
                g_object_unref (iter);
                g_object_unref (headers);
-#ifdef MODEST_TOOLKIT_HILDON2
-       } else if (MODEST_IS_HEADER_WINDOW (win)) {
+#else
+       if (MODEST_IS_HEADER_WINDOW (win)) {
                GtkWidget *header_view;
                TnyList* headers = NULL;
                TnyIterator *iter;
                GtkWidget *header_view;
                TnyList* headers = NULL;
                TnyIterator *iter;
@@ -6594,15 +6862,23 @@ modest_ui_actions_get_msg_already_deleted_error_msg (ModestWindow *win)
                }
                iter = tny_list_create_iterator (headers);
                header = TNY_HEADER (tny_iterator_get_current (iter));
                }
                iter = tny_list_create_iterator (headers);
                header = TNY_HEADER (tny_iterator_get_current (iter));
-               folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
+               if (header) {
+                       folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
+               } else {
+                       g_warning ("List should contain headers");
+               }
                g_object_unref (iter);
                g_object_unref (headers);
 #endif
        } else if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
                header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
                g_object_unref (iter);
                g_object_unref (headers);
 #endif
        } else if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
                header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
-               folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
+               if (header)
+                       folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
        }
 
        }
 
+       if (!header || !folder)
+               goto frees;
+
        /* Get the account type */
        account = tny_folder_get_account (TNY_FOLDER (folder));
        proto = modest_tny_account_get_protocol_type (account);
        /* Get the account type */
        account = tny_folder_get_account (TNY_FOLDER (folder));
        proto = modest_tny_account_get_protocol_type (account);
@@ -6617,10 +6893,14 @@ modest_ui_actions_get_msg_already_deleted_error_msg (ModestWindow *win)
                msg = g_strdup_printf (_("mail_ni_ui_folder_get_msg_folder_error"));
        }
 
                msg = g_strdup_printf (_("mail_ni_ui_folder_get_msg_folder_error"));
        }
 
+ frees:
        /* Frees */
        /* Frees */
-       g_object_unref (account);
-       g_object_unref (folder);
-       g_object_unref (header);
+       if (account)
+               g_object_unref (account);
+       if (folder)
+               g_object_unref (folder);
+       if (header)
+               g_object_unref (header);
 
        return msg;
 }
 
        return msg;
 }
@@ -6665,8 +6945,149 @@ modest_ui_actions_on_delete_account (GtkWindow *parent_window,
                g_free (default_account_name);
 
                removed = modest_account_mgr_remove_account (account_mgr, account_name);
                g_free (default_account_name);
 
                removed = modest_account_mgr_remove_account (account_mgr, account_name);
-               if (!removed)
+               if (removed) {
+                       /* Close all email notifications, we cannot
+                          distinguish if the notification belongs to
+                          this account or not, so for safety reasons
+                          we remove them all */
+                       modest_platform_remove_new_mail_notifications (FALSE);
+               } else {
                        g_warning ("%s: modest_account_mgr_remove_account() failed.\n", __FUNCTION__);
                        g_warning ("%s: modest_account_mgr_remove_account() failed.\n", __FUNCTION__);
+               }
        }
        return removed;
 }
        }
        return removed;
 }
+
+static void
+on_fetch_images_performer (gboolean canceled,
+                          GError *err,
+                          GtkWindow *parent_window,
+                          TnyAccount *account,
+                          gpointer user_data)
+{
+       if (err || canceled) {
+               /* Show an unable to retrieve images ??? */
+               return;
+       }
+
+       /* Note that the user could have closed the window while connecting */
+       if (GTK_WIDGET_VISIBLE (parent_window))
+               modest_msg_view_window_fetch_images ((ModestMsgViewWindow *) parent_window);
+       g_object_unref ((GObject *) user_data);
+}
+
+void
+modest_ui_actions_on_fetch_images (GtkAction *action,
+                                  ModestWindow *window)
+{
+       g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window));
+
+       modest_platform_connect_and_perform ((GtkWindow *) window, TRUE, 
+                                            NULL,
+                                            on_fetch_images_performer, 
+                                            g_object_ref (window));
+}
+
+void
+modest_ui_actions_on_reload_message (const gchar *msg_id)
+{
+       ModestWindow *window = NULL;
+
+       g_return_if_fail (msg_id && msg_id[0] != '\0');
+       if (!modest_window_mgr_find_registered_message_uid (modest_runtime_get_window_mgr (),
+                                                           msg_id,
+                                                           &window))
+               return;
+
+
+       if (window == NULL || !MODEST_IS_MSG_VIEW_WINDOW (window))
+               return;
+
+       modest_msg_view_window_reload (MODEST_MSG_VIEW_WINDOW (window));
+}
+
+/** Check whether any connections are active, and cancel them if 
+ * the user wishes.
+ * Returns TRUE is there was no problem, 
+ * or if an operation was cancelled so we can continue.
+ * Returns FALSE if the user chose to cancel his request instead.
+ */
+
+gboolean
+modest_ui_actions_check_for_active_account (ModestWindow *self,
+                                           const gchar* account_name)
+{
+       ModestTnySendQueue *send_queue;
+       ModestTnyAccountStore *acc_store;
+       ModestMailOperationQueue* queue;
+       TnyConnectionStatus store_conn_status;
+       TnyAccount *store_account = NULL, *transport_account = NULL;
+       gboolean retval = TRUE, sending = FALSE;
+
+       acc_store = modest_runtime_get_account_store ();
+       queue = modest_runtime_get_mail_operation_queue ();
+
+       store_account = 
+               modest_tny_account_store_get_server_account (acc_store,
+                                                            account_name,
+                                                            TNY_ACCOUNT_TYPE_STORE);
+
+       /* This could happen if the account was deleted before the
+          call to this function */
+       if (!store_account)
+               return FALSE;
+
+       transport_account = 
+               modest_tny_account_store_get_server_account (acc_store,
+                                                            account_name,
+                                                            TNY_ACCOUNT_TYPE_TRANSPORT);
+
+       /* This could happen if the account was deleted before the
+          call to this function */
+       if (!transport_account) {
+               g_object_unref (store_account);
+               return FALSE;
+       }
+
+       /* If the transport account was not used yet, then the send
+          queue could not exist (it's created on demand) */
+       send_queue = modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT (transport_account), FALSE);
+       if (TNY_IS_SEND_QUEUE (send_queue))
+               sending = modest_tny_send_queue_sending_in_progress (send_queue);
+
+       store_conn_status = tny_account_get_connection_status (store_account);
+       if (store_conn_status == TNY_CONNECTION_STATUS_CONNECTED || sending) {
+               gint response;
+
+               response = modest_platform_run_confirmation_dialog (GTK_WINDOW (self), 
+                                                               _("emev_nc_disconnect_account"));
+               if (response == GTK_RESPONSE_OK) {
+                       retval = TRUE;
+               } else {
+                       retval = FALSE;
+               }
+       }
+
+       if (retval) {
+
+               /* FIXME: We should only cancel those of this account */
+               modest_mail_operation_queue_cancel_all (queue);
+
+               /* Also disconnect the account */
+               if ((tny_account_get_connection_status (store_account) != TNY_CONNECTION_STATUS_DISCONNECTED) &&
+                   (tny_account_get_connection_status (store_account) != TNY_CONNECTION_STATUS_DISCONNECTED_BROKEN)) {
+                       tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (store_account),
+                                                     FALSE, NULL, NULL);
+               }
+               if (sending) {
+                       tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (transport_account),
+                                                     FALSE, NULL, NULL);
+               }
+       }
+               
+       /* Frees */
+       g_object_unref (store_account);
+       g_object_unref (transport_account);
+       
+       return retval;
+}