now faster and a little less crappy