working version. I believe it to be finished.