/// <summary>
        /// Gibt einen Plan aus.
        /// </summary>
        /// <param name="plan">Der zu verwendende Plan.</param>
        /// <returns>Alle Aufzeichnungen, geordnet erst nach Zeit und dann nach der Priorität des Gerätes.</returns>
        private IEnumerable <ScheduleInfo> Dump(SchedulePlan plan)
        {
            // Skip
            if (plan == null)
            {
                yield break;
            }

#if !SILVERLIGHT
            // Dump decryption allocation
            if (SchedulerTrace.TraceVerbose)
            {
                foreach (var decryption in plan.DecryptionCounters.Values)
                {
                    if (decryption.IsEnabled)
                    {
                        Trace.TraceInformation(Properties.SchedulerResources.Trace_Decryption, decryption);
                    }
                }
            }
#endif

            // Artifical dump
            foreach (var info in plan.GetRecordings())
            {
                if (!m_ForbiddenDefinitions.Contains(info.Definition.UniqueIdentifier))
                {
#if !SILVERLIGHT
                    // Trace
                    if (SchedulerTrace.TraceInfo)
                    {
                        // Check type
                        var definition = info.Definition as IRecordingDefinition;

                        // Report
                        Trace.TraceInformation
                        (
                            info.StartsLate ? Properties.SchedulerResources.Trace_LateItem : Properties.SchedulerResources.Trace_NormalItem,
                            info.Resource,
                            (definition == null) ? null : definition.Source,
                            info.Time.Start,
                            info.Time.Duration
                        );
                    }
#endif

                    // Report
                    yield return(info);
                }
            }
        }