diff --git a/src/controllers/clients.js b/src/controllers/clients.js
new file mode 100644
index 0000000..26270bc
--- /dev/null
+++ b/src/controllers/clients.js
@@ -0,0 +1,18 @@
+(function () {
+  'use strict';
+  const _ = require('lodash');
+  const clients = [];
+
+  exports.clients = clients;
+
+  exports.add = (client) => {
+    // TODO check id that client is already there
+    if(!_.find(clients, ({id: client.id}))) {
+      clients.push(client);
+    }
+  }
+
+  exports.remove = (client) => {
+    _.remove(clients, {id: client.id});
+  }
+})();
\ No newline at end of file
diff --git a/src/controllers/redis.js b/src/controllers/redis.js
new file mode 100644
index 0000000..0277cab
--- /dev/null
+++ b/src/controllers/redis.js
@@ -0,0 +1,57 @@
+(function () {
+  'use strict';
+  
+  const socketIo = require('./websocket.js');
+  const config = require('../config/config.js').redis;
+  const logger = require('../config/logger.js');
+  const socket = socketIo.get();
+
+  var redis = require('redis');
+  var client = redis.createClient({
+    host: config.host,
+    port: config.port
+  });
+
+  client.on('error', function (err) {
+    logger.log('error', err);
+  });
+
+  client.on('ready', function () {
+    logger.log('info', 'Redis connected');
+  });
+
+  client.on('subscribe', function (channel) {
+    logger.log('debug', `Subscribed to channel: ${channel}`);
+  });
+
+  client.on('message', function (channel, message) {
+    logger.log('debug', 'sub channel ' + channel + ': ' + message);
+
+    let msg;
+    try {
+      msg = JSON.parse(message);
+      // TODO find the user that needs to be notified for msg.object update
+      socket.emit('event', {model: channel, msg: msg});
+    }
+    catch(e) {
+      // send the event also if it is not JSON
+      msg = message;
+      socket.emit('event', {model: channel, msg: msg});
+    }
+
+  });
+
+  const watchedCollections = [
+    'Instance',
+    'Node',
+    'Service',
+    'Slice',
+    'Site',
+    'Subscriber',
+    'Tenant'
+  ];
+
+  watchedCollections.forEach(c => {
+    client.subscribe(c);
+  });
+})();
\ No newline at end of file
diff --git a/src/controllers/websocket.js b/src/controllers/websocket.js
new file mode 100644
index 0000000..e048419
--- /dev/null
+++ b/src/controllers/websocket.js
@@ -0,0 +1,39 @@
+(function () {
+  'use strict';
+
+  const clients = require('./clients.js');
+  const logger = require('../config/logger.js');
+
+  let io;
+
+  exports.create = function(server) {
+    // INSTANTIATE SOCKET.IO
+    // =============================================================================
+
+    io = require('socket.io').listen(server);
+
+    // LISTEN TO "CONNECTION" EVENT (FROM SOCKET.IO)
+    // =============================================================================
+
+    io.on('connection', function (socket) {
+      logger.log('debug', 'connect %j', socket.handshake.query);
+      clients.add(socket.handshake.query);
+
+      socket.emit('connected', {message : 'Welcome to XOS'});
+
+      socket.on('disconnect', function(reason) {
+        clients.remove(socket.handshake.query);
+        logger.log('debug', 'disconnect %s %j', reason, socket.handshake.query);
+      });
+    });
+
+  };
+
+  exports.get = () => io;
+
+  // USAGE
+  // const socketIo = require('./controllers/websocket.js');
+  // const socket = socketIo.get();
+  // socket.emit('eventName', data);
+
+})(); 
\ No newline at end of file
