consider boundary case
bug free