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 d1459191cf165ebaeb2e2248105097a57e3ece1c..5c4ef051440672031304602f192b38430c6fafe4 100644
--- a/e2e/parse/firstMessagePart_test.go
+++ b/e2e/parse/firstMessagePart_test.go
@@ -41,7 +41,7 @@ func Test_newFirstMessagePart(t *testing.T) {
 		1077,
 		2,
 		time.Unix(1609786229, 0).UTC(),
-		[]byte{'t', 'e', 's', 't', 'i', 'n', 'g', 's', 't', 'r', 'i', 'n', 'g'},
+		[]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 93c1bb83df372fcd456822bf7b984d8bb47ff937..adede5571164836de7c493f045767f03315eea9a 100644
--- a/e2e/parse/messagePart_test.go
+++ b/e2e/parse/messagePart_test.go
@@ -26,7 +26,7 @@ var expectedMP = messagePart{
 
 // Tests that a new function part is successfully created.
 func Test_newMessagePart(t *testing.T) {
-	goTmp := newMessagePart(32, 6, []byte{'t', 'e', 's', 't', 'i', 'n', 'g'})
+	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 e8440ef1a6f62b34ec4ef6a7378c56218157a88c..71b5338a16b9aa5b261b3368d5384dc51e02c970 100644
--- a/e2e/parse/partition_test.go
+++ b/e2e/parse/partition_test.go
@@ -69,7 +69,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(ekv.MakeMemstore()), len(ipsumTestStr))
-	m := newMessagePart(1107, 1, []byte(ipsumTestStr))
+	m := newMessagePart(1107, 1, []byte(ipsumTestStr), len(ipsumTestStr)+headerLen)
 
 	_, _ = p.HandlePartition(
 		&id.DummyUser,
@@ -82,7 +82,7 @@ func TestPartitioner_HandlePartition(t *testing.T) {
 func TestPartitioner_HandleFirstPartition(t *testing.T) {
 	p := NewPartitioner(versioned.NewKV(ekv.MakeMemstore()), len(ipsumTestStr))
 	m := newFirstMessagePart(
-		catalog.XxMessage, 1107, 1, netTime.Now(), []byte(ipsumTestStr))
+		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 ab8fac2b8ab44201c0dfa29f168a6768a6dc7150..d30e6e15f9c2f6e8673e2f790c83199045d0c9c2 100644
--- a/e2e/sendUnsafe_test.go
+++ b/e2e/sendUnsafe_test.go
@@ -23,7 +23,8 @@ import (
 )
 
 func TestManager_SendUnsafe(t *testing.T) {
-	streamGen := fastRNG.NewStreamGenerator(12, 1024, csprng.NewSystemRNG)
+	streamGen := fastRNG.NewStreamGenerator(12,
+		1024, csprng.NewSystemRNG)
 	rng := streamGen.GetStream()
 	defer rng.Close()
 	netHandler := newMockCmixHandler()
@@ -70,7 +71,7 @@ func TestManager_SendUnsafe(t *testing.T) {
 	}
 
 	receiveChan := make(chan receive.Message, 10)
-	m2.Switchboard.RegisterListener(partnerID, catalog.NoType, &mockListener{receiveChan})
+	m2.Switchboard.RegisterListener(myID, catalog.NoType, &mockListener{receiveChan})
 
 	partnerPrivKey := dh.GeneratePrivateKey(
 		dh.DefaultPrivateKeyLength, m2.grp, rng)
@@ -85,6 +86,9 @@ func TestManager_SendUnsafe(t *testing.T) {
 	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)
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)                    {}