generalize the fast source a bit better
fix a couple of edge cases
avoid keeping goroutines around, better handling of timeout