protected function _make($config)
    {
        try {
            $data = $this->_containerGet($config, MapFactoryInterface::K_DATA);
        } catch (ContainerExceptionInterface $e) {
            throw $this->_createRuntimeException($this->__('Could not retrieve data from factory config'), null, $e);
        }

        try {
            $data = $this->_normalizeIterable($data);
        } catch (InvalidArgumentException $e) {
            throw $this->_createRuntimeException($this->__('Map data must be iterable'), null, $e);
        }

        $map = new stdClass();

        foreach ($data as $_key => $_value) {
            try {
                $map->{$_key} = $this->_normalizeChild($_value, $config);
            } catch (InvalidArgumentException $e) {
                throw $this->_createRuntimeException($this->__('Element "%1$s" is invalid', [$_key]), null, $e);
            }
        }

        $product = $this->_createProduct($config, $map);

        return $product;
    }