protected function parseSomething(
        $module,
        $param,
        $default,
        callable $parser,
        $origin,
        callable $checker
    ) {
        try {
            if (!isset($this->modules[$module])) {
                throw new \Erebot\NotFoundException('No such module');
            }
            $value  = $this->modules[$module]->getParam($param);
            $value  = $parser($value);
            if ($value !== null) {
                return $value;
            }
            throw new \Erebot\InvalidValueException(
                'Bad value in configuration'
            );
        } catch (\Erebot\NotFoundException $e) {
            if ($this->proxified !== $this) {
                return $this->proxified->$origin($module, $param, $default);
            }

            if ($default === null) {
                throw new \Erebot\NotFoundException('No such parameter "' .
                                                    $param . '" for module "' .
                                                    $module . '"');
            }

            if ($checker($default)) {
                return $default;
            }
            throw new \Erebot\InvalidValueException('Bad default value');
        }
    }