The fast version!...

There must be some way to improve this too...no time now