Axis2/C (1.6.0)
   * XPath support for Axiom XML object model
   * CGI support
   * Improvements to MTOM to send, receive very large attachments
   * Improvements to AMQP transport
   * Improvemnets to WSDL2C codegen tool
   * Many bug fixes.
   * Memory leak fixes

Axis2/C (1.5.0)
   * AMQP Transport support with Apache Qpid. (At an experimental stage. Not working under Windows. Please refer the INSTALL file to build this)
   * Modifications to IIS Module to support IIS 6 & 7
   * Added a JScript file to automate IIS module registry configuration
   * Improved the in-only message handling
   * Specifying the MEP in the services.xml for non in-out messages made mandatory
   * Improvements to Guthtila for better performance
   * Improvements to TCPMon tool
   * Memory leak fixes
   * Bug fixes

Axis2/C (1.4.0)
   * Fixed library version numbering
   * Made Guththila as default XML parser
-- Axis2/C team <axis-c-dev@ws.apache.org> Mon,5 May 2008

Axis2/C (1.3.0)
   * Fixed a bug on version numbering
   * List Axis2/C dependencies licensing in LICENSE file
   * Add relevant copyright notices to NOTICE file
   * Digest Authentication Support
   * Proxy Authentication Support
   * Enhanced REST support
   * Ability to insert xml declaration on outgoing payloads
   * MTOM support with libcurl
   * Improvements to TCPMon Tool
   * Improvements to Test Coverage
   * Improvements to API docs
   * Improvements to CA certificate validation mechanisms on SSL Transport
   * Improvements to Neethi
   * Fixed issue in HTTP GET on mod_axis2
   * Major Improvements to Guththila Parser
   * Improvements to libcurl based sender
   * Creation of a FAQ list
   * Improvements to Axis2/C documentation
   * Added Documentation on Archive Based Deployment
   * Fixes for IIS module
   * Removed dependency in util for the Axis2/C core
   * Ability to access transport headers at the service level (for RESTful services)
   * uint64_t and int64_t support at util layer and codegen level
   * Removed zlib dependencies when Archive Based Deployment model is disabled
   * Signal Handling in Windows
   * Removed over 99% of the warnings found on Windows
   * Increased build speed on Windows with nmake.
   * Improvements to Windows build system
   * Extensions to client API to support HTTP/Proxy Authentication
   * Memory leak fixes
   * Many bug fixes

-- Axis2/C team <axis-c-dev@ws.apache.org> Fri, 29 February 2008
Axis2/C (1.2.0)
   * Improvements to Java tool, WSDL2C, that generates C code
   * Improvment to Apache2 module so that it
	* Create a shared memory global pool
	* create context hierarchy in the global pool 
	enabling it to have true application level scope.
   * Improved Policy
   * Improvements to thread environment
   * Improvements to error handling
   * Memory leak fixes
   * Many bug fixes

-- Axis2/C team <axis-c-dev@ws.apache.org> Mon, 17 January 2008
Axis2/C (1.1.0)
   * WS-Policy implementation
   * TCP Transport
   * Improvements to Guththila parser to improve performance
   * Improvements to Java tool, WSDL2C, that generates C code
   * Basic HTTP Authentication
   * Memory leak fixes
   * Many bug fixes
	
-- Axis2/C team <axis-c-dev@ws.apache.org> Mon, 24 September 2007

Axis2/C (1.0.0)
   * Many Bug Fixes
   * IIS module for server side
   * libcurl based client transport
   * Improvements to overall API to make it more user friendly, stable and binary compatible
   * Transport proxy support
   * Memory leak fixes
-- Axis2/C team <axis-c-dev@ws.apache.org> Mon, 30 April 2007

Axis2/C (0.96)
   * Major Memory leak fixes
   * Many Bug Fixes
   * Improvement to REST processing
   * Improvement to SOAP-Fault processing
   * Improvement to mod_axis2 library (plugged with apr pools)
   * Visual Studio 7.0 project
-- Axis2/C team <axis-c-dev@ws.apache.org> Thu, 19 December 2006 
	
Axis2/C (0.95)
  * Major Memory leak fixes
  * Many Bug Fixes
  * Improved Documentation
