Contributed by Wojciech Staniewski
Contributed by Jacek Baliński
Contributed by Carlos Mignot
Contributed by Rana rana.rmeily