public static function getConfig(Loops $loops = NULL, ArrayObject $config = NULL) {
        if(!$loops) {
            $loops = Loops::getCurrentLoops();
        }

        if(!$config) {
            $parts = explode("\\", get_called_class());
            if(count($parts) > 2 && array_slice($parts, 0, 2) == [ "Loops", "Service" ]) {
                $parts = array_slice($parts, 2);
            }

            $sectionname = Misc::underscore(implode("\\", $parts));

            $config = $loops->getService('config');
            $config = $config->offsetExists($sectionname) ? $config->offsetGet($sectionname) : new ArrayObject;
        }

        $result = static::getDefaultConfig($loops);
        $result->merge($config);
        $result->offsetSet('loops', $loops);
        return $result;
    }