Nice; could do with some unit tests though (unless I've missed those - still going through code).