Text and code by BoppreH, interface idea by Joe Davis.