public function tokenValue($token_values, $language, $options = array()) {
        if (isset($token_values[$this->short_name])) {
            $object = $token_values[$this->short_name];
        } else {
            $object = Config::instance()->defaultToken($this->short_name, 'data');
        }

        if ($object === null)
            return $this->error("Missing token value");

        if (is_string($object) || is_numeric($object) || is_double($object)) {
            return $this->sanitize($object, $object, $language, array_merge($options, array("safe" => true)));
        }

        if (is_array($object)) {
            if (\Tr8n\Utils\ArrayUtils::isHash($object))
                return $this->tokenValueFromHashParam($object, $language, $options);
            return $this->tokenValueFromArrayParam($object, $language, $options);
        }

        return $this->sanitize($object, $object, $language, array_merge($options, array("safe" => false)));
    }