Last version

I will not be updating this code, but you are welcome to maintain and modify it as your will.