/// <summary>
        /// Aktualisiert einen Auftrag oder legt einen Auftrag neu an.
        /// </summary>
        /// <param name="job">Der neue oder veränderte Auftrag.</param>
        /// <param name="scheduleIdentifier">Die eindeutige Kennung der veränderten Aufzeichnung.</param>
        public void Update( VCRJob job, Guid? scheduleIdentifier )
        {
            // Report
            if (job != null)
                Tools.ExtendedLogging( "Updating Job {0}", job.UniqueID );

            // Load default profile name
            job.SetProfile();

            // Validate
            job.Validate( scheduleIdentifier );

            // Cleanup schedules
            job.CleanupExceptions();

            // Remove from archive - if job has been recovered
            job.Delete( ArchiveDirectory );

            // Try to store to disk - actually this is inside the lock because the directory virtually is part of our map
            lock (m_Jobs)
                if (job.Save( JobDirectory ).GetValueOrDefault())
                    m_Jobs[job.UniqueID.Value] = job;
                else
                    throw new ArgumentException( string.Format( Properties.Resources.SaveJobFailed, job.UniqueID ), "job" );
        }