add hole support, close #2