diff --git a/agkyra/.gitignore b/agkyra/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..27ffc4f62776a739a68d49b9bb60d80a7691c8b1
--- /dev/null
+++ b/agkyra/.gitignore
@@ -0,0 +1,6 @@
+*.pyc
+*.egg-info
+*.*.swp
+_build
+build
+dist
diff --git a/agkyra/__init__.py b/agkyra/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..bcbf9d2c9c65486c62b7c93428b130fabb78cb6d
--- /dev/null
+++ b/agkyra/__init__.py
@@ -0,0 +1,64 @@
+from wsgiref.simple_server import make_server
+# from ws4py.websocket import EchoWebSocket
+from protocol import WebSocketProtocol
+from ws4py.server.wsgirefserver import WSGIServer, WebSocketWSGIRequestHandler
+from ws4py.server.wsgiutils import WebSocketWSGIApplication
+from tempfile import NamedTemporaryFile
+import subprocess
+import json
+from os.path import abspath
+
+from ws4py.client import WebSocketBaseClient
+
+
+class GUILauncher(WebSocketBaseClient):
+    """Launch the GUI when the helper server is ready"""
+
+    def __init__(self, port, gui_exec_path, token):
+        super(GUILauncher, self).__init__('ws://localhost:%s' % port)
+        self.port = port
+        self.gui_exec_path = gui_exec_path
+        self.token = token
+
+    def handshake_ok(self):
+        with NamedTemporaryFile(mode='a+') as fp:
+            json.dump(dict(token=self.token, port=self.port), fp)
+            fp.flush()
+            subprocess.call([
+                '/home/saxtouri/node-webkit-v0.11.6-linux-x64/nw',
+                abspath('gui/gui.nw'),
+                fp.name])
+
+
+class Helper(object):
+    """Coordination between the GUI and the Syncer instances
+
+    Setup a minimal server at a ephemeral port, create a random token, dump
+    this information in a local file and launch the GUI with this file as a
+    parameter.
+    Then the GUI connects and a WebSocket is established.
+
+    """
+
+    def __init__(self, gui_exec_path, port=0):
+        self.server = self.setup_server(port)
+        self.port = self.server.server_port
+        self.token = 'some random token'
+        self.gui_exec_path = gui_exec_path
+
+    def setup_server(self, port=0):
+        server = make_server(
+            '', port,
+            server_class=WSGIServer,
+            handler_class=WebSocketWSGIRequestHandler,
+            app=WebSocketWSGIApplication(handler_cls=WebSocketProtocol))
+        server.initialize_websockets_manager()
+        # self.port = server.server_port
+        return server
+
+    def run(self):
+        gui = GUILauncher(self.port, self.gui_exec_path, self.token)
+        gui.connect()
+        self.server.serve_forever()
+
+Helper('ls').run()
diff --git a/agkyra/gui.json b/agkyra/gui.json
new file mode 100644
index 0000000000000000000000000000000000000000..75b4e4b19907bae860642be961b5c193a007908f
--- /dev/null
+++ b/agkyra/gui.json
@@ -0,0 +1,4 @@
+{
+    "port": 1234,
+    "token": "s0m3-70k3n"
+}
\ No newline at end of file
diff --git a/agkyra/gui/about.html b/agkyra/gui/about.html
new file mode 100644
index 0000000000000000000000000000000000000000..a4002d629b0a0a53387e52efab61c99346bdb541
--- /dev/null
+++ b/agkyra/gui/about.html
@@ -0,0 +1,12 @@
+<html>
+  <head><title>Agkyra Syncing Client for Pithos+</title></head>
+  <body style="-webkit-app-region: drag; text-align: center">
+   <div>
+    <img src="icons/logo.png" style="width: 64px; height: 64px;" />
+    <h1>Agkyra</h1>
+    <h2>... it syncs</h2>
+    <p>&nbsp;</p>
+    <p><b>Agkyra</b> is a minimal syncing client for Pithos+ containers.</p>
+   </div>
+  </body>
+</html>
diff --git a/agkyra/gui/foundation.min.css b/agkyra/gui/foundation.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..876c5969fcbe8f07aeefbcb0e7e57b144d8a9834
--- /dev/null
+++ b/agkyra/gui/foundation.min.css
@@ -0,0 +1 @@
+meta.foundation-version{font-family:"/5.5.1/"}meta.foundation-mq-small{font-family:"/only screen/";width:0}meta.foundation-mq-small-only{font-family:"/only screen and (max-width: 40em)/";width:0}meta.foundation-mq-medium{font-family:"/only screen and (min-width:40.063em)/";width:40.063em}meta.foundation-mq-medium-only{font-family:"/only screen and (min-width:40.063em) and (max-width:64em)/";width:40.063em}meta.foundation-mq-large{font-family:"/only screen and (min-width:64.063em)/";width:64.063em}meta.foundation-mq-large-only{font-family:"/only screen and (min-width:64.063em) and (max-width:90em)/";width:64.063em}meta.foundation-mq-xlarge{font-family:"/only screen and (min-width:90.063em)/";width:90.063em}meta.foundation-mq-xlarge-only{font-family:"/only screen and (min-width:90.063em) and (max-width:120em)/";width:90.063em}meta.foundation-mq-xxlarge{font-family:"/only screen and (min-width:120.063em)/";width:120.063em}meta.foundation-data-attribute-namespace{font-family:false}html,body{height:100%}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html,body{font-size:100%}body{background:#fff;color:#222;padding:0;margin:0;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;font-style:normal;line-height:1.5;position:relative;cursor:auto}a:hover{cursor:pointer}img{max-width:100%;height:auto}img{-ms-interpolation-mode:bicubic}#map_canvas img,#map_canvas embed,#map_canvas object,.map_canvas img,.map_canvas embed,.map_canvas object{max-width:none !important}.left{float:left !important}.right{float:right !important}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.hide{display:none}.invisible{visibility:hidden}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle}textarea{height:auto;min-height:50px}select{width:100%}.row{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5rem}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.row.collapse>.column,.row.collapse>.columns{padding-left:0;padding-right:0}.row.collapse .row{margin-left:0;margin-right:0}.row .row{width:auto;margin-left:-0.9375rem;margin-right:-0.9375rem;margin-top:0;margin-bottom:0;max-width:none}.row .row:before,.row .row:after{content:" ";display:table}.row .row:after{clear:both}.row .row.collapse{width:auto;margin:0;max-width:none}.row .row.collapse:before,.row .row.collapse:after{content:" ";display:table}.row .row.collapse:after{clear:both}.column,.columns{padding-left:0.9375rem;padding-right:0.9375rem;width:100%;float:left}[class*="column"]+[class*="column"]:last-child{float:right}[class*="column"]+[class*="column"].end{float:left}@media only screen{.small-push-0{position:relative;left:0%;right:auto}.small-pull-0{position:relative;right:0%;left:auto}.small-push-1{position:relative;left:8.33333%;right:auto}.small-pull-1{position:relative;right:8.33333%;left:auto}.small-push-2{position:relative;left:16.66667%;right:auto}.small-pull-2{position:relative;right:16.66667%;left:auto}.small-push-3{position:relative;left:25%;right:auto}.small-pull-3{position:relative;right:25%;left:auto}.small-push-4{position:relative;left:33.33333%;right:auto}.small-pull-4{position:relative;right:33.33333%;left:auto}.small-push-5{position:relative;left:41.66667%;right:auto}.small-pull-5{position:relative;right:41.66667%;left:auto}.small-push-6{position:relative;left:50%;right:auto}.small-pull-6{position:relative;right:50%;left:auto}.small-push-7{position:relative;left:58.33333%;right:auto}.small-pull-7{position:relative;right:58.33333%;left:auto}.small-push-8{position:relative;left:66.66667%;right:auto}.small-pull-8{position:relative;right:66.66667%;left:auto}.small-push-9{position:relative;left:75%;right:auto}.small-pull-9{position:relative;right:75%;left:auto}.small-push-10{position:relative;left:83.33333%;right:auto}.small-pull-10{position:relative;right:83.33333%;left:auto}.small-push-11{position:relative;left:91.66667%;right:auto}.small-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.small-1{width:8.33333%}.small-2{width:16.66667%}.small-3{width:25%}.small-4{width:33.33333%}.small-5{width:41.66667%}.small-6{width:50%}.small-7{width:58.33333%}.small-8{width:66.66667%}.small-9{width:75%}.small-10{width:83.33333%}.small-11{width:91.66667%}.small-12{width:100%}.small-offset-0{margin-left:0% !important}.small-offset-1{margin-left:8.33333% !important}.small-offset-2{margin-left:16.66667% !important}.small-offset-3{margin-left:25% !important}.small-offset-4{margin-left:33.33333% !important}.small-offset-5{margin-left:41.66667% !important}.small-offset-6{margin-left:50% !important}.small-offset-7{margin-left:58.33333% !important}.small-offset-8{margin-left:66.66667% !important}.small-offset-9{margin-left:75% !important}.small-offset-10{margin-left:83.33333% !important}.small-offset-11{margin-left:91.66667% !important}.small-reset-order{margin-left:0;margin-right:0;left:auto;right:auto;float:left}.column.small-centered,.columns.small-centered{margin-left:auto;margin-right:auto;float:none}.column.small-uncentered,.columns.small-uncentered{margin-left:0;margin-right:0;float:left}.column.small-centered:last-child,.columns.small-centered:last-child{float:none}.column.small-uncentered:last-child,.columns.small-uncentered:last-child{float:left}.column.small-uncentered.opposite,.columns.small-uncentered.opposite{float:right}.row.small-collapse>.column,.row.small-collapse>.columns{padding-left:0;padding-right:0}.row.small-collapse .row{margin-left:0;margin-right:0}.row.small-uncollapse>.column,.row.small-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}}@media only screen and (min-width: 40.063em){.medium-push-0{position:relative;left:0%;right:auto}.medium-pull-0{position:relative;right:0%;left:auto}.medium-push-1{position:relative;left:8.33333%;right:auto}.medium-pull-1{position:relative;right:8.33333%;left:auto}.medium-push-2{position:relative;left:16.66667%;right:auto}.medium-pull-2{position:relative;right:16.66667%;left:auto}.medium-push-3{position:relative;left:25%;right:auto}.medium-pull-3{position:relative;right:25%;left:auto}.medium-push-4{position:relative;left:33.33333%;right:auto}.medium-pull-4{position:relative;right:33.33333%;left:auto}.medium-push-5{position:relative;left:41.66667%;right:auto}.medium-pull-5{position:relative;right:41.66667%;left:auto}.medium-push-6{position:relative;left:50%;right:auto}.medium-pull-6{position:relative;right:50%;left:auto}.medium-push-7{position:relative;left:58.33333%;right:auto}.medium-pull-7{position:relative;right:58.33333%;left:auto}.medium-push-8{position:relative;left:66.66667%;right:auto}.medium-pull-8{position:relative;right:66.66667%;left:auto}.medium-push-9{position:relative;left:75%;right:auto}.medium-pull-9{position:relative;right:75%;left:auto}.medium-push-10{position:relative;left:83.33333%;right:auto}.medium-pull-10{position:relative;right:83.33333%;left:auto}.medium-push-11{position:relative;left:91.66667%;right:auto}.medium-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.medium-1{width:8.33333%}.medium-2{width:16.66667%}.medium-3{width:25%}.medium-4{width:33.33333%}.medium-5{width:41.66667%}.medium-6{width:50%}.medium-7{width:58.33333%}.medium-8{width:66.66667%}.medium-9{width:75%}.medium-10{width:83.33333%}.medium-11{width:91.66667%}.medium-12{width:100%}.medium-offset-0{margin-left:0% !important}.medium-offset-1{margin-left:8.33333% !important}.medium-offset-2{margin-left:16.66667% !important}.medium-offset-3{margin-left:25% !important}.medium-offset-4{margin-left:33.33333% !important}.medium-offset-5{margin-left:41.66667% !important}.medium-offset-6{margin-left:50% !important}.medium-offset-7{margin-left:58.33333% !important}.medium-offset-8{margin-left:66.66667% !important}.medium-offset-9{margin-left:75% !important}.medium-offset-10{margin-left:83.33333% !important}.medium-offset-11{margin-left:91.66667% !important}.medium-reset-order{margin-left:0;margin-right:0;left:auto;right:auto;float:left}.column.medium-centered,.columns.medium-centered{margin-left:auto;margin-right:auto;float:none}.column.medium-uncentered,.columns.medium-uncentered{margin-left:0;margin-right:0;float:left}.column.medium-centered:last-child,.columns.medium-centered:last-child{float:none}.column.medium-uncentered:last-child,.columns.medium-uncentered:last-child{float:left}.column.medium-uncentered.opposite,.columns.medium-uncentered.opposite{float:right}.row.medium-collapse>.column,.row.medium-collapse>.columns{padding-left:0;padding-right:0}.row.medium-collapse .row{margin-left:0;margin-right:0}.row.medium-uncollapse>.column,.row.medium-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}.push-0{position:relative;left:0%;right:auto}.pull-0{position:relative;right:0%;left:auto}.push-1{position:relative;left:8.33333%;right:auto}.pull-1{position:relative;right:8.33333%;left:auto}.push-2{position:relative;left:16.66667%;right:auto}.pull-2{position:relative;right:16.66667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.33333%;right:auto}.pull-4{position:relative;right:33.33333%;left:auto}.push-5{position:relative;left:41.66667%;right:auto}.pull-5{position:relative;right:41.66667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.33333%;right:auto}.pull-7{position:relative;right:58.33333%;left:auto}.push-8{position:relative;left:66.66667%;right:auto}.pull-8{position:relative;right:66.66667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.33333%;right:auto}.pull-10{position:relative;right:83.33333%;left:auto}.push-11{position:relative;left:91.66667%;right:auto}.pull-11{position:relative;right:91.66667%;left:auto}}@media only screen and (min-width: 64.063em){.large-push-0{position:relative;left:0%;right:auto}.large-pull-0{position:relative;right:0%;left:auto}.large-push-1{position:relative;left:8.33333%;right:auto}.large-pull-1{position:relative;right:8.33333%;left:auto}.large-push-2{position:relative;left:16.66667%;right:auto}.large-pull-2{position:relative;right:16.66667%;left:auto}.large-push-3{position:relative;left:25%;right:auto}.large-pull-3{position:relative;right:25%;left:auto}.large-push-4{position:relative;left:33.33333%;right:auto}.large-pull-4{position:relative;right:33.33333%;left:auto}.large-push-5{position:relative;left:41.66667%;right:auto}.large-pull-5{position:relative;right:41.66667%;left:auto}.large-push-6{position:relative;left:50%;right:auto}.large-pull-6{position:relative;right:50%;left:auto}.large-push-7{position:relative;left:58.33333%;right:auto}.large-pull-7{position:relative;right:58.33333%;left:auto}.large-push-8{position:relative;left:66.66667%;right:auto}.large-pull-8{position:relative;right:66.66667%;left:auto}.large-push-9{position:relative;left:75%;right:auto}.large-pull-9{position:relative;right:75%;left:auto}.large-push-10{position:relative;left:83.33333%;right:auto}.large-pull-10{position:relative;right:83.33333%;left:auto}.large-push-11{position:relative;left:91.66667%;right:auto}.large-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.large-1{width:8.33333%}.large-2{width:16.66667%}.large-3{width:25%}.large-4{width:33.33333%}.large-5{width:41.66667%}.large-6{width:50%}.large-7{width:58.33333%}.large-8{width:66.66667%}.large-9{width:75%}.large-10{width:83.33333%}.large-11{width:91.66667%}.large-12{width:100%}.large-offset-0{margin-left:0% !important}.large-offset-1{margin-left:8.33333% !important}.large-offset-2{margin-left:16.66667% !important}.large-offset-3{margin-left:25% !important}.large-offset-4{margin-left:33.33333% !important}.large-offset-5{margin-left:41.66667% !important}.large-offset-6{margin-left:50% !important}.large-offset-7{margin-left:58.33333% !important}.large-offset-8{margin-left:66.66667% !important}.large-offset-9{margin-left:75% !important}.large-offset-10{margin-left:83.33333% !important}.large-offset-11{margin-left:91.66667% !important}.large-reset-order{margin-left:0;margin-right:0;left:auto;right:auto;float:left}.column.large-centered,.columns.large-centered{margin-left:auto;margin-right:auto;float:none}.column.large-uncentered,.columns.large-uncentered{margin-left:0;margin-right:0;float:left}.column.large-centered:last-child,.columns.large-centered:last-child{float:none}.column.large-uncentered:last-child,.columns.large-uncentered:last-child{float:left}.column.large-uncentered.opposite,.columns.large-uncentered.opposite{float:right}.row.large-collapse>.column,.row.large-collapse>.columns{padding-left:0;padding-right:0}.row.large-collapse .row{margin-left:0;margin-right:0}.row.large-uncollapse>.column,.row.large-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}.push-0{position:relative;left:0%;right:auto}.pull-0{position:relative;right:0%;left:auto}.push-1{position:relative;left:8.33333%;right:auto}.pull-1{position:relative;right:8.33333%;left:auto}.push-2{position:relative;left:16.66667%;right:auto}.pull-2{position:relative;right:16.66667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.33333%;right:auto}.pull-4{position:relative;right:33.33333%;left:auto}.push-5{position:relative;left:41.66667%;right:auto}.pull-5{position:relative;right:41.66667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.33333%;right:auto}.pull-7{position:relative;right:58.33333%;left:auto}.push-8{position:relative;left:66.66667%;right:auto}.pull-8{position:relative;right:66.66667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.33333%;right:auto}.pull-10{position:relative;right:83.33333%;left:auto}.push-11{position:relative;left:91.66667%;right:auto}.pull-11{position:relative;right:91.66667%;left:auto}}.inline-list{margin:0 auto 1.0625rem auto;margin-left:-1.375rem;margin-right:0;padding:0;list-style:none;overflow:hidden}.inline-list>li{list-style:none;float:left;margin-left:1.375rem;display:block}.inline-list>li>*{display:block}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}.text-justify{text-align:justify !important}@media only screen and (max-width: 40em){.small-only-text-left{text-align:left !important}.small-only-text-right{text-align:right !important}.small-only-text-center{text-align:center !important}.small-only-text-justify{text-align:justify !important}}@media only screen{.small-text-left{text-align:left !important}.small-text-right{text-align:right !important}.small-text-center{text-align:center !important}.small-text-justify{text-align:justify !important}}@media only screen and (min-width: 40.063em) and (max-width: 64em){.medium-only-text-left{text-align:left !important}.medium-only-text-right{text-align:right !important}.medium-only-text-center{text-align:center !important}.medium-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 40.063em){.medium-text-left{text-align:left !important}.medium-text-right{text-align:right !important}.medium-text-center{text-align:center !important}.medium-text-justify{text-align:justify !important}}@media only screen and (min-width: 64.063em) and (max-width: 90em){.large-only-text-left{text-align:left !important}.large-only-text-right{text-align:right !important}.large-only-text-center{text-align:center !important}.large-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 64.063em){.large-text-left{text-align:left !important}.large-text-right{text-align:right !important}.large-text-center{text-align:center !important}.large-text-justify{text-align:justify !important}}@media only screen and (min-width: 90.063em) and (max-width: 120em){.xlarge-only-text-left{text-align:left !important}.xlarge-only-text-right{text-align:right !important}.xlarge-only-text-center{text-align:center !important}.xlarge-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 90.063em){.xlarge-text-left{text-align:left !important}.xlarge-text-right{text-align:right !important}.xlarge-text-center{text-align:center !important}.xlarge-text-justify{text-align:justify !important}}@media only screen and (min-width: 120.063em) and (max-width: 99999999em){.xxlarge-only-text-left{text-align:left !important}.xxlarge-only-text-right{text-align:right !important}.xxlarge-only-text-center{text-align:center !important}.xxlarge-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 120.063em){.xxlarge-text-left{text-align:left !important}.xxlarge-text-right{text-align:right !important}.xxlarge-text-center{text-align:center !important}.xxlarge-text-justify{text-align:justify !important}}div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}a{color:#008CBA;text-decoration:none;line-height:inherit}a:hover,a:focus{color:#0078a0}a img{border:none}p{font-family:inherit;font-weight:normal;font-size:1rem;line-height:1.6;margin-bottom:1.25rem;text-rendering:optimizeLegibility}p.lead{font-size:1.21875rem;line-height:1.6}p aside{font-size:0.875rem;line-height:1.35;font-style:italic}h1,h2,h3,h4,h5,h6{font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;font-style:normal;color:#222;text-rendering:optimizeLegibility;margin-top:0.2rem;margin-bottom:0.5rem;line-height:1.4}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-size:60%;color:#6f6f6f;line-height:0}h1{font-size:2.125rem}h2{font-size:1.6875rem}h3{font-size:1.375rem}h4{font-size:1.125rem}h5{font-size:1.125rem}h6{font-size:1rem}.subheader{line-height:1.4;color:#6f6f6f;font-weight:normal;margin-top:0.2rem;margin-bottom:0.5rem}hr{border:solid #ddd;border-width:1px 0 0;clear:both;margin:1.25rem 0 1.1875rem;height:0}em,i{font-style:italic;line-height:inherit}strong,b{font-weight:bold;line-height:inherit}small{font-size:60%;line-height:inherit}code{font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;color:#333;background-color:#f8f8f8;border-width:1px;border-style:solid;border-color:#dfdfdf;padding:0.125rem 0.3125rem 0.0625rem}ul,ol,dl{font-size:1rem;line-height:1.6;margin-bottom:1.25rem;list-style-position:outside;font-family:inherit}ul{margin-left:1.1rem}ul.no-bullet{margin-left:0}ul.no-bullet li ul,ul.no-bullet li ol{margin-left:1.25rem;margin-bottom:0;list-style:none}ul li ul,ul li ol{margin-left:1.25rem;margin-bottom:0}ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}ul.square{list-style-type:square;margin-left:1.1rem}ul.circle{list-style-type:circle;margin-left:1.1rem}ul.disc{list-style-type:disc;margin-left:1.1rem}ul.no-bullet{list-style:none}ol{margin-left:1.4rem}ol li ul,ol li ol{margin-left:1.25rem;margin-bottom:0}dl dt{margin-bottom:0.3rem;font-weight:bold}dl dd{margin-bottom:0.75rem}abbr,acronym{text-transform:uppercase;font-size:90%;color:#222;cursor:help}abbr{text-transform:none}abbr[title]{border-bottom:1px dotted #ddd}blockquote{margin:0 0 1.25rem;padding:0.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #ddd}blockquote cite{display:block;font-size:0.8125rem;color:#555}blockquote cite:before{content:"\2014 \0020"}blockquote cite a,blockquote cite a:visited{color:#555}blockquote,blockquote p{line-height:1.6;color:#6f6f6f}.vcard{display:inline-block;margin:0 0 1.25rem 0;border:1px solid #ddd;padding:0.625rem 0.75rem}.vcard li{margin:0;display:block}.vcard .fn{font-weight:bold;font-size:0.9375rem}.vevent .summary{font-weight:bold}.vevent abbr{cursor:default;text-decoration:none;font-weight:bold;border:none;padding:0 0.0625rem}@media only screen and (min-width: 40.063em){h1,h2,h3,h4,h5,h6{line-height:1.4}h1{font-size:2.75rem}h2{font-size:2.3125rem}h3{font-size:1.6875rem}h4{font-size:1.4375rem}h5{font-size:1.125rem}h6{font-size:1rem}}.reveal-modal-bg{position:fixed;top:0;bottom:0;left:0;right:0;background:#000;background:rgba(0,0,0,0.45);z-index:1004;display:none;left:0}.reveal-modal{visibility:hidden;display:none;position:absolute;z-index:1005;width:100%;top:0;border-radius:3px;left:0;background-color:#fff;padding:1.875rem;border:solid 1px #666;box-shadow:0 0 10px rgba(0,0,0,0.4)}@media only screen and (max-width: 40em){.reveal-modal{min-height:100vh}}.reveal-modal .column,.reveal-modal .columns{min-width:0}.reveal-modal>:first-child{margin-top:0}.reveal-modal>:last-child{margin-bottom:0}@media only screen and (min-width: 40.063em){.reveal-modal{width:80%;max-width:62.5rem;left:0;right:0;margin:0 auto}}@media only screen and (min-width: 40.063em){.reveal-modal{top:6.25rem}}.reveal-modal.radius{border-radius:3px}.reveal-modal.round{border-radius:1000px}.reveal-modal.collapse{padding:0}@media only screen and (min-width: 40.063em){.reveal-modal.tiny{width:30%;max-width:62.5rem;left:0;right:0;margin:0 auto}}@media only screen and (min-width: 40.063em){.reveal-modal.small{width:40%;max-width:62.5rem;left:0;right:0;margin:0 auto}}@media only screen and (min-width: 40.063em){.reveal-modal.medium{width:60%;max-width:62.5rem;left:0;right:0;margin:0 auto}}@media only screen and (min-width: 40.063em){.reveal-modal.large{width:70%;max-width:62.5rem;left:0;right:0;margin:0 auto}}@media only screen and (min-width: 40.063em){.reveal-modal.xlarge{width:95%;max-width:62.5rem;left:0;right:0;margin:0 auto}}.reveal-modal.full{top:0;left:0;height:100%;height:100vh;min-height:100vh;max-width:none !important;margin-left:0 !important}@media only screen and (min-width: 40.063em){.reveal-modal.full{width:100%;max-width:62.5rem;left:0;right:0;margin:0 auto}}.reveal-modal.toback{z-index:1003}.reveal-modal .close-reveal-modal{font-size:2.5rem;line-height:1;position:absolute;top:0.625rem;right:1.375rem;color:#aaa;font-weight:bold;cursor:pointer}.label{font-weight:normal;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;text-align:center;text-decoration:none;line-height:1;white-space:nowrap;display:inline-block;position:relative;margin-bottom:auto;padding:0.25rem 0.5rem 0.25rem;font-size:0.6875rem;background-color:#008CBA;color:#fff}.label.radius{border-radius:3px}.label.round{border-radius:1000px}.label.alert{background-color:#f04124;color:#fff}.label.warning{background-color:#f08a24;color:#fff}.label.success{background-color:#43AC6A;color:#fff}.label.secondary{background-color:#e7e7e7;color:#333}.label.info{background-color:#a0d3e8;color:#333}[class*="block-grid-"]{display:block;padding:0;margin:0 -0.625rem}[class*="block-grid-"]:before,[class*="block-grid-"]:after{content:" ";display:table}[class*="block-grid-"]:after{clear:both}[class*="block-grid-"]>li{display:block;height:auto;float:left;padding:0 0.625rem 1.25rem}@media only screen{.small-block-grid-1>li{width:100%;list-style:none}.small-block-grid-1>li:nth-of-type(1n){clear:none}.small-block-grid-1>li:nth-of-type(1n+1){clear:both}.small-block-grid-2>li{width:50%;list-style:none}.small-block-grid-2>li:nth-of-type(1n){clear:none}.small-block-grid-2>li:nth-of-type(2n+1){clear:both}.small-block-grid-3>li{width:33.33333%;list-style:none}.small-block-grid-3>li:nth-of-type(1n){clear:none}.small-block-grid-3>li:nth-of-type(3n+1){clear:both}.small-block-grid-4>li{width:25%;list-style:none}.small-block-grid-4>li:nth-of-type(1n){clear:none}.small-block-grid-4>li:nth-of-type(4n+1){clear:both}.small-block-grid-5>li{width:20%;list-style:none}.small-block-grid-5>li:nth-of-type(1n){clear:none}.small-block-grid-5>li:nth-of-type(5n+1){clear:both}.small-block-grid-6>li{width:16.66667%;list-style:none}.small-block-grid-6>li:nth-of-type(1n){clear:none}.small-block-grid-6>li:nth-of-type(6n+1){clear:both}.small-block-grid-7>li{width:14.28571%;list-style:none}.small-block-grid-7>li:nth-of-type(1n){clear:none}.small-block-grid-7>li:nth-of-type(7n+1){clear:both}.small-block-grid-8>li{width:12.5%;list-style:none}.small-block-grid-8>li:nth-of-type(1n){clear:none}.small-block-grid-8>li:nth-of-type(8n+1){clear:both}.small-block-grid-9>li{width:11.11111%;list-style:none}.small-block-grid-9>li:nth-of-type(1n){clear:none}.small-block-grid-9>li:nth-of-type(9n+1){clear:both}.small-block-grid-10>li{width:10%;list-style:none}.small-block-grid-10>li:nth-of-type(1n){clear:none}.small-block-grid-10>li:nth-of-type(10n+1){clear:both}.small-block-grid-11>li{width:9.09091%;list-style:none}.small-block-grid-11>li:nth-of-type(1n){clear:none}.small-block-grid-11>li:nth-of-type(11n+1){clear:both}.small-block-grid-12>li{width:8.33333%;list-style:none}.small-block-grid-12>li:nth-of-type(1n){clear:none}.small-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width: 40.063em){.medium-block-grid-1>li{width:100%;list-style:none}.medium-block-grid-1>li:nth-of-type(1n){clear:none}.medium-block-grid-1>li:nth-of-type(1n+1){clear:both}.medium-block-grid-2>li{width:50%;list-style:none}.medium-block-grid-2>li:nth-of-type(1n){clear:none}.medium-block-grid-2>li:nth-of-type(2n+1){clear:both}.medium-block-grid-3>li{width:33.33333%;list-style:none}.medium-block-grid-3>li:nth-of-type(1n){clear:none}.medium-block-grid-3>li:nth-of-type(3n+1){clear:both}.medium-block-grid-4>li{width:25%;list-style:none}.medium-block-grid-4>li:nth-of-type(1n){clear:none}.medium-block-grid-4>li:nth-of-type(4n+1){clear:both}.medium-block-grid-5>li{width:20%;list-style:none}.medium-block-grid-5>li:nth-of-type(1n){clear:none}.medium-block-grid-5>li:nth-of-type(5n+1){clear:both}.medium-block-grid-6>li{width:16.66667%;list-style:none}.medium-block-grid-6>li:nth-of-type(1n){clear:none}.medium-block-grid-6>li:nth-of-type(6n+1){clear:both}.medium-block-grid-7>li{width:14.28571%;list-style:none}.medium-block-grid-7>li:nth-of-type(1n){clear:none}.medium-block-grid-7>li:nth-of-type(7n+1){clear:both}.medium-block-grid-8>li{width:12.5%;list-style:none}.medium-block-grid-8>li:nth-of-type(1n){clear:none}.medium-block-grid-8>li:nth-of-type(8n+1){clear:both}.medium-block-grid-9>li{width:11.11111%;list-style:none}.medium-block-grid-9>li:nth-of-type(1n){clear:none}.medium-block-grid-9>li:nth-of-type(9n+1){clear:both}.medium-block-grid-10>li{width:10%;list-style:none}.medium-block-grid-10>li:nth-of-type(1n){clear:none}.medium-block-grid-10>li:nth-of-type(10n+1){clear:both}.medium-block-grid-11>li{width:9.09091%;list-style:none}.medium-block-grid-11>li:nth-of-type(1n){clear:none}.medium-block-grid-11>li:nth-of-type(11n+1){clear:both}.medium-block-grid-12>li{width:8.33333%;list-style:none}.medium-block-grid-12>li:nth-of-type(1n){clear:none}.medium-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width: 64.063em){.large-block-grid-1>li{width:100%;list-style:none}.large-block-grid-1>li:nth-of-type(1n){clear:none}.large-block-grid-1>li:nth-of-type(1n+1){clear:both}.large-block-grid-2>li{width:50%;list-style:none}.large-block-grid-2>li:nth-of-type(1n){clear:none}.large-block-grid-2>li:nth-of-type(2n+1){clear:both}.large-block-grid-3>li{width:33.33333%;list-style:none}.large-block-grid-3>li:nth-of-type(1n){clear:none}.large-block-grid-3>li:nth-of-type(3n+1){clear:both}.large-block-grid-4>li{width:25%;list-style:none}.large-block-grid-4>li:nth-of-type(1n){clear:none}.large-block-grid-4>li:nth-of-type(4n+1){clear:both}.large-block-grid-5>li{width:20%;list-style:none}.large-block-grid-5>li:nth-of-type(1n){clear:none}.large-block-grid-5>li:nth-of-type(5n+1){clear:both}.large-block-grid-6>li{width:16.66667%;list-style:none}.large-block-grid-6>li:nth-of-type(1n){clear:none}.large-block-grid-6>li:nth-of-type(6n+1){clear:both}.large-block-grid-7>li{width:14.28571%;list-style:none}.large-block-grid-7>li:nth-of-type(1n){clear:none}.large-block-grid-7>li:nth-of-type(7n+1){clear:both}.large-block-grid-8>li{width:12.5%;list-style:none}.large-block-grid-8>li:nth-of-type(1n){clear:none}.large-block-grid-8>li:nth-of-type(8n+1){clear:both}.large-block-grid-9>li{width:11.11111%;list-style:none}.large-block-grid-9>li:nth-of-type(1n){clear:none}.large-block-grid-9>li:nth-of-type(9n+1){clear:both}.large-block-grid-10>li{width:10%;list-style:none}.large-block-grid-10>li:nth-of-type(1n){clear:none}.large-block-grid-10>li:nth-of-type(10n+1){clear:both}.large-block-grid-11>li{width:9.09091%;list-style:none}.large-block-grid-11>li:nth-of-type(1n){clear:none}.large-block-grid-11>li:nth-of-type(11n+1){clear:both}.large-block-grid-12>li{width:8.33333%;list-style:none}.large-block-grid-12>li:nth-of-type(1n){clear:none}.large-block-grid-12>li:nth-of-type(12n+1){clear:both}}.keystroke,kbd{background-color:#ededed;border-color:#ddd;color:#222;border-style:solid;border-width:1px;margin:0;font-family:"Consolas","Menlo","Courier",monospace;font-size:inherit;padding:0.125rem 0.25rem 0;border-radius:3px}
diff --git a/agkyra/gui/icons/about.png b/agkyra/gui/icons/about.png
new file mode 100644
index 0000000000000000000000000000000000000000..685275b8f56ecb81657a8029b7f089c422536a36
Binary files /dev/null and b/agkyra/gui/icons/about.png differ
diff --git a/agkyra/gui/icons/exit.png b/agkyra/gui/icons/exit.png
new file mode 100644
index 0000000000000000000000000000000000000000..12f93a705640cbe10ed5c8beab64e1c60a7b9581
Binary files /dev/null and b/agkyra/gui/icons/exit.png differ
diff --git a/agkyra/gui/icons/folder.png b/agkyra/gui/icons/folder.png
new file mode 100644
index 0000000000000000000000000000000000000000..f850696f1793b0d5dace623d914dfef3a2975f4f
Binary files /dev/null and b/agkyra/gui/icons/folder.png differ
diff --git a/agkyra/gui/icons/logo.png b/agkyra/gui/icons/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..02bff3f4ff2993b9feb9a5ad9340e968b918faf2
Binary files /dev/null and b/agkyra/gui/icons/logo.png differ
diff --git a/agkyra/gui/icons/logs.png b/agkyra/gui/icons/logs.png
new file mode 100644
index 0000000000000000000000000000000000000000..2a891de03d3f381e6e9d2b38ce129652f4cd175d
Binary files /dev/null and b/agkyra/gui/icons/logs.png differ
diff --git a/agkyra/gui/icons/pithos.png b/agkyra/gui/icons/pithos.png
new file mode 100644
index 0000000000000000000000000000000000000000..881da0efef06c235983340cee7f79c2bf793db98
Binary files /dev/null and b/agkyra/gui/icons/pithos.png differ
diff --git a/agkyra/gui/icons/settings.png b/agkyra/gui/icons/settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..55f92ece8fecd9f6183a0fe5c72bc8aced8b6566
Binary files /dev/null and b/agkyra/gui/icons/settings.png differ
diff --git a/agkyra/gui/icons/tray.png b/agkyra/gui/icons/tray.png
new file mode 100644
index 0000000000000000000000000000000000000000..cd8e011d007aa8850458bfdef943f9c262c96da4
Binary files /dev/null and b/agkyra/gui/icons/tray.png differ
diff --git a/agkyra/gui/index.html b/agkyra/gui/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e08e4eb7df4832c85e36b32d3f785448e50ec2bd
--- /dev/null
+++ b/agkyra/gui/index.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<html>
+<head><title>GUI for Agkyra Pithos+ Syncing Client</title></head>
+<body><script src="protocol.js"> </script></body>
+</html>
\ No newline at end of file
diff --git a/agkyra/gui/logs.txt b/agkyra/gui/logs.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e826567aa016f2c2acd766e3db353ff1cac1887b
--- /dev/null
+++ b/agkyra/gui/logs.txt
@@ -0,0 +1 @@
+There must be some logs
diff --git a/agkyra/gui/package.json b/agkyra/gui/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..2374ca5c8bbab9b3dcef5c332f16c6006a22992a
--- /dev/null
+++ b/agkyra/gui/package.json
@@ -0,0 +1,16 @@
+{
+  "name": "Agkyra",
+  "main": "index.html",
+  "description": "A Pithos+ Syncing Client for Desktop",
+  "version": 0.0,
+  "window": {
+    "show": false,
+    "toolbar": false,
+    "frame": false
+  },
+  "maintainers": [{
+    "name": "Synnefo Development Team",
+    "web": "http://www.synnefo.org"
+    }],
+  "licences": [{"type": "GPLv3"}]
+}
diff --git a/agkyra/gui/protocol.js b/agkyra/gui/protocol.js
new file mode 100644
index 0000000000000000000000000000000000000000..897245957f4ecf6fba8e582652e43aaea7ec5508
--- /dev/null
+++ b/agkyra/gui/protocol.js
@@ -0,0 +1,98 @@
+var gui = require('nw.gui');
+
+// Read config file
+var fs = require('fs');
+var cnf = JSON.parse(fs.readFileSync(gui.App.argv[0], encoding='utf-8'));
+
+setTimeout(function() {
+  // Connect to helper
+  var socket = new WebSocket('ws://localhost:' + cnf['port']);
+  socket.onopen = function() {
+    console.log('Connecting to helper');
+    this.send(cnf['token']);
+  }
+  socket.onmessage = function(e) {
+    console.log('message', e.data);
+  };
+  socket.onerror = function () {
+      console.log('GUI and helper cannot communicate, quiting');
+      gui.Window.get().close();
+  }
+
+  // Setup GUI
+  var windows = {
+    "settings": null,
+    "about": null,
+    "index": gui.Window.get()
+  }
+  function closeWindows() {
+    for (win in windows) if (windows[win]) windows[win].close();
+  }
+
+  // GUI components
+  var tray = new gui.Tray({
+    tooltip: 'Paused (0% synced)',
+    title: 'Agkyra syncs with Pithos+',
+    icon: 'icons/tray.png'
+  });
+
+  var menu = new gui.Menu();
+
+  // See contents
+  menu.append(new gui.MenuItem({type: 'separator'}));
+  menu.append(new gui.MenuItem({
+    label: 'Open local folder',
+    icon: 'icons/folder.png',
+    click: function () {gui.Shell.showItemInFolder('.');}
+  }));
+
+  menu.append(new gui.MenuItem({
+    label: 'Launch Pithos+ page',
+    icon: 'icons/pithos.png',
+    click: function () {
+      gui.Shell.openExternal('https://pithos.okeanos.grnet.gr');
+    }
+  }));
+
+  menu.append(new gui.MenuItem({
+    label: 'Recently changed files',
+    icon: 'icons/logs.png',
+    click: function () {gui.Shell.openItem('logs.txt');}
+  }));
+
+  // Settings and About
+  menu.append(new gui.MenuItem({type: 'separator'}));
+  menu.append(new gui.MenuItem({
+    label: 'Settings',
+    icon: 'icons/settings.png',
+    click: function () {
+      if (windows['settings']) windows['settings'].close();
+      windows['settings'] = gui.Window.open("settings.html", {
+        "toolbar": false, "focus": true});
+    }
+  }));
+
+  menu.append(new gui.MenuItem({
+    label: 'About',
+    icon: 'icons/about.png',
+    click: function () {
+      if (windows['about']) windows['about'].close();
+      windows['about'] = gui.Window.open("about.html", {
+        "toolbar": false, "resizable": false, "focus": true});
+    }
+  }));
+
+  // Quit
+  menu.append(new gui.MenuItem({type: 'separator'}));
+  menu.append(new gui.MenuItem({
+    label: 'Quit Agkyra',
+    icon: 'icons/exit.png',
+    click: function () {
+      console.log('Exiting client');
+      console.log('Exiting GUI');
+      closeWindows()
+    }
+  }));
+
+  tray.menu = menu;
+}, 100); // Timeout in milliseconds
diff --git a/agkyra/gui/settings.html b/agkyra/gui/settings.html
new file mode 100644
index 0000000000000000000000000000000000000000..ce74444a543275d0fa5861d865eb38ebcf83da79
--- /dev/null
+++ b/agkyra/gui/settings.html
@@ -0,0 +1,54 @@
+<html>
+<head>
+  <title>Agira client settings</title>
+  <style>
+    @import url('foundation.min.css');
+  </style>
+</head>
+<body>
+  <form>
+
+    <h1>Account settings</h1>
+
+    <h2>Cloud:</h2>
+    <div class="row">
+      <div class="large-12 columns">
+        <label>Cloud URL
+          <input type="text" placeholder="Authentication URL"/>
+        </label>
+      </div>
+    </div>
+    <div class="row">
+      <div class="large-12 columns">
+        <label>Token
+          <input type="text" placeholder="User token"/>
+        </label>
+      </div>
+    </div>
+
+    <h2>What to sync:</h2>
+    <div class="row">
+      <div class="large-4 columns">
+        <label>Remote container
+          <input type="text" value="pithos"/>
+        </label>
+      </div>
+      <div class="large-4 columns">
+        <label>Local directory
+          <input type="file" nwdirectory />
+        </label>
+      </div>
+      <script>var gui=require('nw.gui');</script>
+      <div class="large-4 columns">
+        <label>Exclude these items from syncing
+          <input
+            type="button"
+            onclick="gui.Shell.openItem('logs.txt');"/>
+        </label>
+      </div>
+    </div>
+
+  </form>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/agkyra/gui/ws.html b/agkyra/gui/ws.html
new file mode 100644
index 0000000000000000000000000000000000000000..7693d80cc0013492e412576ccdf970ea937b2c94
--- /dev/null
+++ b/agkyra/gui/ws.html
@@ -0,0 +1,20 @@
+<html><head>
+<script>
+
+    // Read config file
+        var socket = new WebSocket("ws://83.212.96.33:8888");
+        socket.onopen = function() {
+          console.log('open dude!');
+          this.send('Hello World!');
+        };
+        socket.onmessage = function(e) {
+          console.log('message', e.data);
+        };
+        socket.onerror = function() {
+          console.log('error');
+        };
+        socket.onclose = function(e) {
+          console.log('close', e.code, e.reason);
+        };
+</script>
+</head><body></body></html>
\ No newline at end of file
diff --git a/agkyra/index.html b/agkyra/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/agkyra/protocol.py b/agkyra/protocol.py
new file mode 100644
index 0000000000000000000000000000000000000000..81e5fe8375edc5041dcc9b4e4e91142c060e9ac3
--- /dev/null
+++ b/agkyra/protocol.py
@@ -0,0 +1,41 @@
+from ws4py.websocket import WebSocket
+
+
+class WebSocketProtocol(WebSocket):
+    """Helper-side WebSocket protocol for communication with GUI:
+
+    -- INTERRNAL HANDSAKE --
+    GUI: {"token": <token>}
+    HELPER: {"ACCEPTED": 202}" or "{"ERROR": 401, "MESSAGE": <message>}
+
+    -- GET SETTINGS --
+    GUI: {"method": "get", "path": "settings"}
+    HELPER:
+        {
+            "token": <user token>,
+            "url": <auth url>,
+            "container": <container>,
+            "directory": <local directory>,
+            "exclude": <file path>
+        } or {"ERROR": <error code>, "MESSAGE": <message>}"
+
+    -- PUT SETTINGS --
+    GUI: {
+            "method": "put", "path": "settings",
+            "token": <user token>,
+            "url": <auth url>,
+            "container": <container>,
+            "directory": <local directory>,
+            "exclude": <file path>
+        }
+    HELPER: {"CREATED": 201} or {"ERROR": <error code>, "MESSAGE": <message>}
+
+    -- GET STATUS --
+    GUI: {"method": "get", "path": "status"}
+    HELPER: ""progres": <int>, "paused": <boolean>} or
+        {"ERROR": <error code>, "MESSAGE": <message>}
+    """
+
+    def __init__(self, *args, **kwargs):
+        super(WebSocketProtocol, self).__init__(*args, **kwargs)
+        print 'lala'