-- Axis2/C team <axis-c-dev@ws.apache.org> Thu, 26 October 2006 

Axis2/C (0.94)
  * Guththila pull parser support
  * WSDL2C code generation tool
  * TCP Monitor - C implementation
  * Major Memory leak fixes
  * Fixes to code generation with Java Tool
  * Many Bug Fixes
-- Axis2/C team <axis-c-dev@ws.apache.org>  Tue, 3 October 2006 
	
Axis2/C (0.93)
  * REST support for HTTP GET case
  * XML Schema implementation
  * Woden/C implementation that supports both WSDL 1.1 and WSDL 2.0
  * Dynamic client invocation (given a WSDL, consume services dynamically)
  * Numerous improvements to API and API documentation
  * Many bug fixes, especially, many paths of execution previously untouched were tested along with Sandesha2/C  implementation
-- Axis2/C team <axis-c-dev@ws.apache.org>  Thu, 31 August 2006 
	
Axis2/C (0.92)
  * Completed MTOM implementation with multiple attachment support and non-optimize  
  * Completed service client API with send robust and fire and forget
  * Added "message" to description hierarchy
  * Archive based deployment Model (for services and modules)
  * Code generation for WSDL using Java WSDL2Code tool
  * ADB support (with Java WSDL2C tool)
  * WS-Security usernameToken support
  * Initial implementation of the XML Schema parser (To be used in WSDL parser and REST support)
  * Initial implementation of WSDL parser (To be used in dynamic invocation)
  * Changed double pointer environment parameters into pointer parameters
  to improve efficiency
 -- Axis2/C team <axis-c-dev@ws.apache.org>  Fri, 16 June 2006 
	
Axis2/C (0.91)

  * Full Addressing 1.0 support
  * Improved fault handling model
  * SSL client transport
  * MTOM implementation
  * Implementation of easy to use service client and operation client APIs for client side programming
  * REST support (POST case)
  * Module version support
  * Service groups
  * Numerous bug fixes since last release
 -- Axis2/C team <axis-c-dev@ws.apache.org>  Mon, 15 May 2006 


Axis2/C (0.90)

  * Minimal memory leaks
  * Apache2 module working in Windows
  * More samples and tests
  * WSDL Object Model built based on the proposed WSDL 2.0 Component model
  * Dynamic Invocation
  * Numerous bug fixes since last release
 -- Axis2/C team <axis-c-dev@ws.apache.org>  Fri, 31 Mar 2006 


Axis2/C (M0.5)

  * Improving code quality by fixing memory leaks and reviewing the code
  * Apache2 integration
  * More samples and tests
  * Initial documentation(User guide, Developer Guide and Installation Guide)
  * Numerous bug fixes since last release
 -- Axis2/C team <axis-c-dev@ws.apache.org>  Fri, 10 Mar 2006 


Axis2/C (M0.4)

  * Threading support and threaded simple axis server
  * Module loading support
  * Addressing module and addressing based dispatching
  * HTTP chunking support
  * Improved logging mechanism
  * Ability to build and run on Windows platform
 -- Axis2/C team <axis-c-dev@ws.apache.org>  Fri, 17 Feb 2006


Axis2/C (M0.3)

  * Core engine in place with deployment, description and context hiarachies and http transport support
  * Soap processing support
  * Simple http server
  * Client API implementation
  * Couple of working service and client samples
 -- Axis2/C team <axis-c-dev@ws.apache.org>  Thu, 02 Feb 2006 


Axis2/C (M0.2)

  * Improved OM module
  * libxml2 parser support
  * PHP binding for OM module
  * Some test cases for PHP binding
  * Many memory leaks fixes
 -- Axis2/C team <axis-c-dev@ws.apache.org>  Thu, 08 Dec 2005


Axis2/C (M0.1)

  * Initial release

  * OM module
  * Guththila pull parser support
  * libxml2 parser support(only reader is supported as of now)
  * doxygen documentation support
  * A sample demonstrating how to use OM
 -- Axis2/C team <axis-c-dev@ws.apache.org>  Fri, 25 Nov 2005
