diff --git a/agkyra/agkyra/gui.py b/agkyra/agkyra/gui.py
index b622ab2373014b1005cc32d954ee3f8df5356d20..25c6804ea7a6abfaae53e8df4d936e190f20a6b0 100644
--- a/agkyra/agkyra/gui.py
+++ b/agkyra/agkyra/gui.py
@@ -20,11 +20,10 @@ LOG = logging.getLogger(__name__)
 class GUI(WebSocketBaseClient):
     """Launch the GUI when the helper server is ready"""
 
-    def __init__(self, addr, gui_exec_path, gui_id):
+    def __init__(self, addr, gui_id):
         """Initialize the GUI Launcher"""
         super(GUI, self).__init__(addr)
         self.addr = addr
-        self.gui_exec_path = gui_exec_path
         self.gui_id = gui_id
         self.start = self.connect
 
@@ -39,11 +38,10 @@ class GUI(WebSocketBaseClient):
         with NamedTemporaryFile(delete=False) as fp:
             json.dump(dict(gui_id=self.gui_id, address=self.addr), fp)
         # subprocess.call blocks the execution
-        LOG.debug('RUN: %s %s' % (self.gui_exec_path, fp.name))
+        LOG.debug('RUN: %s' % (fp.name))
         subprocess.call([
-            '/home/saxtouri/node-webkit-v0.11.6-linux-x64/nw',
-            # self.gui_exec_path,
-            abspath('gui/gui.nw'),
+            abspath('agkyra/nwjs/nw'),
+            abspath('agkyra/gui.nw'),
             fp.name,
             '--data-path', abspath('~/.agkyra')])
         LOG.debug('GUI process closed, remove temp file')
@@ -85,11 +83,11 @@ class HelperServer(object):
         t.join()
 
 
-def run(gui_exec_path):
+def run():
     """Prepare helper and GUI and run them in the proper order"""
     server = HelperServer()
     addr = 'ws://localhost:%s' % server.port
-    gui = GUI(addr, gui_exec_path, server.gui_id)
+    gui = GUI(addr, server.gui_id)
 
     LOG.info('Start helper server')
     server.start()
diff --git a/agkyra/agkyra/gui/menu.html b/agkyra/agkyra/gui/menu.html
index bcba22bbcafb643bebd7e71c2038a9330d92d8dd..194aeb333b22c9a5f204133f34bf5c6745f5f574 100644
--- a/agkyra/agkyra/gui/menu.html
+++ b/agkyra/agkyra/gui/menu.html
@@ -4,6 +4,7 @@
 <body>
     <script src="protocol.js"></script>
     <script src="settings.js"></script>
+    <script src="static/js/jquery.js"></script>
     <script type="text/javascript">
 
     // Setup GUI
@@ -69,9 +70,8 @@ var pithos_page_menu = new gui.MenuItem({
   icon: 'images/pithos.png',
   enabled: false,
   click: function () {
-    var pithos_ui = globals['settings']['pithos_ui'];
-    console.log('Visit ' + pithos_ui);
-    gui.Shell.openExternal(pithos_ui);
+    console.log('Visit ' + get_pithos_ui());
+    gui.Shell.openExternal(get_pithos_ui());
   }
 });
 menu.append(pithos_page_menu);
