Main authors: - David Corcoran - Ludovic Rousseau - Damien Sauveron Additional code by: - Carlos Prados - Antti Tapaninen - and some others