tested on Mac. Works. Have a few bugs :)