added hole and cleaned code