diff --git a/src/ErrorDialog.py b/src/ErrorDialog.py
index b929970..2ca12ea 100644
--- a/src/ErrorDialog.py
+++ b/src/ErrorDialog.py
@@ -25,6 +25,7 @@ class ErrorDialog(gtk.MessageDialog):
                                    parent=parent,
                                    message_format=_("An error occurred"))
         self.connect("response", lambda dialog, response: dialog.destroy())
+        self.expander = None
 
     def set_from_failure (self, failure):
         print failure
@@ -39,3 +40,24 @@ class ErrorDialog(gtk.MessageDialog):
     def set_from_string(self, message):
         # TODO: format nicer
         self.format_secondary_text (message)
+
+    def add_details(self, message):
+        # TODO: format nicer
+        if not self.expander:
+            self.expander = gtk.Expander(_('Details'))
+            self.view = gtk.TextView();
+            self.buffer = self.view.get_buffer()
+
+            sw = gtk.ScrolledWindow()
+            sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
+            sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+
+            sw.add(self.view)
+
+            self.expander.add(sw)
+            self.expander.show_all()
+            self.vbox.pack_start(self.expander)
+
+
+        iter = self.buffer.get_end_iter()
+        self.buffer.insert(iter, message+'\n')
diff --git a/src/GroupSelector.py b/src/GroupSelector.py
index f4aeee6..56cbb50 100644
--- a/src/GroupSelector.py
+++ b/src/GroupSelector.py
@@ -85,7 +85,7 @@ class GroupSelector(gtk.TreeView, gtk.Buildable):
 
     def update(self):
         # TODO: block changed signals
-        self.flickr.groups_pools_getGroups().addCallbacks(self.got_groups, self.twisted_error)
+        return self.flickr.groups_pools_getGroups().addCallback(self.got_groups)
     
     def got_groups(self, rsp):
         for group in rsp.findall("groups/group"):
diff --git a/src/LicenseCombo.py b/src/LicenseCombo.py
index 1d89723..c7cdf46 100644
--- a/src/LicenseCombo.py
+++ b/src/LicenseCombo.py
@@ -57,8 +57,7 @@ class LicenseCombo(gtk.ComboBox, gtk.Buildable):
                 self.set_active_iter(it)
 
     def update(self):
-        self.flickr.photos_licenses_getInfo().addCallbacks(self.__got_licenses,
-                                                           self.twisted_error)
+        return self.flickr.photos_licenses_getInfo().addCallback(self.__got_licenses)
 
     def get_license_for_iter(self, it):
         if it is None: return None
diff --git a/src/SetCombo.py b/src/SetCombo.py
index 232c4da..a89ce18 100644
--- a/src/SetCombo.py
+++ b/src/SetCombo.py
@@ -91,7 +91,7 @@ class SetCombo(gtk.ComboBox, gtk.Buildable):
             getPage (url).addCallback(self.__got_set_thumb, it).addErrback(self.twisted_error)
 
     def update(self):
-        self.flickr.photosets_getList().addCallbacks(self.__got_photosets, self.twisted_error)
+        return self.flickr.photosets_getList().addCallback(self.__got_photosets)
 
     def get_id_for_iter(self, it):
         if it is None: return None
diff --git a/src/StatusBar.py b/src/StatusBar.py
index ef5ff36..bbdf3a9 100644
--- a/src/StatusBar.py
+++ b/src/StatusBar.py
@@ -60,11 +60,8 @@ class StatusBar(gtk.Label, gtk.Buildable):
             else:
                 self.quota = greek(int(rsp.find("user/bandwidth").get("remainingbytes")))
             self.__update()
-        def error(failure):
-            dialog = ErrorDialog(self.get_toplevel())
-            dialog.set_from_failure(failure)
-            dialog.show_all()
-        self.flickr.people_getUploadStatus().addCallbacks(got_quota, error)
+        d = self.flickr.people_getUploadStatus().addCallback(got_quota)
+        return d
 
     def set_upload(self, to_upload):
         """Set the amount of data to be uploaded, and update the status bar."""
diff --git a/src/TagsEntry.py b/src/TagsEntry.py
index 521d56f..fd949c9 100644
--- a/src/TagsEntry.py
+++ b/src/TagsEntry.py
@@ -17,6 +17,8 @@
 
 import gtk
 
+from twisted.internet import defer
+
 _USER_POPULAR_TAGS = 200
 _HOTS_TAGS = 20
 _COL_TAG_NAME = 0
@@ -89,12 +91,13 @@ class TagsEntry(gtk.Entry, gtk.Buildable):
 
         self.completion_model.clear()
 
