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