need to clean it up, construct gradients, comment, close to done