protected function fetchPropel()
    {
        if (!$this->hasOption('propel'))
        {
            return $this;
        }

        $config = $this->getOption('propel');

        if (!isset($config['class_name']))
        {
            throw new OptionRequiredException('Propel menu item requires "propel/class_name" config value in menu config');
        }
        elseif (!class_exists($config['class_name']))
        {
            throw new InvalidConfigException('Class does not exist: ' . $config['class_name']);
        }
        elseif (!is_subclass_of($config['class_name'], '\Persistent'))
        {
            throw new InvalidConfigException('Invalid propel class name. Class does not implement \Persistent interface: ' . $config['class_name']);
        }
        $this->propelClassName = $config['class_name'];

        if (!isset($config['child_route']))
        {
            throw new OptionRequiredException('Propel menu item requires "propel/child_route" config value in menu config');
        }
        $this->propelChildRoute = $config['child_route'];

        if (isset($config['child_route_parameters']))
        {
            $this->propelChildRouteParameters = (array) $config['child_route_parameters'];
        }
        if (isset($config['child_options']))
        {
            $this->propelChildOptions = (array) $config['child_options'];
        }
        if (isset($config['title_field']))
        {
            $this->propelTitleField = $config['title_field'];
        }
        if (isset($config['insert_at']))
        {
            $this->propelInsertAt = $config['insert_at'];
        }

        if (isset($config['query_methods']) && is_array($config['query_methods']))
        {
            foreach ($config['query_methods'] as $name => $values)
            {
                $this->propelQueryMethods[$name] = (array) $values;
            }
        }

        return $this;
    }