private function checkDefaults(array $definition, string $prefix = '', string $glue = '.')
    {
        // First step, check for controls
        if (!empty($definition['controls'])) {

            foreach ($definition['controls'] as $name => $control) {

                // Create the config key using the prefix passed as argument and the name used as index
                $key = (!empty($prefix) ? $prefix . $glue : '') . $name;

                $this->structure[$key] = $control;

                if (!isset($this->data[$key])) {
                    $this->data[$key] = !empty($control['default']) ? $control['default'] : null;
                }

                if (!empty($control['serialize'])) {

                    $string = new IsSerialized($this->data[$key]);

                    if ($string->isSerialized()) {
                        $this->data[$key] = unserialize($this->data[$key]);
                    }
                }
            }
        }

        // Do we have subgroups in this definition?
        if (!empty($definition['groups'])) {
            foreach ($definition['groups'] as $name => $group) {
                $this->checkDefaults($group, (!empty($prefix) ? $prefix . $glue : '') . $name);
            }
        }
    }