impove cart function