         or
         "<group_name>" = options
 
-        you can subscripe with 'ack' option. In that case listener will be
-        called with callback functions as second argument. You are supposed
-        to call that callback when processing is done
+        you can subscripe with 'ack' option. In that case listener can return promise.
+        Acknowledgemnt will be sent only one promise is resolved. It will return value
+        ack will be sent imediately. Still usefull to limit rate
         ###
         unless listener
             listener = options

    _generate_exchange_options: (options) ->
        autoDelete: false
        durable: options.durable

    _decode_message: (msg) =>
        content = msg.content

            exch_options = @_generate_exchange_options(options)
            topic = options.topic
            consumer = @_wrap_consumer_callback(listener, ch, options)
            consumer_options = @_generate_consumer_options(options)

            logger.debug('setting up queue', {queue_name, queue_options, exch_name, exch_options, topic})
            steps = [
