diff --git a/.dockerignore b/.dockerignore
index 93f1361..5171c54 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,2 +1,2 @@
 node_modules
-npm-debug.log
+npm-debug.log
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index a4f1d03..178414b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
-# To build use: docker build -t xosproject/xos-nb-rest .
-# To run use: docker run -p 3000:3000 -d xosproject/xos-nb-rest
+# To build use: docker build -t xosproject/xos-rest-gw .
+# To run use: docker run -p 3000:3000 -d xosproject/xos-rest-gw
 
 FROM node:argon
 
diff --git a/spec/core_proxy.spec.js b/spec/core_proxy.spec.js
index c5bb9ad..7afa118 100644
--- a/spec/core_proxy.spec.js
+++ b/spec/core_proxy.spec.js
@@ -89,11 +89,11 @@
       .get('/api/core/')
       .set('Accept', 'application/json')
       .set('x-csrftoken', 'testToken')
-      .set('cookie', 'testCookie')
+      .set('x-sessionid', 'testSession')
       .end(function(err) {
         if (err) return done(err);
         expect(myStub.set.getCall(0)).to.have.been.calledWith('x-csrftoken', 'testToken');
-        expect(myStub.set.getCall(1)).to.have.been.calledWith('cookie', 'testCookie');
+        expect(myStub.set.getCall(1)).to.have.been.calledWith('cookie', 'xossessionid=testSession');
         done();
       });
     });
diff --git a/spec/index.html b/spec/index.html
index 4f97749..c13b92f 100644
--- a/spec/index.html
+++ b/spec/index.html
@@ -2,7 +2,7 @@
 <html>
   <head>
     <title>Socket.IO chat</title>
-    <script src="http://10.1.8.44:3000/socket.io/socket.io.js"></script>
+    <script src="http://localhost:4000/socket.io/socket.io.js"></script>
     <script
       src="https://code.jquery.com/jquery-1.12.4.min.js"
       integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
@@ -14,41 +14,41 @@
         max-width: 100%;
       }
     </style>
