contract FreezableToken is ERC20{

    mapping (address => bool) public frozenAccounts;

    event FrozenFunds(address target, bool frozen);

    /**
     * @dev Freze account 
     */
    function freezeAccount(address target, bool freeze) onlyOwner public {
        frozenAccounts[target] = freeze;
        emit FrozenFunds(target, freeze);
    }

    /**
     * @dev Ovveride base method _transfer from  base ERC20 contract
     */
    function _transfer(address _from, address _to, uint256 value) internal {
        require(_to != address(0x0));
        require(_balances[_from] >= value);
        require(_balances[_to] + value >= _balances[_to]);
        require(!frozenAccounts[_from]);
        require(!frozenAccounts[_to]);
        _balances[_from] = _balances[_from].sub(value);
        _balances[_to] = _balances[_to].add(value);
        emit Transfer(_from, _to, value);
    }
}
/**
 * @title Freezable token 
 * @dev Add ability froze accounts 
 */
function freezeAccount(address target, bool freeze) onlyOwner public {
    frozenAccounts[target] = freeze;
    emit FrozenFunds(target, freeze);
}

/**
 * @dev Freze account 
 */