Функцию makeNewVirtualControl отсюда посмотрите - уже готовая реализация, как раз с правильной проверкой.