/// <summary>
        /// Processes
        /// </summary>
        /// <param name="committedEventStreamWithContext"></param>
        /// <returns></returns>
        public Task <CommitSequenceNumber> Process(CommittedEventStreamWithContext committedEventStreamWithContext)
        {
            try
            {
                var originatingSequence    = committedEventStreamWithContext.EventStream.Sequence;
                var context                = committedEventStreamWithContext.Context;
                var particleStream         = committedEventStreamWithContext.EventStream;
                EventSourceVersion version = null;

                _executionContextManager.CurrentFor(context);
                using (var _ = _getEventStore())
                {
                    version = _.GetNextVersionFor(particleStream.Source.Key);
                }

                var versionedEventSource = new VersionedEventSource(version, new EventSourceKey(particleStream.Source.EventSource, particleStream.Source.Artifact));

                var eventEnvelopes = new List <EventEnvelope>();

                particleStream.Events.ForEach(_ =>
                {
                    _.Metadata.OriginalContext.CommitInOrigin = particleStream.Sequence;
                    var envelope = new EventEnvelope(
                        new EventMetadata(
                            _.Id,
                            new VersionedEventSource(version, new EventSourceKey(particleStream.Source.EventSource, particleStream.Source.Artifact)),
                            _.Metadata.CorrelationId,
                            _.Metadata.Artifact,
                            _.Metadata.Occurred,
                            _.Metadata.OriginalContext
                            ),
                        _.Event
                        );
                    eventEnvelopes.Add(envelope);

                    version = version.NextSequence();
                });

                var uncommittedEventStream = new Store.UncommittedEventStream(
                    particleStream.Id,
                    particleStream.CorrelationId,
                    versionedEventSource,
                    particleStream.Timestamp,
                    new Store.EventStream(eventEnvelopes)
                    );

                _logger.Information("Commit events to store");
                Store.CommittedEventStream committedEventStream = null;
                using (var _ = _getEventStore())
                {
                    committedEventStream = _.Commit(uncommittedEventStream);
                }
                SetOffset(_eventHorizonKey, originatingSequence);
                _logger.Information("Process committed events");
                _processingHub.Process(committedEventStream);
                return(Task.FromResult(committedEventStream.Sequence));
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "Couldn't handle incoming commit");
                return(Task.FromException <CommitSequenceNumber>(ex));
            }
        }