copyright (c) Ralf Bode, all rights reserved