private static GeneratedEvent ProcessEvent(Event e, Instance instance)
        {
            // Process Event using InstanceData
            Return eventReturn = e.Process(instance);

            if (e.PreviousValue == null) e.PreviousValue = e.Default.Copy();
            if (e.CurrentValue != null)
            {
                e.PreviousValue = e.CurrentValue.Copy();
                e.PreviousValue.Id = e.CurrentValue.Id;
            }

            if (eventReturn != e.CurrentValue)
            {
                e.CurrentValue = eventReturn.Copy();
                e.CurrentValue.ChangedTimeStamp = instance.Timestamp;
                e.CurrentValue.ChangedSequence = instance.Sequence;
            }

            e.CurrentValue.TimeStamp = instance.Timestamp;
            e.CurrentValue.Sequence = instance.Sequence;

            // Set Duration
            if (e.CurrentValue.TimeStamp > DateTime.MinValue && e.PreviousValue.TimeStamp > DateTime.MinValue)
            {
                eventReturn.Duration = (e.CurrentValue.TimeStamp - e.PreviousValue.TimeStamp).TotalSeconds;
            }
            else
            {
                eventReturn.Duration = 0;
            }

            // Create new GeneratedEvent object
            var result = new GeneratedEvent();
            result.EventName = e.Name;
            result.PreviousValue = new ValueData(e.PreviousValue);
            result.CurrentValue = new ValueData(e.CurrentValue);
            result.CaptureItems.AddRange(e.CurrentValue.CaptureItems);

            return result;
        }