diff --git a/network/message/inProgress_test.go b/network/message/inProgress_test.go
index f40c3f4dc2dded5ca5301e0fb5ec9d5c976c666d..23699830c8654ae431681a8d3ef7bd290483ced5 100644
--- a/network/message/inProgress_test.go
+++ b/network/message/inProgress_test.go
@@ -1,26 +1,19 @@
 package message
 
 import (
-	"encoding/binary"
-	"github.com/cloudflare/circl/dh/sidh"
 	jww "github.com/spf13/jwalterweatherman"
+	"gitlab.com/elixxir/client/interfaces"
 	"gitlab.com/elixxir/client/interfaces/message"
 	"gitlab.com/elixxir/client/interfaces/params"
 	"gitlab.com/elixxir/client/network/gateway"
-	"gitlab.com/elixxir/client/network/internal"
 	"gitlab.com/elixxir/client/stoppable"
 	"gitlab.com/elixxir/client/storage"
-	"gitlab.com/elixxir/client/storage/edge"
-	util "gitlab.com/elixxir/client/storage/utility"
-	"gitlab.com/elixxir/client/switchboard"
-	"gitlab.com/elixxir/comms/client"
+	pb "gitlab.com/elixxir/comms/mixmessages"
 	"gitlab.com/elixxir/crypto/fastRNG"
-	"gitlab.com/elixxir/crypto/fingerprint"
 	"gitlab.com/elixxir/primitives/format"
 	"gitlab.com/xx_network/comms/connect"
 	"gitlab.com/xx_network/crypto/csprng"
-	"gitlab.com/xx_network/primitives/netTime"
-	"math/rand"
+	"gitlab.com/xx_network/primitives/id"
 	"os"
 	"testing"
 	"time"
@@ -46,123 +39,122 @@ func (l TestListener) Name() string {
 	return "TEST LISTENER FOR GARBLED MESSAGES"
 }
 
-func TestManager_CheckGarbledMessages(t *testing.T) {
-	sess1 := storage.InitTestingSession(t)
+func Test_pickup_CheckInProgressMessages(t *testing.T) {
+	sess := storage.InitTestingSession(t)
+	rngGen := fastRNG.NewStreamGenerator(1, 1, csprng.NewSystemRNG)
 
-	sess2 := storage.InitTestingSession(t)
-
-	sw := switchboard.New()
-	l := TestListener{
-		ch: make(chan bool),
-	}
-	sw.RegisterListener(sess2.GetUser().TransmissionID, message.Raw, l)
-	comms, err := client.NewClientComms(sess1.GetUser().TransmissionID, nil, nil, nil)
-	if err != nil {
-		t.Errorf("Failed to start client comms: %+v", err)
-	}
-	i := internal.Internal{
-		Session:          sess1,
-		Switchboard:      sw,
-		Comms:            comms,
-		Health:           nil,
-		TransmissionID:   sess1.GetUser().TransmissionID,
-		Instance:         nil,
-		NodeRegistration: nil,
-	}
-	p := gateway.DefaultPoolParams()
-	p.MaxPoolSize = 1
-	sender, err := gateway.NewSender(p, i.Rng, getNDF(), &MockSendCMIXComms{t: t}, i.Session, nil)
+	poolParams := gateway.DefaultPoolParams()
+	poolParams.MaxPoolSize = 1
+	sender, err := gateway.NewSender(
+		poolParams, rngGen, getNDF(), &MockSendCMIXComms{t}, sess, nil)
 	if err != nil {
-		t.Errorf(err.Error())
+		t.Errorf("Failed to make new sender: %+v", err)
 	}
-	m := NewPickup(i, params.Network{Messages: params.Messages{
+	newPickup := NewPickup(params.Network{Messages: params.Messages{
 		MessageReceptionBuffLen:        20,
 		MessageReceptionWorkerPoolSize: 20,
 		MaxChecksInProcessMessage:      20,
 		InProcessMessageWait:           time.Hour,
-	}}, nil, sender)
-
-	rng := csprng.NewSystemRNG()
-	partnerSIDHPrivKey := util.NewSIDHPrivateKey(sidh.KeyVariantSidhA)
-	partnerSIDHPubKey := util.NewSIDHPublicKey(sidh.KeyVariantSidhA)
-	partnerSIDHPrivKey.Generate(rng)
-	partnerSIDHPrivKey.GeneratePublicKey(partnerSIDHPubKey)
-	mySIDHPrivKey := util.NewSIDHPrivateKey(sidh.KeyVariantSidhB)
-	mySIDHPubKey := util.NewSIDHPublicKey(sidh.KeyVariantSidhB)
-	mySIDHPrivKey.Generate(rng)
-	mySIDHPrivKey.GeneratePublicKey(mySIDHPubKey)
-
-	e2ekv := i.Session.E2e()
-	err = e2ekv.AddPartner(sess2.GetUser().TransmissionID,
-		sess2.E2e().GetDHPublicKey(), e2ekv.GetDHPrivateKey(),
-		partnerSIDHPubKey, mySIDHPrivKey,
-		params.GetDefaultE2ESessionParams(),
-		params.GetDefaultE2ESessionParams())
+	}}, sender, sess, nil)
+	p := newPickup.(*pickup)
+
+	// rng := csprng.NewSystemRNG()
+	// partnerSIDHPrivKey := util.NewSIDHPrivateKey(sidh.KeyVariantSidhA)
+	// partnerSIDHPubKey := util.NewSIDHPublicKey(sidh.KeyVariantSidhA)
+	// partnerSIDHPrivKey.Generate(rng)
+	// partnerSIDHPrivKey.GeneratePublicKey(partnerSIDHPubKey)
+	// mySIDHPrivKey := util.NewSIDHPrivateKey(sidh.KeyVariantSidhB)
+	// mySIDHPubKey := util.NewSIDHPublicKey(sidh.KeyVariantSidhB)
+	// mySIDHPrivKey.Generate(rng)
+	// mySIDHPrivKey.GeneratePublicKey(mySIDHPubKey)
+	//
+	// e2ekv := i.Session.E2e()
+	// err = e2ekv.AddPartner(sess2.GetUser().TransmissionID,
+	// 	sess2.E2e().GetDHPublicKey(), e2ekv.GetDHPrivateKey(),
+	// 	partnerSIDHPubKey, mySIDHPrivKey,
+	// 	params.GetDefaultE2ESessionParams(),
+	// 	params.GetDefaultE2ESessionParams())
+	// if err != nil {
+	// 	t.Errorf("Failed to add e2e partner: %+v", err)
+	// 	t.FailNow()
+	// }
+	//
+	// preimage := edge.Preimage{
+	// 	Data:   []byte{0},
+	// 	Type:   "test",
+	// 	Source: nil,
+	// }
+	// p.Session.GetEdge().Add(preimage, sess2.GetUser().ReceptionID)
+	//
+	// err = sess2.E2e().AddPartner(sess.GetUser().TransmissionID,
+	// 	sess.E2e().GetDHPublicKey(), sess2.E2e().GetDHPrivateKey(),
+	// 	mySIDHPubKey, partnerSIDHPrivKey,
+	// 	params.GetDefaultE2ESessionParams(),
+	// 	params.GetDefaultE2ESessionParams())
+	// if err != nil {
+	// 	t.Errorf("Failed to add e2e partner: %+v", err)
+	// 	t.FailNow()
+	// }
+	// partner1, err := sess2.E2e().GetPartner(sess.GetUser().ReceptionID)
+	// if err != nil {
+	// 	t.Errorf("Failed to get partner: %+v", err)
+	// 	t.FailNow()
+	// }
+
+	// msg := format.NewMessage(format.MinimumPrimeSize)
+	//
+	// key, err := partner1.GetKeyForSending(params.Standard)
+	// if err != nil {
+	// 	t.Errorf("failed to get key: %+v", err)
+	// 	t.FailNow()
+	// }
+	//
+	// contents := make([]byte, msg.ContentsSize())
+	// prng := rand.New(rand.NewSource(42))
+	// prng.Read(contents)
+	// contents[len(contents)-1] = 0
+	// fmp := parse.FirstMessagePartFromBytes(contents)
+	// binary.BigEndian.PutUint32(fmp.Type, message.Raw)
+	// fmp.NumParts[0] = uint8(1)
+	// binary.BigEndian.PutUint16(fmp.Len, 256)
+	// fmp.Part[0] = 0
+	// ts, err := netTime.Now().MarshalBinary()
+	// if err != nil {
+	// 	t.Errorf("failed to martial ts: %+v", err)
+	// }
+	// copy(fmp.Timestamp, ts)
+	// msg.SetContents(fmp.Bytes())
+	// encryptedMsg := key.Encrypt(msg)
+	// msg.SetIdentityFP(fingerprint.IdentityFP(msg.GetContents(), preimage.Data))
+	// i.Session.GetGarbledMessages().Add(encryptedMsg)
+
+	msg := makeTestFormatMessages(1)[0]
+
+	cid := id.NewIdFromString("clientID", id.User, t)
+	fp := format.NewFingerprint([]byte("test"))
+	mp := NewMockMsgProcessor(t)
+	err = p.AddFingerprint(cid, fp, mp)
 	if err != nil {
-		t.Errorf("Failed to add e2e partner: %+v", err)
-		t.FailNow()
-	}
-
-	preimage := edge.Preimage{
-		Data:   []byte{0},
-		Type:   "test",
-		Source: nil,
+		t.Errorf("Failed to add fingerprint: %+v", err)
 	}
-	m.Session.GetEdge().Add(preimage, sess2.GetUser().ReceptionID)
-
-	err = sess2.E2e().AddPartner(sess1.GetUser().TransmissionID,
-		sess1.E2e().GetDHPublicKey(), sess2.E2e().GetDHPrivateKey(),
-		mySIDHPubKey, partnerSIDHPrivKey,
-		params.GetDefaultE2ESessionParams(),
-		params.GetDefaultE2ESessionParams())
-	if err != nil {
-		t.Errorf("Failed to add e2e partner: %+v", err)
-		t.FailNow()
-	}
-	partner1, err := sess2.E2e().GetPartner(sess1.GetUser().ReceptionID)
-	if err != nil {
-		t.Errorf("Failed to get partner: %+v", err)
-		t.FailNow()
-	}
-
-	msg := format.NewMessage(m.Session.Cmix().GetGroup().GetP().ByteLen())
-
-	key, err := partner1.GetKeyForSending(params.Standard)
-	if err != nil {
-		t.Errorf("failed to get key: %+v", err)
-		t.FailNow()
-	}
-
-	contents := make([]byte, msg.ContentsSize())
-	prng := rand.New(rand.NewSource(42))
-	prng.Read(contents)
-	contents[len(contents)-1] = 0
-	fmp := parse.FirstMessagePartFromBytes(contents)
-	binary.BigEndian.PutUint32(fmp.Type, uint32(message.Raw))
-	fmp.NumParts[0] = uint8(1)
-	binary.BigEndian.PutUint16(fmp.Len, 256)
-	fmp.Part[0] = 0
-	ts, err := netTime.Now().MarshalBinary()
-	if err != nil {
-		t.Errorf("failed to martial ts: %+v", err)
-	}
-	copy(fmp.Timestamp, ts)
-	msg.SetContents(fmp.Bytes())
-	encryptedMsg := key.Encrypt(msg)
-	msg.SetIdentityFP(fingerprint.IdentityFP(msg.GetContents(), preimage.Data))
-	i.Session.GetGarbledMessages().Add(encryptedMsg)
+	p.inProcess.Add(msg,
+		&pb.RoundInfo{ID: 1, Timestamps: []uint64{0, 1, 2, 3}},
+		interfaces.Identity{Source: cid})
 
 	stop := stoppable.NewSingle("stop")
-	go m.processGarbledMessages(stop)
+	go p.recheckInProgressRunner(stop)
 
-	m.CheckGarbledMessages()
+	p.CheckInProgressMessages()
 
-	ticker := time.NewTicker(time.Second)
 	select {
-	case <-ticker.C:
+	case <-time.After(1000 * time.Millisecond):
 		t.Error("Didn't hear anything")
-	case <-l.ch:
+	case <-p.messageReception:
 		t.Log("Heard something")
 	}
 
+	err = stop.Close()
+	if err != nil {
+		t.Errorf("Failed to close stoppable: %+v", err)
+	}
 }
diff --git a/network/message/meteredCmixMessageBuffer_test.go b/network/message/meteredCmixMessageBuffer_test.go
index 6cb697143d4a60f0989f0b92dada0eac71fce1fc..6e5b6046b45767537bd4ab85585ce0060435680a 100644
--- a/network/message/meteredCmixMessageBuffer_test.go
+++ b/network/message/meteredCmixMessageBuffer_test.go
@@ -135,10 +135,12 @@ func Test_meteredCmixMessageHandler_Smoke(t *testing.T) {
 	}
 
 	// AddFingerprint two messages
-	mcmb.Add(testMsgs[0], &pb.RoundInfo{ID: 1, Timestamps: []uint64{0, 1, 2, 3}}, interfaces.Identity{
-		Source: id.NewIdFromString("user1", id.User, t)})
-	mcmb.Add(testMsgs[1], &pb.RoundInfo{ID: 2, Timestamps: []uint64{0, 1, 2, 3}}, interfaces.Identity{
-		Source: id.NewIdFromString("user2", id.User, t)})
+	mcmb.Add(testMsgs[0],
+		&pb.RoundInfo{ID: 1, Timestamps: []uint64{0, 1, 2, 3}},
+		interfaces.Identity{Source: id.NewIdFromString("user1", id.User, t)})
+	mcmb.Add(testMsgs[1],
+		&pb.RoundInfo{ID: 2, Timestamps: []uint64{0, 1, 2, 3}},
+		interfaces.Identity{Source: id.NewIdFromString("user2", id.User, t)})
 
 	msg, ri, identity, exists := mcmb.Next()
 	if !exists {