diff --git a/dist/server/channelManager.js b/dist/server/channelManager.js
index 286e32f..8cbc892 100644
--- a/dist/server/channelManager.js
+++ b/dist/server/channelManager.js
@@ -55,6 +55,24 @@ class ChannelManager {
             return new channelBase_1.default(data.channel);
         }
     }
+    removeClientFromChannel(client_id, channel_id) {
+        var index = 0;
+        for (let channel of this.channels) {
+            if (channel.id == channel_id) {
+                this.channels.splice(index, 1);
+                if (channel.removeClient(client_id)) {
+                    logger.accessLog.info(`client removed from channel - channel: ${channel_id}, client: ${client_id}`);
+                    return true;
+                }
+                else {
+                    logger.errorLog.info(`client not removed from channel, or doesn't exist in channel - channel: ${channel_id}, client: ${client_id}`);
+                    return false;
+                }
+            }
+            index++;
+        }
+        return false;
+    }
 }
 ;
 exports.default = ChannelManager;
diff --git a/dist/server/channelManager.js.map b/dist/server/channelManager.js.map
index 0ed03cb..14792e0 100644
--- a/dist/server/channelManager.js.map
+++ b/dist/server/channelManager.js.map
@@ -1 +1 @@
-{"version":3,"file":"channelManager.js","sourceRoot":"","sources":["../../src/channelManager.ts"],"names":[],"mappings":";;AAAA,wDAAiD;AAKjD,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEjC,MAAM,cAAc;IAGlB;QAFA,aAAQ,GAA+B,EAAE,CAAC;QAGxC,4BAA4B;QAC5B,IAAI,OAAO,GAAgB,IAAI,qBAAW,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,aAAa,CAAC,IAAS;QACrB,IAAI,aAAa,GAAgC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClF,IAAI,OAA+B,CAAC;QAEpC,IAAI,aAAa,EAAE;YACjB,OAAO,GAAG,aAAa,CAAC;YACxB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;SAChE;aAAM;YACL,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,qCAAqC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;SAC1E;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,aAAa,CAAC,UAAkB;QAC9B,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,OAAO,CAAC,EAAE,IAAI,UAAU,EAAE;gBAC5B,OAAO,OAAO,CAAC;aAChB;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB,CAAC,MAA4B,EAAE,UAAkB;QACjE,IAAI,OAAO,GAAgC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAE1E,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAC,CAAC;SAC9B;aAAM;YACL,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,UAAU,kBAAkB,CAAC,CAAC;YACvE,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,mBAAmB,UAAU,kBAAkB,EAAC,CAAC;SACzF;IACH,CAAC;IAED,mBAAmB,CAAC,IAAS;QAC3B,IAAI;YACF,IAAI,OAAO,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;YAC/E,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,wCAAwC,IAAI,CAAC,MAAM,iBAAiB,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC;YAC7G,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAClC;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,OAAO,IAAI,qBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACtC;IACH,CAAC;CACF;AAAA,CAAC;AAEF,kBAAe,cAAc,CAAC;AAE9B,8GAA8G"}
\ No newline at end of file
+{"version":3,"file":"channelManager.js","sourceRoot":"","sources":["../../src/channelManager.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/server/channels/channelBase.js b/dist/server/channels/channelBase.js
index ec0ce5c..264d442 100644
--- a/dist/server/channels/channelBase.js
+++ b/dist/server/channels/channelBase.js
@@ -26,6 +26,17 @@ class ChannelBase {
         }
         return null;
     }
+    removeClient(id) {
+        var index = 0;
+        for (let client of this.clients) {
+            if (client.id == id) {
+                this.clients.splice(index, 1);
+                return true;
+            }
+            index++;
+        }
+        return false;
+    }
     broadcastMessage(from, message) {
         for (let client of this.clients) {
             if (client != from) {
diff --git a/dist/server/channels/channelBase.js.map b/dist/server/channels/channelBase.js.map
index bc4e4e6..cd75307 100644
--- a/dist/server/channels/channelBase.js.map
+++ b/dist/server/channels/channelBase.js.map
@@ -1 +1 @@
-{"version":3,"file":"channelBase.js","sourceRoot":"","sources":["../../../src/channels/channelBase.ts"],"names":[],"mappings":";;AAGA,IAAI,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAElC,MAAM,WAAW;IAIf,YAAY,EAAU;QAFtB,YAAO,GAA6B,EAAE,CAAC;QAGrC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAC,SAAS,EAAE,EAAE,EAAC,CAAC,CAAC;IAC5D,CAAC;IAED,SAAS,CAAC,MAA4B;QACpC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAC,CAAC,CAAC;YACnG,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,iCAAiC,EAAC,CAAC;SAC3E;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAC,CAAC,CAAC;YAC5F,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAC,CAAC;SACzD;IACH,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE;gBACnB,OAAO,MAAM,CAAC;aACf;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,IAA+B,EAAE,OAAe;QAC/D,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,MAAM,IAAI,IAAI,EAAE;gBAClB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,EAAE,IAAI,EAAE,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC,CAAC;aACrE;iBAAM;gBACL,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,6BAA6B,MAAM,CAAC,EAAE,KAAK,EAAE,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC,CAAC;aACxF;SACF;QAED,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,4BAA4B,EAAC,CAAC;IACxE,CAAC;CACF;AAAA,CAAC;AAEF,kBAAe,WAAW,CAAC"}
\ No newline at end of file
+{"version":3,"file":"channelBase.js","sourceRoot":"","sources":["../../../src/channels/channelBase.ts"],"names":[],"mappings":";;AAGA,IAAI,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAElC,MAAM,WAAW;IAIf,YAAY,EAAU;QAFtB,YAAO,GAA6B,EAAE,CAAC;QAGrC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAC,SAAS,EAAE,EAAE,EAAC,CAAC,CAAC;IAC5D,CAAC;IAED,SAAS,CAAC,MAA4B;QACpC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAC,CAAC,CAAC;YACnG,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,iCAAiC,EAAC,CAAC;SAC3E;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAC,CAAC,CAAC;YAC5F,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAC,CAAC;SACzD;IACH,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE;gBACnB,OAAO,MAAM,CAAC;aACf;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,IAAI,KAAK,GAAW,CAAC,CAAC;QAEtB,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE;gBACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC9B,OAAO,IAAI,CAAC;aACb;YAED,KAAK,EAAE,CAAC;SACT;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB,CAAC,IAA+B,EAAE,OAAe;QAC/D,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,MAAM,IAAI,IAAI,EAAE;gBAClB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,EAAE,IAAI,EAAE,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC,CAAC;aACrE;iBAAM;gBACL,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,6BAA6B,MAAM,CAAC,EAAE,KAAK,EAAE,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC,CAAC;aACxF;SACF;QAED,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,4BAA4B,EAAC,CAAC;IACxE,CAAC;CACF;AAAA,CAAC;AAEF,kBAAe,WAAW,CAAC"}
\ No newline at end of file
diff --git a/dist/server/test/channelBase.spec.js b/dist/server/test/channelBase.spec.js
index 5919f3d..256b61c 100644
--- a/dist/server/test/channelBase.spec.js
+++ b/dist/server/test/channelBase.spec.js
@@ -34,5 +34,13 @@ describe('ChannelBase', function () {
         var result = channel.broadcastMessage(client, 'test message');
         expect(result.status).to.be.equal('success');
     });
+    it('should be able to remove client from channel', function () {
+        var result = channel.removeClient(client.id);
+        expect(result).to.be.equal(true);
+    });
+    it('should not be able to remove client that doesnn\'t exist from channel', function () {
+        var result = channel.removeClient(126);
+        expect(result).to.be.equal(false);
+    });
 });
 //# sourceMappingURL=channelBase.spec.js.map
\ No newline at end of file
diff --git a/dist/server/test/channelBase.spec.js.map b/dist/server/test/channelBase.spec.js.map
index 7892bd8..58baa7c 100644
--- a/dist/server/test/channelBase.spec.js.map
+++ b/dist/server/test/channelBase.spec.js.map
@@ -1 +1 @@
-{"version":3,"file":"channelBase.spec.js","sourceRoot":"","sources":["../../../src/test/channelBase.spec.ts"],"names":[],"mappings":";;AAAA,yDAAkD;AAClD,sDAA+C;AAE/C,IAAI,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC;AACzC,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AACpC,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7B,IAAI,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;AAClD,IAAI,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAEnC,IAAI,IAAI,GAAW,cAAc,CAAC;AAClC,IAAI,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;AACrC,IAAI,OAAoB,CAAC;AACzB,IAAI,IAAI,GAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;AAChH,IAAI,MAAM,GAAe,IAAI,oBAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAExD,QAAQ,CAAC,aAAa,EAAE;IACtB,EAAE,CAAC,sCAAsC,EAAE;QACzC,OAAO,GAAG,IAAI,qBAAW,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE;QACnC,IAAI,MAAM,GAAQ,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE;QACnE,IAAI,MAAM,GAAQ,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE;QACzB,IAAI,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE;QAC3C,IAAI,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
\ No newline at end of file
+{"version":3,"file":"channelBase.spec.js","sourceRoot":"","sources":["../../../src/test/channelBase.spec.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/server/test/channelManager.spec.js b/dist/server/test/channelManager.spec.js
index 1345c61..ec48a01 100644
--- a/dist/server/test/channelManager.spec.js
+++ b/dist/server/test/channelManager.spec.js
@@ -43,5 +43,17 @@ describe('ChannelManager', function () {
         var result = channelManager.createByChannelType(data2);
         expect(result.id).to.be.equal('test channel 2');
     });
+    it('should remove client from channel', function () {
+        var result = channelManager.removeClientFromChannel(client.id, 'test channel');
+        expect(result).to.be.equal(true);
+    });
+    it('should be unable to remove a client that doesn\'t exit from channel', function () {
+        var result = channelManager.removeClientFromChannel(126, 'test channel');
+        expect(result).to.be.equal(false);
+    });
+    it('should be unable to remove a client from a channel that doesn\'t exist', function () {
+        var result = channelManager.removeClientFromChannel(client.id, 'test channel 3');
+        expect(result).to.be.equal(false);
+    });
 });
 //# sourceMappingURL=channelManager.spec.js.map
\ No newline at end of file
diff --git a/dist/server/test/channelManager.spec.js.map b/dist/server/test/channelManager.spec.js.map
index 1070986..9dad994 100644
--- a/dist/server/test/channelManager.spec.js.map
+++ b/dist/server/test/channelManager.spec.js.map
@@ -1 +1 @@
-{"version":3,"file":"channelManager.spec.js","sourceRoot":"","sources":["../../../src/test/channelManager.spec.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"channelManager.spec.js","sourceRoot":"","sources":["../../../src/test/channelManager.spec.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/server/test/clientBase.spec.js b/dist/server/test/clientBase.spec.js
index d3e174e..bfc8eca 100644
--- a/dist/server/test/clientBase.spec.js
+++ b/dist/server/test/clientBase.spec.js
@@ -1,2 +1,26 @@
 "use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const clientBase_1 = require("../clients/clientBase");
+var expect = require('chai').expect;
+var assert = require('chai').assert;
+var sinon = require('sinon');
+var name = 'test channel';
+var data = { 'client': 'test', 'client_type': 'site', 'user_id': 125, 'user_type': 'user', 'channel': name };
+var WebSocketClient = require('websocket').client;
+var wsClient = new WebSocketClient();
+var client = new clientBase_1.default(data, wsClient);
+describe('ClientBase', function () {
+    it('should get client data', function () {
+        var result = client.getData();
+        expect(result.user_id).to.be.equal(125);
+    });
+    it('should get client type', function () {
+        var result = client.clientType();
+        expect(result).to.be.equal('test');
+    });
+    it('should get client object type', function () {
+        var result = client.type();
+        expect(result).to.be.equal('site');
+    });
+});
 //# sourceMappingURL=clientBase.spec.js.map
\ No newline at end of file
diff --git a/dist/server/test/clientBase.spec.js.map b/dist/server/test/clientBase.spec.js.map
index 5dba6e2..3272813 100644
--- a/dist/server/test/clientBase.spec.js.map
+++ b/dist/server/test/clientBase.spec.js.map
@@ -1 +1 @@
-{"version":3,"file":"clientBase.spec.js","sourceRoot":"","sources":["../../../src/test/clientBase.spec.ts"],"names":[],"mappings":""}
\ No newline at end of file
+{"version":3,"file":"clientBase.spec.js","sourceRoot":"","sources":["../../../src/test/clientBase.spec.ts"],"names":[],"mappings":";;AACA,sDAA+C;AAE/C,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AACpC,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AACpC,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7B,IAAI,IAAI,GAAW,cAAc,CAAC;AAClC,IAAI,IAAI,GAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;AAChH,IAAI,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;AAClD,IAAI,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;AACrC,IAAI,MAAM,GAAe,IAAI,oBAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAExD,QAAQ,CAAC,YAAY,EAAE;IACrB,EAAE,CAAC,wBAAwB,EAAE;QAC3B,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE;QAC3B,IAAI,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE;QAClC,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
\ No newline at end of file
diff --git a/logs/access.log b/logs/access.log
index a2baf5a..0f37b37 100644
--- a/logs/access.log
+++ b/logs/access.log
@@ -38,3 +38,130 @@
 {"message":"client added to client manager: 125","level":"info","timestamp":"2019-03-14T14:13:06.741Z"}
 {"message":"attempting to create client of type mhs, client id: 125...","level":"info","timestamp":"2019-03-14T14:13:06.743Z"}
 {"data":{"client":"mhs","client_type":"site","user_id":125,"user_type":"user","channel":"test channel"},"level":"info","message":"MHS Client Created","timestamp":"2019-03-14T14:13:06.743Z"}
+{"channelId":"default","level":"info","message":"Channel Created","timestamp":"2019-03-14T14:28:29.773Z"}
+{"message":"Braid v0.7.1 is running!\n","level":"info","timestamp":"2019-03-14T14:28:29.783Z"}
+{"message":"Client Connected: 125","level":"info","timestamp":"2019-03-14T14:29:18.433Z"}
+{"message":"attempting to create channel of type mhs, channel id: mhs_1239...","level":"info","timestamp":"2019-03-14T14:29:18.445Z"}
+{"channelId":"mhs_1239","level":"info","message":"Channel Created","timestamp":"2019-03-14T14:29:18.446Z"}
+{"message":"Added channel to channel manager: mhs_1239","level":"info","timestamp":"2019-03-14T14:29:18.446Z"}
+{"message":"attempting to create client of type mhs, client id: 125...","level":"info","timestamp":"2019-03-14T14:29:18.448Z"}
+{"data":{"client":"mhs","client_type":"site","user_type":"user","user_id":125,"channel":"mhs_1239"},"level":"info","message":"MHS Client Created","timestamp":"2019-03-14T14:29:18.449Z"}
+{"message":"client added to client manager: 125","level":"info","timestamp":"2019-03-14T14:29:18.449Z"}
+{"channelId":"mhs_1239","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T14:29:18.449Z"}
+{"message":"starting broadcast on channel mhs_1239: this is s1","level":"info","timestamp":"2019-03-14T14:29:29.556Z"}
+{"message":"client is same as sender: 125 - this is s1","level":"info","timestamp":"2019-03-14T14:29:29.557Z"}
+{"message":"broadcast complete on channel mhs_1239: this is s1","level":"info","timestamp":"2019-03-14T14:29:29.557Z"}
+{"channelId":"default","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:52:15.013Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:52:15.028Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T17:52:15.030Z"}
+{"message":"client is same as sender: 125 - test message","level":"info","timestamp":"2019-03-14T17:52:15.031Z"}
+{"message":"creating base channel: test channel","level":"info","timestamp":"2019-03-14T17:52:15.032Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:52:15.032Z"}
+{"message":"Added channel to channel manager: test channel","level":"info","timestamp":"2019-03-14T17:52:15.032Z"}
+{"message":"Channel already exists: test channel","level":"info","timestamp":"2019-03-14T17:52:15.033Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T17:52:15.034Z"}
+{"message":"channel with id no channel does not exist.","level":"info","timestamp":"2019-03-14T17:52:15.034Z"}
+{"message":"attempting to create channel of type mhs, channel id: test channel 2...","level":"info","timestamp":"2019-03-14T17:52:15.035Z"}
+{"channelId":"test channel 2","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:52:15.035Z"}
+{"message":"creating base client: 125","level":"info","timestamp":"2019-03-14T17:52:15.037Z"}
+{"message":"client added to client manager: 125","level":"info","timestamp":"2019-03-14T17:52:15.038Z"}
+{"message":"attempting to create client of type mhs, client id: 125...","level":"info","timestamp":"2019-03-14T17:52:15.039Z"}
+{"data":{"client":"mhs","client_type":"site","user_id":125,"user_type":"user","channel":"test channel"},"level":"info","message":"MHS Client Created","timestamp":"2019-03-14T17:52:15.039Z"}
+{"channelId":"default","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:54:44.292Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:54:44.303Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T17:54:44.305Z"}
+{"message":"client is same as sender: 125 - test message","level":"info","timestamp":"2019-03-14T17:54:44.306Z"}
+{"message":"creating base channel: test channel","level":"info","timestamp":"2019-03-14T17:54:44.307Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:54:44.307Z"}
+{"message":"Added channel to channel manager: test channel","level":"info","timestamp":"2019-03-14T17:54:44.307Z"}
+{"message":"Channel already exists: test channel","level":"info","timestamp":"2019-03-14T17:54:44.308Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T17:54:44.309Z"}
+{"message":"channel with id no channel does not exist.","level":"info","timestamp":"2019-03-14T17:54:44.309Z"}
+{"message":"attempting to create channel of type mhs, channel id: test channel 2...","level":"info","timestamp":"2019-03-14T17:54:44.310Z"}
+{"channelId":"test channel 2","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:54:44.310Z"}
+{"message":"creating base client: 125","level":"info","timestamp":"2019-03-14T17:54:44.314Z"}
+{"message":"client added to client manager: 125","level":"info","timestamp":"2019-03-14T17:54:44.315Z"}
+{"message":"attempting to create client of type mhs, client id: 125...","level":"info","timestamp":"2019-03-14T17:54:44.318Z"}
+{"data":{"client":"mhs","client_type":"site","user_id":125,"user_type":"user","channel":"test channel"},"level":"info","message":"MHS Client Created","timestamp":"2019-03-14T17:54:44.318Z"}
+{"channelId":"default","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:55:07.632Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:55:07.645Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T17:55:07.647Z"}
+{"message":"client is same as sender: 125 - test message","level":"info","timestamp":"2019-03-14T17:55:07.649Z"}
+{"message":"creating base channel: test channel","level":"info","timestamp":"2019-03-14T17:55:07.650Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:55:07.650Z"}
+{"message":"Added channel to channel manager: test channel","level":"info","timestamp":"2019-03-14T17:55:07.650Z"}
+{"message":"Channel already exists: test channel","level":"info","timestamp":"2019-03-14T17:55:07.651Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T17:55:07.651Z"}
+{"message":"channel with id no channel does not exist.","level":"info","timestamp":"2019-03-14T17:55:07.652Z"}
+{"message":"attempting to create channel of type mhs, channel id: test channel 2...","level":"info","timestamp":"2019-03-14T17:55:07.652Z"}
+{"channelId":"test channel 2","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:55:07.652Z"}
+{"message":"creating base client: 125","level":"info","timestamp":"2019-03-14T17:55:07.654Z"}
+{"message":"client added to client manager: 125","level":"info","timestamp":"2019-03-14T17:55:07.654Z"}
+{"message":"attempting to create client of type mhs, client id: 125...","level":"info","timestamp":"2019-03-14T17:55:07.656Z"}
+{"data":{"client":"mhs","client_type":"site","user_id":125,"user_type":"user","channel":"test channel"},"level":"info","message":"MHS Client Created","timestamp":"2019-03-14T17:55:07.656Z"}
+{"channelId":"default","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:57:28.441Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:57:28.452Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T17:57:28.454Z"}
+{"message":"client is same as sender: 125 - test message","level":"info","timestamp":"2019-03-14T17:57:28.455Z"}
+{"message":"creating base channel: test channel","level":"info","timestamp":"2019-03-14T17:57:28.456Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:57:28.456Z"}
+{"message":"Added channel to channel manager: test channel","level":"info","timestamp":"2019-03-14T17:57:28.456Z"}
+{"message":"Channel already exists: test channel","level":"info","timestamp":"2019-03-14T17:57:28.457Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T17:57:28.458Z"}
+{"message":"channel with id no channel does not exist.","level":"info","timestamp":"2019-03-14T17:57:28.458Z"}
+{"message":"attempting to create channel of type mhs, channel id: test channel 2...","level":"info","timestamp":"2019-03-14T17:57:28.459Z"}
+{"channelId":"test channel 2","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:57:28.459Z"}
+{"message":"creating base client: 125","level":"info","timestamp":"2019-03-14T17:57:28.460Z"}
+{"message":"client added to client manager: 125","level":"info","timestamp":"2019-03-14T17:57:28.460Z"}
+{"message":"attempting to create client of type mhs, client id: 125...","level":"info","timestamp":"2019-03-14T17:57:28.462Z"}
+{"data":{"client":"mhs","client_type":"site","user_id":125,"user_type":"user","channel":"test channel"},"level":"info","message":"MHS Client Created","timestamp":"2019-03-14T17:57:28.462Z"}
+{"channelId":"default","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:57:39.305Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:57:39.316Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T17:57:39.318Z"}
+{"message":"client is same as sender: 125 - test message","level":"info","timestamp":"2019-03-14T17:57:39.319Z"}
+{"message":"creating base channel: test channel","level":"info","timestamp":"2019-03-14T17:57:39.320Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:57:39.320Z"}
+{"message":"Added channel to channel manager: test channel","level":"info","timestamp":"2019-03-14T17:57:39.320Z"}
+{"message":"Channel already exists: test channel","level":"info","timestamp":"2019-03-14T17:57:39.321Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T17:57:39.322Z"}
+{"message":"channel with id no channel does not exist.","level":"info","timestamp":"2019-03-14T17:57:39.322Z"}
+{"message":"attempting to create channel of type mhs, channel id: test channel 2...","level":"info","timestamp":"2019-03-14T17:57:39.323Z"}
+{"channelId":"test channel 2","level":"info","message":"Channel Created","timestamp":"2019-03-14T17:57:39.323Z"}
+{"message":"creating base client: 125","level":"info","timestamp":"2019-03-14T17:57:39.324Z"}
+{"message":"client added to client manager: 125","level":"info","timestamp":"2019-03-14T17:57:39.324Z"}
+{"message":"attempting to create client of type mhs, client id: 125...","level":"info","timestamp":"2019-03-14T17:57:39.326Z"}
+{"data":{"client":"mhs","client_type":"site","user_id":125,"user_type":"user","channel":"test channel"},"level":"info","message":"MHS Client Created","timestamp":"2019-03-14T17:57:39.327Z"}
+{"channelId":"default","level":"info","message":"Channel Created","timestamp":"2019-03-14T18:12:48.664Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T18:12:48.677Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T18:12:48.679Z"}
+{"message":"client is same as sender: 125 - test message","level":"info","timestamp":"2019-03-14T18:12:48.680Z"}
+{"message":"creating base channel: test channel","level":"info","timestamp":"2019-03-14T18:12:48.682Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T18:12:48.682Z"}
+{"message":"Added channel to channel manager: test channel","level":"info","timestamp":"2019-03-14T18:12:48.682Z"}
+{"message":"Channel already exists: test channel","level":"info","timestamp":"2019-03-14T18:12:48.682Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T18:12:48.683Z"}
+{"message":"channel with id no channel does not exist.","level":"info","timestamp":"2019-03-14T18:12:48.683Z"}
+{"message":"attempting to create channel of type mhs, channel id: test channel 2...","level":"info","timestamp":"2019-03-14T18:12:48.684Z"}
+{"channelId":"test channel 2","level":"info","message":"Channel Created","timestamp":"2019-03-14T18:12:48.684Z"}
+{"message":"client removed from channel - channel: test channel, client: 125","level":"info","timestamp":"2019-03-14T18:12:48.685Z"}
+{"message":"creating base client: 125","level":"info","timestamp":"2019-03-14T18:12:48.687Z"}
+{"message":"client added to client manager: 125","level":"info","timestamp":"2019-03-14T18:12:48.687Z"}
+{"message":"attempting to create client of type mhs, client id: 125...","level":"info","timestamp":"2019-03-14T18:12:48.688Z"}
+{"data":{"client":"mhs","client_type":"site","user_id":125,"user_type":"user","channel":"test channel"},"level":"info","message":"MHS Client Created","timestamp":"2019-03-14T18:12:48.689Z"}
+{"channelId":"default","level":"info","message":"Channel Created","timestamp":"2019-03-14T18:16:35.694Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T18:16:35.705Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T18:16:35.707Z"}
+{"message":"client is same as sender: 125 - test message","level":"info","timestamp":"2019-03-14T18:16:35.708Z"}
+{"message":"creating base channel: test channel","level":"info","timestamp":"2019-03-14T18:16:35.710Z"}
+{"channelId":"test channel","level":"info","message":"Channel Created","timestamp":"2019-03-14T18:16:35.710Z"}
+{"message":"Added channel to channel manager: test channel","level":"info","timestamp":"2019-03-14T18:16:35.710Z"}
+{"message":"Channel already exists: test channel","level":"info","timestamp":"2019-03-14T18:16:35.711Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Added client to channel","timestamp":"2019-03-14T18:16:35.711Z"}
+{"message":"channel with id no channel does not exist.","level":"info","timestamp":"2019-03-14T18:16:35.712Z"}
+{"message":"attempting to create channel of type mhs, channel id: test channel 2...","level":"info","timestamp":"2019-03-14T18:16:35.712Z"}
+{"channelId":"test channel 2","level":"info","message":"Channel Created","timestamp":"2019-03-14T18:16:35.712Z"}
+{"message":"client removed from channel - channel: test channel, client: 125","level":"info","timestamp":"2019-03-14T18:16:35.713Z"}
+{"message":"creating base client: 125","level":"info","timestamp":"2019-03-14T18:16:35.714Z"}
+{"message":"client added to client manager: 125","level":"info","timestamp":"2019-03-14T18:16:35.715Z"}
+{"message":"attempting to create client of type mhs, client id: 125...","level":"info","timestamp":"2019-03-14T18:16:35.716Z"}
+{"data":{"client":"mhs","client_type":"site","user_id":125,"user_type":"user","channel":"test channel"},"level":"info","message":"MHS Client Created","timestamp":"2019-03-14T18:16:35.716Z"}
diff --git a/logs/errors.log b/logs/errors.log
index 38e6544..480e512 100644
--- a/logs/errors.log
+++ b/logs/errors.log
@@ -4,3 +4,24 @@
 {"channelId":"test channel","clientId":125,"level":"info","message":"Client already exits in channel","timestamp":"2019-03-14T14:13:06.734Z"}
 {"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T14:13:06.736Z"}
 {"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T14:13:06.741Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Client already exits in channel","timestamp":"2019-03-14T17:52:15.030Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T17:52:15.032Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T17:52:15.037Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Client already exits in channel","timestamp":"2019-03-14T17:54:44.305Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T17:54:44.307Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T17:54:44.314Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Client already exits in channel","timestamp":"2019-03-14T17:55:07.648Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T17:55:07.650Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T17:55:07.654Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Client already exits in channel","timestamp":"2019-03-14T17:57:28.454Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T17:57:28.456Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T17:57:28.460Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Client already exits in channel","timestamp":"2019-03-14T17:57:39.318Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T17:57:39.320Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T17:57:39.324Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Client already exits in channel","timestamp":"2019-03-14T18:12:48.680Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T18:12:48.681Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T18:12:48.686Z"}
+{"channelId":"test channel","clientId":125,"level":"info","message":"Client already exits in channel","timestamp":"2019-03-14T18:16:35.707Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T18:16:35.710Z"}
+{"code":"MODULE_NOT_FOUND","level":"info","timestamp":"2019-03-14T18:16:35.714Z"}
diff --git a/src/channelManager.ts b/src/channelManager.ts
index edcea89..365e8ef 100644
--- a/src/channelManager.ts
+++ b/src/channelManager.ts
@@ -64,6 +64,27 @@ class ChannelManager {
       return new ChannelBase(data.channel);
     }
   }
+
+  removeClientFromChannel(client_id: number, channel_id: string) {
+    var index: number = 0;
+
+    for (let channel of this.channels) {
+      if (channel.id == channel_id) {
+        this.channels.splice(index, 1);
+        if (channel.removeClient(client_id)) {
+          logger.accessLog.info(`client removed from channel - channel: ${channel_id}, client: ${client_id}`);
+          return true;
+        } else {
+          logger.errorLog.info(`client not removed from channel, or doesn't exist in channel - channel: ${channel_id}, client: ${client_id}`);
+          return false
+        }
+      }
+
+      index++;
+    }
+
+    return false;
+  }
 };
 
 export default ChannelManager;
diff --git a/src/channels/channelBase.ts b/src/channels/channelBase.ts
index a9580c9..14d0455 100644
--- a/src/channels/channelBase.ts
+++ b/src/channels/channelBase.ts
@@ -33,6 +33,21 @@ class ChannelBase {
     return null;
   }
 
+  removeClient(id: number) {
+    var index: number = 0;
+
+    for (let client of this.clients) {
+      if (client.id == id) {
+        this.clients.splice(index, 1);
+        return true;
+      }
+
+      index++;
+    }
+
+    return false;
+  }
+
   broadcastMessage(from: ClientBase|MHSClient|null, message: string) {
     for (let client of this.clients) {
       if (client != from) {
diff --git a/src/test/channelBase.spec.ts b/src/test/channelBase.spec.ts
index 1ba4a21..0149664 100644
--- a/src/test/channelBase.spec.ts
+++ b/src/test/channelBase.spec.ts
@@ -39,4 +39,14 @@ describe('ChannelBase', function () {
     var result = channel.broadcastMessage(client, 'test message');
     expect(result.status).to.be.equal('success');
   });
+
+  it('should be able to remove client from channel', function () {
+    var result = channel.removeClient(client.id);
+    expect(result).to.be.equal(true);
+  });
+
+  it('should not be able to remove client that doesnn\'t exist from channel', function () {
+    var result = channel.removeClient(126);
+    expect(result).to.be.equal(false);
+  });
 });
diff --git a/src/test/channelManager.spec.ts b/src/test/channelManager.spec.ts
index 97fa9f1..e54898f 100644
--- a/src/test/channelManager.spec.ts
+++ b/src/test/channelManager.spec.ts
@@ -55,4 +55,19 @@ describe('ChannelManager', function () {
     var result = channelManager.createByChannelType(data2);
     expect(result.id).to.be.equal('test channel 2');
   });
+
+  it('should remove client from channel', function () {
+    var result = channelManager.removeClientFromChannel(client.id , 'test channel');
+    expect(result).to.be.equal(true);
+  });
+
+  it('should be unable to remove a client that doesn\'t exit from channel', function () {
+    var result = channelManager.removeClientFromChannel(126 , 'test channel');
+    expect(result).to.be.equal(false);
+  });
+
+  it('should be unable to remove a client from a channel that doesn\'t exist', function () {
+    var result = channelManager.removeClientFromChannel(client.id , 'test channel 3');
+    expect(result).to.be.equal(false);
+  });
 });
diff --git a/src/test/clientBase.spec.ts b/src/test/clientBase.spec.ts
index e69de29..e74a8dc 100644
--- a/src/test/clientBase.spec.ts
+++ b/src/test/clientBase.spec.ts
@@ -0,0 +1,29 @@
+import * as WebSocket from 'ws';
+import ClientBase from '../clients/clientBase';
+
+var expect = require('chai').expect;
+var assert = require('chai').assert;
+var sinon = require('sinon');
+
+var name: string = 'test channel';
+var data: any = { 'client': 'test', 'client_type':'site', 'user_id': 125, 'user_type': 'user', 'channel': name }
+var WebSocketClient = require('websocket').client;
+var wsClient = new WebSocketClient();
+var client: ClientBase = new ClientBase(data, wsClient);
+
+describe('ClientBase', function () {
+  it('should get client data', function () {
+    var result = client.getData();
+    expect(result.user_id).to.be.equal(125);
+  });
+
+  it('should get client type', function () {
+    var result = client.clientType();
+    expect(result).to.be.equal('test');
+  });
+
+  it('should get client object type', function () {
+    var result = client.type();
+    expect(result).to.be.equal('site');
+  });
+});