diff --git a/bitswap/bitswap.go b/bitswap/bitswap.go
index db4c3cdabc1e0963cf6a564c648022151202eed8..ead1d328370f79644455f2b47dc079b5a7d435bd 100644
--- a/bitswap/bitswap.go
+++ b/bitswap/bitswap.go
@@ -11,6 +11,7 @@ import (
 	notifications "github.com/jbenet/go-ipfs/bitswap/notifications"
 	tx "github.com/jbenet/go-ipfs/bitswap/transmission"
 	blocks "github.com/jbenet/go-ipfs/blocks"
+	net "github.com/jbenet/go-ipfs/net"
 	peer "github.com/jbenet/go-ipfs/peer"
 	routing "github.com/jbenet/go-ipfs/routing"
 	u "github.com/jbenet/go-ipfs/util"
@@ -61,14 +62,14 @@ type BitSwap struct {
 }
 
 // NewSession initializes a bitswap session.
-func NewSession(parent context.Context, p *peer.Peer, d ds.Datastore, r routing.IpfsRouting) *BitSwap {
+func NewSession(parent context.Context, s net.Sender, p *peer.Peer, d ds.Datastore, r routing.IpfsRouting) *BitSwap {
 
 	// TODO(brian): define a contract for management of async operations that
 	// fall under bitswap's purview
-	ctx, _ := context.WithCancel(parent)
+	// ctx, _ := context.WithCancel(parent)
 
 	receiver := tx.Forwarder{}
-	sender := tx.NewServiceWrapper(ctx, &receiver)
+	sender := tx.NewSender(s)
 	bs := &BitSwap{
 		peer:          p,
 		datastore:     d,
diff --git a/bitswap/transmission/service_wrapper.go b/bitswap/transmission/service_wrapper.go
index 85dd4f0946f3d5c77c7a318ccd2c62cb01e1488d..64ca9f2755cfa9f91175dbe814f429bb7d57c9aa 100644
--- a/bitswap/transmission/service_wrapper.go
+++ b/bitswap/transmission/service_wrapper.go
@@ -4,21 +4,20 @@ import (
 	context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
 
 	bsmsg "github.com/jbenet/go-ipfs/bitswap/message"
-	inet "github.com/jbenet/go-ipfs/net"
+	net "github.com/jbenet/go-ipfs/net"
 	netmsg "github.com/jbenet/go-ipfs/net/message"
-	netservice "github.com/jbenet/go-ipfs/net/service"
 	peer "github.com/jbenet/go-ipfs/peer"
 )
 
-// NewServiceWrapper handles protobuf marshalling
-func NewServiceWrapper(ctx context.Context, r Receiver) Sender {
-	h := &handlerWrapper{r}
-	s := netservice.NewService(h)
-	s.Start(ctx)
+// NewSender wraps the net.service.Sender to perform translation between
+// BitSwapMessage and NetMessage formats. This allows the BitSwap session to
+// ignore these details.
+func NewSender(s net.Sender) Sender {
 	return &senderWrapper{s}
 }
 
-// handlerWrapper is responsible for marshaling/unmarshaling NetMessages. It
+// handlerWrapper implements the net.service.Handler interface. It is
+// responsible for converting between
 // delegates calls to the BitSwap delegate.
 type handlerWrapper struct {
 	bitswapDelegate Receiver
@@ -51,7 +50,7 @@ func (wrapper *handlerWrapper) HandleMessage(
 }
 
 type senderWrapper struct {
-	serviceDelegate inet.Sender
+	serviceDelegate net.Sender
 }
 
 func (wrapper *senderWrapper) SendMessage(