> For the complete documentation index, see [llms.txt](https://vechain-dns.gitbook.io/vns-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://vechain-dns.gitbook.io/vns-docs/smart-contract-structure/domain-deregistration.md).

# Domain Deregistration

There are currently four public functions that can result in a domain being deregistered:

`function popDomain(uint256 _tokenID) external`&#x20;

* If `autoRenew` is off and the domain is past its expiry date, `popDomain` can be called to delete the domain and refund the bond to its owner.

`function collectDues(uint256 _tokenID) external`&#x20;

* If the domain has `autoRenew` set to true, you cannot use `popDomain` and must instead use `collectDues`.
* This function will use the domain's bond to top-up the domains' `domainExpires` timer.
* If the domain does not have sufficient bond to cover the top-up, the domain will be deleted and no refund will be offered to its owner.

`function withdrawEarly(uint256 _tokenID) external`

* Lets the owner of a domain deregister their domain and receive their bond back.
* Each year is paid in advanced, they will not receive a refund.
* This can help users receive their bond back after migrating.

`function invalidateDomain(uint256 _tokenID) external`

* If a user registers a domain that is too short, anyone can call this to delete their domain.
* The caller will be paid out a VET reward to incentivize active monitoring for invalid domains.
