def uniquefy(name, existing):
    """
    Generate a unique name given the requested name and a list of existing names
    :param name: initial guess of name
    :param existing: list of existing names
    :return: a unique name based on the suggested name
    """
    root = (u'%s' % name).replace('-', '').replace(' ', '').strip().lower()
    choices = [root] + ['{}{}'.format(root, i) for i in range(1, 20)]
    candidates = sorted((set(choices) - set(existing)))
    return candidates[0]