--- /dev/null
+package torrent
+
+import (
+       "time"
+)
+
+type worstConnsHeap []*connection
+
+func (me worstConnsHeap) Len() int      { return len(me) }
+func (me worstConnsHeap) Swap(i, j int) { me[i], me[j] = me[j], me[i] }
+func (me worstConnsHeap) last(c *connection) (ret time.Time) {
+       ret = c.lastUsefulChunkReceived
+       if !ret.IsZero() {
+               return
+       }
+       ret = c.completedHandshake
+       if time.Now().Sub(ret) >= 3*time.Minute {
+               return
+       }
+       ret = time.Now().Add(-3 * time.Minute)
+       return
+}
+func (me worstConnsHeap) Less(i, j int) bool {
+       return me.last(me[i]).Before(me.last(me[j]))
+}
+
+func (me *worstConnsHeap) Pop() (ret interface{}) {
+       old := *me
+       n := len(old)
+       ret = old[n-1]
+       *me = old[:n-1]
+       return
+}
+
+func (me *worstConnsHeap) Push(x interface{}) {
+       *me = append(*me, x.(*connection))
+}