add proconditions, improve char-range