@@ -123,6 +123,7 @@ menu.append(new gui.MenuItem({
 // Update progress
 var client_ready = false;
 window.setInterval(function() {
+  var menu_modified = false;
   if (!client_ready) {
     if (globals.authenticated) {
       settings_menu.enabled = true;
@@ -132,11 +133,18 @@ window.setInterval(function() {
 
   if (client_ready) {
     if (!pithos_page_menu.enabled) {
-      // GET pithos page with tokenless operations
+      if ((get_pithos_ui() == null) && (globals.settings.url)) {
+        refresh_endpoints(globals.settings.url);
+      }
+      if (get_pithos_ui() != null) {
+        pithos_page_menu.enabled = true;
+        tray.menu = menu;
+      }
     }
     if (!local_folder_menu.enabled) {
       if (globals.settings.directory) {
         local_folder_menu.enabled = true;
+        tray.menu = menu;
       }
     }
   }
@@ -144,7 +152,6 @@ window.setInterval(function() {
   var status = globals['status'];
   var new_progress = progress_item.label;
   var new_pause = pause_item.label;
-  var menu_modified = false;
   if (status['paused'] !== null) {
     switch(pause_item.label) {
       case pause_syncing: if (status['paused']) {
diff --git a/agkyra/agkyra/gui/protocol.js b/agkyra/agkyra/gui/protocol.js
index 87b56e8877c023255210ecf6d45d85009fd3e0e1..58bce87961be826dd0af836d6f2eade9ed1ef925 100644
--- a/agkyra/agkyra/gui/protocol.js
+++ b/agkyra/agkyra/gui/protocol.js
@@ -16,11 +16,10 @@ var globals = {
     'url': null,
     'container': null,
     'directory': null,
-    'pithos_ui': null,
     'exclude': null
   },
   'status': {"progress": null, "paused": null},
-  'authenticated': false
+  'authenticated': false,
 }
 
 // Protocol: requests ::: responses
@@ -66,7 +65,7 @@ socket.onopen = function() {
 }
 socket.onmessage = function(e) {
   var r = JSON.parse(e.data)
-  //console.log('RECV: ' + r['action'])
+  console.log('RECV: ' + r['action'])
   switch(r['action']) {
     case 'post gui_id':
       if (r['ACCEPTED'] === 202) {
@@ -87,7 +86,7 @@ socket.onmessage = function(e) {
       }
     break;
     case 'get settings':
-      console.log(r);
+      // console.log(r);
       globals['settings'] = r;
     break;
     case 'put settings':
diff --git a/agkyra/agkyra/gui/settings.html b/agkyra/agkyra/gui/settings.html
index 597573468df557b723c91a9fae55d615ae5b298d..9233fac140bd7b450708f644744daa13ba7f99d0 100644
--- a/agkyra/agkyra/gui/settings.html
+++ b/agkyra/agkyra/gui/settings.html
@@ -23,8 +23,7 @@
                         $('#exclude').val(
                             fs.readFileSync(exclude, encoding='utf-8'));
                 } catch (err) {console.log(err);}
-                var pithos_ui = get_setting('pithos_ui');
-                if (pithos_ui) {
+                if (get_pithos_ui()) {
                     $('#get_creds').show();
                 } else {
                     console.log('No pithos view, remove credential button');
@@ -48,14 +47,15 @@
             }
 
             var gui = require('nw.gui');
-            function extract_cookie(url) {
+            function get_credentials() {
                 var cookie_name = '_pithos2_a';
-                var logout_url = 'https://accounts.okeanos.grnet.gr/ui/logout'
-                var w = gui.Window.open(logout_url, {
+                var account_ui = get_account_ui()
+                var w = gui.Window.open(account_ui + '/logout', {
                     focus: false, width: 20, height: 20
                 });
                 w.close();
-                var w = gui.Window.open(logout_url, {
+                var next = get_pithos_ui();
+                var w = gui.Window.open(account_ui + '/login?next=' + next, {
                     focus: true, width: 520, height: 920
                 });
                 w.cookies.onChanged.addListener(function(info) {
@@ -66,11 +66,6 @@
                     }
                 });
             }
-
-            function get_credentials() {
-                var pithos_ui = get_setting('pithos_ui');
-                extract_cookie(pithos_ui);
-            }
         </script>
     </head>
     <body>
@@ -90,7 +85,7 @@
                                 </div>
                                 <div class="small-9 columns">
                                     <input type="text" id="cloud-url" placeholder="Authentication URL"
-                                    onchange="set_setting('url', $(this).val())">
+                                    onchange="set_setting('url', $(this).val()); refresh_endpoints($(this).val())">
                                     <small class="error" style="visibility: hidden">Invalid entry</small>
                                 </div>
                             </div>
diff --git a/agkyra/agkyra/gui/settings.js b/agkyra/agkyra/gui/settings.js
index 0df6d76633f5de0bff08bf8621ef9166344800f5..a3d1e91b6fe8c1f0acea8a2e056663ffe177d630 100644
--- a/agkyra/agkyra/gui/settings.js
+++ b/agkyra/agkyra/gui/settings.js
@@ -17,3 +17,33 @@ function get_setting(key) {
 function set_setting(key, val) {
     global.settings[key] = val;
 }
+
+function refresh_endpoints(identity_url) {
+    $.post(identity_url + '/tokens', function(data) {
+        var endpoints = data.access.serviceCatalog
+        global.pithos_ui = null;
+        global.account_ui = null;
+        $.each(endpoints, function(i, endpoint) {
+            switch(endpoint.type) {
+            case 'object-store': try {
+                global.pithos_ui = endpoint['endpoints'][0]['SNF:uiURL'];
+            } catch(err) { console.log('Failed to get pithos_ui ' + err); }
+            break;
+            case 'account': try {
+                global.account_ui = endpoint['endpoints'][0]['SNF:uiURL'];
+            } catch(err) { console.log('Failed to get account_ui ' + err); }
+            break;
+            }
+        });
+    });
+}
+
+function get_pithos_ui() {
+    if (global.pithos_ui) {return global.pithos_ui;}
+    else {return null;}
+}
+
+function get_account_ui() {
+    if (global.account_ui) {return global.account_ui;}
+    else {return null;}
+}