some useless code deleted