Updated.
Refatored.