diff --git a/README.md b/README.md
index f09ae3ea6a56c810cef331dc43d6aecf54dcb670..ce2bd0d93c1904b9edf14688f25cfbf10d6de2c4 100644
--- a/README.md
+++ b/README.md
@@ -51,8 +51,22 @@ Once you've got your `env` instance, here are some things you can do with it
 
 `env.redis` will provide you with a singleton instance of a redis client or a new instance. It will use Redis Sentinel it it's configured.
 
+Example configuration:
+```json
+{
+  "redisDb": 1,
+  "sentinel": {
+    "master-name": "test-master",
+    "hosts": ["localhost:46379"]
+  },
+  clientOpts: {
+    "return_buffers": true
+  }
+}
+```
+
 * `env.redis.getClient()` - returns the main singleton Redis client.
-* `env.redis.createClient()` - returns a new Redis client.
+* `env.redis.createClient([options])` - returns a new Redis client. Uses `redis` config by default.
 * `env.redis.quitClient()` - closes a Redis client (don't do this with the main singleton client)
 
 ## Statistics
diff --git a/lib/env.js b/lib/env.js
index 84bbfa6073e2c1b35c0f3af0679ab10b0e013e96..e0314af32fdcec292031ceb20bffb58263bed004 100644
--- a/lib/env.js
+++ b/lib/env.js
@@ -60,13 +60,16 @@ exports.create = function(configDirectory) {
       getClient: function() {
         if(mainRedisClient) return mainRedisClient;
 
-        mainRedisClient = redisClient.create({ config: config, logger: logger });
+        // no options override for singleton
+        var options = config.get('redis');
+        mainRedisClient = redisClient.create(options, logger);
 
         return mainRedisClient;
       },
 
-      createClient: function() {
-        return redisClient.create({ config: config, logger: logger });
+      createClient: function(options) {
+        options = options || config.get('redis');
+        return redisClient.create(options, logger);
       },
 
       /**
@@ -74,7 +77,10 @@ exports.create = function(configDirectory) {
        */
       createTransientClient: function(callback) {
         var mainClient = this.getClient();
-        return redisClient.createTransientClient(mainClient, { config: config, logger: logger }, callback);
+
+        // no options override for singleton
+        var options = config.get('redis');
+        return redisClient.createTransientClient(mainClient, options, logger, callback);
       },
 
       quitClient: function(client) {
diff --git a/lib/redis-client.js b/lib/redis-client.js
index d572937d27da5fa47c34f2b7023fdc8c67889857..3764579cdaa1bc6f8179aa41ed03059637fdd1a8 100644
--- a/lib/redis-client.js
+++ b/lib/redis-client.js
@@ -9,9 +9,7 @@ var async = require('async');
 /**
  * Switches redis database
  */
-function switchDatabase(client, nconf, logger) {
-  var redisDb = nconf.get("redis:redisDb");
-
+function switchDatabase(client, redisDb, logger) {
   if(redisDb) {
     client.select(redisDb, function(err) {
       if(err) {
@@ -26,8 +24,8 @@ function switchDatabase(client, nconf, logger) {
 /**
  * Creates a sentinel client
  */
-function createSentinelClientInstance(nconf, logger) {
-  var sentinels = nconf.get("redis:sentinel:hosts").map(function(f) {
+function createSentinelClientInstance(sentinelOpts, logger) {
+  var sentinels = sentinelOpts.hosts.map(function(f) {
     var a = f.split(':');
     return [a[0], parseInt(a[1], 10)];
   });
@@ -36,7 +34,7 @@ function createSentinelClientInstance(nconf, logger) {
 
   var sentinelClient = RedisSentinel.createClient({
     sentinels: sentinels,
-    masterName: nconf.get("redis:sentinel:master-name")
+    masterName: sentinelOpts["master-name"]
   });
 
   ['sentinel connect', 'sentinel connected', 'sentinel disconnected',
@@ -49,17 +47,17 @@ function createSentinelClientInstance(nconf, logger) {
   return sentinelClient;
 }
 
-function createInstance(nconf, logger) {
+function createInstance(options, logger) {
   var client;
-  if(nconf.get('redis:sentinel')) {
-    client = createSentinelClientInstance(nconf, logger);
+  if(options.sentinel) {
+    client = createSentinelClientInstance(options.sentinel, logger);
   } else {
-    var host = nconf.get("redis:host");
-    var port = nconf.get("redis:port");
+    var host = options.host;
+    var port = options.port;
 
-    client = redis.createClient(port, host);
+    client = redis.createClient(port, host, options.clientOpts);
   }
-  switchDatabase(client, nconf, logger);
+  switchDatabase(client, options.redisDb, logger);
 
   return client;
 }
@@ -68,13 +66,10 @@ function registerClient(client) {
   clients.push(client);
 }
 
-function setupTransientClient(port, host, options) {
-  var nconf = options.config;
-  var logger = options.logger;
-
-  var client = redis.createClient(port, host);
+function setupTransientClient(port, host, redisDb, clientOpts, logger) {
+  var client = redis.createClient(port, host, clientOpts);
 
-  switchDatabase(client, nconf, logger);
+  switchDatabase(client, redisDb, logger);
 
   /*
    * Add some logging if the transient client is not closed
@@ -91,17 +86,19 @@ function setupTransientClient(port, host, options) {
   return client;
 }
 
-exports.createTransientClient = function(mainClient, options, callback) {
-  var nconf = options.config;
+exports.createTransientClient = function(mainClient, options, logger, callback) {
   var host, port;
 
-  if(nconf.get('redis:sentinel')) {
+  var redisDb = options.redisDb;
+  var clientOpts = options.clientOpts;
+
+  if(options.sentinel) {
     var master = mainClient.activeMasterClient;
 
     /* No master yet? Wait... */
     if(!master) {
       mainClient.on('reconnected', function() {
-        var client = setupTransientClient(mainClient.activeMasterClient.port, mainClient.activeMasterClient.host, options);
+        var client = setupTransientClient(mainClient.activeMasterClient.port, mainClient.activeMasterClient.host, redisDb, clientOpts, logger);
         callback(null, client);
       });
 
@@ -111,11 +108,11 @@ exports.createTransientClient = function(mainClient, options, callback) {
     host = master.host;
     port = master.port;
   } else {
-    host = nconf.get("redis:host");
-    port = nconf.get("redis:port");
+    host = options.host;
+    port = options.port;
   }
 
-  var client = setupTransientClient(port, host, options);
+  var client = setupTransientClient(port, host, redisDb, clientOpts, logger);
 
   /* Callback in a second */
   setImmediate(function() {
@@ -141,11 +138,8 @@ shutdown.addHandler('redis', 1, function(callback) {
 
 });
 
-exports.create = function(options) {
-  var nconf = options.config;
-  var logger = options.logger;
-
-  var client = createInstance(nconf, logger);
+exports.create = function(options, logger) {
+  var client = createInstance(options, logger);
   registerClient(client);
 
   return client;
@@ -169,4 +163,4 @@ exports.testOnly = {
   getClients: function() {
     return clients;
   }
-}
+};
diff --git a/tests/redis-test.js b/tests/redis-test.js
index 9bb88864093b276d609aa74ffe9473d11472e0db..9592c123dddc0af16d6c13519a7a7128db1e04d4 100644
--- a/tests/redis-test.js
+++ b/tests/redis-test.js
@@ -33,20 +33,18 @@ function startSentinel() {
 }
 
 describe('gitter-redis', function() {
-  var redis1, redis2, sentinel, config, logger;
+  var redis1, redis2, sentinel, options, logger;
 
   before(function(done) {
-    config = mockConfig({
-      redis: {
-        redisDb: 1,
-        sentinel: {
-          "master-name": "test-master",
-          hosts: ["localhost:46379"]
-        }
+    options = {
+      redisDb: 1,
+      sentinel: {
+        "master-name": "test-master",
+        hosts: ["localhost:46379"]
       }
-    });
+    };
 
-    logger = require('../lib/logger').create({ config: config });
+    logger = require('../lib/logger').create({ config: mockConfig({}) });
 
     redis1 = startRedisPrimary();
     redis2 = startRedisSecondary();
@@ -63,7 +61,7 @@ describe('gitter-redis', function() {
 
   it('should obtain a connection and release it', function(done) {
 
-    var mainRedisClient = redisClient.create({ config: config, logger: logger });
+    var mainRedisClient = redisClient.create(options, logger);
     assert.strictEqual(redisClient.testOnly.getClients().length, 1);
     assert(mainRedisClient);
 
@@ -81,9 +79,9 @@ describe('gitter-redis', function() {
   });
 
   it('should obtain a transient connection and release it', function(done) {
-    var mainRedisClient = redisClient.create({ config: config, logger: logger });
+    var mainRedisClient = redisClient.create(options, logger);
 
-    redisClient.createTransientClient(mainRedisClient, { config: config, logger: logger }, function(err, temporaryClient) {
+    redisClient.createTransientClient(mainRedisClient, options, logger, function(err, temporaryClient) {
       assert.strictEqual(redisClient.testOnly.getClients().length, 2);
 
       assert(temporaryClient);
@@ -107,7 +105,7 @@ describe('gitter-redis', function() {
 
   it('should obtain a handle failover correctly', function(done) {
     this.timeout(15000);
-    var mainRedisClient = redisClient.create({ config: config, logger: logger });
+    var mainRedisClient = redisClient.create(options, logger);
     mainRedisClient.on('reconnected', function() {
       mainRedisClient.set('moo', 'cow', function(err) {
         if(err) return done(err);