diff --git a/java/modules/distribution/src/main/release/docs/release_notes.txt b/java/modules/distribution/src/main/release/docs/release_notes.txt
index 3bc1a19..656a170 100644
--- a/java/modules/distribution/src/main/release/docs/release_notes.txt
+++ b/java/modules/distribution/src/main/release/docs/release_notes.txt
@@ -1,4 +1,4 @@
-Apache Synapse Enterprise Service Bus (ESB) - 1.2 Release Notes - June 2008
+Apache Synapse Enterprise Service Bus (ESB) - 3.0.0 Release Notes - Jan 2017
 
 1. Overview
     The Apache Synapse ESB is a robust, lightweight and highly scalable and distributed
@@ -12,106 +12,268 @@
 
 2. Installation Prerequisites 
 
-    Apache Synapse requires a J2SE runtime of version 1.5.x or later. Running the samples also
-    requires Apache Ant 1.7.x or later. Although Synapse would run with a JDK > 1.5.x, the Script
-    mediator may not properly function on these JDKs. Building Synapse from source requires
-    JDK 1.5.x, and Apache Maven 2.0.6 or later
+    Apache Synapse requires a J2SE runtime of version 1.6.0_23 or later. Running the samples also
+    requires Apache Ant 1.7.x or later. Building Synapse from source requires JDK 1.6.0_23, and
+    Apache Maven 3.2.x or later.
 
 3. Quick start
-    Please see the docs/Synapse_Quickstart.html guide
+    Please see the docs/userguide/quick_start.html
 
 4. Building the Samples
-    Please see the documents docs/Synapse_Samples.html and docs/Synapse_Samples_Setup.html
+    Please see the documents docs/userguide/samples.html and docs/userguide/samples/setup/index.html
 
 5. Synapse configuration language
-    Please see the document docs/Synapse_Configuration_Language.html
+    Please see the document docs/userguide/config.html
 
 6. Extending Synapse
-    Please see the document docs/Synapse_Extending.html
-    
-7. Known Issues and limitations
+    Please see the document /docs/userguide/extending.html
 
-  * SYNAPSE-180 Does not support throttling by concurrency within a cluster
-  * SYNAPSE-186 Does not support HTTP some of the REST operations (such as put/delete etc)
-  * SYNAPSE-181 Does not yet support JTA transactions
-  * SYNAPSE-330 Does not yet support load balancing with session affinity using SOAP sessions
-  * SYNAPSE-280 Does not preserve CDATA sections within payloads
-  * SYNAPSE-307 The XSLT mediator will not report errors encountered in a provided stylesheet
-
-  * The Synapse JMS implementation supports JMS 1.0.2b, however due to licensing issues we include
-    the JMS 1.1 spec JAR from Apache Geronimo (geronimo-jms_1.1_spec-1.1.jar) instead. If you have
-    any issues with JMS 1.0.x, please download the Sun JMS 1.0.2b JAR and replace supplied JAR from
-    Geronimo.
-
-8. Frequently asked questions
+7. Frequently asked questions
 
   * How can I change the default logging level of Synapse?
     Edit the lib/log4j.properties and set the line "log4j.category.org.apache.synapse=INFO" to
     "log4j.category.org.apache.synapse=DEBUG" and restart Synapse.
 
   * If you get an error related to WS-Security or when using it, check to ensure that your JDK
-    uses the "Unlimited Strength Jurisdiction Policy Files". These could be downloaded from
-    http://java.sun.com/javase/downloads/index_jdk5.jsp Refer to the associated documentation
-    for instructions on how to install it to your JDK.
+    uses the "Unlimited Strength Jurisdiction Policy Files". These could be downloaded online and
+    refer to the associated documentation for instructions on how to install it to your JDK.
 
