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
