public function buildUrl($param = null, $value = null, $separator = '&amp;')
    {
        if (!is_array($param) && !empty($value)) {
            $param = array( $param=>$value );
        }

        $default_args = array(
            'controller' => CarteBlanche::getConfig('routing.mvc.default_controller'),
            'action' => CarteBlanche::getConfig('routing.mvc.default_action')
        );
        if (!empty($param)) {
            foreach ($param as $_var=>$_val) {
                if (!empty($_val)) {
                    $_meth = 'fromUrl'.TextHelper::toCamelCase($_var);
                    if (method_exists($this, $_meth)) {
                        $_val = call_user_func_array(array($this, $_meth), array($_val));
                    }
                    if (array_key_exists($_var, $default_args) && (
                        $_val===$default_args[$_var] || strtolower($_val)===$default_args[$_var] || parent::urlEncode($_val)===$default_args[$_var]
                    )) {
                        unset($param[$_var]);
                    }
                }
            }
        }

        return parent::generateUrl($param, CarteBlanche::getPath('root_file'), '', $separator);
    }