use SortedDict