private void Load()
        {
            using (new Tracer(this))
            {
                lock (_loadLock)
                {
                    // NOTE: intentionally setting LastRefresh first, because while loading other classes (e.g. BinaryFileManager) may be using LastRefresh to detect stale content.
                    LastRefresh = DateTime.Now;

                    List <string> mediaPatterns = new List <string>();

                    VersionData versionData = null;
                    try
                    {
                        LoadStaticContentItem("/version.json", ref versionData);
                        IsHtmlDesignPublished = true;
                    }
                    catch (DxaItemNotFoundException)
                    {
                        //it may be that the version json file is 'unmanaged', ie just placed on the filesystem manually
                        //in which case we try to load it directly - the HTML Design is thus not published from CMS
                        IsHtmlDesignPublished = false;
                        string versionJsonPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, SiteConfiguration.SystemFolder, @"assets\version.json");
                        if (File.Exists(versionJsonPath))
                        {
                            string versionJson = File.ReadAllText(versionJsonPath);
                            versionData = JsonConvert.DeserializeObject <VersionData>(versionJson);
                            Log.Info("Obtained '{0}' directly from file system.", versionJsonPath);
                        }
                        else
                        {
                            Log.Warn("HTML design is not published nor does file '{0}' exist on disk. Setting version to v0.0", versionJsonPath);
                            versionData = new VersionData {
                                Version = "v0.0"
                            };
                        }
                    }
                    Version = versionData.Version;

                    LocalizationData localizationData = null;
                    LoadStaticContentItem("config/_all.json", ref localizationData);
                    SetData(localizationData);

                    if (_data.MediaRoot != null)
                    {
                        string mediaRoot = _data.MediaRoot;
                        if (!mediaRoot.StartsWith("/"))
                        {
                            // SDL Web 8 context-relative URL
                            mediaRoot = string.Format("{0}/{1}", Path, mediaRoot);
                        }
                        if (!mediaRoot.EndsWith("/"))
                        {
                            mediaRoot += "/";
                        }
                        mediaPatterns.Add(string.Format("^{0}.*", mediaRoot));
                    }

                    if (_data.SiteLocalizations != null)
                    {
                        ILocalizationResolver localizationResolver = SiteConfiguration.LocalizationResolver;
                        SiteLocalizations = new List <Localization>();
                        foreach (LocalizationData siteLocalizationData in _data.SiteLocalizations)
                        {
                            try
                            {
                                Localization siteLocalization = localizationResolver.GetLocalization(siteLocalizationData.Id);
                                if (siteLocalization.LastRefresh == DateTime.MinValue)
                                {
                                    siteLocalization.SetData(siteLocalizationData);
                                }
                                SiteLocalizations.Add(siteLocalization);
                            }
                            catch (DxaUnknownLocalizationException)
                            {
                                Log.Error("Unknown localization ID '{0}' specified in SiteLocalizations for Localization [{1}].", siteLocalizationData.Id, this);
                            }
                        }
                    }

                    if (IsHtmlDesignPublished)
                    {
                        mediaPatterns.Add("^/favicon.ico");
                        mediaPatterns.Add(String.Format("^{0}/{1}/assets/.*", Path, SiteConfiguration.SystemFolder));
                    }
                    mediaPatterns.Add(String.Format("^{0}/{1}/.*\\.json$", Path, SiteConfiguration.SystemFolder));

                    StaticContentUrlPattern = String.Join("|", mediaPatterns);
                    _staticContentUrlRegex  = new Regex(StaticContentUrlPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);

                    Culture  = GetConfigValue("core.culture");
                    Language = GetConfigValue("core.language");
                    string formats = GetConfigValue("core.dataFormats");
                    DataFormats = formats == null ? new List <string>() : formats.Split(',').Select(f => f.Trim()).ToList();
                }
            }
        }