reimplement stuff i thought i did