<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.

-->
<document>
  <properties>
    <title>Apache Chainsaw&#x2122;</title>
  </properties>
  <body>
      <release version="2.0.0" date="2017-11-10" description="Apache Chainsaw 2.0.0">
      <action dev="psmith" issue="42789" type="add" due-to="Isuru Suriarachchi" due-to-email="">
		Added support for remembering filter expressions for each LogPanel
      </action>
      <action dev="psmith" issue="42851" type="add" due-to="Isuru Suriarachchi" due-to-email="">
		Added 'Go To Line' feature to navigate to a particular event #
      </action>
      <action dev="psmith" issue="42883" type="add" due-to="Isuru Suriarachchi" due-to-email="">
		Added ability to hide Welcome and Drag and Drop panels.
      </action>
	<action dev="psmith" issue="43158" type="add" due-to="Isuru Suriarachchi" due-to-email="">
		Added ability to remember last created receivers in an xml file, and load them at startup.
	</action>
	<action dev="psmith" issue="42883" type="add" due-to="Isuru Suriarachchi" due-to-email="">
		Added ability to remember hidden log panels.
	</action>
	<action dev="psmith" issue="42670" type="fix">Address memory leak when using cyclic model</action>
       <action issue="49078" action="fix">javadoc.jar was missing NOTICE and LICENSE.</action>
    </release>
  </body>
</document>
