There is a long list of new features, enhancements and bug fixes in this release:

### Functionality Improvements

- Changed
`GeometryFactory.createGeometry()`to make a deep copy of the argument Geometry, using the CoordinateSequenceFactory of the factory - Added ability to specify a dimension in
`CoordinateArraySequence` - Changed
`Geometry.getEnvelopeInternal()`to return a copy of the cached envelope, to prevent modification - Added
`GeometryEditor.CoordinateSequenceOperation`to allow easy editing of constituent CoordinateSequences - Added
`GeometryFactory.createPolygon`convenience methods which do not require holes to be specified `Geometry`overlay methods now return empty results as atomic types of appropriate dimension- Added
`RectangleLineIntersector`to provide efficient rectangle-line intersection testing - Added
`getOrdinate`and`setOrdinate`to`Coordinate` `Quadtree`is`Serializable``STRtree`is`Serializable`- Added
`max`,`average`and`wrap`functions to`MathUtil` - Improved
`WKTReader`parse error reporting to report input line of error - Improved
`WKBReader`

to repair structurally-invalid input - Made
`TopologyPreservingSimplifier`thread-safe - Added
`AbstractSTRtree.isEmpty()`method - Added
`QuadTree.isEmpty()`method - Added
`KdTree.isEmpty()`method - Added decimation and duplicate point removal to
`ShapeWriter`. `ScaledNoder`now preserves Z values of input- Added instance methods for all
`Triangle`static methods - Added
`CGAlgorithmsDD`containing high-precision versions of some basic CG algorithms - Added
`IntersectionMatrix.isTrue()`method for testing IM pattern matches - Added
`getRawCoordinates`

methods to`PackedCoordinateSequence`

concrete classes - Modified
`Geometry.isSimple()`

to explicity check for simplicity for all types, and support`GeometryCollections`

- Improved
`MCIndexSnapRounder`

to add nodes only where they are necessary - Added
`CoordinateArrays.removeNull()`

method - Enhanced
`GeometryEditor`

to handle null geometries returned from operation - Added
`WKBHExFileReader`

- Added
`Distance3D`

operation

### Performance Improvements

- Simplified & improved performance of
`RectangleIntersects`by using new`RectangleLineIntersector` - In
`RandomPointsInGridBuilder`eliminated redundant`ArrayList`usage - In
`PreparedPolygonIntersects`and`PreparedLineStringIntersects`added check to avoid creating segment index if all test inputs are points - In
`AbstractSTRtree`switched to using indexed list access for better performance than using iterators - In
`AbstractSTRtree`freed inserted item array after index is built - Improved performance of
`Polygonizer`for cases with many potential holes - Improved performance for some
`DD`methods by making them`final` - Added fast filter for
`CGAlgorithmsDD.orientationIndex`, and switched to self-operations for DD determinant - Changed
`STRtree.createNode()`

to use a static class for nodes - Changed
`QuadTree Node`

to use scalar x and y variables rather than a`Coordinate`

to reduce memory allocation - Fixed
`PreparedGeometry`

concrete classes to be thread-safe. - Fixed
`SortedPackedIntervalRTree`

so that it is thread-safe.

### Robustness Improvements

- Switched to using DD extended-precision arithmetic to compute orientation predicate
`CGAlgorithms.distanceLineLine()`

improved to be more robust and performant- Fixed robustness issue causing
`Empty Stack`failure in`ConvexHull`for some nearly collinear inputs `CGAlgorithms.signedArea()`uses a more accurate algorithm

### Bug Fixes

- Fixed
`Geometry.equalsExact()`to avoid NPE when comparing empty and non-empty`Point`s - Fixed
`CascadedPolygonUnion`to discard non-polygonal components created during unioning, to avoid failures and provide more desirable behaviour - Fixed
`CentralEndpointIntersector`to initialize result correctly - Fixed
`DelaunayTriangulationBuilder.extractUniqueCoordinates(Geometry)`to avoid mutating the vertex order of the input Geometry - Fixed
`ConformingDelaunayTriangulationBuilder`to allow non-disjoint site and constraint vertex sets - Fixed
`RandomPointsInGridBuilder`point generation to use circle constraint correctly - Fixed Linear Referencing API to handle MultiLineStrings consistently, by always using the lowest possible index value, and by trimming zero-length components from results
- Fixed bug in
`LocationIndexedLine`and`LengthIndexLine`which was causing an assertion failure when the indexOfAfter() method was called with a constraint location which is at the end of the line - Fixed bug in
`STRtree.query(Envelope, ItemVisitor)`causing an NPE when tree is empty - Fixed issue with creating zero-length edges during buffer topology building under fixed precision, by: adding filter to remove zero-length edges; using a better estimate of scale factor for reducing to fixed precision after initial failure.
- Fixed
`TopologyPreservingSimplifier`to return a valid result for closed`LineString`s with large distance tolerances - Fixed
`TopologyPreservingSimplifier`to return an empty result for an empty input - Fixed
`DouglasPeuckerSimplifier`to return an empty result for an empty input - Fixed
`MinimumBoundingCircle`to correctly compute circle for obtuse triangles. - Fixd
`GeometryPrecisionReducer`to use input GeometryFactory when polygon topology is fixed - Fixed
`GeometryNoder`bug that was failing to snap to end vertices of lines - Fixed
`Geometry.getCentroid()`and`Geometry.getInteriorPoint()`to return`POINT EMPTY`for empty inputs - Fixed
`DelaunayTriangulationBuilder`to correctly extract unique points - Fixed
`KdTree`to correctly handle inserting duplicate points into an empty tree - Fixed
`LineSegment.projectionFactor()`to handle zero-length lines (by returning Double.POSITIVE_INFINITY) - Fixed
`LocationIndexedLine`to handle locations on zero-length lines - Fixed
`LengthIndexedLine`

and`LocationIndexedLine`

to handle`indexOfAfter()`

correctly - Fixed
`WKBReader`

to handle successive geometrys with different endianness - Fixed
`GeometricShapeFactory`

to correctly handle setting the centre point - Fixed
`GeometryFactory.createMultiPoint(CoordinateSequence)`

to handle sequences of dimension > 3

### API Changes

- Changed visibility of
`TaggedLineStringSimplifier`back to`public`due to user demand

### Testing

- Added Performance Testing framework (
`PerformanceTestRunner`and`PerformanceTestCase`) - Added named predicate tests to all Relate test cases

### JTS TestBuilder

### Functionality Improvements

- Added segment index visualization styling
- Improved
**Geometry Inspector** - Added stream digitizing for Polygon and LineString tools
- Added output of Test Case XML with WKB
- Added Extract Component tool
- Added Delete Vertices Or Components tool
- Added Geometry Edit Panel pop-up menu, with operations
- Added Halton sequence functions
- Added sorting functions
- Added function for selection of first N components
- Added CGAlgorithms functions
- Added ability to paste and load multiple WKBHex geometries

### Performance Improvements

- Using decimation substantially improves rendering time for large geometries.

### Bug Fixes

- Fixed bug in saving XML test files