diff --git a/routing.go b/routing.go
index <HASH>..<HASH> 100644
--- a/routing.go
+++ b/routing.go
@@ -222,30 +222,24 @@ func (dht *IpfsDHT) SearchValue(ctx context.Context, key string, opts ...ropts.O
 				}
 				// Select best value
 				if best != nil {
+					if bytes.Equal(best.Val, v.Val) {
+						continue
+					}
 					sel, err := dht.Validator.Select(key, [][]byte{best.Val, v.Val})
 					if err != nil {
 						log.Warning("Failed to select dht key: ", err)
 						continue
 					}
-					if sel == 1 && !bytes.Equal(v.Val, best.Val) {
-						best = &v
-						select {
-						case out <- v.Val:
-						case <-ctx.Done():
-							return
-						}
-					}
-				} else {
-					// Output first valid value
-					if err := dht.Validator.Validate(key, v.Val); err == nil {
-						best = &v
-						select {
-						case out <- v.Val:
-						case <-ctx.Done():
-							return
-						}
+					if sel != 1 {
+						continue
 					}
 				}
+				best = &v
+				select {
+				case out <- v.Val:
+				case <-ctx.Done():
+					return
+				}
 			case <-ctx.Done():
 				return
 			}
don't double-validate values

Also, de-duplicate some logic.