Contributed by tobias schererbauer
Contributed by Paul Poster
Contributed by Stephen Coles
Contributed by Eric Dahl Palmér