private function buildQuery(array $parameters)
        {
            // no parameters?
            if(empty($parameters)) {
                return '';
            }

            // encode the keys
            $keys = self::urlencode_rfc3986(array_keys($parameters));

            // encode the values
            $values = self::urlencode_rfc3986(array_values($parameters));

            // reset the parameters
            $parameters = array_combine($keys, $values);

            // sort parameters by key
            uksort($parameters, 'strcmp');

            // loop parameters
            foreach ($parameters as $key => $value) {
                // sort by value
                if(Arrays::is($value)) $parameters[$key] = natsort($value);
            }

            // process parameters
            foreach ($parameters as $key => $value) {
                $chunks[] = $key . '=' . str_replace('%25', '%', $value);
            }

            // return
            return implode('&', $chunks);
        }