copied some of my implementations over