Incorporate most feedback by @Ocramius