Main authors:
===
Petter Johansson

With contributions from:
===
Matthew Woelk
