started redesigning this library