0.2.5  
  * fixed xinclude memleak (which sometimes caused a segfault)
  * compensate for libxml bug (maybe not a bug, but definitely an
  inconvenience). When a root not has a default namespace, children have no
  accessible namespace, adding a node with no namespaces means that it not
  formally belongs to the root namespace. When this doc is used as an RNG document to
  #validate_against, the newly added nodes are just ignored. Bummer.

  Optimal solution, whenever adding something with no namespace, move up in
  hierarchy until node with default namespace is found, and add the default
  namespace manually.

  Suboptimal solution for now: XML::Smart::DOM::Element#namespaces[nil] = ...

  Look at TODO, namespace change at some point in the future, will lead to
  0.3.0 will BREAK current API, but will then be MUCH more intuitive to use.

0.2.4
  * fixed tedious segfault (ENHANCES STABLITY A LOT)

0.2.3.2
  * when XML::Smart::DOM::Element#add new node, the namespace from the parent node is used

0.2.3.1
  * ruby 1.9.2 support, set NOBLANKS and ctxt option, as it is forgotten in ruby 1.9.2 otherwise

0.2.3
  * ruby 1.9.2 support, rb_io_t->stdio_file instead of rb_io_t->f

0.2.2.1
  * XML::Smart::DOM::Namespaces#[nil] should work too

0.2.2
  * XML::Smart::DOM::Text#dump
  * XML::Smart::DOM::Namespaces#add(nil, "...")
    XML::Smart::DOM::Namespaces#[nil] = "..."
    add/modify the default namespace

0.2.1
  * XML::Smart::DOM::Element#add(XML::Smart::DOM::NodeSet) now copys or moves
    also textnodes

0.2.0.2 "Grml 2"
  * updated XSDtoRNG	

0.2.0.1 "Grml"
	* relaxng validation fix

0.2.0 "libxml-ruby does it, so we do it too, version bump!!11!!"
	* !!!!WARNING!!!! added libxslt as dependency
	* XML::Smart::DOM#dup (other dups still segfault :-)
	* XML::Smart::DOM#transform_with(XML::SMART.open("some_file.xsl"))
	  -> Very simplic, will support parameters if there is need for
	* XML::SMART::DOM::ELEMENT#to_doc will yield a new document with
		the element as root
	* Included XSDtoRNG to overcome libxml XSD schema part 1 deficits
	  -> XSDtoRNG maintainer: 1st class hero, keep improving it
	* XML::SMART::DOM#validate_against(XML::SMART.open("some_file.xsd"))
		-> so its working without libxml supporting it :-)
		-> what a pitty that libxml cannot apply the same trick internally,
		   cause there is a dependency on xslt 

0.1.12.2 "I'm working on a RIDDL immernoch"
	* XML::SMART::DOM#namespaces return namespaces correctly

0.1.12.1 "I'm working on a RIDDL"
	* XML::SMART::QNAME#namespace returns value for default namespace

0.1.12 "Oh my dear, a wall is missing in my flat and it's getting cold"
	* XML::SMART::DOM#save_unformated => defaults to false
	* XML::SMART::DOM#xinclude!
	* XML::SMART::DOM::ELEMENT#xinclude!
	* XML::SMART::DOM#validate_against(XML::SMART.open("some_file.rng"))
	  -> will validate against XML Schema if ever libxml supports it :-)

0.1.11 "name has to be selected"
  * Made usage in threads more robust (examples/concurrent.rb)
	  (namespace related bug? gone!)
	* Made examples work when smart.so is not yet installed
	* Fixed documentation generation the ugly way (ifdefs)
	* Addes documentation comments all over the code
	* GEM creation is now supported by Rakefile
	* XML::SMART::QNAME#to_s returns "prefix:name" instead of "name" only
	* XML::SMART::QNAME#inspect works the same for pull and dom
	* XML::Smart::Pull::AttributeSet includes Enumeration
	* 1.8.7 supported (rb_io_t works slightly different)

0.1.10 "christmas is all around you"
	* Adds XML::Smart::Dom::NamespaceSet#length
	* Fixes a bug XML::Smart::Dom::NamespaceSet#[]= that lead to segfaults for
		subsequent namespace setting
	* Fixes a bug XML::Smart::Dom#find and XML::Smart::Dom::Element#find
		-> ruby 1.8.* segfaults SOMETIMES (heisenbug :-) when rb_hash_foreach is
		   called for empty hashes
	* code cleanup and ifdefs to support > 1.8.6 (including 1.9.0)

