Trusted bool
 }
 
+func (me Peer) Equal(other Peer) bool {
+       return me.Id == other.Id &&
+               me.Addr.String() == other.Addr.String() &&
+               me.Source == other.Source &&
+               me.SupportsEncryption == other.SupportsEncryption &&
+               me.PexPeerFlags == other.PexPeerFlags &&
+               me.Trusted == other.Trusted
+}
+
 // FromPex generate Peer from peer exchange
 func (me *Peer) FromPex(na krpc.NodeAddr, fs peer_protocol.PexPeerFlags) {
        me.Addr = ipPortAddr{append([]byte(nil), na.IP...), na.Port}
 
        }
        if replaced, ok := t.peers.AddReturningReplacedPeer(p); ok {
                torrent.Add("peers replaced", 1)
-               t.logger.Printf("added %v replacing %v", p, replaced)
+               if !replaced.Equal(p) {
+                       t.logger.Printf("added %v replacing %v", p, replaced)
+               }
        }
        t.openNewConns()
        for t.peers.Len() > cl.config.TorrentPeersHighWater {
 
        "time"
 
        "github.com/anacrolix/dht/v2/krpc"
+       "github.com/anacrolix/log"
 
        "github.com/anacrolix/torrent/tracker"
 )
        me.t.cl.rLock()
        req := me.t.announceRequest(event)
        me.t.cl.rUnlock()
-       me.t.logger.Printf("announcing to %q: %#v", me.u.String(), req)
+       me.t.logger.WithValues(log.Debug).Printf("announcing to %q: %#v", me.u.String(), req)
        res, err := tracker.Announce{
                HTTPProxy:  me.t.cl.config.HTTPProxy,
                UserAgent:  me.t.cl.config.HTTPUserAgent,