This stops spamming output when seeding.
                        fmt.Printf("getting info for %q\n", t.Name())
                        <-t.GotInfo()
                }
+               var lastLine string
                for {
                        var completedPieces, partialPieces int
                        psrs := t.PieceStateRuns()
                                        partialPieces += r.Length
                                }
                        }
-                       fmt.Printf(
+                       line := fmt.Sprintf(
                                "downloading %q: %s/%s, %d/%d pieces completed (%d partial)\n",
                                t.Name(),
                                humanize.Bytes(uint64(t.BytesCompleted())),
                                t.NumPieces(),
                                partialPieces,
                        )
+                       if line != lastLine {
+                               lastLine = line
+                               os.Stdout.WriteString(line)
+                       }
                        if pieceStates {
                                fmt.Println(psrs)
                        }