Version 2 with some changes.