public async Task Restore(Backup backup, List <CompactAppData> skipApps)
        {
            int counter = 1;

            try
            {
                foreach (var item in backup.Apps)
                {
                    if (!skipApps.Contains(item))
                    {
                        OnBackupProgress(new BackupEventArgs(-1, BackupState.ResettingAppData, "Clearing current state of " + item.DisplayName, counter.ToString() + " / " + (backup.Apps.Count - skipApps.Count).ToString(), restoreLog));
                        await ResetAppData(AppDataExtension.GetAppDataFromCompactAppData(item));

                        counter++;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageDialog md = new MessageDialog("4" + ex.Message);
                await md.ShowAsync();
            }
            ArchiverPlus archiver = new ArchiverPlus();

            OnBackupProgress(new BackupEventArgs(-1, BackupState.Initializing, "Loading backup file...", "", restoreLog));
            StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(System.IO.Path.Combine(App.BackupDestination, backup.Name));

            StorageFile file = await folder.GetFileAsync("data.zip");



            Dictionary <string, StorageFolder> dests = new Dictionary <string, StorageFolder>();

            familyToDisplayNames = new Dictionary <string, string>();
            try
            {
                foreach (var item in backup.Apps)
                {
                    if (!skipApps.Contains(item))
                    {
                        FileOperations.RemoveFromGetContentsCache(item.FamilyName);

                        dests[item.FamilyName] = await StorageFolder.GetFolderFromPathAsync(System.IO.Path.GetDirectoryName(await LoadAppData.GetDataFolder(AppDataExtension.GetAppDataFromCompactAppData(item))));

                        familyToDisplayNames.Add(item.FamilyName, item.DisplayName);
                    }
                    else
                    {
                        dests[item.FamilyName] = null; //Skip
                    }
                }
            }
            catch (Exception ex)
            {
                MessageDialog md = new MessageDialog("5" + ex.Message);
                await md.ShowAsync();
            }

            archiver.DecompressingProgress += Archiver_DecompressingProgress;

            try
            {
                await archiver.DecompressSpecial(file, dests);
            }
            catch (Exception ex)
            {
                MessageDialog md = new MessageDialog("6" + ex.Message);
                await md.ShowAsync();
            }
            archiver.DecompressingProgress -= Archiver_DecompressingProgress;

            OnBackupProgress(new BackupEventArgs(100.0, BackupState.Finished, "Restore completed.", "", restoreLog));
        }