public virtual void Initialize()
        {
            if (Interlocked.Increment(ref _initialized) > 1)
            {
                return;
            }

            Logger.Debug(Messages.InitializingStorage);

            TryMongo(() =>
            {
                PersistedCommits.CreateIndex(
                    IndexKeys
                    .Ascending(MongoCommitFields.Dispatched)
                    .Ascending(MongoCommitFields.CommitStamp),
                    IndexOptions.SetName(MongoCommitIndexes.Dispatched).SetUnique(false)
                    );

                PersistedCommits.CreateIndex(
                    IndexKeys.Ascending(
                        MongoCommitFields.BucketId,
                        MongoCommitFields.StreamId,
                        MongoCommitFields.StreamRevisionFrom,
                        MongoCommitFields.StreamRevisionTo
                        //,MongoCommitFields.FullqualifiedStreamRevision
                        ),
                    IndexOptions.SetName(MongoCommitIndexes.GetFrom).SetUnique(true)
                    );

                PersistedCommits.CreateIndex(
                    IndexKeys.Ascending(
                        MongoCommitFields.BucketId,
                        MongoCommitFields.StreamId,
                        MongoCommitFields.CommitSequence
                        ),
                    IndexOptions.SetName(MongoCommitIndexes.LogicalKey).SetUnique(true)
                    );

                PersistedCommits.CreateIndex(
                    IndexKeys.Ascending(MongoCommitFields.CommitStamp),
                    IndexOptions.SetName(MongoCommitIndexes.CommitStamp).SetUnique(false)
                    );

                PersistedStreamHeads.CreateIndex(
                    IndexKeys.Ascending(MongoStreamHeadFields.Unsnapshotted),
                    IndexOptions.SetName(MongoStreamIndexes.Unsnapshotted).SetUnique(false)
                    );

                if (_options.ServerSideOptimisticLoop)
                {
                    PersistedCommits.Database.GetCollection("system.js").Save(new BsonDocument {
                        { "_id", "insertCommit" },
                        { "value", new BsonJavaScript(_options.GetInsertCommitScript()) }
                    });
                }

                EmptyRecycleBin();
            });
        }