diff --git a/exchange/bitswap/bitswap.go b/exchange/bitswap/bitswap.go
index 4f63e6c8ce56b480ee42d922583be277de190327..b78304a36157a7a4e887c8c02b2479548c0fb848 100644
--- a/exchange/bitswap/bitswap.go
+++ b/exchange/bitswap/bitswap.go
@@ -2,6 +2,7 @@ package bitswap
 
 import (
 	"errors"
+	"fmt"
 
 	context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
 	ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
@@ -65,12 +66,18 @@ func (bs *bitswap) Block(parent context.Context, k u.Key) (*blocks.Block, error)
 	// TODO add to wantlist
 	promise := bs.notifications.Subscribe(ctx, k)
 
+	// const maxProviders = 20
+	// using non-async version for now.
+	peersToQuery, err := bs.routing.FindProviders(ctx, k)
+	if err != nil {
+		return nil, fmt.Errorf("No providers found for %d (%v)", k, err)
+	}
+
 	go func() {
-		const maxProviders = 20
-		peersToQuery := bs.routing.FindProvidersAsync(ctx, k, maxProviders)
 		message := bsmsg.New()
 		message.AppendWanted(k)
-		for iiiii := range peersToQuery {
+		for _, iiiii := range peersToQuery {
+			// u.DOut("bitswap got peersToQuery: %s\n", iiiii)
 			go func(p *peer.Peer) {
 				response, err := bs.sender.SendRequest(ctx, p, message)
 				if err != nil {
@@ -125,9 +132,9 @@ func (bs *bitswap) ReceiveMessage(
 			continue // FIXME(brian): err ignored
 		}
 		go bs.notifications.Publish(block)
-		go func() {
+		go func(block blocks.Block) {
 			_ = bs.HasBlock(ctx, block) // FIXME err ignored
-		}()
+		}(block)
 	}
 
 	for _, key := range incoming.Wantlist() {
diff --git a/exchange/bitswap/network/interface.go b/exchange/bitswap/network/interface.go
index 15fa9c89e21d360afb41e20882ac340754e8d0d4..f3efc8fe428fc0bfe6d2056f9a51dedbd1a5654c 100644
--- a/exchange/bitswap/network/interface.go
+++ b/exchange/bitswap/network/interface.go
@@ -46,7 +46,11 @@ type NetMessageService interface {
 // TODO rename -> Router?
 type Routing interface {
 	// FindProvidersAsync returns a channel of providers for the given key
-	FindProvidersAsync(context.Context, u.Key, int) <-chan *peer.Peer
+	// FindProvidersAsync(context.Context, u.Key, int) <-chan *peer.Peer
+	// ^--- removed this for now because has some bugs apparently.
+
+	// FindProviders returns the providers for the given key
+	FindProviders(context.Context, u.Key) ([]*peer.Peer, error)
 
 	// Provide provides the key to the network
 	Provide(context.Context, u.Key) error