0.1.9 "signal weaving"
  * XML::Smart::Dom::NodeSet#delete_if! returns now true when deleting a node
	* Change Handlers (examples/signals.rb)
    -> XML::Smart::Dom#on_change - supply a block that is called when a
		   document changes
    -> XML::Smart::Dom#change_handlers - an array that holds the list of
			 change handlers (add, change, delete, ... them)
	  -> 2 parameters are sent to your change handlers: type, node		 
		   type is one of XML::Smart::Dom::SIGNAL_ADD,
			 XML::Smart::Dom::SIGNAL_CHANGE, XML::Smart::Dom::SIGNAL_DELETE
	* Adds XML::Smart::Dom::Other which contains #text, #to_s, #path
	  -> returned when unknown node type
	* Adds XML::Smart::Dom#namespaces[=] which adds global namespace support 
	  -> its a hash
		-> no more need to add namespaces to every #find
		-> examples/namespace_find.rb
	* Loads of bugfixes, which I can no longer remember :-)
	  -> they had mostly to do with namespaces (e.g. handle xml namespace)

0.1.8 "Documentation is like sex: when it is good, it is very, very good; and
       when it is bad, it is better than nothing."
  * rake is now the only way to go     
  * Change qname.c to work correct for namespaces, inspired by Jonathan
    Paisley
  * Added the ability for append_child to move, copy existing nodes (from the same
    or any other document)
    Added constants:
      XML::Smart::DOM::Element::MOVE (default for same document)
      XML::Smart::DOM::Element::COPY (default for different document)
  * API BROKEN!!!!:    
    XML::Smart::Dom::Element#add        (renamed from append_child)
    XML::Smart::Dom::Element#add_before (renamed from insert_sibling_before)
    XML::Smart::Dom::Element#add_after  (renamed from insert_sibling_after)
    XML::Smart::Dom::Element#replace_by (NEW)
    -> add has now the ability to use other nodes (from same or other DOM's)
       as input
    -> #add_before, #add_after are now working, same parameters as with #add
      are possible
    -> examples/add_children.rb, examples/add_elements.rb  
  * #add, #add_before and #add_after are able to ::COPY/::MOVE the results of
    xpath searches (only the elements)
    -> example/move_children.rb
  * XML::Smart::Dom#root= is possible (simple replace_by, for root only)
  * TODO: Documentation is not available at all yet, copy over the pieces from
    Emmanuel
  * Changed XML::Smart::Dom::AttributeSet#has_key? to 
            XML::Smart::Dom::AttributeSet#has_attr?
  * Changed XML::Smart::Dom::AttributeSet#get to 
            XML::Smart::Dom::AttributeSet#get_attr
  * Added XML::Smart::Dom::AttributeSet#add
  * Added XML::Smart#new (same as #string), inspired by Ruediger Sonderfeld
      
0.1.7 "Horseman break things" Features + Breaking the API
  * added support for numbers, booleans and strings as return value from an
    xpath
  * extconf.rb cleanup
  * examples/count.rb
  * WARNING: XML::Simple::DOM::NodeSet#clear renamed to #delete_all!  
    This can break your application, but the name clear was no good idea at
    all because it behaves very different from Array#clear
  * WARNING: removed #inspect from rbxs_dom.c, rbxs_pull.c - so #inspect 
    behaves no longer like #to_s, at least as long as I can find
    something more useful
  * WARNING: remoded XML::Simple::DOM::AttributeSet#delete. This may break
    your program
  * Added:
      XML::Simple::DOM::NodeSet#delete_if!
      XML::Simple::DOM::NodeSet#delete_at!
      XML::Simple::DOM::NodeSet#nitems
    When deleting elements, the entries in the NodeSet will be set to nil.
    #nitems works according to Array#nitems.Nodesets have now Enumerable
    mixed in.
  * Added:  
      XML::Simple::DOM::AttributeSet#each (node.attributes.each { |n| })
    Nodesets have now Enumerable mixed in.
  * Renamed XML::Simple::Dom::Node to XML::Simple::Dom::Element and added:
      XML::Simple::DOM::Element#path   (uniquely identify the node)
      XML::Simple::DOM::Element#empty? (no children)
      XML::Simple::DOM::Element#mixed? (element and text nodes as children)
  * Added:
      XML::Simple::DOM::Attribute#path    (uniquely identify the node) 
      XML::Simple::DOM::Attribute#element (associated element)
  * Added XML::Simple::DOM::Text, so you have to check the #class. It has:
      XML::Simple::DOM::Text#to_s
      XML::Simple::DOM::Text#to_i
      XML::Simple::DOM::Text#to_f
      XML::Simple::DOM::Text#text
      XML::Simple::DOM::Text#text=
      XML::Simple::DOM::Text#parent
      XML::Simple::DOM::Text#path
  * Added XML::Simple::DOM#find so that doc.find("*") selects the root not,
    doc.root.find("*") select all elements beneath root. This is standard
    behaviour. 
  * Examples: Cleanup and cool new stuff.
      LOOK at examples/Visualise
  * Rename to XML::Smart    
      
0.1.6 "Investigating the not so obvious" 
  * added examples/replace.rb
  * added rb_gc_start() when a new document is parsed,
    example/replace.rb freezes after 600 parses, if this is not done.
    I can only assume, that there is an internal limit in libxml. ruby starts
    gc'ing when about 7 MB of memory are allocated.
    Investigiating this further is maybe necessary, cause I don't understand
    the effect fully.
  * added XML::Simple::DOM::Attribute#to_i    
  * changed behaviour of XML::Simple::file, the string that is used for 
    creating te document is no longer the name of the root element, but free
    form
    OLD: XML::Simple.file("test.xml",test) resulting in 
      <?xml version="1.0"?><test/>
    NEW: XML::Simple.file("test.xml","<test/>") resulting in
      <?xml version="1.0"?><test/>
    Drawback: you can initialize documents that are not wellformed, but i
    think the new way is much more convenient
  * changed examples/create.rb
  * added XML::Simple::DOM::Node#to_f
  * added XML::Simple::DOM::Node#children?
  * added XML::Simple::DOM::Attribute#to_f
  * added XML::Simple::DOM::Attribute#has_key?
  * removed XML::Simple::DOM::Attribute#at
  * changed XML::Simple::DOM::Node#inspect - behaves like expected now
  * added XML::Simple::DOM::Node#dump - output a Nodes XML representation
  * all #to_i behave like expected (with base as optional parameter)

0.1.5 "All work and no play ..." Features
  * XML::Simple::Dom::Node#parent
  * XML::Simple::Dom::Node#to_i
  * XML::Simple::Dom#save_as
  * XML::Simple#string
  * improved locking
  * started testing in semi-production environment
  * cleanup and reorganisation
  * examples/string.rb

0.1.4 "Pull Perfection" Bugfixes + Features
  * #append_child and the other functions now need only 1 paramter (thanks to
    Emmanuel Touzery)
  * domattributeset.* and pullattributeset.* to keep things logical
  * pullattribute as specialized returntype when accessing attributes via pull
  * small changes to nodes.c and attributes.c to remove a bug (to enthusiastic
    xmlFree)
  * additional cleanup and renaming
  * added Christian Neukirchen to AUTHORS

0.1.3 "Teamwork" - Bugfixes + Features
  * Merged patch that adds XML::Simple::Node#name, contributed by 
    <emmanuel dot touzery at wanadoo dot fr>
  * Restructuring of the code, rbxs_base.* was renamed to rbxs_do.*, the
    skeletons for the constructors and the module initialisation moved to
    rbxs.c, to improve the design    
  Together with Christian Neukirchen: <chneukirchen at gmail dot com>
  * Added XML::Simple::QName, XML::Simple::Node#name, returns a QName object,
    that has #name, #prefix, and #namespace.
  * Added the first implementation of a pull parser, by borrowing ideas and
    code from chris' ruby/dl implementation. XML::Simple.pull(File)
  * Added examples/pull.rb for first demonstration
  
0.1.2 "Session with Klaus" - Bugfixes + Features
  * rbxs_nodeset.c - each now works as expected
  * rbxs_base.c - changed open to (name,root[,encoding]), which creates a
                  file named name unless File.exists?
  * examples/create.rb - added
                  
0.1.1 "The morning after" - Bugfixes
  * Fixed memleaks in attributeset.c
  * Added examples/xpath_attrs.rb
  * Changed example names and added comments

0.1.0 "First Strike"
  * Basic Features
