With contributions from: ian, garrison