def fail_tmp(item, max_tries=None, ttl=None):
    '''Try to fail a work-item temporarily (up recount and keep in queue),
       if max tries or ttl is exhausted, escalate to permanant failure.'''
    try:
        max_tries = item.max_tries if max_tries is None else max_tries
        ttl = item.ttl if ttl is None else ttl

        # see if we need to fail perm
        check_ttl_max_tries(item.tries+1, item.enqueued_at, max_tries, ttl)
        # mv to same plus 1
        item.tries += 1
        new_name = construct(( fmt_time(item.enqueued_at, _c.FSQ_TIMEFMT,
                               _c.FSQ_CHARSET), item.entropy,
                               item.pid, item.hostname,
                               item.tries, ) + tuple(item.arguments))
        os.rename(fsq_path.item(item.queue, item.id, host=item.host),
				  fsq_path.item(item.queue, new_name, host=item.host))
        return new_name
    except (FSQMaxTriesError, FSQTTLExpiredError, FSQEnqueueError, ), e:
        fail_perm(item)
        e.strerror = u': '.join([
            e.strerror,
            u'for item {0}; failed permanently'.format(item.id),
        ])
        raise e