Speed and memory usage improvements from Laurence Adnerson