         {host, port, options} = kernel.redis or Object()
         message = "Disconnecting from Redis at %s:%s"
         logger.info message.cyan.underline, host, port
-        kernel.redis.end(); delete kernel.redis
-        return next undefined
+        try @emit "redis-gone", kernel.redis, kernel
+        try kernel.redis.end(); delete kernel.redis
+        next.call this, undefined; return this
 
     # A hook that will be called prior to registering the service
     # implementation. Please refer to this prototype signature for

            redis = @kernel.redis or undefined
            noRedis = "a kernel has no Redis client"
            assert _.isObject(redis), noRedis; redis
        return next undefined

        return next() unless _.isObject config
        return next() if _.isObject kernel.redis
        {host, port, options} = config or Object()
        assert _.isString(host), "got invalid Redis host"
        assert _.isNumber(port), "git invalid Redis port"
        assert _.isObject(options), "invalid Redis options"
        message = "Connecting to Redis at %s:%s".toString()
        noRedis = "Something has gone wrong, no Redis client"
        assert spawner = redisio.createClient.bind redisio
        logger.info message.cyan.underline, host, port
        kernel.redis = spawner port, host, options
        assert _.isObject kernel.redis, noRedis
        try @emit "redis-ready", kernel.redis
        next.call this, undefined; return @

    # A hook that will be called prior to instantiating the service
    # implementation. Please refer to this prototype signature for
