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..9e2a31355679f087b52a21133095bdd49fd271f7 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,11 +242,11 @@ 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) {
+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) GetPartner(partnerID *id.ID) (*partner.Manager, error) {
+func (tnm *testE2eManager) GetPartner(partnerID *id.ID) (partner.Manager, error) {
 	panic("implement me")
 }