-  * If you encounter issues with your JDK related to XML processing, try placing the Xerces jar
-    files xercesImpl-2.8.0.jar and xml-apis-1.3.03.jar in your <JDK>/jre/lib/endorsed/ directory.
-
-9. Reporting Problems
+8. Reporting Problems
 
     Please use the Apache JIRA system (http://issues.apache.org/jira/browse/SYNAPSE) to report issues
     You may also join the:
         synapse-dev mailing  list by sending email to dev-subscribe@synapse.apache.org
         synapse-user mailing list by sending email to user-subscribe@synapse.apache.org
 
-10. New features
-    The 1.2 release
-        * Support for Hessian binary messages
-        * FIX (Financial Information eXchange) protocol transport
-        * WS-Reliable Messaging support with WSO2 Mercury
-        * Support for re-usable database connection pools for DB report/lookup mediators
-        * Support for GZip encoding and HTTP 100 continue
-        * Natural support for dual channel messaging with WS-Addressing
-        * Cluster aware sticky load balancing support
-        * Non-blocking streaming of large messages at high concurreny with constant memory usage
-        * Support for an ELSE clause for the Filter mediator
-        * Ability to specify XPath expressions relative to the envelope or body
-        * Support for separate policies for incoming/outgoing messages
-        * Support for a mandatory sequence before mediation
+9. New in Version 3.0.0
 
-    The 1.1.1/1.1.2 releases                
-        * Enhanced clustering support for the Cache/Throttle Mediators
-        * New Mail transport that supports POP3/IMAP/SMTP
-        * JMX Monitoring support
-        * Callout Mediator
-        * Improved JMS/VFS transports
-        * Improved REST/POX support
-        * Annotations support for POJOCommand mediator
-        * Ability to pin a proxy or a task to server instances
+  * High-performing PassThrough HTTP transport support for all mediation scenarios
+        - Ultra-fast, low latency mediation of HTTP requests
+        - Supporting a very large number of inbound (client -> ESB) and outbound (ESB -> server) connections concurrently
+        - Intelligently handle message content and content awareness built into the engine with shared buffer
+        for handling data
+        - Automatic throttling and graceful performance degradation in the presence of slow or faulty clients and servers
 
-    The 1.1 release
-        * Apache VFS based file transport
-        * Scheduled Task support
-        * XQuery mediator
-        * POJO Command mediator
-        * DB Report and DB Lookup mediators
-        * Cache and Throttle mediators/enhancements
-        * Split/Clone/Aggregate mediators
-        * Improved logging and tracing support
+  * OCSP/CRL certificate validation support for HTTP transports
 
-    The 1.0 release
-        * Non blocking HTTP and HTTPS transport based on Apache HttpCore/NIO
-        * Proxy services with in/out/fault sequences, endpoints, inline sequences and WSDL support
-        * WSDL endpoints
-        * Load balancing and Failover endpoints
-        * Throttling mediator
+  * Respond Mediator - A Mediator for responding back to the client from anywhere in the mediation flow
 
-    The 0.91 release adds support for:
-        * WS-Reliable Messaging Sequence management
+  * Loopback Mediator - A Mediator for jumping from IN sequence to OUT sequence
 
-    The 0.90 release adds support for:
-        * WS-Security termination and initiation
-        * WS-ReliableMessaging termination and initiation
-        * Support for dynamic reloading and remote reigstries
-        * Scripting mediators based on Apache BSF
-        * Refactored and cleaner synapse configuration xml
+  * Header Mediator improvements
+        Support for adding/removing transport headers
+
+  * New xpath functions
+        url-encode xpath function
+        Access system properties from get-property function
+        base64 decode function
+
+  * Message Processor improvements
+        Resequencing Message Processor
+        New blocking client implementation
+
+  * Message Injector task improvements
+        Support for injecting a message to Proxy services
+        Support for injecting a message to named sequences
+
+  * Callout Mediator improvements
+        Support for WS-Security
+        Inline Endpoint support
+        Ability to dynamically set the EPR using 'To' header
+        NTLM support
+
+  * Script Mediator improvements
+        Support for removing properties
+
+  * REST API improvements
+        Transport level access restriction
+
+9. Jira Fixes in 3.0.0 Release
+
+** New Feature
+    * [SYNAPSE-636] - Add Python script examples to the Script Mediator samples
+    * [SYNAPSE-838] - EJB support for Synapse
+    * [SYNAPSE-893] - Resequencing Message Processor For Synapse
+    * [SYNAPSE-953] - Introducing transport level (HTTPs etc.) access restriction to Rest APIs
+    * [SYNAPSE-954] - OCSP/CRL Certificate Validation Feature for Synapse.
+    * [SYNAPSE-963] - Documentation for OCSP/CRL Certificate Validation Feature
+    * [SYNAPSE-966] - New Blocking Sender implementation
+    * [SYNAPSE-997] - Mediator for Respond back the message in mediation flow
+    * [SYNAPSE-1052] - Mediator to Jump from IN sequence to OUT sequence
+
+** Improvement
+    * [SYNAPSE-485] - Replace the use of sun.misc.Service with something available on other JDKs
+    * [SYNAPSE-575] - improve the callout mediator to provide the EPR as an endpoint.
+    * [SYNAPSE-584] - Enhance the non-blocking HTTP/S transports to recover from possible exceptions
+    * [SYNAPSE-646] - Implementing unit-tests for commons/evaluators
+    * [SYNAPSE-650] - Make the Usage of CDATA Optional in the FIX SOAP Infoset
+    * [SYNAPSE-806] - Incorporate the improvements in HTTPCORE-278 into Synapse when the 4.2 release of hc is available
+    * [SYNAPSE-837] - Upgrading quartz version used in synapse-task
+    * [SYNAPSE-843] - Scheduler must not run indefinitely when the value of 'count' parameter is zero
+    * [SYNAPSE-873] - Callout mediator improvement to get NTLM working
+    * [SYNAPSE-875] - Enable property files to be loaded from using customized location using system properties
+    * [SYNAPSE-891] - FIX message builder /formatter
+    * [SYNAPSE-913] - Pass Through HTTP Transport for Synapse and Using the Pass Through Transport by Default
+    * [SYNAPSE-917] - Allow synapse XPath to access system properties
+    * [SYNAPSE-920] - Pass Through HTTP Transport for Synapse and Using the Pass Through Transport  with more Fixers
+    * [SYNAPSE-921] - Synapse Xpath Expression To be  contentawre=false  when properties declare with $ctx,$trp
+    * [SYNAPSE-923] - FORCE_HTTP_CONTENT_LENGTH /COPY_CONTENT_LENGTH_FROM_INCOMING Has been broken in PT
+    * [SYNAPSE-924] - Evaluating Xpath Expresions defined in Templates not worked when parameter to be loaded from property as expression to the argument "{{get-property('request')}}"
+    * [SYNAPSE-947] - Support security in Callout Mediator
+    * [SYNAPSE-957] - MessageInjector task improvements
+    * [SYNAPSE-960] - Callout Mediator - Support different security policies for inbound and outbound flows
+    * [SYNAPSE-965] - Callout mediator to use 'To' header as EPR
+    * [SYNAPSE-969] - Inline Endpoint support for Callout Mediator
+    * [SYNAPSE-971] - Migrating Forwarding Message Processor to new blocking client implementation
+    * [SYNAPSE-972] - Sample for Invoke Secured Services with Scheduled Message Forwarding Processor
+    * [SYNAPSE-973] - Documentation update for config language changes in Callout Mediator
+    * [SYNAPSE-986] - Upgrade Synapse to use XMLSchema2
+    * [SYNAPSE-1006] - Improving NHTTP Transport Logs
+    * [SYNAPSE-1009] - Script mediator to support adding properties with scope
+    * [SYNAPSE-1010] - Script mediator to support removing properties
+    * [SYNAPSE-1012] - Add Xpath Base64 decode function
+    * [SYNAPSE-1013] - Upgrading rhino version to 1.7R5 in script mediator
+    * [SYNAPSE-1016] - Cannot preserve some required transport headers in the passthru and nhttp transports
+    * [SYNAPSE-1021] - Improve Header Mediator to add/remove transport headers
+    * [SYNAPSE-1022] - url-encode XPath function
+    * [SYNAPSE-1070] - Simplify samples with respond mediator
+    * [SYNAPSE-1078] - Update the startup script to skip the warning message when running on JDK higher than 1.5
+    * [SYNAPSE-1079] - Update the samples setup guide to reflect latest active mq jars and JDK versions
+    * [SYNAPSE-1080] - Update the samples catalog documentation with new samples
+    * [SYNAPSE-1082] - Update FAQ page with the PTT informations
+    * [SYNAPSE-1087] - Deployment Guide - Changes
+
+** Task
+    * [SYNAPSE-884] - Enable optional/default values in call-template mediator
+    * [SYNAPSE-993] - Use Svnpubsub for Site and Dists
+    * [SYNAPSE-1059] - Reduce Global timeout interval
+    * [SYNAPSE-1071] - Update "Upgrading" page in documentation
+    * [SYNAPSE-1072] - Update installation Guide
+    * [SYNAPSE-1074] - Update the new features section for release
+    * [SYNAPSE-1076] - Update the quick start guide with latest logs and supported JDK versions
+    * [SYNAPSE-1088] - Remove Java 1.8 limitation from the docs and startup script
+
+** Wish
+    * [SYNAPSE-841] - Adding support to header mediator to contain complex XML
+
+** Sub-task
+    * [SYNAPSE-948] - Sample and Integration test for Callout Mediator Security functionality
+    * [SYNAPSE-952] - Mediators Catalog documentation update for Callout mediator security functionality
+    * [SYNAPSE-958] - Samples for MessageInjector task improvements
+    * [SYNAPSE-959] - Integration tests for MessageInjector improvements
+    * [SYNAPSE-961] - Sample for Callout Mediator different security policies for inbound and outbound flows
+    * [SYNAPSE-962] - Integration test for Callout Mediator - Support different security policies for inbound and outbound flows
+    * [SYNAPSE-967] - Migrating Callout Mediator to new blocking client implementation
+    * [SYNAPSE-968] - Sample and an integration test for Callout mediator - Invoke a service using a defined Endpoint
+    * [SYNAPSE-970] - Sample and Integration test for Callout mediator inline endpoint feature
+    * [SYNAPSE-1029] - Test case for DISABLE_CHUNKING for proxy
+    * [SYNAPSE-1031] - Integration test case for Respond mediator
+    * [SYNAPSE-1032] - Documentation for respond mediator
+    * [SYNAPSE-1033] - Samples for Respond Mediator
+
+
+** Bug
+    * [SYNAPSE-528] - Synapse doesn't warn the user about pending callbacks
+    * [SYNAPSE-622] - NPE in ClientConnectionDebug.java:36 when running in a failover scenario
+    * [SYNAPSE-698] - NPE in SynapseConfiguration.destroy()
+    * [SYNAPSE-726] - AbstractContext.setName() method needs refactoring, coz MBean registrations also happens there.
+    * [SYNAPSE-774] - loading resources from registry is not based on synapse.home
+    * [SYNAPSE-777] - Issues encountered while using Synapse as a War
+    * [SYNAPSE-812] - Cannot query a wsdl which is protected by basic authentication in the publish wsdl feature.
+    * [SYNAPSE-818] - Update synapse properties mediator guide with the available properties..
+    * [SYNAPSE-824] - Can't configure a socket time out for server and client side seperatly.
+    * [SYNAPSE-836] - Issue when using failover with 2 cluster groups
+    * [SYNAPSE-844] - Bug in REST API Documentation
+    * [SYNAPSE-845] - NPE when all child enpoints of nested loadbalance endpoint failed
+    * [SYNAPSE-846] - Few parts of the code that prevents normal Synapse termination when running as a web application
+    * [SYNAPSE-847] - VFS transport throws exception, when try to pull large (>150kb) file from FTP location
+    * [SYNAPSE-850] - NIO transport does not work with IIS as the LB due to "Expect: 100-Continue" ESB NIO transport does not work with IIS as the LB due to "Expect: 100-Continue"
+    * [SYNAPSE-851] - VFS proxy generates the response.xml with empty content (Synapse-2.2.0-Snapshot trunk)
+    * [SYNAPSE-853] - When sending concurrent requests to a statistics enabled sequence, getting "concurrent modification exception"
+    * [SYNAPSE-857] - Templates Sample is broken
+    * [SYNAPSE-866] - Incorrect error handling in HttpCoreNIOSender#sendAsyncResponse
+    * [SYNAPSE-870] - Iterate Mediator "sequential" property works in the opposite way
+    * [SYNAPSE-871] - Connection Leaks When Using DBReport Mediator with XADataSources
+    * [SYNAPSE-872] - Parameters added to a VFS endpoint are added to the reply file name also
+    * [SYNAPSE-874] - Synapse Configuration update fails if 1 or more inactive proxy services exists.
+    * [SYNAPSE-877] - Empty Soap Request is not being processed in XQuery Mediator
+    * [SYNAPSE-878] - Insert into InMemoryMessageStore get lost when a MsgProcessor is reading from it at the same time
+    * [SYNAPSE-880] - Could not lookup for the JNDI data sources using default environment properties.
+    * [SYNAPSE-881] - When SynapseRecevieCallback handler receives SOAP fault from backend then synapse Message helper always try to cast SOAP Fault  detail entries to  OMElement without type checking
+    * [SYNAPSE-882] - Condition evaluator serializers adding an empty namespace when we serialize the condition
+    * [SYNAPSE-883] - ClassCastException: org.apache.axiom.om.impl.llom.OMElementImpl cannot be cast to org.apache.axiom.soap.SOAPFault error occurs when handling SOAPFault in out path of REST API
+    * [SYNAPSE-885] - Need to check whether task is already running before scheduling it.
+    * [SYNAPSE-886] - Throws NPE when try to access application through a load balancer
+    * [SYNAPSE-887] - [Enrich mediator] Source configuration does not get added as child of the specified property
+    * [SYNAPSE-889] - Null pointer exception is thrown, if xpath expression doesn't match with the property
+    * [SYNAPSE-890] - Pattern attribute of the property mediator does not seem to work
+    * [SYNAPSE-892] - JS mediator child dependancies (includes) not properly serializing throwing Class Cast Exception
+    * [SYNAPSE-894] - [Iterate Mediator] - Unwanted tags attached to the payload if preservePayload="false"
+    * [SYNAPSE-895] - Introduce a additional log to identify the issue in wrong vfs proxy configuration
+    * [SYNAPSE-896] - Relative WSDL path not working in WAR deployment
+    * [SYNAPSE-897] - Concurrency issue at Iterate Mediator
+    * [SYNAPSE-901] - Concurrency issue at Clone Mediator
+    * [SYNAPSE-902] - Fault sequence gets invoked even when the responseAction of an endpoint timeout is set to discard.
+    * [SYNAPSE-903] - Data sources used in DB mediators are closed without considering the fact that the associated datasource is configured globally, while hot-updating a proxy service.
+    * [SYNAPSE-907] - VFSTransportListener locks a folder if a non-matching file is put in to it
+    * [SYNAPSE-908] - VFSTransportListener unable to get the lock to a file when there is a # in the FTP/SFTP server password
+    * [SYNAPSE-911] - Enrich Mediator - Cannot enrich an Attribute value of an Element
+    * [SYNAPSE-919] - REST_URL_POSTFIX ignored when accessing API with the OPTIONS method
+    * [SYNAPSE-922] - Unable to navigate from given Hyper link in Quick Start Guide page of Synapse
+    * [SYNAPSE-926] - Unable to invoke a REST back-end with the OPTIONS verb
+    * [SYNAPSE-927] - Could not invoke the API when the REST URL is bit lengthy
+    * [SYNAPSE-932] - Class Loading issue in Script Mediator
+    * [SYNAPSE-933] - In Synapse Sample 57, when shutingdown the Axis2 servers one by one, shutting down the last server throws an Exception
+    * [SYNAPSE-934] - Website broken module links in http://synapse.apache.org/modules
+    * [SYNAPSE-935] - PassThrough Transport bug fixes-1
+    * [SYNAPSE-936] - Need an Implementation of the HttpGetRequestHandler Interface for the PassThrough Transport
+    * [SYNAPSE-937] - [PTT] Message not get built in response path when transport switching
+    * [SYNAPSE-938] - [PTT] Http Proxy not working with PassThroughHttpSender
+    * [SYNAPSE-939] - Fail Safe mode does not work when artifact configurations contain xml syntax errors
+    * [SYNAPSE-940] - Server startup fails when at least one API configuration contains an error
+    * [SYNAPSE-941] - Server startup fails when at least one Message Store/Processor configuration contains an error
+    * [SYNAPSE-942] - Issues in Template and Endpoint fail safe mode logic
+    * [SYNAPSE-943] - [PTT] Message always get built when endpoint format is set to "rest"
+    * [SYNAPSE-945] - Iterate Mediator incorrect debug logs
+    * [SYNAPSE-946] - Enqueue mediator - does not handles rejected execution exception
+    * [SYNAPSE-949] - Callout Mediator Integration test failure
+    * [SYNAPSE-950] - [PTT] NO_ENTITY_BODY property not working in response path
+    * [SYNAPSE-951] - EndpointDefinition Serialization issue
+    * [SYNAPSE-964] - Add documentation for all Synapse XPath functions.
+    * [SYNAPSE-974] - Mail transport sample 256 configurations are not valid.
+    * [SYNAPSE-976] - Validate Mediator contentAware issue
+    * [SYNAPSE-977] - Issue with Header mediator with complex headers
+    * [SYNAPSE-978] - Warnings get printed while deploying a proxy service
+    * [SYNAPSE-985] - Synapse still referring to incorrect (old) Maven dependencies
+    * [SYNAPSE-989] - Extra TCP Connections get created under high concurrency
+    * [SYNAPSE-998] - Memory leak in VFS
+    * [SYNAPSE-1003] - Memory Leaks while using Anonymous Endpoints
+    * [SYNAPSE-1004] - Passthrough Transport deadlock scenario
+    * [SYNAPSE-1005] - Validate mediator throws StackOverflowError, when the schema has Cyclic import or include
+    * [SYNAPSE-1007] - Enrich mediator does not enrich the message body when clone is set to 'false' and source type is set to 'property'
+    * [SYNAPSE-1011] - Fault sequence is not get triggered when an exception comes to AbstractListMediator
+    * [SYNAPSE-1014] - NPE in DefaultNHttpClientConnection consumeInput, when invoking a proxy concurrently
+    * [SYNAPSE-1015] - Message building fails at high concurrency when the outsequence is content aware
+    * [SYNAPSE-1020] - Deactivate sequence for message processor auto deactivations
+    * [SYNAPSE-1023] - DISABLE_CHUNKING property is not honored in the response path of PT
+    * [SYNAPSE-1024] - Chaning READY2ROCK/GET_ME_OUT to meaningful WAIT_BUILDER_IN_STREAM_COMPLETE and BUILDER_OUTPUT_STREAM
+    * [SYNAPSE-1025] - ESB PTT eats multi value transport headers assigned values other than the last
+    * [SYNAPSE-1026] - Access logs no longer working
+    * [SYNAPSE-1027] - Deferred building regression due to pass through handling
+    * [SYNAPSE-1028] - Possible Bugs in Code for Handling Content Length Encoding
+    * [SYNAPSE-1039] - Send Mediator inside Fault Sequence blocks if SSL exception occurred.
+    * [SYNAPSE-1040] - cloneMessageContext  in MessageHelper does not deep clone all synapse properties
+    * [SYNAPSE-1042] - MessageID returned as Null when a proxy is invoked via a scheduled task
+    * [SYNAPSE-1051] - recipientlist endpoint does not remove white spaces in list
+    * [SYNAPSE-1058] - VFS transport has the clear text password in the exceptions and Debug log
+    * [SYNAPSE-1060] - Property mediator configuration changes with requests if the type = OM
+    * [SYNAPSE-1061] -  WeightedRRLCAlgorithm Unwanted condition
+    * [SYNAPSE-1062] - Exceptions in Axis2 modules eventually block the application
+    * [SYNAPSE-1063] - Recipient List Endpoint - Endpoint is not assigned
+    * [SYNAPSE-1065] - GC Overhead limit exceeded error during running a performance test on simple Passthough Proxy
+    * [SYNAPSE-1073] - Link for the jettison is not accessible
+    * [SYNAPSE-1077] - application/xml to application/json is not properly converting
+    * [SYNAPSE-1083] - Extending Synapse page has minor issues.
+    * [SYNAPSE-1084] - Mediators Catalog - Minor corrections on the doc
+    * [SYNAPSE-1085] - Transport Catalog - Minor Punctuation corrections in the doc
+    * [SYNAPSE-1086] - Developer Guide - Minor Punctuation corrections in the doc
