close #20 add gradient