= Version 0.9.0 to 0.9.4

  * [BUG] A couple of concurrency issues (race conditions) fixed for apps that actively close and/or reuse channels
  * [BUG] AMQP::Queue#initialize with :nowait => true no longer fails with NoMethodError
  * [FEATURE] Automatic recovery mode now works for publishers


= Version 0.8.1

  * [BUG] AMQP::Queue#status can no longer result in queue instance @ivars being changed.
  * [API] AMQP::Channel#reuse allows channel instance to be reused with a different channel id, may be used to recover from channel-level exceptions.


= Version 0.8.0

  * [API] AMQP::Session#on_skipped_heartbeats callback that can be used to handle skipped heartbeats (for cases when TCP network failure detection is not timely enough)
  * [API] AMQP::Exchange#publish calls now use a mutex on the channel exchange is declared on. Sharing channels between threads is discouraged but amqp gem covers your back in the most dangerous case.
  * [API] AMQP::Channel#synchronize now can be used to guarantee mutual exclusion of multiple threads on channel instances.
  * [BUG] Empty messages can finally be published fine. Yes, it took us just 3 years.
  * [FEATURE] When connected to RabbitMQ, RabbitMQ-specific extensions are required automatically
  * [FEATURE] AMQP::Session#broker and AMQP::Broker allow for broker capabilities inspection
  * [FEATURE] New bitset-based channel id allocator
  * [FEATURE] Multiple consumers per queue with AMQP::Consumer
  * [FEATURE] Automatic recovery mode for channels
  * [FEATURE] Network connection recovery callbacks for channels, exchanges, queues, consumers
  * [API] Connection URI (string) format for vhosts no longer assumes that vhosts begin with a slash (/), learn more at http://bit.ly/mfzwcB
  * [FEATURE] Returned messages, including header & content via AMQP::Exchange#on_publish. Callback accepts 3 args: basic_return, header, body
  * [BUG] Ruby 1.8.7-p249 is not supported because of this (p249-specific) Ruby bug: http://bit.ly/iONBmH
  * [FEATURE] AMQP::Utilities::EventLoopHelper detects app server (if any) being used and starts EventMachine reactor in an optimal way.
  * [FEATURE] AMQP 0.9.1 support, including tx.* operations class.
  * [API] Default authentication handler now raises AMQP::PossibleAuthenticationFailureError
  * [API] AMQP::Channel#initialize now takes 3rd (optional) options hash.
  * [API] Broker connection class is now AMQP::Session.
  * [API] AMQP::Error instance now may carry cause, an exception that caused exception in question to be raised.
  * [API] When initial TCP connection fails, default action is now to raise AMQP::TCPConnectionFailed.
  * [API] AMQP::BasicClient#reconnect now takes 2nd optional argument, period of waiting in seconds.
  * [FEATURE] Handlers for initial connection failure, connection loss; channel-level exceptions handlers on Channel instances.
  * [API] AMQP::Exchange#initialize now accepts :arguments option that takes a hash.
  * [API] AMQP::Queue#initialize now accepts :arguments option that takes a hash.
  * [API] AMQP#Logger is deprecated. It will be removed before 1.0 release.
  * [API] AMQP#fork is deprecated. It will be removed before 1.0 release.
  * [API] AMQP::RPC is deprecated. It will be removed before 1.0 release.
  * [FEATURE] Significant improvements to the documentation. From now on lack of/poor documentation is considered a severe bug.
  * [FEATURE] Support for RabbitMQ extensions to AMQP 0.9.1
  * [API] AMQP::Exchange#publish now accepts (an optional) callback.
  * [API] AMQP::Channel.new now accepts (an optional) callback.
  * [API] AMQP::Header#ack now can acknowledge multiple deliveries
  * [API] AMQP::Exchange#delete now takes (an optional) block that is called when exchange.delete-ok response arrives.
  * [API] AMQP::Header now implements #to_hash
  * [API] AMQP::Queue#pop block now can take 1, 2 or 3 arguments.
  * [API] AMQP::Queue#purge  now takes an optional block which is called when queue.purge-ok response arrives.
  * [API] AMQP::Queue#delete now takes an optional block which is called when queue.delete-ok response arrives.
  * [API] AMQP::Queue#delete now accepts :nowait option.
  * [API] AMQP::Queue#unbind now takes an optional block which is called when queue.unbind-ok response arrives.
  * [API] AMQP::Queue#unbind now accepts :routing_key as alias to :key. we believe it is a good idea to use AMQP terms.
  * [API] AMQP::Channel#prefetch now takes (an optional) 2nd parameter that specifies that QoS settings should be applied to underlying connection, as well as optional callback.
  * [API] AMQP::Channel#recover now takes (an optional) callback that is called when basic.recover-ok is received.
  * [API] AMQP::Frame is gone.
  * [API] AMQP::Buffer is gone. Serialization & framing are now handled primarily by amq-protocol.
  * [API] AMQP::Queue#publish is deprecated.
  * [API] Name argument for AMQP::Queue.new and Channel#queue is optional.

= Version 0.7.1

  * [BUG] AMQP gem no longer conflicts with Builder 2.1.2 on Ruby 1.9.
        All Ruby on Rails 3 users who run Ruby 1.9 are highly recommended
                        to upgrade!
  * [API] AMQP::Exchange.default no longer caches exchange object between calls
          because it may lead to very obscure issues when channel that exchange was
          using is closed (due to connection loss, as part of test suite teardown
          or in any other way).

  * [API] AMQP::Exchange.default now accepts channel as a parameter.
  * [API] AMQP::Exchange#channel
  * [BUG] Basic.Return is not supported by amqp gem yet, but it should not result in obscure exceptions
  * [API] AMQP::Exchange#publish now supports content type overriding.
  * [API] Introduce AMQP::Exchange #durable?, #transient?, #auto_deleted? and #passive?
  * [API] Introduce AMQP::Channel#open?
  * [BUG] AMQP connection was considered established prematurely.
  * [API] MQ.logging is removed; please use AMQP.logging from now on.
  * [API] MQ::Queue class is deprecated; please use AMQP::Queue from now on.
  * [API] MQ::Exchange class is deprecated; please use AMQP::Exchange from now on.
  * [API] MQ class is deprecated; please use AMQP::Channel from now on.
  * [API] require "mq" is deprecated; please use require "amqp" from now on.


= Version 0.7
  * [BUG] Sync API for queues and exchanges, support for server-generated queues & exchange names (via semi-lazy collection).
  * [BUG] Sync API for MQ#close (Channel.Close) [issue #34].
  * [FEATURE] AMQP URL from majek's fork, with some fixes. Example: AMQP.start("amqps://")
  * [DEVELOP] Added some em-spec-based specs, bin/irb, Gemfile.
  * [FEATURE] Added MQ::Exchange.default for the default exchange.
  * [FEATURE] Raise an exception if we're trying to use Basic.Reject with RabbitMQ.
  * [FEATURE] Fail if an entity is re-declared with different options.
  * [BUG] Don't reconnect if the credentials are wrong.
  * [BUG] Fixed an exception which occurred when Queue#bind was called synchronously with a callback.
  * [DEVELOPMENT] Added a lot of specs (Bacon replaced by rSpec 2).
