faster but still a work in progress