public function config($key) {
        $keys   = explode('.', $key);
        $config = func_num_args() === 1 ? $this['config'] : func_get_arg(1);

        while (($k = array_shift($keys)) !== null) {
            if (array_key_exists($k, $config)) {
                return count($keys) > 0 ? $this->config(implode('.', $keys), $config[$k]) : $config[$k];
            } else {
                return null;
            }
        }
    }