diff --git a/bindings/ud.go b/bindings/ud.go
index ee7774cbebf2ab4523aaa713c3e0d6912e94ac27..9332ea975b90db019389bfe569a73ccbaa40880d 100644
--- a/bindings/ud.go
+++ b/bindings/ud.go
@@ -413,9 +413,9 @@ type UdMultiLookupCallback interface {
 }
 
 type lookupResp struct {
-	id      *id.ID
-	contact contact.Contact
-	err     error
+	Id      *id.ID
+	Contact contact.Contact
+	Err     error
 }
 
 // MultiLookupUD returns the public key of all passed in IDs as known by the
@@ -458,26 +458,27 @@ func MultiLookupUD(e2eID int, udContact []byte, cb UdMultiLookupCallback,
 		return err
 	}
 
+	jww.INFO.Printf("ud.MultiLookupUD(%s, %s)", idList, p.Timeout)
+
 	respCh := make(chan lookupResp, len(idList))
 	for _, uid := range idList {
-		localID := uid.DeepCopy()
 		callback := func(c contact.Contact, err error) {
 			respCh <- lookupResp{
-				id:      localID,
-				contact: c,
-				err:     err,
+				Id:      uid,
+				Contact: c,
+				Err:     err,
 			}
 		}
-		go func() {
+		go func(localID *id.ID) {
 			_, _, err := ud.Lookup(user.api, c, callback, localID, p)
 			if err != nil {
 				respCh <- lookupResp{
-					id:      localID,
-					contact: contact.Contact{},
-					err:     err,
+					Id:      localID,
+					Contact: contact.Contact{},
+					Err:     err,
 				}
 			}
-		}()
+		}(uid.DeepCopy())
 
 	}
 
@@ -487,14 +488,14 @@ func MultiLookupUD(e2eID int, udContact []byte, cb UdMultiLookupCallback,
 		var errorString string
 		for numReturned := 0; numReturned < len(idList); numReturned++ {
 			response := <-respCh
-			if response.err != nil {
-				failedIDs = append(failedIDs, response.id)
-				marshaledContactList = append(
-					marshaledContactList, response.contact.Marshal())
-			} else {
+			if response.Err != nil {
+				failedIDs = append(failedIDs, response.Id)
 				errorString = errorString +
 					fmt.Sprintf("Failed to lookup id %s: %+v",
-						response.id, response.err)
+						response.Id, response.Err)
+			} else {
+				marshaledContactList = append(
+					marshaledContactList, response.Contact.Marshal())
 			}
 		}
 
diff --git a/ud/lookup.go b/ud/lookup.go
index 569dc5b99578e9487c350028eb5e4649cbf8efc1..867c2900cbf598be9e041f1de1244a9379e0c919 100644
--- a/ud/lookup.go
+++ b/ud/lookup.go
@@ -44,30 +44,6 @@ func Lookup(user udE2e,
 	return lookup(net, rng, uid, grp, udContact, callback, p)
 }
 
-// BatchLookup performs a Lookup operation on a list of user IDs.
-// The lookup performs a callback on each lookup on the returned contact object
-// constructed from the response.
-func BatchLookup(udContact contact.Contact,
-	net udCmix, callback lookupCallback,
-	rng csprng.Source,
-	uids []*id.ID, grp *cyclic.Group,
-	p single.RequestParams) {
-	jww.INFO.Printf("ud.BatchLookup(%s, %s)", uids, p.Timeout)
-
-	for _, uid := range uids {
-		go func(localUid *id.ID) {
-			_, _, err := lookup(net, rng, localUid, grp,
-				udContact, callback, p)
-			if err != nil {
-				jww.WARN.Printf("Failed batch lookup on user %s: %v",
-					localUid, err)
-			}
-		}(uid)
-	}
-
-	return
-}
-
 // lookup is a helper function which sends a lookup request to the user discovery
 // service. It will construct a contact object off of the returned public key.
 // The callback will be called on that contact object.