Speaking of generator abuse ... Anything like this: def mergesort(alist): if len(alist) <= 1: return iter(alist) return merge(mergesort(alist[:len(alist)//2]), mergesort(alist[len(alist)//2:])) is probably going to create way too many generator/iterator instances to scale well. Jim