contract CanReclaimTokens is Ownable {
    using SafeERC20 for ERC20Basic;

    event ReclaimTokens(address indexed to, uint256 amount);

    /**
     * @dev Reclaim all ERC20Basic compatible tokens
     * @param _token ERC20Basic The address of the token contract
     */
    function reclaimToken(ERC20Basic _token) external onlyOwner {
        uint256 balance = _token.balanceOf(this);
        _token.safeTransfer(owner, balance);

        emit ReclaimTokens(owner, balance);
    }

    /**
     * @dev Reclaim specified amount of ERC20Basic compatible tokens
     * @param _token ERC20Basic The address of the token contract
     * @param _to The address which will receive the tokens
     * @param _value The amount of tokens to transfer
     */
    function reclaimTokenTo(ERC20Basic _token, address _to, uint256 _value) external onlyOwner {
        require(_to != address(0), "zero address is not allowed");
        _token.safeTransfer(_to, _value);

        emit ReclaimTokens(_to, _value);
    }
}
function reclaimTokenTo(ERC20Basic _token, address _to, uint256 _value) external onlyOwner {
    require(_to != address(0), "zero address is not allowed");
    _token.safeTransfer(_to, _value);

    emit ReclaimTokens(_to, _value);
}

/**
 * @dev Reclaim specified amount of ERC20Basic compatible tokens
 * @param _token ERC20Basic The address of the token contract
 * @param _to The address which will receive the tokens
 * @param _value The amount of tokens to transfer
 */