diff --git a/groupChat/makeGroup.go b/groupChat/makeGroup.go
index 65fb48a66deffbbbd9c70713fcf377dfe6d14a3e..d8f6dd8c32d3f01c97724d497c6b3beafcc44ee0 100644
--- a/groupChat/makeGroup.go
+++ b/groupChat/makeGroup.go
@@ -118,7 +118,7 @@ func (m Manager) buildMembership(members []*id.ID) (group.Membership,
 	contacts := make([]contact.Contact, len(members))
 	var err error
 	for i, uid := range members {
-		partner, err := m.e2e.GetPartner(uid, m.receptionId)
+		partner, err := m.e2e.GetPartner(uid)
 		if err != nil {
 			return nil, nil, errors.Errorf(getPartnerErr, uid, err)
 		}
diff --git a/groupChat/makeGroup_test.go b/groupChat/makeGroup_test.go
index 274505b1d47e19c5f589006f3db646c4d05da5c5..eb0676859a739945e6dd2821a97ac4d31da64586 100644
--- a/groupChat/makeGroup_test.go
+++ b/groupChat/makeGroup_test.go
@@ -312,7 +312,7 @@ func addPartners(m *Manager, t *testing.T) ([]*id.ID, group.Membership,
 			m.grp)
 
 		// Add partner
-		_, err := m.e2e.AddPartner(m.receptionId, uid, dhKey, dhKey,
+		_, err := m.e2e.AddPartner(uid, dhKey, dhKey,
 			theirSIDHPubKey, mySIDHPrivKey,
 			session.GetDefaultParams(),
 			session.GetDefaultParams())
diff --git a/groupChat/receiveRequest_test.go b/groupChat/receiveRequest_test.go
index e39bbebbeac999409ddfe8fc20e6f3e30957f1bc..265309f6e92fe1057e495143029550b4f9360325 100644
--- a/groupChat/receiveRequest_test.go
+++ b/groupChat/receiveRequest_test.go
@@ -10,10 +10,10 @@ package groupChat
 import (
 	"github.com/cloudflare/circl/dh/sidh"
 	"github.com/golang/protobuf/proto"
-	"gitlab.com/elixxir/client/cmix"
+	"gitlab.com/elixxir/client/catalog"
 	"gitlab.com/elixxir/client/e2e/ratchet/partner/session"
+	"gitlab.com/elixxir/client/e2e/receive"
 	gs "gitlab.com/elixxir/client/groupChat/groupStore"
-	"gitlab.com/elixxir/client/stoppable"
 	util "gitlab.com/elixxir/client/storage/utility"
 	"math/rand"
 	"reflect"
@@ -23,7 +23,7 @@ import (
 )
 
 // Tests that the correct group is received from the request.
-func TestManager_receiveRequest(t *testing.T) {
+func TestRequestListener_Hear(t *testing.T) {
 	prng := rand.New(rand.NewSource(42))
 	requestChan := make(chan gs.Group)
 	requestFunc := func(g gs.Group) { requestChan <- g }
@@ -44,11 +44,12 @@ func TestManager_receiveRequest(t *testing.T) {
 		t.Errorf("Failed to marshal proto message: %+v", err)
 	}
 
-	msg := cmix.TargetedCmixMessage{
+	msg := receive.Message{
 		Sender:      g.Members[0].ID,
 		Payload:     requestMarshaled,
-		MessageType: message.GroupCreationRequest,
+		MessageType: catalog.GroupCreationRequest,
 	}
+	listener := requestListener{m: m}
 
 	myVariant := sidh.KeyVariantSidhA
 	mySIDHPrivKey := util.NewSIDHPrivateKey(myVariant)
@@ -71,10 +72,7 @@ func TestManager_receiveRequest(t *testing.T) {
 		session.GetDefaultParams(),
 	)
 
-	rawMessages := make(chan message.Receive)
-	quit := stoppable.NewSingle("groupReceiveRequestTestStoppable")
-	go m.receiveRequest(rawMessages, quit)
-	rawMessages <- msg
+	go listener.Hear(msg)
 
 	select {
 	case receivedGrp := <-requestChan:
@@ -89,7 +87,7 @@ func TestManager_receiveRequest(t *testing.T) {
 
 // Tests that the callback is not called when the group already exists in the
 // manager.
-func TestManager_receiveRequest_GroupExists(t *testing.T) {
+func TestRequestListener_Hear_GroupExists(t *testing.T) {
 	prng := rand.New(rand.NewSource(42))
 	requestChan := make(chan gs.Group)
 	requestFunc := func(g gs.Group) { requestChan <- g }
@@ -106,15 +104,14 @@ func TestManager_receiveRequest_GroupExists(t *testing.T) {
 		t.Errorf("Failed to marshal proto message: %+v", err)
 	}
 
-	msg := message.Receive{
+	listener := requestListener{m: m}
+
+	msg := receive.Message{
 		Payload:     requestMarshaled,
-		MessageType: message.GroupCreationRequest,
+		MessageType: catalog.GroupCreationRequest,
 	}
 
-	rawMessages := make(chan message.Receive)
-	stop := stoppable.NewSingle("testStoppable")
-	go m.receiveRequest(rawMessages, stop)
-	rawMessages <- msg
+	go listener.Hear(msg)
 
 	select {
 	case <-requestChan:
@@ -124,47 +121,21 @@ func TestManager_receiveRequest_GroupExists(t *testing.T) {
 	}
 }
 
-// Tests that the quit channel quits the worker.
-func TestManager_receiveRequest_QuitChan(t *testing.T) {
-	prng := rand.New(rand.NewSource(42))
-	requestChan := make(chan gs.Group)
-	requestFunc := func(g gs.Group) { requestChan <- g }
-	m, _ := newTestManagerWithStore(prng, 10, 0, requestFunc, nil, t)
-
-	rawMessages := make(chan message.Receive)
-	stop := stoppable.NewSingle("testStoppable")
-	done := make(chan struct{})
-	go func() {
-		m.receiveRequest(rawMessages, stop)
-		done <- struct{}{}
-	}()
-	if err := stop.Close(); err != nil {
-		t.Errorf("Failed to signal close to process: %+v", err)
-	}
-
-	select {
-	case <-done:
-	case <-time.NewTimer(5 * time.Millisecond).C:
-		t.Error("receiveRequest() failed to close when the quit.")
-	}
-}
-
 // Tests that the callback is not called when the send message is not of the
 // correct type.
-func TestManager_receiveRequest_SendMessageTypeError(t *testing.T) {
+func TestRequestListener_Hear_BadMessageType(t *testing.T) {
 	prng := rand.New(rand.NewSource(42))
 	requestChan := make(chan gs.Group)
 	requestFunc := func(g gs.Group) { requestChan <- g }
 	m, _ := newTestManagerWithStore(prng, 10, 0, requestFunc, nil, t)
 
-	msg := message.Receive{
-		MessageType: message.NoType,
+	msg := receive.Message{
+		MessageType: catalog.NoType,
 	}
 
-	rawMessages := make(chan message.Receive)
-	stop := stoppable.NewSingle("singleStoppable")
-	go m.receiveRequest(rawMessages, stop)
-	rawMessages <- msg
+	listener := requestListener{m: m}
+
+	go listener.Hear(msg)
 
 	select {
 	case receivedGrp := <-requestChan:
@@ -212,9 +183,9 @@ func TestManager_readRequest(t *testing.T) {
 		t.Errorf("Failed to marshal proto message: %+v", err)
 	}
 
-	msg := message.Receive{
+	msg := receive.Message{
 		Payload:     requestMarshaled,
-		MessageType: message.GroupCreationRequest,
+		MessageType: catalog.GroupCreationRequest,
 	}
 
 	newGrp, err := m.readRequest(msg)
@@ -232,8 +203,8 @@ func TestManager_readRequest(t *testing.T) {
 func TestManager_readRequest_MessageTypeError(t *testing.T) {
 	m, _ := newTestManager(rand.New(rand.NewSource(42)), t)
 	expectedErr := sendMessageTypeErr
-	msg := message.Receive{
-		MessageType: message.NoType,
+	msg := receive.Message{
+		MessageType: catalog.NoType,
 	}
 
 	_, err := m.readRequest(msg)
@@ -255,9 +226,9 @@ func TestManager_readRequest_ProtoUnmarshalError(t *testing.T) {
 		t.Errorf("Failed to marshal proto message: %+v", err)
 	}
 
-	msg := message.Receive{
+	msg := receive.Message{
 		Payload:     requestMarshaled,
-		MessageType: message.GroupCreationRequest,
+		MessageType: catalog.GroupCreationRequest,
 	}
 
 	_, err = m.readRequest(msg)
@@ -271,9 +242,9 @@ func TestManager_readRequest_ProtoUnmarshalError(t *testing.T) {
 func TestManager_readRequest_DeserializeMembershipError(t *testing.T) {
 	m, _ := newTestManager(rand.New(rand.NewSource(42)), t)
 	expectedErr := strings.SplitN(protoUnmarshalErr, "%", 2)[0]
-	msg := message.Receive{
+	msg := receive.Message{
 		Payload:     []byte("Invalid message."),
-		MessageType: message.GroupCreationRequest,
+		MessageType: catalog.GroupCreationRequest,
 	}
 
 	_, err := m.readRequest(msg)
diff --git a/groupChat/utils_test.go b/groupChat/utils_test.go
index efa002ebef24db9516325115dee171da848da1d8..e8e4ee7d84f271a980d5894ca0c46906914e55b8 100644
--- a/groupChat/utils_test.go
+++ b/groupChat/utils_test.go
@@ -14,9 +14,9 @@ import (
 	"gitlab.com/elixxir/client/catalog"
 	"gitlab.com/elixxir/client/cmix"
 	"gitlab.com/elixxir/client/cmix/gateway"
-	"gitlab.com/elixxir/client/cmix/rounds"
 	"gitlab.com/elixxir/client/cmix/identity"
 	"gitlab.com/elixxir/client/cmix/message"
+	"gitlab.com/elixxir/client/cmix/rounds"
 	clientE2E "gitlab.com/elixxir/client/e2e"
 	"gitlab.com/elixxir/client/e2e/ratchet/partner"
 	"gitlab.com/elixxir/client/e2e/ratchet/partner/session"
@@ -242,12 +242,12 @@ type testE2eMessage struct {
 	Payload   []byte
 }
 
-func (tnm *testE2eManager) AddPartner(partnerID *id.ID, partnerPubKey, myPrivKey *cyclic.Int, partnerSIDHPubKey *sidh.PublicKey, mySIDHPrivKey *sidh.PrivateKey, sendParams, receiveParams session.Params) (*partner.Manager, error) {
-	panic("implement me")
+func (tnm *testE2eManager) AddPartner(partnerID *id.ID, partnerPubKey, myPrivKey *cyclic.Int, partnerSIDHPubKey *sidh.PublicKey, mySIDHPrivKey *sidh.PrivateKey, sendParams, receiveParams session.Params) (partner.Manager, error) {
+	return nil, nil
 }
 
-func (tnm *testE2eManager) GetPartner(partnerID *id.ID) (*partner.Manager, error) {
-	panic("implement me")
+func (tnm *testE2eManager) GetPartner(partnerID *id.ID) (partner.Manager, error) {
+	return nil, nil
 }
 
 func (tnm *testE2eManager) DeletePartner(partnerId *id.ID) error {