// Update Campaign file
		private void btnUpdate_Click(object sender, RoutedEventArgs e)
		{
			_campaignNew = new Campaign(_blfLocation);
			
			// Update Current Map Name/Descrption Language Selection
			_campaign.HaloCampaign.MapNames[cbLanguages.SelectedIndex] = txtMapName.Text;
			_campaign.HaloCampaign.MapDescriptions[cbLanguages.SelectedIndex] = txtMapDesc.Text;

			if (MapIDsError())
				return;

			// Update Map IDs
			UpdateMapIDs();

			// Update Unlock Bytes
			UpdateUnlockBytes();

			// Copy changes to new file
			_campaignNew.HaloCampaign = _campaign.HaloCampaign;

			// Write all changes to file
			_campaignNew.UpdateCampaign();
			Close();
			MetroMessageBox.Show("Save Successful", "Your Campaign has been saved.");
			App.AssemblyStorage.AssemblySettings.HomeWindow.ExternalTabClose(_tab);
		}
		public void LoadCampaign()
		{
			try
			{
				// Just a lazy way to validate the BLF file
				_blf = new PureBLF(_blfLocation);
				if (_blf.BLFChunks[1].ChunkMagic != "cmpn")
					throw new Exception("The selected Campaign BLF is not a valid Campaign BLF file.");
				_blf.Close();

				_campaign = new Campaign(_blfLocation);

				Dispatcher.Invoke(new Action(delegate
				{
					// Add BLF Info
					paneBLFInfo.Children.Insert(0, new MapHeaderEntry("BLF Length:", "0x" + _campaign.Stream.Length.ToString("X")));
					paneBLFInfo.Children.Insert(1,
						new MapHeaderEntry("BLF Chunks:", _blf.BLFChunks.Count.ToString(CultureInfo.InvariantCulture)));

					// Load Languages
					LoadLanguages();

					// Load Map IDs
					LoadMapIDs();

					// Load Unlock Bytes
					LoadUnlockBytes();

					// Update UI
					_startEditing = true;
					cbLanguages.SelectedIndex = 0;

					if (App.AssemblyStorage.AssemblySettings.StartpageHideOnLaunch)
						App.AssemblyStorage.AssemblySettings.HomeWindow.ExternalTabClose(Home.TabGenre.StartPage);

					RecentFiles.AddNewEntry(new FileInfo(_blfLocation).Name, _blfLocation, "Campaign", Settings.RecentFileType.Campaign);
					Close();
				}));
			}
			catch (Exception ex)
			{
				Dispatcher.Invoke(new Action(delegate
				{
					MetroMessageBox.Show("Unable to open Campaign", ex.Message);
					App.AssemblyStorage.AssemblySettings.HomeWindow.ExternalTabClose(_tab);
					Close();
				}));
			}
		}