-<script>
-  /* global io $ alert*/
-  function enableSocket(auth) {
+    <script>
+      /* global io $ alert*/
+      function enableSocket(auth) {
 
-    auth.user = JSON.parse(auth.user);
+        auth.user = JSON.parse(auth.user);
 
-    var socket = io.connect('http://10.1.8.44:3000', {
-      query: 'name=' + auth.user.username + '&token=' + auth.xoscsrftoken + '&sessionId=' + auth.xossessionid + '&id=' + auth.user.id
-    });
-    socket.on('event', function(data) {
-      var p = $('body').append('<p></p>');
-      p.append('<b>' + data.model + '</b><br/>');
-      p.append('<i>' + JSON.stringify(data.msg.changed_fields) + '</i>');
-      p.append('<pre>' + JSON.stringify(data.msg.object) + '</pre>');
-      console.log(data.object);
-      $.notify(data.model + ': ' + JSON.stringify(data.msg.object.name) + 'updated', 'success');
-    });
-  }
-
-  function login() {
-    var username = $('#username').val();
-    var password = $('#password').val();
-
-    $.get('http://10.1.8.44:3000/api/utility/login?username='+username+'&password='+password,
-      function(res) {
-        enableSocket(res);
-        $('#login').hide();
+        var socket = io.connect('http://localhost:4000', {
+          query: 'name=' + auth.user.username + '&token=' + auth.xoscsrftoken + '&sessionId=' + auth.xossessionid + '&id=' + auth.user.id
+        });
+        socket.on('event', function(data) {
+          var p = $('body').append('<p></p>');
+          p.append('<b>' + data.model + '</b><br/>');
+          p.append('<i>' + JSON.stringify(data.msg.changed_fields) + '</i>');
+          p.append('<pre>' + JSON.stringify(data.msg.object) + '</pre>');
+          console.log(data.object);
+          $.notify(data.model + ': ' + JSON.stringify(data.msg.object.name) + 'updated', 'success');
+        });
       }
-    )
-    .fail(function(e) {
-      alert( 'error' );
-      console.log(e);
-    });
-  }
-</script>
+
+      function login() {
+        var username = $('#username').val();
+        var password = $('#password').val();
+
+        $.get('http://localhost:4000/api/utility/login?username='+username+'&password='+password,
+          function(res) {
+            enableSocket(res);
+            $('#login').hide();
+          }
+        )
+        .fail(function(e) {
+          alert( 'error' );
+          console.log(e);
+        });
+      }
+    </script>
   </head>
   <body>
     <form onsubmit="login()" id="login">
diff --git a/spec/websocket.spec.js b/spec/websocket.spec.js
index 2822223..51b9cec 100644
--- a/spec/websocket.spec.js
+++ b/spec/websocket.spec.js
@@ -7,17 +7,17 @@
   chai.use(sinonChai);
   const io = require('socket.io-client');
   const server = require('../src/server.js');
-
-  describe('basic socket.io example', function() {
+  const port = 4000;
+  describe('Websocket', function() {
 
     var client;
 
     beforeEach(function(done) {
       // Start our server
-      server.start();
+      server.start(port);
 
       // connect a client to the server
-      client = io.connect('http://localhost:3000', {
+      client = io.connect(`http://localhost:${port}`, {
         query: 'name=test@xos.org&token=testToken&sessionId=testSession&id=1'
       });
 
@@ -44,7 +44,7 @@
     it('should not store the same user twice', (done) => {
 
       // connect a client to the server
-      const client2 = io.connect('http://localhost:3000', {
+      const client2 = io.connect(`http://localhost:${port}`, {
         query: 'name=test@xos.org&token=testToken&sessionId=testSession&id=1'
       });
 
diff --git a/src/config/logger.js b/src/config/logger.js
index df49409..dfec0dc 100644
--- a/src/config/logger.js
+++ b/src/config/logger.js
@@ -4,7 +4,7 @@
   const winston = require('winston');
   const fs = require('fs');
   const path = require('path');
-  const level = process.env.LOG_LEVEL || 'warn';
+  const level = process.env.LOG_LEVEL || 'debug';
   winston.level = level;
 
   const logFile = path.join(__dirname, '../../logs/xos-nb-rest');
diff --git a/src/controllers/redis.js b/src/controllers/redis.js
index 0277cab..0bcebe3 100644
--- a/src/controllers/redis.js
+++ b/src/controllers/redis.js
@@ -25,7 +25,7 @@
   });
 
   client.on('message', function (channel, message) {
-    logger.log('debug', 'sub channel ' + channel + ': ' + message);
+    logger.log('warn', 'sub channel ' + channel + ': ' + message);
 
     let msg;
     try {
diff --git a/src/routes/core_proxy.js b/src/routes/core_proxy.js
index 0290347..6da2eef 100644
--- a/src/routes/core_proxy.js
+++ b/src/routes/core_proxy.js
@@ -8,6 +8,14 @@
 
     const proxyRequest = (req, res) => {
 
+      // debugging helper
+      if(!req.headers['x-csrftoken']){
+        logger.log('warn', `csrftoken is missing and is required for authentication`);
+      }
+      if(!req.headers['x-sessionid']){
+        logger.log('warn', `Session id is missing and is required for authentication`);
+      }
+
       const config = require('../config/config.js').xos;
       // pick the correct method from superAgent
       const makeReq = request[req.method.toLowerCase()];
@@ -24,7 +32,7 @@
       // extend with auth info
       sentReq = sentReq
         .set('x-csrftoken', req.headers['x-csrftoken'] || null)
-        .set('cookie', req.headers.cookie || null)
+        .set('cookie', `xossessionid=${req.headers['x-sessionid']}` || null)
 
       // handle response
       sentReq
diff --git a/src/server.js b/src/server.js
index da541ce..c132cab 100644
--- a/src/server.js
+++ b/src/server.js
@@ -20,15 +20,15 @@
     res.send('Hello world');
   });
 
-  const startServer = () => {
+  const startServer = (port) => {
 
     // if is running just return it
     if(app.server) {
       return app.server;
     }
 
-    const server =  app.listen(config.port, function() {
-      logger.info(`Express is listening to http://localhost:${config.port}`);
+    const server =  app.listen(port || config.port, function() {
+      logger.info(`Express is listening to http://localhost:${port || config.port}`);
 
       // once server is ready setup WebSocket
       socketIo.create(server);
