diff --git a/e2e/parse/firstMessagePart.go b/e2e/parse/firstMessagePart.go
index ae907af3d2b921f69a3770f1ad0aa8e1da72541d..c862b50d24fd1c676cd69c8653279124c38af059 100644
--- a/e2e/parse/firstMessagePart.go
+++ b/e2e/parse/firstMessagePart.go
@@ -9,6 +9,7 @@ package parse
 
 import (
 	"encoding/binary"
+	"fmt"
 	"time"
 
 	jww "github.com/spf13/jwalterweatherman"
@@ -43,6 +44,9 @@ func newFirstMessagePart(mt catalog.MessageType, id uint32, numParts uint8,
 	// Create the message structure
 	m := firstMessagePartFromBytes(make([]byte, size))
 
+	fmt.Printf("len of contents: %d"+
+		"\nsize: %d\n"+
+		"len m.contents: %d\n", len(contents), size, len(m.Contents))
 	// Set the message type
 	binary.BigEndian.PutUint32(m.Type, uint32(mt))
 
diff --git a/e2e/parse/firstMessagePart_test.go b/e2e/parse/firstMessagePart_test.go
index 121ca7193c979d4dc04ec6a0d3fc58d8868e7853..6d3fcafa3b6208ded8f6c3d315604b0502db39a4 100644
--- a/e2e/parse/firstMessagePart_test.go
+++ b/e2e/parse/firstMessagePart_test.go
@@ -43,8 +43,7 @@ func Test_newFirstMessagePart(t *testing.T) {
 		1077,
 		2,
 		time.Unix(1609786229, 0).UTC(),
-		testStr,
-		len(testStr)+22,
+		[]byte{'t', 'e', 's', 't', 'i', 'n', 'g', 's', 't', 'r', 'i', 'n', 'g'}, len(expectedFMP.Data),
 	)
 
 	gotTime := fmp.getTimestamp()
diff --git a/e2e/parse/messagePart_test.go b/e2e/parse/messagePart_test.go
index b39699badf1a1097781e3f882730c55ca34dcc5b..adede5571164836de7c493f045767f03315eea9a 100644
--- a/e2e/parse/messagePart_test.go
+++ b/e2e/parse/messagePart_test.go
@@ -26,8 +26,7 @@ var expectedMP = messagePart{
 
 // Tests that a new function part is successfully created.
 func Test_newMessagePart(t *testing.T) {
-	testStr := []byte{'t', 'e', 's', 't', 'i', 'n', 'g'}
-	goTmp := newMessagePart(32, 6, testStr, len(testStr)+8)
+	goTmp := newMessagePart(32, 6, []byte{'t', 'e', 's', 't', 'i', 'n', 'g'}, len(expectedMP.Data))
 	if !reflect.DeepEqual(goTmp, expectedMP) {
 		t.Errorf("MessagePart received and MessagePart expected do not match."+
 			"\nexpected: %#v\nreceived: %#v", expectedMP, goTmp)
diff --git a/e2e/parse/partition_test.go b/e2e/parse/partition_test.go
index 2d1e7828e01f966e55d266cac2bdcd2788995a2c..22c1f238eda4b2f2f0be5575e68143c28970a749 100644
--- a/e2e/parse/partition_test.go
+++ b/e2e/parse/partition_test.go
@@ -69,8 +69,8 @@ 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(ekv.MakeMemstore()), 256)
-	m := newMessagePart(1107, 1, []byte(ipsumTestStr), len(ipsumTestStr)+32)
+	p := NewPartitioner(versioned.NewKV(ekv.MakeMemstore()), len(ipsumTestStr))
+	m := newMessagePart(1107, 1, []byte(ipsumTestStr), len(ipsumTestStr)+headerLen)
 
 	_, _ = p.HandlePartition(
 		&id.DummyUser,
@@ -83,8 +83,7 @@ func TestPartitioner_HandlePartition(t *testing.T) {
 func TestPartitioner_HandleFirstPartition(t *testing.T) {
 	p := NewPartitioner(versioned.NewKV(ekv.MakeMemstore()), 256)
 	m := newFirstMessagePart(
-		catalog.XxMessage, 1107, 1, netTime.Now(), []byte(ipsumTestStr),
-		len(ipsumTestStr)+32)
+		catalog.XxMessage, 1107, 1, netTime.Now(), []byte(ipsumTestStr), len([]byte(ipsumTestStr))+firstHeaderLen)
 
 	_, _ = p.HandlePartition(
 		&id.DummyUser,
diff --git a/e2e/sendUnsafe_test.go b/e2e/sendUnsafe_test.go
index 7afa82b206a609daf8b60127393eea40a483a68f..d30e6e15f9c2f6e8673e2f790c83199045d0c9c2 100644
--- a/e2e/sendUnsafe_test.go
+++ b/e2e/sendUnsafe_test.go
@@ -7,85 +7,102 @@
 
 package e2e
 
-//
-//func TestManager_SendUnsafe(t *testing.T) {
-//	streamGen := fastRNG.NewStreamGenerator(12, 1024, csprng.NewSystemRNG)
-//	rng := streamGen.GetStream()
-//	defer rng.Close()
-//	netHandler := newMockCmixHandler()
-//
-//	// Generate new E2E manager
-//	myKv := versioned.NewKV(ekv.MakeMemstore())
-//	myID := id.NewIdFromString("myID", id.User, t)
-//	myNet := newMockCmix(myID, netHandler, t)
-//	m1 := &manager{
-//		Switchboard: receive.New(),
-//		partitioner: parse.NewPartitioner(myKv, myNet.GetMaxMessageLength()),
-//		net:         myNet,
-//		myID:        myID,
-//		events:      mockEventsManager{},
-//		grp:         myNet.GetInstance().GetE2EGroup(),
-//		rekeyParams: rekey.GetDefaultParams(),
-//	}
-//
-//	myPrivKey := dh.GeneratePrivateKey(
-//		dh.DefaultPrivateKeyLength, m1.grp, rng)
-//	err := ratchet.New(myKv, myID, myPrivKey, m1.grp)
-//	if err != nil {
-//		t.Errorf("Failed to generate new ratchet: %+v", err)
-//	}
-//
-//	myFpGen := &fpGenerator{m1}
-//	myServices := newMockServices()
-//
-//	m1.Ratchet, err = ratchet.Load(
-//		myKv, myID, m1.grp, myFpGen, myServices, streamGen)
-//
-//	// Generate new E2E manager
-//	partnerKv := versioned.NewKV(ekv.MakeMemstore())
-//	partnerID := id.NewIdFromString("partnerID", id.User, t)
-//	partnerNet := newMockCmix(partnerID, netHandler, t)
-//	m2 := &manager{
-//		Switchboard: receive.New(),
-//		partitioner: parse.NewPartitioner(partnerKv, partnerNet.GetMaxMessageLength()),
-//		net:         partnerNet,
-//		myID:        partnerID,
-//		events:      mockEventsManager{},
-//		grp:         partnerNet.GetInstance().GetE2EGroup(),
-//		rekeyParams: rekey.GetDefaultParams(),
-//	}
-//
-//	receiveChan := make(chan receive.Message, 10)
-//	m2.Switchboard.RegisterListener(partnerID, catalog.NoType, &mockListener{receiveChan})
-//
-//	partnerPrivKey := dh.GeneratePrivateKey(
-//		dh.DefaultPrivateKeyLength, m2.grp, rng)
-//	err = ratchet.New(partnerKv, partnerID, partnerPrivKey, m2.grp)
-//	if err != nil {
-//		t.Errorf("Failed to generate new ratchet: %+v", err)
-//	}
-//
-//	partnerFpGen := &fpGenerator{m2}
-//	partnerServices := newMockServices()
-//
-//	m1.Ratchet, err = ratchet.Load(
-//		partnerKv, partnerID, m2.grp, partnerFpGen, partnerServices, streamGen)
-//
-//	// Generate partner identity and add partner
-//	partnerPubKey, partnerSidhPubKey, mySidhPrivKey, sessionParams :=
-//		genPartnerKeys(partnerPrivKey, m1.grp, rng, t)
-//	_, err = m1.Ratchet.AddPartner(partnerID, partnerPubKey, myPrivKey,
-//		partnerSidhPubKey, mySidhPrivKey, sessionParams, sessionParams)
-//	if err != nil {
-//		t.Errorf("Failed to add partner: %+v", err)
-//	}
-//
-//	payload := []byte("My Payload")
-//	p := GetDefaultParams()
-//
-//
-//	_, _, err = m1.sendUnsafe(catalog.NoType, partnerID, payload, p)
-//	if err != nil {
-//		t.Fatalf("sendUnsafe error: %v", err)
-//	}
-//}
+import (
+	"gitlab.com/elixxir/client/catalog"
+	"gitlab.com/elixxir/client/e2e/parse"
+	"gitlab.com/elixxir/client/e2e/ratchet"
+	"gitlab.com/elixxir/client/e2e/receive"
+	"gitlab.com/elixxir/client/e2e/rekey"
+	"gitlab.com/elixxir/client/storage/versioned"
+	dh "gitlab.com/elixxir/crypto/diffieHellman"
+	"gitlab.com/elixxir/crypto/fastRNG"
+	"gitlab.com/elixxir/ekv"
+	"gitlab.com/xx_network/crypto/csprng"
+	"gitlab.com/xx_network/primitives/id"
+	"testing"
+)
+
+func TestManager_SendUnsafe(t *testing.T) {
+	streamGen := fastRNG.NewStreamGenerator(12,
+		1024, csprng.NewSystemRNG)
+	rng := streamGen.GetStream()
+	defer rng.Close()
+	netHandler := newMockCmixHandler()
+
+	// Generate new E2E manager
+	myKv := versioned.NewKV(ekv.MakeMemstore())
+	myID := id.NewIdFromString("myID", id.User, t)
+	myNet := newMockCmix(myID, netHandler, t)
+	m1 := &manager{
+		Switchboard: receive.New(),
+		partitioner: parse.NewPartitioner(myKv, myNet.GetMaxMessageLength()),
+		net:         myNet,
+		myID:        myID,
+		events:      mockEventsManager{},
+		grp:         myNet.GetInstance().GetE2EGroup(),
+		rekeyParams: rekey.GetDefaultParams(),
+	}
+
+	myPrivKey := dh.GeneratePrivateKey(
+		dh.DefaultPrivateKeyLength, m1.grp, rng)
+	err := ratchet.New(myKv, myID, myPrivKey, m1.grp)
+	if err != nil {
+		t.Errorf("Failed to generate new ratchet: %+v", err)
+	}
+
+	myFpGen := &fpGenerator{m1}
+	myServices := newMockServices()
+
+	m1.Ratchet, err = ratchet.Load(
+		myKv, myID, m1.grp, myFpGen, myServices, streamGen)
+
+	// Generate new E2E manager
+	partnerKv := versioned.NewKV(ekv.MakeMemstore())
+	partnerID := id.NewIdFromString("partnerID", id.User, t)
+	partnerNet := newMockCmix(partnerID, netHandler, t)
+	m2 := &manager{
+		Switchboard: receive.New(),
+		partitioner: parse.NewPartitioner(partnerKv, partnerNet.GetMaxMessageLength()),
+		net:         partnerNet,
+		myID:        partnerID,
+		events:      mockEventsManager{},
+		grp:         partnerNet.GetInstance().GetE2EGroup(),
+		rekeyParams: rekey.GetDefaultParams(),
+	}
+
+	receiveChan := make(chan receive.Message, 10)
+	m2.Switchboard.RegisterListener(myID, catalog.NoType, &mockListener{receiveChan})
+
+	partnerPrivKey := dh.GeneratePrivateKey(
+		dh.DefaultPrivateKeyLength, m2.grp, rng)
+	err = ratchet.New(partnerKv, partnerID, partnerPrivKey, m2.grp)
+	if err != nil {
+		t.Errorf("Failed to generate new ratchet: %+v", err)
+	}
+
+	partnerFpGen := &fpGenerator{m2}
+	partnerServices := newMockServices()
+
+	m1.Ratchet, err = ratchet.Load(
+		partnerKv, partnerID, m2.grp, partnerFpGen, partnerServices, streamGen)
+
+	m1.EnableUnsafeReception()
+	m2.EnableUnsafeReception()
+
+	// Generate partner identity and add partner
+	partnerPubKey, partnerSidhPubKey, mySidhPrivKey, sessionParams :=
+		genPartnerKeys(partnerPrivKey, m1.grp, rng, t)
+	_, err = m1.Ratchet.AddPartner(partnerID, partnerPubKey, myPrivKey,
+		partnerSidhPubKey, mySidhPrivKey, sessionParams, sessionParams)
+	if err != nil {
+		t.Errorf("Failed to add partner: %+v", err)
+	}
+
+	payload := []byte("My Payload")
+	p := GetDefaultParams()
+
+	_, _, err = m1.sendUnsafe(catalog.NoType, partnerID, payload, p)
+	if err != nil {
+		t.Fatalf("sendUnsafe error: %v", err)
+	}
+}
diff --git a/e2e/utils_test.go b/e2e/utils_test.go
index 32a3d986b7a6c462d2636e79d73524356d574cab..0f84f037f132416f8ad0eb75d7faa9414cbde869 100644
--- a/e2e/utils_test.go
+++ b/e2e/utils_test.go
@@ -126,12 +126,14 @@ func (m *mockServices) DeleteService(
 
 type mockCmixHandler struct {
 	processorMap map[format.Fingerprint]message.Processor
+	serviceMap   map[string]message.Processor
 	sync.Mutex
 }
 
 func newMockCmixHandler() *mockCmixHandler {
 	return &mockCmixHandler{
 		processorMap: make(map[format.Fingerprint]message.Processor),
+		serviceMap:   make(map[string]message.Processor),
 	}
 }
 
@@ -172,7 +174,7 @@ func (m *mockCmix) GetMaxMessageLength() int {
 	return msg.ContentsSize()
 }
 
-func (m *mockCmix) Send(_ *id.ID, fp format.Fingerprint, _ message.Service,
+func (m *mockCmix) Send(_ *id.ID, fp format.Fingerprint, srv message.Service,
 	payload, mac []byte, _ cmix.CMIXParams) (id.Round, ephemeral.Id, error) {
 	m.handler.Lock()
 	defer m.handler.Unlock()
@@ -182,16 +184,20 @@ func (m *mockCmix) Send(_ *id.ID, fp format.Fingerprint, _ message.Service,
 	msg.SetMac(mac)
 	msg.SetKeyFP(fp)
 
-	if m.handler.processorMap[fp] == nil {
-		m.t.Errorf("No processor found for fingerprint %s", fp)
-		return 0, ephemeral.Id{},
-			errors.Errorf("No processor found for fingerprint %s", fp)
+	if m.handler.processorMap[fp] != nil {
+		m.handler.processorMap[fp].Process(
+			msg, receptionID.EphemeralIdentity{}, rounds.Round{})
+		return 0, ephemeral.Id{}, nil
+	} else if m.handler.serviceMap[srv.Tag] != nil {
+		m.handler.serviceMap[srv.Tag].Process(
+			msg, receptionID.EphemeralIdentity{}, rounds.Round{})
+		return 0, ephemeral.Id{}, nil
 	}
 
-	m.handler.processorMap[fp].Process(
-		msg, receptionID.EphemeralIdentity{}, rounds.Round{})
+	m.t.Errorf("No processor found for fingerprint %s", fp)
+	return 0, ephemeral.Id{},
+		errors.Errorf("No processor found for fingerprint %s", fp)
 
-	return 0, ephemeral.Id{}, nil
 }
 
 func (m *mockCmix) SendMany([]cmix.TargetedCmixMessage, cmix.CMIXParams) (id.Round, []ephemeral.Id, error) {
@@ -214,8 +220,14 @@ func (m *mockCmix) DeleteFingerprint(_ *id.ID, fp format.Fingerprint) {
 	m.handler.Unlock()
 }
 
+func (m *mockCmix) AddService(myId *id.ID, srv message.Service, proc message.Processor) {
+	m.handler.Lock()
+	m.handler.serviceMap[srv.Tag] = proc
+	m.handler.Unlock()
+
+}
+
 func (m *mockCmix) DeleteClientFingerprints(*id.ID)                          {}
-func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor)    {}
 func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor) {}
 func (m *mockCmix) DeleteClientService(*id.ID)                               {}
 func (m *mockCmix) TrackServices(message.ServicesTracker)                    {}