FS#7478 (heavily modified by me).