Author: Laurent Eschenauer With additional contributions from: Bernhard K. Weisshuhn (bkw@codingforce.com) Benjamin Nortier (@bjnortier) Andreas (@functino)