public function enum($model, $field, $value = null, $domain = null) {
        $enum = ClassRegistry::init($model)->enum($field);

        list($plugin, $model) = pluginSplit($model);

        // Set domain
        if (!$domain) {
            if ($plugin) {
                $domain = Inflector::underscore($plugin);
            } else {
                $domain = 'default';
            }
        }

        // Cache the translations
        $key = Inflector::underscore($model) . '.' . Inflector::underscore($field);
        $cache = $key . '.enum';

        if (isset($this->_cached[$cache])) {
            $enum = $this->_cached[$cache];

        } else {
            foreach ($enum as $k => &$v) {
                $message = __d($domain, $key . '.' . $k);

                // Only use message if a translation exists
                if ($message !== $key . '.' . $k) {
                    $v = $message;
                }
            }

            $this->_cached[$cache] = $enum;
        }

        // Filter down by value
        if ($value !== null) {
            return isset($enum[$value]) ? $enum[$value] : null;
        }

        return $enum;
    }