diff --git a/fileTransfer2/e2e/manager.go b/fileTransfer2/e2e/manager.go
index e7bdc16435f1d1f3cdaf81e984882a99cb9e7dac..34f886fc5e62704d6d763b678e6b719f9b5e21b4 100644
--- a/fileTransfer2/e2e/manager.go
+++ b/fileTransfer2/e2e/manager.go
@@ -8,26 +8,17 @@
 package e2e
 
 import (
-	"github.com/pkg/errors"
 	"gitlab.com/elixxir/client/catalog"
 	"gitlab.com/elixxir/client/e2e"
 	"gitlab.com/elixxir/client/e2e/receive"
 	ft "gitlab.com/elixxir/client/fileTransfer2"
 	"gitlab.com/elixxir/client/stoppable"
-	"gitlab.com/elixxir/client/storage/versioned"
 	e2eCrypto "gitlab.com/elixxir/crypto/e2e"
-	"gitlab.com/elixxir/crypto/fastRNG"
 	ftCrypto "gitlab.com/elixxir/crypto/fileTransfer"
 	"gitlab.com/xx_network/primitives/id"
 	"time"
 )
 
-// Error messages.
-const (
-	// NewManager
-	errNewFtManager = "cannot create new E2E file transfer manager: %+v"
-)
-
 // Manager handles the sending and receiving of file transfers using E2E
 // messages to inform the recipient of incoming file transfers.
 type Manager struct {
@@ -52,18 +43,11 @@ type E2e interface {
 }
 
 // NewManager generates a new file transfer manager using E2E.
-func NewManager(receiveCB ft.ReceiveCallback, params ft.Params, myID *id.ID,
-	e2e E2e, cmix ft.Cmix, kv *versioned.KV, rng *fastRNG.StreamGenerator) (
-	*Manager, error) {
-
-	ftManager, err := ft.NewManager(params, myID, cmix, kv, rng)
-	if err != nil {
-		return nil, errors.Errorf(errNewFtManager, err)
-	}
-
+func NewManager(receiveCB ft.ReceiveCallback, ft ft.FileTransfer, myID *id.ID,
+	e2e E2e, cmix ft.Cmix) (*Manager, error) {
 	return &Manager{
 		receiveCB: receiveCB,
-		ft:        ftManager,
+		ft:        ft,
 		myID:      myID,
 		cmix:      cmix,
 		e2e:       e2e,
@@ -93,8 +77,8 @@ func (m *Manager) MaxPreviewSize() int {
 	return m.ft.MaxPreviewSize()
 }
 
-func (m *Manager) Send(fileName, fileType string, fileData []byte,
-	recipient *id.ID, retry float32, preview []byte,
+func (m *Manager) Send(recipient *id.ID, fileName, fileType string,
+	fileData []byte, retry float32, preview []byte,
 	progressCB ft.SentProgressCallback, period time.Duration) (
 	*ftCrypto.TransferID, error) {
 
@@ -104,7 +88,7 @@ func (m *Manager) Send(fileName, fileType string, fileData []byte,
 
 	modifiedProgressCB := m.addEndMessageToCallback(progressCB)
 
-	return m.ft.Send(fileName, fileType, fileData, recipient, retry, preview,
+	return m.ft.Send(recipient, fileName, fileType, fileData, retry, preview,
 		modifiedProgressCB, period, sendNew)
 }
 
diff --git a/fileTransfer2/e2e/manager_test.go b/fileTransfer2/e2e/manager_test.go
index 07071609c7066ba205e373078b517481c9c12b65..50c551aa54ad3ebfb8f7dc258e0d917067e47124 100644
--- a/fileTransfer2/e2e/manager_test.go
+++ b/fileTransfer2/e2e/manager_test.go
@@ -61,8 +61,12 @@ func Test_FileTransfer_Smoke(t *testing.T) {
 	e2e1 := newMockE2e(myID1, e2eHandler)
 	e2e1.RegisterListener(
 		myID1, catalog.EndFileTransfer, newMockListener(endE2eChan1))
-	m1, err := NewManager(receiveCB1, params, myID1, e2e1,
-		newMockCmix(myID1, cMixHandler), kv1, rngGen)
+	cmix1 := newMockCmix(myID1, cMixHandler)
+	ftManager1, err := ft.NewManager(params, myID1, cmix1, kv1, rngGen)
+	if err != nil {
+		t.Errorf("Failed to make new file transfer manager: %+v", err)
+	}
+	m1, err := NewManager(receiveCB1, ftManager1, myID1, e2e1, cmix1)
 	if err != nil {
 		t.Errorf("Failed to create new file transfer manager 1: %+v", err)
 	}
@@ -85,8 +89,12 @@ func Test_FileTransfer_Smoke(t *testing.T) {
 	e2e2 := newMockE2e(myID2, e2eHandler)
 	e2e2.RegisterListener(
 		myID2, catalog.EndFileTransfer, newMockListener(endE2eChan2))
-	m2, err := NewManager(receiveCB2, params, myID2, e2e2,
-		newMockCmix(myID2, cMixHandler), kv2, rngGen)
+	cmix2 := newMockCmix(myID1, cMixHandler)
+	ftManager2, err := ft.NewManager(params, myID2, cmix2, kv2, rngGen)
+	if err != nil {
+		t.Errorf("Failed to make new file transfer manager: %+v", err)
+	}
+	m2, err := NewManager(receiveCB2, ftManager2, myID2, e2e2, cmix2)
 	if err != nil {
 		t.Errorf("Failed to create new file transfer manager 2: %+v", err)
 	}
@@ -156,7 +164,7 @@ func Test_FileTransfer_Smoke(t *testing.T) {
 	// Send file
 	sendStart := netTime.Now()
 	tid1, err := m1.Send(
-		fileName, fileType, fileData, myID2, retry, preview, sentProgressCb1, 0)
+		myID2, fileName, fileType, fileData, retry, preview, sentProgressCb1, 0)
 	if err != nil {
 		t.Errorf("Failed to send file: %+v", err)
 	}
diff --git a/fileTransfer2/groupChat/manager.go b/fileTransfer2/groupChat/manager.go
index 47cd7c434f665a91aa6037ab421796965e06f106..49e2381fe9ca8e91fc2ffea26284b267ae9296b5 100644
--- a/fileTransfer2/groupChat/manager.go
+++ b/fileTransfer2/groupChat/manager.go
@@ -12,8 +12,6 @@ import (
 	ft "gitlab.com/elixxir/client/fileTransfer2"
 	"gitlab.com/elixxir/client/groupChat"
 	"gitlab.com/elixxir/client/stoppable"
-	"gitlab.com/elixxir/client/storage/versioned"
-	"gitlab.com/elixxir/crypto/fastRNG"
 	ftCrypto "gitlab.com/elixxir/crypto/fileTransfer"
 	"gitlab.com/elixxir/crypto/group"
 	"gitlab.com/xx_network/primitives/id"
@@ -22,9 +20,6 @@ import (
 
 // Error messages.
 const (
-	// NewManager
-	errNewFtManager = "cannot create new group chat file transfer manager: %+v"
-
 	// Manager.StartProcesses
 	errAddNewService = "failed to add service to receive new group file transfers: %+v"
 )
@@ -47,9 +42,6 @@ type Manager struct {
 
 	// Group chat Manager
 	gc GroupChat
-
-	myID *id.ID
-	cmix ft.Cmix
 }
 
 // GroupChat interface matches a subset of the groupChat.GroupChat methods used
@@ -61,21 +53,12 @@ type GroupChat interface {
 }
 
 // NewManager generates a new file transfer Manager for group chat.
-func NewManager(receiveCB ft.ReceiveCallback, params ft.Params, myID *id.ID,
-	gc GroupChat, cmix ft.Cmix, kv *versioned.KV, rng *fastRNG.StreamGenerator) (
+func NewManager(receiveCB ft.ReceiveCallback, ft ft.FileTransfer, gc GroupChat) (
 	*Manager, error) {
-
-	ftManager, err := ft.NewManager(params, myID, cmix, kv, rng)
-	if err != nil {
-		return nil, errors.Errorf(errNewFtManager, err)
-	}
-
 	return &Manager{
 		receiveCB: receiveCB,
-		ft:        ftManager,
+		ft:        ft,
 		gc:        gc,
-		myID:      myID,
-		cmix:      cmix,
 	}, nil
 }
 
@@ -104,14 +87,15 @@ func (m *Manager) MaxPreviewSize() int {
 	return m.ft.MaxPreviewSize()
 }
 
-func (m *Manager) Send(fileName, fileType string, fileData []byte,
-	recipient *id.ID, retry float32, preview []byte,
-	progressCB ft.SentProgressCallback, period time.Duration) (*ftCrypto.TransferID, error) {
+func (m *Manager) Send(groupID *id.ID, fileName, fileType string,
+	fileData []byte, retry float32, preview []byte,
+	progressCB ft.SentProgressCallback, period time.Duration) (
+	*ftCrypto.TransferID, error) {
 	sendNew := func(info *ft.TransferInfo) error {
-		return sendNewFileTransferMessage(recipient, info, m.gc)
+		return sendNewFileTransferMessage(groupID, info, m.gc)
 	}
 
-	return m.ft.Send(fileName, fileType, fileData, recipient, retry, preview,
+	return m.ft.Send(groupID, fileName, fileType, fileData, retry, preview,
 		progressCB, period, sendNew)
 }
 
diff --git a/fileTransfer2/groupChat/manager_test.go b/fileTransfer2/groupChat/manager_test.go
index 925fe764ca1d17547cf7ad7e7829bf8637e304c6..f11cc8dba23f7439044e3112e6b6095ca6bfe00f 100644
--- a/fileTransfer2/groupChat/manager_test.go
+++ b/fileTransfer2/groupChat/manager_test.go
@@ -9,7 +9,6 @@ package groupChat
 
 import (
 	"bytes"
-	"gitlab.com/elixxir/client/e2e/receive"
 	ft "gitlab.com/elixxir/client/fileTransfer2"
 	"gitlab.com/elixxir/client/groupChat"
 	"gitlab.com/elixxir/client/storage/versioned"
@@ -48,17 +47,12 @@ func Test_FileTransfer_Smoke(t *testing.T) {
 	}
 
 	// Set up the first client
-	receiveCbChan1 := make(chan receiveCbValues, 10)
-	receiveCB1 := func(tid *ftCrypto.TransferID, fileName, fileType string,
-		sender *id.ID, size uint32, preview []byte) {
-		receiveCbChan1 <- receiveCbValues{
-			tid, fileName, fileType, sender, size, preview}
-	}
 	myID1 := id.NewIdFromString("myID1", id.User, t)
 	kv1 := versioned.NewKV(ekv.MakeMemstore())
 	gc1 := newMockGC(gcHandler)
-	m1, err := NewManager(receiveCB1, params, myID1, gc1,
-		newMockCmix(myID1, cMixHandler), kv1, rngGen)
+	ftManager1, err := ft.NewManager(
+		params, myID1, newMockCmix(myID1, cMixHandler), kv1, rngGen)
+	m1, err := NewManager(nil, ftManager1, gc1)
 	if err != nil {
 		t.Errorf("Failed to create new file transfer manager 1: %+v", err)
 	}
@@ -77,10 +71,10 @@ func Test_FileTransfer_Smoke(t *testing.T) {
 	}
 	myID2 := id.NewIdFromString("myID2", id.User, t)
 	kv2 := versioned.NewKV(ekv.MakeMemstore())
-	endE2eChan2 := make(chan receive.Message, 3)
-	gc2 := newMockGC(gcHandler) /**/
-	m2, err := NewManager(receiveCB2, params, myID2, gc2,
-		newMockCmix(myID2, cMixHandler), kv2, rngGen)
+	gc2 := newMockGC(gcHandler)
+	ftManager2, err := ft.NewManager(
+		params, myID2, newMockCmix(myID2, cMixHandler), kv2, rngGen)
+	m2, err := NewManager(receiveCB2, ftManager2, gc2)
 	if err != nil {
 		t.Errorf("Failed to create new file transfer manager 2: %+v", err)
 	}
@@ -150,7 +144,7 @@ func Test_FileTransfer_Smoke(t *testing.T) {
 	// Send file
 	sendStart := netTime.Now()
 	tid1, err := m1.Send(
-		fileName, fileType, fileData, myID2, retry, preview, sentProgressCb1, 0)
+		myID2, fileName, fileType, fileData, retry, preview, sentProgressCb1, 0)
 	if err != nil {
 		t.Errorf("Failed to send file: %+v", err)
 	}
@@ -170,12 +164,6 @@ func Test_FileTransfer_Smoke(t *testing.T) {
 	// Wait for file to be sent and received
 	wg.Wait()
 
-	select {
-	case <-endE2eChan2:
-	case <-time.After(15 * time.Millisecond):
-		t.Errorf("Timed out waiting for end file transfer message.")
-	}
-
 	err = m1.CloseSend(tid1)
 	if err != nil {
 		t.Errorf("Failed to close transfer: %+v", err)
diff --git a/fileTransfer2/interface.go b/fileTransfer2/interface.go
index 671399e8bc9bb6ed4bf6f91e985407fb245db834..7953954b426ce2987131c6f4d1ce6d4445d88cc1 100644
--- a/fileTransfer2/interface.go
+++ b/fileTransfer2/interface.go
@@ -82,13 +82,13 @@ type FileTransfer interface {
 	// In-progress transfers are restored when closing and reopening; however, a
 	// SentProgressCallback must be registered again.
 	//
+	//   recipient - ID of the receiver of the file transfer. The sender must
+	//      have an E2E relationship with the recipient.
 	//   fileName - Human-readable file name. Max length defined by
 	//      MaxFileNameLen.
 	//   fileType - Shorthand that identifies the type of file. Max length
 	//      defined by MaxFileTypeLen.
 	//   fileData - File contents. Max size defined by MaxFileSize.
-	//   recipient - ID of the receiver of the file transfer. The sender must
-	//      have an E2E relationship with the recipient.
 	//   retry - The number of sending retries allowed on send failure (e.g.
 	//      a retry of 2.0 with 6 parts means 12 total possible sends).
 	//   preview - A preview of the file data (e.g. a thumbnail). Max size
@@ -100,7 +100,7 @@ type FileTransfer interface {
 	//      per period.
 	//   sendNew - Function that sends the file transfer information to the
 	//      recipient.
-	Send(fileName, fileType string, fileData []byte, recipient *id.ID,
+	Send(recipient *id.ID, fileName, fileType string, fileData []byte,
 		retry float32, preview []byte, progressCB SentProgressCallback,
 		period time.Duration, sendNew SendNew) (*ftCrypto.TransferID, error)
 
diff --git a/fileTransfer2/manager.go b/fileTransfer2/manager.go
index 52283f9575d665a256a68d364e461819670de37e..1f6c06e19c6db773371f6333d4b18679f72bb966 100644
--- a/fileTransfer2/manager.go
+++ b/fileTransfer2/manager.go
@@ -230,8 +230,8 @@ func (m *manager) MaxPreviewSize() int {
 
 // Send partitions the given file into cMix message sized chunks and sends them
 // via cmix.SendMany.
-func (m *manager) Send(fileName, fileType string, fileData []byte,
-	recipient *id.ID, retry float32, preview []byte,
+func (m *manager) Send(recipient *id.ID, fileName, fileType string,
+	fileData []byte, retry float32, preview []byte,
 	progressCB SentProgressCallback, period time.Duration, sendNew SendNew) (
 	*ftCrypto.TransferID, error) {
 
diff --git a/fileTransfer2/manager_test.go b/fileTransfer2/manager_test.go
index b2220ffec9dbcf6c5862fe7af45a4a2e4bc45baf..748c4f7ab9921f538f158a447f2befb78f0e0699 100644
--- a/fileTransfer2/manager_test.go
+++ b/fileTransfer2/manager_test.go
@@ -184,7 +184,7 @@ func Test_FileTransfer_Smoke(t *testing.T) {
 
 	// Send file.
 	sendStart := netTime.Now()
-	tid1, err := m1.Send(fileName, fileType, fileData, myID2, retry, preview,
+	tid1, err := m1.Send(myID2, fileName, fileType, fileData, retry, preview,
 		sentProgressCb1, 0, sendNewCb1)
 	if err != nil {
 		t.Errorf("Failed to send file: %+v", err)