/// <summary>
		/// The cancel backup job.
		/// </summary>
		/// <param name="serverId">
		/// The server id.
		/// </param>
		/// <param name="backupClient">
		/// The backup client.
		/// </param>
		/// <returns>
		/// The <see cref="Task"/>.
		/// </returns>
		public async Task<Status> CancelBackupJob(string serverId, BackupClientDetailsType backupClient)
		{
			Contract.Requires(!string.IsNullOrWhiteSpace(serverId), "Server cannot be null or empty");
			Contract.Requires(backupClient != null, "Backup client cannot be null");

			return
				await _apiClient.GetAsync<Status>(ApiUris.CancelBackupJobs(_apiClient.OrganizationId, serverId, backupClient.id));
		}
		/// <summary>
		/// The modify backup client.
		/// </summary>
		/// <param name="serverId">
		/// The server id.
		/// </param>
		/// <param name="backupClient">
		/// The backup client.
		/// </param>
		/// <param name="storagePolicy">
		/// The storage policy.
		/// </param>
		/// <param name="schedulePolicy">
		/// The schedule policy.
		/// </param>
		/// <param name="alertingType">
		/// The alerting type.
		/// </param>
		/// <returns>
		/// The <see cref="Task"/>.
		/// </returns>
		public async Task<Status> ModifyBackupClient(
			string serverId,
			BackupClientDetailsType backupClient,
			BackupStoragePolicy storagePolicy,
			BackupSchedulePolicy schedulePolicy,
			AlertingType alertingType)
		{
			Contract.Requires(!string.IsNullOrWhiteSpace(serverId), "Server cannot be null or empty");
			Contract.Requires(backupClient != null, "Backup client cannot be null");

			return
				await
				_apiClient.PostAsync<ModifyBackupClient, Status>(
					ApiUris.ModifyBackupClient(_apiClient.OrganizationId, serverId, backupClient.id),
					new ModifyBackupClient
						{
							schedulePolicyName = schedulePolicy.name,
							storagePolicyName = storagePolicy.name,
							alerting = alertingType
						});
		}
		/// <summary>
		/// Requests an immediate Backup for a Backup Client
		/// </summary>
		/// <param name="client">
		/// The <see cref="ComputeApiClient"/> object
		/// </param>
		/// <param name="serverId">
		/// The server id
		/// </param>
		/// <param name="backupClient">
		/// The backup client to modify
		/// </param>
		/// <returns>
		/// The status of the request
		/// </returns>
		public static async Task<Status> InitiateBackup(
			this IComputeApiClient client, 
			string serverId, 
			BackupClientDetailsType backupClient)
		{
			Contract.Requires(!string.IsNullOrWhiteSpace(serverId), "Server cannot be null or empty");
			Contract.Requires(backupClient != null, "Backup client cannot be null");

			return
				await
					client.WebApi.ApiGetAsync<Status>(
						ApiUris.InitiateBackup(client.Account.OrganizationId, serverId, backupClient.id));
		}
		public static async Task<Status> CancelBackupJob(
			this IComputeApiClient client,
			string serverId,
			BackupClientDetailsType backupClient)
		{
			return await client.Backup.CancelBackupJob(serverId, backupClient);
		}
		public static async Task<Status> InitiateBackup(
			this IComputeApiClient client,
			string serverId,
			BackupClientDetailsType backupClient)
		{
			return await client.Backup.InitiateBackup(serverId, backupClient);
		}
		public static async Task<Status> ModifyBackupClient(
			this IComputeApiClient client,
			string serverId,
			BackupClientDetailsType backupClient,
			BackupStoragePolicy storagePolicy,
			BackupSchedulePolicy schedulePolicy,
			AlertingType alertingType)
		{
			return await client.Backup.ModifyBackupClient(serverId, backupClient, storagePolicy, schedulePolicy, alertingType);
		}