can't this all be done with a gradient helper?