public static function to_moodle2_format($tempdir, $format = null, $logger = null) {

        if (is_null($format)) {
            $format = backup_general_helper::detect_backup_format($tempdir);
        }

        // get the supported conversion paths from all available converters
        $converters   = self::available_converters();
        $descriptions = array();
        foreach ($converters as $name) {
            $classname = "{$name}_converter";
            if (!class_exists($classname)) {
                throw new convert_helper_exception('class_not_loaded', $classname);
            }
            if ($logger instanceof base_logger) {
                backup_helper::log('available converter', backup::LOG_DEBUG, $classname, 1, false, $logger);
            }
            $descriptions[$name] = call_user_func($classname .'::description');
        }

        // choose the best conversion path for the given format
        $path = self::choose_conversion_path($format, $descriptions);

        if (empty($path)) {
            if ($logger instanceof base_logger) {
                backup_helper::log('unable to find the conversion path', backup::LOG_ERROR, null, 0, false, $logger);
            }
            return false;
        }

        if ($logger instanceof base_logger) {
            backup_helper::log('conversion path established', backup::LOG_INFO,
                implode(' => ', array_merge($path, array('moodle2'))), 0, false, $logger);
        }

        foreach ($path as $name) {
            if ($logger instanceof base_logger) {
                backup_helper::log('running converter', backup::LOG_INFO, $name, 0, false, $logger);
            }
            $converter = convert_factory::get_converter($name, $tempdir, $logger);
            $converter->convert();
        }

        // make sure we ended with moodle2 format
        if (!self::detect_moodle2_format($tempdir)) {
            throw new convert_helper_exception('conversion_failed');
        }

        return true;
    }