complete re-write of the library