Contributed by lebassis
Contributed by Daria Petrova
Contributed by Florian Hardwig
Contributed by Ryan Noonan