revised and updated : 21st December 2016