-        self.flickr.tags_getListUserPopular(user_id=self.flickr.get_nsid(), \
-        count=_USER_POPULAR_TAGS).addCallbacks(self.create_completion_model,
-        self.twisted_error)
+        d1 = self.flickr.tags_getListUserPopular(user_id=self.flickr.get_nsid(),
+                count=_USER_POPULAR_TAGS).addCallback(self.create_completion_model)
+
+        d2 = self.flickr.tags_getHotList(user_id=self.flickr.get_nsid(),
+                    count=_HOTS_TAGS).addCallback(self.create_completion_model)
 
-        self.flickr.tags_getHotList(user_id=self.flickr.get_nsid(), count=_HOTS_TAGS)\
-        .addCallbacks(self.create_completion_model, self.twisted_error)
+        return defer.DeferredList([d1, d2])
 
     def create_completion_model(self, rsp):
         '''
diff --git a/src/postr.py b/src/postr.py
index 2765882..d55c5db 100644
--- a/src/postr.py
+++ b/src/postr.py
@@ -207,7 +207,8 @@ class Postr(UniqueApp):
         
         # Connect to flickr, go go go
         self.flickr.authenticate_1().addCallbacks(self.auth_open_url, self.twisted_error)
-    
+
+
     def twisted_error(self, failure):
         self.update_upload()
         
@@ -265,15 +266,44 @@ class Postr(UniqueApp):
     
     def connected(self, connected):
         """Callback when the Flickr authentication completes."""
+
+        def _on_widget_updated_ok(rep):
+            self._number_widget_updated += 1
+
+        def _on_widget_updated_err(rep):
+            self._widget_updated_err_list.append(rep)
+
+        def _on_widget_updated_done(rep):
+            if len(self._widget_updated_err_list) +  \
+                        self._number_widget_updated == len(self.list_of_update_method):
+                #All widgets finished the update process
+                #check if something went wrong
+                if self._widget_updated_err_list:
+                    dialog = ErrorDialog(self.window)
+                    dialog.set_from_exception(_(''))
+                    for message in self._widget_updated_err_list:
+                        dialog.add_details(message.getErrorMessage())
+                    dialog.show_all()
+
         self.is_connected = connected
         if connected:
+            self._number_widget_updated = 0
+            self._widget_updated_err_list = []
+
             self.update_upload()
-            self.statusbar.update_quota()
-            self.group_selector.update()
-            self.set_combo.update()
-            self.license_combo.update()
-            self.update_avatar()
-            self.update_tag_list()
+
+            self.list_of_update_method = [self.statusbar.update_quota,
+                                self.group_selector.update,
+                                self.set_combo.update,
+                                self.license_combo.update,
+                                self.update_avatar,
+                                self.tags_entry.update]
+
+            for update_method in self.list_of_update_method:
+                d = update_method()
+                d.addCallbacks(_on_widget_updated_ok,
+                                _on_widget_updated_err)
+                d.addBoth(_on_widget_updated_done)
 
     def on_statusbar_box_expose(self, widget, event):
         """
@@ -316,7 +346,7 @@ class Postr(UniqueApp):
                 self.avatar_image.set_from_pixbuf(icon)
             get_buddyicon(self.flickr, data).addCallbacks(get_buddyicon_cb, self.twisted_error)
         # Need to call people.getInfo to get the iconserver/iconfarm
-        self.flickr.people_getInfo(user_id=self.flickr.get_nsid()).addCallbacks(getinfo_cb, self.twisted_error)
+        return self.flickr.people_getInfo(user_id=self.flickr.get_nsid()).addCallbacks(getinfo_cb)
     
     def on_field_changed(self, widget, column):
         """Callback when the entry fields are changed."""
@@ -934,8 +964,12 @@ class Postr(UniqueApp):
         self.uploading = False
         self.progress_dialog.hide()
         self.thumbview.set_sensitive(True)
+        #Is there a reason for this? just below is updated again,
+        #some of the two should be gone
         self.update_statusbar()
-        self.statusbar.update_quota()
+        d = self.statusbar.update_quota()
+        #Catch the error if it can't update the status bar
+        d.addErrback(self.twisted_error)
         self.current_upload_it = None
 
     def upload_error(self, failure):
@@ -1305,6 +1339,4 @@ class Postr(UniqueApp):
             self._set_value_in_model(ImageStore.COL_SAFETY, safety_iter, [index])
         self._set_value_in_model(ImageStore.COL_VISIBLE, visible, [index])
 
-    def update_tag_list(self):
-        self.tags_entry.update()
 
