diff --git a/agkyra/gui/settings.html b/agkyra/gui/settings.html
index 85596c660d46ed60866c4d989e79f3db194755bc..c85cad45d3743adcc56a5288a63d44df7a55f605 100644
--- a/agkyra/gui/settings.html
+++ b/agkyra/gui/settings.html
@@ -45,7 +45,6 @@
                 var removed_at_least_one = false
                 win.cookies.getAll({url: url}, function(cookies) {
                     $.each(cookies, function(i, cookie) {
-                        console.log('I have a cookie to remove ' + cookie.name + ', ' + cookie.domain);
                         win.cookies.remove({url: url, name: cookie.name} );
                         removed_at_least_one = true;
                     });
@@ -56,9 +55,7 @@
             var gui = require('nw.gui');
             var cred_win = null;
             var logout_win = null;
-            var can_close_cred = false;
             var got_cookie = false;
-            var can_close_logout = false;
             var show_creds = true;
             function get_credentials() {
                 var cookie_name = '_pithos2_a';
@@ -80,7 +77,7 @@
                     }
                 });
                 cred_win.on('loaded', function() {
-                    if (got_cookie) can_close_cred = true;
+                    if (got_cookie) cred_win.close();
                 });
 
                 cred_win.on('closed', function() {
@@ -89,10 +86,9 @@
                         {focus: true, width:20, height: 20 });
                     logout_win.hide();
                     logout_win.on('loaded', function() {
-                        while(
-                            remove_cookies(logout_win, get_account_ui()) ||
-                            remove_cookies(logout_win, get_pithos_ui())) {}
-                        can_close_logout = true;
+                        while(remove_cookies(logout_win, get_pithos_ui())) {}
+                        logout_win.close();
+                        show_creds = true;
                     });
                 });
             }
@@ -103,16 +99,6 @@
                 if (get_pithos_ui() && show_creds) {
                     $('#get_creds').show();
                 } else {$('#get_creds').hide(); }
-                // Garbage collector
-                if (can_close_logout) {
-                    can_close_logout = false;
-                    logout_win.close();
-                    show_creds = true;
-                }
-                else if (can_close_cred) {
-                    can_close_cred = false;
-                    cred_win.close();
-                }
             }, 500);
         </script>
     </head>
diff --git a/agkyra/protocol.py b/agkyra/protocol.py
index 1641bd30d13ca7b0713d3e5fa54205d2a61923ec..c358c016fa8839034eec0cdfd33631f2d70fe29e 100644
--- a/agkyra/protocol.py
+++ b/agkyra/protocol.py
@@ -64,15 +64,42 @@ class WebSocketProtocol(WebSocket):
     settings = dict(
         token=None, url=None,
         container=None, directory=None,
-        exclude=None, pithos_ui=None)
+        exclude=None)
     status = dict(progress=0, paused=True)
     file_syncer = None
     cnf = AgkyraConfig()
 
+    def _get_default_sync(self):
+        """Get global.default_sync or pick the first sync as default
+        If there are no syncs, create a 'default' sync.
+        """
+        sync = self.cnf.get('global', 'default_sync')
+        if not sync:
+            for sync in self.cnf.keys('sync'):
+                break
+            self.cnf.set('global', 'default_sync', sync or 'default')
+        return sync or 'default'
+
+    def _get_sync_cloud(self, sync):
+        """Get the <sync>.cloud or pick the first cloud and use it
+        In case of cloud picking, set the cloud as the <sync>.cloud for future
+        sessions.
+        If no clouds are found, create a 'default' cloud, with an empty url.
+        """
+        try:
+            cloud = self.cnf.get_sync(sync, 'cloud')
+        except KeyError:
+            cloud = None
+        if not cloud:
+            for cloud in self.cnf.keys('cloud'):
+                break
+            self.cnf.set_sync(sync, 'cloud', cloud or 'default')
+        return cloud or 'default'
+
     def _load_settings(self):
         LOG.debug('Start loading settings')
-        sync = self.cnf.get('global', 'default_sync')
-        cloud = self.cnf.get_sync(sync, 'cloud')
+        sync = self._get_default_sync()
+        cloud = self._get_sync_cloud(sync)
 
         try:
             self.settings['url'] = self.cnf.get_cloud(cloud, 'url')
@@ -84,16 +111,27 @@ class WebSocketProtocol(WebSocket):
             self.settings['url'] = None
 
         for option in ('container', 'directory', 'exclude'):
-            self.settings[option] = self.cnf.get_sync(sync, option)
+            try:
+                self.settings[option] = self.cnf.get_sync(sync, option)
+            except KeyError:
+                LOG.debug('No %s is set' % option)
 
         LOG.debug('Finished loading settings')
 
     def _dump_settings(self):
         LOG.debug('Saving settings')
-        sync = self.cnf.get('global', 'default_sync')
-        cloud = self.cnf.get_sync(sync, 'cloud')
+        if not self.settings.get('url', None):
+            LOG.debug('No settings to save')
+            return
+
+        sync = self._get_default_sync()
+        cloud = self._get_sync_cloud(sync)
+
+        try:
+            old_url = self.cnf.get_cloud(cloud, 'url') or ''
+        except KeyError:
+            old_url = self.settings['url']
 
-        old_url = self.cnf.get_cloud(cloud, 'url') or ''
         while old_url != self.settings['url']:
             cloud = '%s_%s' % (cloud, sync)
             try:
@@ -102,11 +140,11 @@ class WebSocketProtocol(WebSocket):
                 break
 
         self.cnf.set_cloud(cloud, 'url', self.settings['url'])
-        self.cnf.set_cloud(cloud, 'token', self.settings['token'])
+        self.cnf.set_cloud(cloud, 'token', self.settings['token'] or '')
         self.cnf.set_sync(sync, 'cloud', cloud)
 
         for option in ('directory', 'container', 'exclude'):
-            self.cnf.set_sync(sync, option, self.settings[option])
+            self.cnf.set_sync(sync, option, self.settings[option] or '')
 
         self.cnf.write()
         LOG.debug('Settings saved')