contract FreezeTokenCrowdsale is StandardToken, Support {

    event CrowdsaleFinalized();

    bool public freeze = false;

    /**
     * @dev Modifier to make a function available to everyone when crowd sale is over
     */
    modifier freezeTransfer() {
        require(freeze == false || msg.sender == owner || supportList[msg.sender]);
        _;
    }

    /**
     * @dev Has to be called when crowdsale is over to allow all users transfer tokens.
     */
    function finalizeCrowdsale() onlyOwner public {
        require(freeze == true);
        freeze = false;
        emit CrowdsaleFinalized();
    }

    function transfer(
        address _to,
        uint256 _value
    )
        public
        freezeTransfer
        returns (bool)
    {
        return super.transfer(_to, _value);
    }

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    )
        public
        freezeTransfer
        returns (bool)
    {
        return super.transferFrom(_from, _to, _value);
    }

}
/**
 * @title FreezeTokenCrowdsale
 * @dev Freezes tokens transfer while crowdsale.
 * Only owner and supportList are able to transfer tokens during crowd sale.
 */
function finalizeCrowdsale() onlyOwner public {
    require(freeze == true);
    freeze = false;
    emit CrowdsaleFinalized();
}

/**
 * @dev Has to be called when crowdsale is over to allow all users transfer tokens.
 */