improve subdivision method