final V1

I really think it works in C++ form now