Author: Bernhard Knollenberg.