improve promotion check logic