Michael Meeks Arturo Tena (aka tenix) with thanks to many others; see README