# Withdrawing Pool Tokens

Balancer Pool Tokens (BPT's) can be withdraw as they become available. Only those that are available can be withdrawn. The remaining balance stays in the contract until such time that they become available and can be withdrawn.&#x20;

BPT's gradually start to unlock after 10 epochs with the last BPT being unlocked after 52 epochs

{% hint style="info" %}
See the [release schedule](https://docs.egl.vote/protocol-overview/launch/eth-egl-release-schedule#matching-egls) for a detailed breakdown of when the BPT's are released.
{% endhint %}

### 1. `withdrawPoolTokens()`

#### Function Signature

```javascript
function withdrawPoolTokens() external whenNotPaused 
```

#### Validations

| Validation **Rule**                                                   | Description                                                                                                                                |
| --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `supporters[msg.sender].poolTokens > 0`                               | Calling address must have available pool tokens to withdraw                                                                                |
| `block.timestamp.sub(firstEpochStartDate) > minLiquidityTokensLockup` | Cannot withdraw pool token before the minimum lockup period has elapse                                                                     |
| `_supporter.firstEgl <= currentSerializedEgl`                         | The current serialized EGL must be after the calling addresses first EGL - meaning the calling addresses BPT's have started to be released |

#### Events Emitted

* `SerializedEglCalculated`
* `PoolTokensWithdrawn`
* `Transfer`

#### Web3 Example

```javascript
await eglVotingInstance.withdrawPoolTokens({ from: "0x2be650ba..."})
```
