Final

This one is bug fixed and tested.