contract ERC20Recoverable is Ownable {

    /**
     * @dev Remember that only owner can call so be careful when use on contracts generated from other contracts.
     * @param tokenAddress The token contract address
     * @param tokenAmount Number of tokens to be sent
     */
    function recoverTokens(address tokenAddress, uint256 tokenAmount) public onlyOwner {
        IERC20(tokenAddress).transfer(owner(), tokenAmount);
    }
}
/**
 * @title TokenRecover
 * @dev Allow to recover any ERC20 sent into the contract for error
 */
function recoverTokens(address tokenAddress, uint256 tokenAmount) public onlyOwner {
    IERC20(tokenAddress).transfer(owner(), tokenAmount);
}

/**
 * @dev Remember that only owner can call so be careful when use on contracts generated from other contracts.
 * @param tokenAddress The token contract address
 * @param tokenAmount Number of tokens to be sent
 */