diff --git a/e2e/manager_test.go b/e2e/manager_test.go
index af4736d0ddb1fee413be96e026dbb4ea05c75109..0c1b530dabc4961aef006721fc1fd0d8e38c4066 100644
--- a/e2e/manager_test.go
+++ b/e2e/manager_test.go
@@ -101,7 +101,7 @@ func TestLoadLegacy(t *testing.T) {
 	//	t.Fatalf(
 	//		"Failed to create storage session: %+v", err)
 	//}
-	kv := versioned.NewKV(&ekv.Memstore{})
+	kv := versioned.NewKV(&ekv.MakeMemstore())
 
 	err := ratchet.New(kv, myId, myPrivKey, grp)
 	if err != nil {
diff --git a/e2e/parse/conversation/partner_test.go b/e2e/parse/conversation/partner_test.go
index 9a52791f147f1ad9b69eace2bc6cc3378320f265..41dd638ca5a04fefc125c2a4977715c5c4493f5c 100644
--- a/e2e/parse/conversation/partner_test.go
+++ b/e2e/parse/conversation/partner_test.go
@@ -19,7 +19,7 @@ import (
 // Tests happy path of LoadOrMakeConversation when making a new Conversation.
 func TestLoadOrMakeConversation_New(t *testing.T) {
 	// Set up test values
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	partner := id.NewIdFromString("partner ID", id.User, t)
 	expectedConv := &Conversation{
 		lastReceivedID:         0,
@@ -42,7 +42,7 @@ func TestLoadOrMakeConversation_New(t *testing.T) {
 // Tests happy path of LoadOrMakeConversation when loading a Conversation.
 func TestLoadOrMakeConversation_Load(t *testing.T) {
 	// Set up test values
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	partner := id.NewIdFromString("partner ID", id.User, t)
 	expectedConv := LoadOrMakeConversation(kv, partner)
 
@@ -60,7 +60,7 @@ func TestLoadOrMakeConversation_Load(t *testing.T) {
 func TestConversation_ProcessReceivedMessageID_Case_1(t *testing.T) {
 	// Set up test values
 	mid := uint32(5)
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	partner := id.NewIdFromString("partner ID", id.User, t)
 	expectedConv := LoadOrMakeConversation(kv, partner)
 	expectedConv.lastReceivedID = mid
@@ -84,7 +84,7 @@ func TestConversation_ProcessReceivedMessageID_Case_1(t *testing.T) {
 func TestConversation_ProcessReceivedMessageID_Case_0(t *testing.T) {
 	// Set up test values
 	mid := uint32(5)
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	partner := id.NewIdFromString("partner ID", id.User, t)
 	expectedConv := LoadOrMakeConversation(kv, partner)
 	expectedConv.lastReceivedID = mid
@@ -106,7 +106,7 @@ func TestConversation_ProcessReceivedMessageID_Case_0(t *testing.T) {
 func TestConversation_ProcessReceivedMessageID_Case_Neg1(t *testing.T) {
 	// Set up test values
 	mid := uint32(topRegion + 5)
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	partner := id.NewIdFromString("partner ID", id.User, t)
 	expectedConv := LoadOrMakeConversation(kv, partner)
 	expectedConv.lastReceivedID = bottomRegion - 5
@@ -128,7 +128,7 @@ func TestConversation_ProcessReceivedMessageID_Case_Neg1(t *testing.T) {
 // Tests happy path of Conversation.GetNextSendID.
 func TestConversation_GetNextSendID(t *testing.T) {
 	// Set up test values
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	partner := id.NewIdFromString("partner ID", id.User, t)
 	conv := LoadOrMakeConversation(kv, partner)
 	conv.nextSentID = maxTruncatedID - 100
@@ -148,7 +148,7 @@ func TestConversation_GetNextSendID(t *testing.T) {
 
 // Tests the happy path of save and loadConversation.
 func TestConversation_save_load(t *testing.T) {
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	partner := id.NewIdFromString("partner ID", id.User, t)
 	expectedConv := makeRandomConv(kv, partner)
 	expectedErr := "loadConversation produced an error: Failed to Load " +
@@ -169,7 +169,7 @@ func TestConversation_save_load(t *testing.T) {
 			"\nexpected: %+v\nreceived: %+v", expectedConv, testConv)
 	}
 
-	_, err = loadConversation(versioned.NewKV(make(ekv.Memstore)), partner)
+	_, err = loadConversation(versioned.NewKV(ekv.MakeMemstore()), partner)
 	if err == nil {
 		t.Errorf("loadConversation failed to produce an error."+
 			"\nexpected: %s\nreceived: %v", expectedErr, nil)
@@ -178,7 +178,7 @@ func TestConversation_save_load(t *testing.T) {
 
 // Happy path.
 func TestConversation_Delete(t *testing.T) {
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	partner := id.NewIdFromString("partner ID", id.User, t)
 	conv := makeRandomConv(kv, partner)
 
@@ -201,7 +201,7 @@ func TestConversation_Delete(t *testing.T) {
 
 // Tests the happy path of marshal and unmarshal.
 func TestConversation_marshal_unmarshal(t *testing.T) {
-	expectedConv := makeRandomConv(versioned.NewKV(make(ekv.Memstore)),
+	expectedConv := makeRandomConv(versioned.NewKV(ekv.MakeMemstore()),
 		id.NewIdFromString("partner ID", id.User, t))
 	testConv := LoadOrMakeConversation(expectedConv.kv, expectedConv.partner)
 
diff --git a/e2e/parse/conversation/ring_test.go b/e2e/parse/conversation/ring_test.go
index e9174d366681c427b33bfb626c51a292001a1f30..1d1db1983fbe265d6841b22c1f969b21119806f7 100644
--- a/e2e/parse/conversation/ring_test.go
+++ b/e2e/parse/conversation/ring_test.go
@@ -19,7 +19,7 @@ import (
 // TestNewBuff tests the creation of a Buff object.
 func TestNewBuff(t *testing.T) {
 	// Initialize buffer
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	buffLen := 20
 	testBuff, err := NewBuff(kv, buffLen)
 	if err != nil {
@@ -43,7 +43,7 @@ func TestNewBuff(t *testing.T) {
 // the Buff.buff, buff.lookup, and proper index updates.
 func TestBuff_Add(t *testing.T) {
 	// Initialize buffer
-	testBuff, err := NewBuff(versioned.NewKV(make(ekv.Memstore)), 20)
+	testBuff, err := NewBuff(versioned.NewKV(ekv.MakeMemstore()), 20)
 	if err != nil {
 		t.Errorf("Failed to make new Buff: %+v", err)
 	}
@@ -98,7 +98,7 @@ func TestBuff_Add(t *testing.T) {
 // value is overwritten.
 func TestBuff_Add_Overflow(t *testing.T) {
 	buffLen := 20
-	testBuff, err := NewBuff(versioned.NewKV(make(ekv.Memstore)), buffLen)
+	testBuff, err := NewBuff(versioned.NewKV(ekv.MakeMemstore()), buffLen)
 	if err != nil {
 		t.Errorf("Failed to make new Buff: %+v", err)
 	}
@@ -142,7 +142,7 @@ func TestBuff_Add_Overflow(t *testing.T) {
 // Tests that Buff.Get returns the latest inserted Message.
 func TestBuff_Get(t *testing.T) {
 	// Initialize buffer
-	testBuff, err := NewBuff(versioned.NewKV(make(ekv.Memstore)), 20)
+	testBuff, err := NewBuff(versioned.NewKV(ekv.MakeMemstore()), 20)
 	if err != nil {
 		t.Errorf("Failed to make new Buff: %+v", err)
 	}
@@ -196,7 +196,7 @@ func TestBuff_Get(t *testing.T) {
 // MessageID.
 func TestBuff_GetByMessageID(t *testing.T) {
 	// Initialize buffer
-	testBuff, err := NewBuff(versioned.NewKV(make(ekv.Memstore)), 20)
+	testBuff, err := NewBuff(versioned.NewKV(ekv.MakeMemstore()), 20)
 	if err != nil {
 		t.Errorf("Failed to make new Buff: %+v", err)
 	}
@@ -234,7 +234,7 @@ func TestBuff_GetByMessageID(t *testing.T) {
 // that does not exist in Buff.
 func TestBuff_GetByMessageID_Error(t *testing.T) {
 	// Initialize buffer
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	buffLen := 20
 	testBuff, err := NewBuff(kv, buffLen)
 	if err != nil {
@@ -254,7 +254,7 @@ func TestBuff_GetByMessageID_Error(t *testing.T) {
 
 func TestBuff_GetNextMessage(t *testing.T) {
 	// Initialize buffer
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	buffLen := 20
 	testBuff, err := NewBuff(kv, buffLen)
 	if err != nil {
@@ -298,7 +298,7 @@ func TestBuff_GetNextMessage(t *testing.T) {
 
 func TestLoadBuff(t *testing.T) {
 	// Initialize buffer
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	buffLen := 20
 	testBuff, err := NewBuff(kv, buffLen)
 	if err != nil {
diff --git a/e2e/parse/conversation/store_test.go b/e2e/parse/conversation/store_test.go
index 16598c3cd268194c32f89eba021ccd11e4e7733b..176d251be7085dba1baa22e9038aeef10efb58fc 100644
--- a/e2e/parse/conversation/store_test.go
+++ b/e2e/parse/conversation/store_test.go
@@ -17,7 +17,7 @@ import (
 
 // Happy path.
 func TestStore_Delete(t *testing.T) {
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	store := NewStore(kv)
 	pIDs := make([]*id.ID, 10)
 
diff --git a/e2e/parse/partition/multiPartMessage_test.go b/e2e/parse/partition/multiPartMessage_test.go
index 8bd4846625bde3c50dcdb30a2c6ab19e3e423bdb..616b7dda8d3bcae9799b78ac595f4a6fe3f123ad 100644
--- a/e2e/parse/partition/multiPartMessage_test.go
+++ b/e2e/parse/partition/multiPartMessage_test.go
@@ -34,7 +34,7 @@ func Test_loadOrCreateMultiPartMessage_Create(t *testing.T) {
 		PresentParts:    0,
 		SenderTimestamp: time.Time{},
 		MessageType:     0,
-		kv:              versioned.NewKV(make(ekv.Memstore)),
+		kv:              versioned.NewKV(ekv.MakeMemstore()),
 	}
 	expectedData, err := json.Marshal(expectedMpm)
 	if err != nil {
@@ -70,7 +70,7 @@ func Test_loadOrCreateMultiPartMessage_Load(t *testing.T) {
 		PresentParts:    0,
 		SenderTimestamp: time.Time{},
 		MessageType:     0,
-		kv:              versioned.NewKV(make(ekv.Memstore)),
+		kv:              versioned.NewKV(ekv.MakeMemstore()),
 	}
 	err := expectedMpm.save()
 	if err != nil {
@@ -136,7 +136,7 @@ func TestMultiPartMessage_Add(t *testing.T) {
 	prng := rand.New(rand.NewSource(netTime.Now().UnixNano()))
 	mpm := loadOrCreateMultiPartMessage(
 		id.NewIdFromUInt(prng.Uint64(), id.User, t), prng.Uint64(),
-		versioned.NewKV(make(ekv.Memstore)))
+		versioned.NewKV(ekv.MakeMemstore()))
 	partNums, parts := generateParts(prng, 0)
 
 	for i := range partNums {
@@ -184,7 +184,7 @@ func TestMultiPartMessage_AddFirst(t *testing.T) {
 		SenderTimestamp: netTime.Now(),
 		MessageType:     catalog.NoType,
 		parts:           make([][]byte, 3),
-		kv:              versioned.NewKV(make(ekv.Memstore)),
+		kv:              versioned.NewKV(ekv.MakeMemstore()),
 	}
 	expectedMpm.parts[2] = []byte{5, 8, 78, 9}
 	npm := loadOrCreateMultiPartMessage(expectedMpm.Sender,
@@ -213,7 +213,7 @@ func TestMultiPartMessage_IsComplete(t *testing.T) {
 	mid := prng.Uint64()
 	mpm := loadOrCreateMultiPartMessage(
 		id.NewIdFromUInt(prng.Uint64(), id.User, t), mid,
-		versioned.NewKV(make(ekv.Memstore)))
+		versioned.NewKV(ekv.MakeMemstore()))
 	partNums, parts := generateParts(prng, 75)
 
 	// Check that IsComplete is false where there are no parts
@@ -258,7 +258,7 @@ func TestMultiPartMessage_IsComplete(t *testing.T) {
 // Tests happy path of multiPartMessage.delete.
 func TestMultiPartMessage_delete(t *testing.T) {
 	prng := rand.New(rand.NewSource(netTime.Now().UnixNano()))
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	mpm := loadOrCreateMultiPartMessage(
 		id.NewIdFromUInt(prng.Uint64(), id.User, t), prng.Uint64(), kv)
 
diff --git a/e2e/parse/partition/part_test.go b/e2e/parse/partition/part_test.go
index 936de7af865b4379ee4e72eb396bf926f1ff56bd..53366fdb6d211a74e531e21cf8b4f0a9665079c3 100644
--- a/e2e/parse/partition/part_test.go
+++ b/e2e/parse/partition/part_test.go
@@ -20,7 +20,7 @@ import (
 func Test_savePart(t *testing.T) {
 	// Set up test values
 	prng := rand.New(rand.NewSource(netTime.Now().UnixNano()))
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	partNum := uint8(prng.Uint32())
 	part := make([]byte, prng.Int31n(500))
 	prng.Read(part)
@@ -49,7 +49,7 @@ func Test_savePart(t *testing.T) {
 func Test_loadPart(t *testing.T) {
 	// Set up test values
 	prng := rand.New(rand.NewSource(netTime.Now().UnixNano()))
-	rootKv := versioned.NewKV(make(ekv.Memstore))
+	rootKv := versioned.NewKV(ekv.MakeMemstore())
 	partNum := uint8(prng.Uint32())
 	part := make([]byte, prng.Int31n(500))
 	prng.Read(part)
@@ -80,7 +80,7 @@ func Test_loadPart(t *testing.T) {
 func Test_loadPart_NotFoundError(t *testing.T) {
 	// Set up test values
 	prng := rand.New(rand.NewSource(netTime.Now().UnixNano()))
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	partNum := uint8(prng.Uint32())
 	part := make([]byte, prng.Int31n(500))
 	prng.Read(part)
@@ -102,7 +102,7 @@ func Test_loadPart_NotFoundError(t *testing.T) {
 func TestDeletePart(t *testing.T) {
 	// Set up test values
 	prng := rand.New(rand.NewSource(netTime.Now().UnixNano()))
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	partNum := uint8(prng.Uint32())
 	part := make([]byte, prng.Int31n(500))
 	prng.Read(part)
diff --git a/e2e/parse/partition/store_test.go b/e2e/parse/partition/store_test.go
index 9a86fb17b65997dc08be57aeb63800a3ba775f4c..909de9b829d54e7b07fc4936ed82bdd2337ccc5f 100644
--- a/e2e/parse/partition/store_test.go
+++ b/e2e/parse/partition/store_test.go
@@ -20,7 +20,7 @@ import (
 
 // Tests happy path of NewOrLoad.
 func TestNewOrLoad(t *testing.T) {
-	rootKv := versioned.NewKV(make(ekv.Memstore))
+	rootKv := versioned.NewKV(ekv.MakeMemstore())
 	expectedStore := &Store{
 		multiParts:  make(map[multiPartID]*multiPartMessage),
 		activeParts: make(map[*multiPartMessage]bool),
@@ -38,7 +38,7 @@ func TestNewOrLoad(t *testing.T) {
 // Tests happy path of Store.AddFirst.
 func TestStore_AddFirst(t *testing.T) {
 	part := []byte("Test message.")
-	s := NewOrLoad(versioned.NewKV(ekv.Memstore{}))
+	s := NewOrLoad(versioned.NewKV(ekv.MakeMemstore()))
 
 	msg, complete := s.AddFirst(id.NewIdFromString("User", id.User, t),
 		catalog.XxMessage, 5, 0, 1, netTime.Now(), netTime.Now(), part,
@@ -58,7 +58,7 @@ func TestStore_AddFirst(t *testing.T) {
 func TestStore_Add(t *testing.T) {
 	part1 := []byte("Test message.")
 	part2 := []byte("Second Sentence.")
-	s := NewOrLoad(versioned.NewKV(ekv.Memstore{}))
+	s := NewOrLoad(versioned.NewKV(ekv.MakeMemstore()))
 
 	msg, complete := s.AddFirst(id.NewIdFromString("User", id.User, t),
 		catalog.XxMessage, 5, 0, 2, netTime.Now(), netTime.Now(), part1,
@@ -87,7 +87,7 @@ func TestStore_prune(t *testing.T) {
 	// new message
 	part1 := []byte("Test message.")
 	part2 := []byte("Second Sentence.")
-	s := NewOrLoad(versioned.NewKV(ekv.Memstore{}))
+	s := NewOrLoad(versioned.NewKV(ekv.MakeMemstore()))
 
 	partner1 := id.NewIdFromString("User", id.User, t)
 	messageId1 := uint64(5)
diff --git a/e2e/parse/partition_test.go b/e2e/parse/partition_test.go
index 98970c881d67f9a69bc4dda4a0114f3644459055..e8440ef1a6f62b34ec4ef6a7378c56218157a88c 100644
--- a/e2e/parse/partition_test.go
+++ b/e2e/parse/partition_test.go
@@ -24,7 +24,7 @@ var ipsumTestStr = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cra
 
 // Test that NewPartitioner outputs a correctly made Partitioner
 func TestNewPartitioner(t *testing.T) {
-	p := NewPartitioner(versioned.NewKV(make(ekv.Memstore)), 4096)
+	p := NewPartitioner(versioned.NewKV(ekv.MakeMemstore()), 4096)
 
 	if p.baseMessageSize != 4096 {
 		t.Errorf("baseMessageSize content mismatch."+
@@ -57,7 +57,7 @@ func TestNewPartitioner(t *testing.T) {
 
 // Test that no error is returned running Partitioner.Partition.
 func TestPartitioner_Partition(t *testing.T) {
-	p := NewPartitioner(versioned.NewKV(make(ekv.Memstore)), len(ipsumTestStr))
+	p := NewPartitioner(versioned.NewKV(ekv.MakeMemstore()), len(ipsumTestStr))
 
 	_, _, err := p.Partition(
 		&id.DummyUser, catalog.XxMessage, netTime.Now(), []byte(ipsumTestStr))
@@ -68,7 +68,7 @@ func TestPartitioner_Partition(t *testing.T) {
 
 // Test that Partitioner.HandlePartition can handle a message part.
 func TestPartitioner_HandlePartition(t *testing.T) {
-	p := NewPartitioner(versioned.NewKV(make(ekv.Memstore)), len(ipsumTestStr))
+	p := NewPartitioner(versioned.NewKV(ekv.MakeMemstore()), len(ipsumTestStr))
 	m := newMessagePart(1107, 1, []byte(ipsumTestStr))
 
 	_, _ = p.HandlePartition(
@@ -80,7 +80,7 @@ func TestPartitioner_HandlePartition(t *testing.T) {
 
 // Test that HandlePartition can handle a first message part
 func TestPartitioner_HandleFirstPartition(t *testing.T) {
-	p := NewPartitioner(versioned.NewKV(make(ekv.Memstore)), len(ipsumTestStr))
+	p := NewPartitioner(versioned.NewKV(ekv.MakeMemstore()), len(ipsumTestStr))
 	m := newFirstMessagePart(
 		catalog.XxMessage, 1107, 1, netTime.Now(), []byte(ipsumTestStr))
 
diff --git a/e2e/ratchet/partner/relationship_test.go b/e2e/ratchet/partner/relationship_test.go
index 9591ecea3193a0696b7910a64c130e537550a18c..5160844daf0c6c3dcc6e4ea2844065f42f2b612b 100644
--- a/e2e/ratchet/partner/relationship_test.go
+++ b/e2e/ratchet/partner/relationship_test.go
@@ -875,7 +875,7 @@ func makeTestRelationshipManager(t *testing.T) (*manager, *versioned.KV) {
 	mySIDHPrivKey.Generate(rng)
 	mySIDHPrivKey.GeneratePublicKey(mySIDHPubKey)
 
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	frng := fastRNG.NewStreamGenerator(1000, 10, csprng.NewSystemRNG)
 	return &manager{
 		kv:                      kv,
diff --git a/e2e/ratchet/partner/utils_test.go b/e2e/ratchet/partner/utils_test.go
index 910384d7ce98fa557f936f13e5b94bfbbe7650a6..d75ae5822658eb161c3887ca457b6eaa89f47257 100644
--- a/e2e/ratchet/partner/utils_test.go
+++ b/e2e/ratchet/partner/utils_test.go
@@ -72,7 +72,7 @@ func newTestManager(t *testing.T) (manager, *versioned.KV) {
 	mySIDHPrivKey.Generate(rng.GetStream())
 	mySIDHPrivKey.GeneratePublicKey(mySIDHPubKey)
 
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	partnerID := id.NewIdFromString("partner", id.User, t)
 
 	myId := id.NewIdFromString("me", id.User, t)
diff --git a/e2e/ratchet/ratchet_test.go b/e2e/ratchet/ratchet_test.go
index 2fa7f095f06a294587b2a3c89a0bc25dd9919dc7..f510f74a11173502a9d22e7e485c74da9603c6f8 100644
--- a/e2e/ratchet/ratchet_test.go
+++ b/e2e/ratchet/ratchet_test.go
@@ -30,7 +30,7 @@ import (
 func TestNewStore(t *testing.T) {
 	grp := cyclic.NewGroup(large.NewInt(107), large.NewInt(2))
 	privKey := grp.NewInt(57)
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	expectedStore := &Ratchet{
 		managers:               make(map[id.ID]partner.Manager),
 		advertisedDHPrivateKey: privKey,
diff --git a/e2e/ratchet/utils_test.go b/e2e/ratchet/utils_test.go
index 02c9ed79297487e013c72174aea994d2840ccb3e..073dc315b6c5f42991f3d72d4cbe6f56581e7a33 100644
--- a/e2e/ratchet/utils_test.go
+++ b/e2e/ratchet/utils_test.go
@@ -24,7 +24,7 @@ import (
 func makeTestRatchet() (*Ratchet, *versioned.KV, error) {
 	grp := cyclic.NewGroup(large.NewInt(107), large.NewInt(2))
 	privKey := grp.NewInt(57)
-	kv := versioned.NewKV(make(ekv.Memstore))
+	kv := versioned.NewKV(ekv.MakeMemstore())
 	rng := fastRNG.NewStreamGenerator(12, 3, csprng.NewSystemRNG)
 	err := New(kv, &id.ID{}, privKey, grp)
 	if err != nil {
diff --git a/e2e/rekey/confirm_test.go b/e2e/rekey/confirm_test.go
index fe9115392b6376c87de4805c76a685dacbbe5881..24de5fda04353b367d1d222d1517f48c09fb7cde 100644
--- a/e2e/rekey/confirm_test.go
+++ b/e2e/rekey/confirm_test.go
@@ -33,7 +33,7 @@ func TestHandleConfirm(t *testing.T) {
 	rng := fastRNG.NewStreamGenerator(1000, 10, csprng.NewSystemRNG)
 	myID := id.NewIdFromString("zezima", id.User, t)
 
-	kv := versioned.NewKV(ekv.Memstore{})
+	kv := versioned.NewKV(ekv.MakeMemstore())
 
 	// Maintain an ID for bob
 	bobID := id.NewIdFromBytes([]byte("test"), t)
diff --git a/e2e/rekey/exchange_test.go b/e2e/rekey/exchange_test.go
index 6e4f3036144fb3fcf33617dfc26fcb9c3021bb27..2967d81cbf2cea380ae1c0e64393fbe493fa1851 100644
--- a/e2e/rekey/exchange_test.go
+++ b/e2e/rekey/exchange_test.go
@@ -41,7 +41,7 @@ func TestFullExchange(t *testing.T) {
 	rng := fastRNG.NewStreamGenerator(1000, 10, csprng.NewSystemRNG)
 	aliceID = id.NewIdFromString("zezima", id.User, t)
 
-	kv := versioned.NewKV(ekv.Memstore{})
+	kv := versioned.NewKV(ekv.MakeMemstore())
 
 	// Maintain an ID for bob
 	bobID = id.NewIdFromBytes([]byte("test"), t)
diff --git a/e2e/rekey/rekey_test.go b/e2e/rekey/rekey_test.go
index 0e35f8124299ec22fe11b02f9261c88348d7b524..ac5afe5fd8b9feb256e7b47c7dccc1efd85500be 100644
--- a/e2e/rekey/rekey_test.go
+++ b/e2e/rekey/rekey_test.go
@@ -39,7 +39,7 @@ func TestRekey(t *testing.T) {
 
 	bobID = id.NewIdFromUInt(rand.Uint64(), id.User, t)
 
-	kv := versioned.NewKV(ekv.Memstore{})
+	kv := versioned.NewKV(ekv.MakeMemstore())
 
 	err := ratchet.New(kv, aliceID, alicePrivKey, grp)
 	if err != nil {
diff --git a/e2e/rekey/trigger_test.go b/e2e/rekey/trigger_test.go
index 7d6586ac6dc2d63c6ccab8f7699ecbdf7bfcaa1d..8e9ab6658eb627babb1dd9acacd0150222f1a71c 100644
--- a/e2e/rekey/trigger_test.go
+++ b/e2e/rekey/trigger_test.go
@@ -70,7 +70,7 @@ func TestHandleTrigger(t *testing.T) {
 	// Maintain an ID for bob
 	bobID = id.NewIdFromBytes([]byte("test"), t)
 	aliceID = id.NewIdFromString("zezima", id.User, t)
-	kv := versioned.NewKV(ekv.Memstore{})
+	kv := versioned.NewKV(ekv.MakeMemstore())
 
 	err := ratchet.New(kv, aliceID, alicePrivKey, grp)
 	if err != nil {