public function modifyValues($modifiers, $subKey = null)
    {
        $process = function (&$source) use ($modifiers) {
            foreach ($modifiers as $key => $value) {
                if (is_callable($value)) {
                    $source[$key] = $value((isset($source[$key]) ? $source[$key] : null));
                } else {
                    $source[$key] = $value;
                }
            }
        };

        if (is_array($modifiers)) {

            if (is_null($subKey) || !isset($this->data[$subKey])) {
                $process($this->data);
            } else {

                $wrongSubKey = new \InvalidArgumentException(
                    sprintf("Wrong subKey given (%s), have no array value by this sub key", $subKey));;

                if (!is_array($this->data[$subKey])) {
                    throw $wrongSubKey;
                }

                array_map(function ($el) use ($wrongSubKey) {
                    if(!is_array($el)) throw $wrongSubKey;
                }, $this->data[$subKey]);

                foreach ($this->data[$subKey] as $key => $data) {
                    $process($this->data[$subKey][$key]);
                }
            }
        }

        return $this;
    }