working!!! need more testing! Lots more