all but threading/timing APIs wrapped, need to come up with a way to do the listener stuff, thread safety etc.