diff --git a/doc/changelog.md b/doc/changelog.md
index 52d5166..fb3ee06 100644
--- a/doc/changelog.md
+++ b/doc/changelog.md
@@ -3,21 +3,129 @@
This document contains details of the various releases and their release dates.
Dates are in the format `yyyy-mm-dd`.
-## 0.2.0 - Unreleased
+## 0.2.0 - 2014-11-17
+
+### CSS Selector Support
+
+Probably the biggest feature of this release: support for querying documents
+using CSS selectors. Oga supports a subset of the CSS3 selector specification,
+in particular the following selectors are supported:
+
+* Element, class and ID selectors
+* Attribute selectors (e.g. `foo[x ~= "y"]`)
+
+The following pseudo classes are supported:
+
+* `:root`
+* `:nth-child(n)`
+* `:nth-last-child(n)`
+* `:nth-of-type(n)`
+* `:nth-last-of-type(n)`
+* `:first-child`
+* `:last-child`
+* `:first-of-type`
+* `:last-of-type`
+* `:only-child`
+* `:only-of-type`
+* `:empty`
+
+You can use CSS selectors using the methods `css` and `at_css` on an instance of
+`Oga::XML::Document` or `Oga::XML::Element`. For example:
+
+ document = Oga.parse_xml('Alice')
+
+ document.css('people person') # => NodeSet(Element(name: "person" ...))
+
+The architecture behind this is quite similar to parsing XPath. There's a lexer
+(`Oga::CSS::Lexer`) and a parser (`Oga::CSS::Parser`). Unlike Nokogiri (and
+perhaps other libraries) the parser _does not_ output XPath expressions as a
+String or a CSS specific AST. Instead it directly emits an XPath AST. This
+allows the resulting AST to be directly evaluated by `Oga::XPath::Evaluator`.
+
+### Mutli-line Attribute Support
+
+Oga can now lex/parse elements that have attributes with newlines in them.
+Previously this would trigger memory allocation errors.
+
+See for more information.
+
+### SAX after_element
+
+The `after_element` method in the SAX parsing API now always takes two
+arguments: the namespace name and element name. Previously this method would
+always receive a single nil value as its argument, which is rather pointless.
+
+See for more information.
+
+### XPath Grouping
+
+XPath expressions can now be grouped together using parenthesis. This allows one
+to specify a custom operator precedence.
+
+### Enumerator Parsing Input
+
+Enumerator instances can now be used as input for `Oga.parse_xml` and friends.
+This can be used to download and parse XML files on the fly. For example:
+
+ enum = Enumerator.new do |yielder|
+ HTTPClient.get('http://some-website.com/some-big-file.xml') do |chunk|
+ yielder << chunk
+ end
+ end
+
+ document = Oga.parse_xml(enum)
+
+See for more information.
+
+### Removing Attributes
+
+Element attributes can now be removed using `Oga::XML::Element#unset`:
+
+ element = Oga::XML::Element.new(:name => 'foo')
+
+ element.set('class', 'foo')
+ element.unset('class')
+
+### XPath Attributes
+
+XPath predicates are now evaluated for every context node opposed to being
+evaluated once for the entire context. This ensures that expressions such as
+`descendant-or-self::node()/foo[1]` are evaluated correctly.
+
+### Available Namespaces
+
+When calling `Oga::XML::Element#available_namespaces` the Hash returned by
+`Oga::XML::Element#namespaces` would be modified in place. This was a bug that
+has been fixed in this release.
+
+### NodeSets
+
+NodeSet instances can now be compared with each other using `==`. Previously
+this would always consider two instances to be different from each other due to
+the usage of the default `Object#==` method.
+
+### XML Entities
XML entities such as `&` and `<` are now encoded/decoded by the lexer,
-string and text nodes. See for
-more information.
+string and text nodes.
+
+See for more information.
+
+### General
Source lines are no longer included in error messages generated by the XML
parser. This simplifies the code and removes the need of re-reading the input
(in case of IO/Enumerable inputs).
+### XML Lexer Newlines
+
Newlines in the XML lexer are now counted in native code (C/Java). On MRI and
JRuby the improvement is quite small, but on Rubinius it's a massive
improvement. See commit `8db77c0a09bf6c996dd2856a6dbe1ad076b1d30a` for more
information.
+### HTML Void Element Performance
+
Performance for detecting HTML void elements (e.g. ` ` and ``) has been
improved by removing String allocations that were not needed.