You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2023/01/02 11:42:47 UTC

[sis] 02/02: Resolve compiler warnings about non-serializable fields. https://issues.apache.org/jira/browse/SIS-567

This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git

commit a2eed4d0f8af3c3e6476737491aafde6c82d4dcc
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Mon Jan 2 12:30:47 2023 +0100

    Resolve compiler warnings about non-serializable fields.
    https://issues.apache.org/jira/browse/SIS-567
---
 .../org/apache/sis/gui/coverage/GridTileCache.java |  2 +-
 .../org/apache/sis/gui/dataset/ResourceEvent.java  |  3 +++
 .../java/org/apache/sis/coverage/Category.java     |  2 ++
 .../org/apache/sis/coverage/RegionOfInterest.java  |  6 ++++--
 .../org/apache/sis/coverage/SampleDimension.java   |  2 ++
 .../org/apache/sis/coverage/SampleRangeFormat.java |  2 +-
 .../main/java/org/apache/sis/coverage/ToNaN.java   |  2 +-
 .../org/apache/sis/coverage/grid/GridGeometry.java |  4 ++--
 .../java/org/apache/sis/coverage/package-info.java |  2 +-
 .../apache/sis/feature/AbstractAssociation.java    |  1 +
 .../org/apache/sis/feature/AbstractAttribute.java  |  1 +
 .../org/apache/sis/feature/AbstractFeature.java    |  3 ++-
 .../apache/sis/feature/AbstractIdentifiedType.java |  4 ++++
 .../org/apache/sis/feature/AssociationView.java    |  1 +
 .../java/org/apache/sis/feature/AttributeView.java |  2 +-
 .../apache/sis/feature/DefaultAssociationRole.java |  1 +
 .../apache/sis/feature/DefaultAttributeType.java   |  1 +
 .../org/apache/sis/feature/DefaultFeatureType.java |  5 +++++
 .../java/org/apache/sis/feature/DenseFeature.java  |  2 ++
 .../org/apache/sis/feature/EnvelopeOperation.java  |  4 ++++
 .../sis/feature/FeatureOperationException.java     |  1 +
 .../sis/feature/InvalidFeatureException.java       |  1 +
 .../java/org/apache/sis/feature/LinkOperation.java |  1 +
 .../org/apache/sis/feature/NamedFeatureType.java   |  2 ++
 .../java/org/apache/sis/feature/PropertyView.java  |  2 +-
 .../apache/sis/feature/SingletonAssociation.java   |  1 +
 .../org/apache/sis/feature/SingletonAttribute.java |  1 +
 .../java/org/apache/sis/feature/SparseFeature.java |  1 +
 .../apache/sis/feature/StringJoinOperation.java    |  4 ++++
 .../java/org/apache/sis/filter/BinaryFunction.java |  4 ++--
 .../apache/sis/filter/BinaryGeometryFilter.java    |  5 +++--
 .../org/apache/sis/filter/ConvertFunction.java     |  2 +-
 .../org/apache/sis/filter/DefaultSortProperty.java |  2 +-
 .../java/org/apache/sis/filter/DistanceFilter.java |  2 +-
 .../java/org/apache/sis/filter/LeafExpression.java |  2 +-
 .../java/org/apache/sis/filter/LikeFilter.java     |  2 +-
 .../java/org/apache/sis/filter/LogicalFilter.java  |  4 ++--
 .../java/org/apache/sis/filter/PropertyValue.java  |  3 ++-
 .../java/org/apache/sis/filter/UnaryFunction.java  |  2 +-
 .../org/apache/sis/index/tree/NodeIterator.java    |  1 +
 .../java/org/apache/sis/index/tree/PointTree.java  | 15 ++++++-------
 .../org/apache/sis/index/tree/PointTreeNode.java   | 15 ++-----------
 .../org/apache/sis/index/tree/QuadTreeNode.java    |  7 +-----
 .../org/apache/sis/internal/feature/Resources.java |  1 -
 .../internal/feature/SpatialOperationContext.java  |  8 +++----
 .../sis/internal/feature/j2d/ShapeWrapper.java     |  1 +
 .../feature/jts/PackedCoordinateSequence.java      |  5 +++++
 .../sis/internal/filter/GeometryConverter.java     |  2 +-
 .../sis/internal/filter/SortByComparator.java      |  1 +
 .../internal/filter/sqlmm/FunctionWithSRID.java    |  1 +
 .../internal/filter/sqlmm/GeometryConstructor.java |  1 +
 .../sis/internal/filter/sqlmm/OneGeometry.java     |  3 ++-
 .../apache/sis/internal/filter/sqlmm/ST_Point.java |  1 +
 .../sis/internal/filter/sqlmm/ST_Transform.java    |  1 +
 .../sis/internal/filter/sqlmm/TwoGeometries.java   |  2 ++
 .../sis/internal/processing/isoline/Fragments.java |  2 +-
 .../sis/internal/jaxb/IdentifierMapAdapter.java    |  2 +-
 .../sis/internal/jaxb/SpecializedIdentifier.java   |  2 +-
 .../apache/sis/internal/metadata/Resources.java    |  1 -
 .../sis/internal/simple/SimpleAttributeType.java   |  1 +
 .../internal/simple/SimpleIdentifiedObject.java    |  1 +
 .../sis/internal/simple/SimpleIdentifier.java      |  1 +
 .../org/apache/sis/metadata/MetadataFormat.java    |  2 +-
 .../org/apache/sis/metadata/MetadataStandard.java  |  2 +-
 .../org/apache/sis/metadata/iso/ISOMetadata.java   |  2 +-
 .../org/apache/sis/util/iso/DefaultRecord.java     |  2 +-
 .../org/apache/sis/util/iso/DefaultRecordType.java |  2 +-
 .../org/apache/sis/util/iso/DefaultTypeName.java   |  2 +-
 .../org/apache/sis/util/iso/RecordDefinition.java  |  2 +-
 .../main/java/org/apache/sis/util/iso/Types.java   |  1 +
 .../main/java/org/apache/sis/xml/NilReason.java    |  3 ++-
 .../src/main/java/org/apache/sis/xml/XLink.java    |  1 +
 .../org/apache/sis/geometry/ArrayEnvelope.java     |  1 +
 .../org/apache/sis/geometry/CoordinateFormat.java  |  3 +++
 .../org/apache/sis/geometry/DirectPosition1D.java  |  1 +
 .../org/apache/sis/geometry/DirectPosition2D.java  |  1 +
 .../java/org/apache/sis/geometry/Envelope2D.java   |  1 +
 .../apache/sis/geometry/GeneralDirectPosition.java |  1 +
 .../internal/referencing/EPSGParameterDomain.java  |  1 +
 .../apache/sis/internal/referencing/RTreeNode.java |  1 +
 .../referencing/j2d/AffineTransform2D.java         |  2 +-
 .../referencing/j2d/IntervalRectangle.java         |  8 +++++--
 .../referencing/j2d/ParameterizedAffine.java       |  3 ++-
 .../sis/internal/referencing/j2d/package-info.java |  2 +-
 .../referencing/provider/DatumShiftGridFile.java   |  3 +++
 .../referencing/provider/DatumShiftGridGroup.java  |  5 ++++-
 .../referencing/provider/package-info.java         |  2 +-
 .../java/org/apache/sis/io/wkt/StoredTree.java     |  1 +
 .../main/java/org/apache/sis/io/wkt/WKTFormat.java |  5 ++---
 .../main/java/org/apache/sis/io/wkt/Warnings.java  | 25 ++++++++--------------
 .../java/org/apache/sis/io/wkt/package-info.java   |  2 +-
 .../parameter/DefaultParameterDescriptorGroup.java |  2 +-
 .../sis/parameter/DefaultParameterValue.java       |  4 ++--
 .../apache/sis/parameter/FilteredParameters.java   |  3 ++-
 .../sis/parameter/MapProjectionParameters.java     |  3 +++
 .../org/apache/sis/parameter/ParameterFormat.java  |  6 +++---
 .../apache/sis/parameter/ParameterValueList.java   |  4 ++--
 .../java/org/apache/sis/parameter/Parameters.java  |  2 +-
 .../org/apache/sis/parameter/TensorParameters.java |  2 +-
 .../org/apache/sis/parameter/TensorValues.java     |  2 +-
 .../sis/parameter/UninitializedParameter.java      |  2 +-
 .../parameter/UnmodifiableParameterValueGroup.java |  4 ++--
 .../sis/referencing/AbstractIdentifiedObject.java  |  8 +++----
 .../sis/referencing/AbstractReferenceSystem.java   |  4 ++--
 .../sis/referencing/ImmutableIdentifier.java       |  4 ++--
 .../org/apache/sis/referencing/Properties.java     |  1 +
 .../apache/sis/referencing/crs/AbstractCRS.java    |  2 +-
 .../sis/referencing/crs/AbstractDerivedCRS.java    |  2 +-
 .../sis/referencing/crs/DefaultCompoundCRS.java    |  1 +
 .../sis/referencing/crs/DefaultEngineeringCRS.java |  2 +-
 .../sis/referencing/crs/DefaultGeodeticCRS.java    |  1 +
 .../sis/referencing/crs/DefaultImageCRS.java       |  1 +
 .../sis/referencing/crs/DefaultParametricCRS.java  |  1 +
 .../sis/referencing/crs/DefaultTemporalCRS.java    |  1 +
 .../sis/referencing/crs/DefaultVerticalCRS.java    |  1 +
 .../org/apache/sis/referencing/cs/AbstractCS.java  |  2 +-
 .../sis/referencing/cs/DefaultCompoundCS.java      |  5 +++--
 .../cs/DefaultCoordinateSystemAxis.java            |  1 +
 .../sis/referencing/datum/AbstractDatum.java       |  3 +++
 .../sis/referencing/datum/BursaWolfParameters.java |  2 ++
 .../sis/referencing/datum/DatumShiftGrid.java      |  3 +++
 .../sis/referencing/datum/DefaultEllipsoid.java    |  1 +
 .../referencing/datum/DefaultGeodeticDatum.java    |  2 ++
 .../referencing/datum/DefaultPrimeMeridian.java    |  1 +
 .../org/apache/sis/referencing/datum/Sphere.java   |  3 ---
 .../factory/UnavailableFactoryException.java       |  4 ++--
 .../sis/referencing/factory/package-info.java      |  2 +-
 .../operation/AbstractCoordinateOperation.java     | 14 ++++++------
 .../operation/AbstractSingleOperation.java         |  4 ++--
 .../operation/CoordinateOperationContext.java      |  2 +-
 .../operation/DefaultConcatenatedOperation.java    |  2 +-
 .../sis/referencing/operation/DefaultFormula.java  |  4 ++--
 .../operation/DefaultOperationMethod.java          |  4 ++--
 .../operation/DefaultPassThroughOperation.java     |  2 +-
 .../operation/InverseOperationMethod.java          |  2 +-
 .../operation/builder/LinearTransformBuilder.java  |  1 -
 .../builder/LocalizationGridException.java         |  1 +
 .../operation/builder/ResidualGrid.java            |  1 +
 .../operation/matrix/UnmodifiableMatrix.java       |  1 +
 .../referencing/operation/projection/Inverter.java |  2 +-
 .../referencing/operation/projection/Mercator.java |  6 ------
 .../operation/projection/NormalizedProjection.java |  2 +-
 .../operation/projection/ZonedGridSystem.java      |  3 +++
 .../transform/AbstractLinearTransform.java         |  2 +-
 .../operation/transform/ConcatenatedTransform.java |  3 +++
 .../operation/transform/ContextualParameters.java  |  6 +++---
 .../operation/transform/DatumShiftTransform.java   |  2 ++
 .../transform/DefaultMathTransformFactory.java     |  2 +-
 .../transform/EllipsoidToCentricTransform.java     |  2 +-
 .../transform/ExponentialTransform1D.java          |  2 +-
 .../transform/InterpolatedGeocentricTransform.java |  1 +
 .../operation/transform/LinearInterpolator1D.java  |  3 ++-
 .../transform/LogarithmicTransform1D.java          |  1 +
 .../operation/transform/PassThroughTransform.java  |  1 +
 .../operation/transform/PoleRotation.java          |  2 +-
 .../transform/SpecializableTransform.java          |  5 +++++
 .../operation/transform/TransferFunction.java      |  1 +
 .../operation/transform/TransformAdapter2D.java    |  1 +
 .../operation/transform/SinusoidalShiftGrid.java   |  2 +-
 .../sis/internal/converter/ArrayConverter.java     |  1 +
 .../internal/converter/CharSequenceConverter.java  |  1 +
 .../sis/internal/converter/FallbackConverter.java  |  2 ++
 .../sis/internal/converter/IdentityConverter.java  |  8 +++----
 .../sis/internal/converter/StringConverter.java    | 22 +++++++++----------
 .../sis/internal/converter/package-info.java       |  2 +-
 .../sis/internal/util/AutoMessageFormat.java       |  2 +-
 .../apache/sis/internal/util/CheckedHashSet.java   |  1 +
 .../sis/internal/util/SimpleCharacterIterator.java | 10 ++-------
 .../sis/internal/util/UnmodifiableArrayList.java   |  1 +
 .../main/java/org/apache/sis/math/ArrayVector.java |  2 +-
 .../org/apache/sis/math/ConcatenatedVector.java    |  1 +
 .../org/apache/sis/math/LinearlyDerivedVector.java |  1 +
 .../java/org/apache/sis/math/RepeatedVector.java   |  1 +
 .../main/java/org/apache/sis/math/Statistics.java  |  1 +
 .../apache/sis/measure/ConcatenatedConverter.java  |  2 ++
 .../org/apache/sis/measure/ConventionalUnit.java   |  2 +-
 .../java/org/apache/sis/measure/DerivedScalar.java |  4 ++--
 .../sis/measure/FormattedCharacterIterator.java    | 23 ++++----------------
 .../org/apache/sis/measure/MeasurementRange.java   |  1 +
 .../main/java/org/apache/sis/measure/Range.java    |  1 +
 .../main/java/org/apache/sis/measure/Scalar.java   |  2 +-
 .../apache/sis/measure/SexagesimalConverter.java   |  2 +-
 .../java/org/apache/sis/measure/UnitDimension.java |  2 +-
 .../java/org/apache/sis/measure/UnitFormat.java    |  5 +++--
 .../sis/util/collection/DefaultTreeTable.java      |  4 ++--
 .../org/apache/sis/util/collection/DerivedMap.java |  6 +++---
 .../org/apache/sis/util/collection/DerivedSet.java |  2 +-
 .../sis/util/collection/FrequencySortedSet.java    |  3 +--
 .../org/apache/sis/util/collection/RangeSet.java   |  1 +
 .../apache/sis/util/collection/TreeNodeList.java   |  2 ++
 .../sis/util/collection/TreeTableFormat.java       |  3 +++
 .../resources/ResourceInternationalString.java     |  1 +
 .../measure/FormattedCharacterIteratorTest.java    |  2 +-
 .../sis/internal/profile/fra/Constraints.java      |  1 +
 .../internal/profile/fra/DataIdentification.java   |  1 +
 .../profile/fra/DirectReferenceSystem.java         |  2 +-
 .../profile/fra/IndirectReferenceSystem.java       |  2 +-
 .../sis/internal/profile/fra/LegalConstraints.java |  1 +
 .../internal/profile/fra/SecurityConstraints.java  |  1 +
 .../sis/internal/storage/wkt/StoreFormat.java      |  2 +-
 .../apache/sis/storage/CanNotProbeException.java   |  5 +++--
 .../java/org/apache/sis/storage/CoverageQuery.java |  2 +-
 .../java/org/apache/sis/storage/FeatureQuery.java  |  5 +++++
 .../storage/gpx/GroupAsPolylineOperation.java      |  1 +
 204 files changed, 344 insertions(+), 236 deletions(-)

diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridTileCache.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridTileCache.java
index 81359890e3..52775781ff 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridTileCache.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridTileCache.java
@@ -29,7 +29,7 @@ import org.apache.sis.internal.coverage.j2d.ImageUtilities;
  * @version 1.1
  * @since   1.1
  */
-@SuppressWarnings("serial")
+@SuppressWarnings({"serial", "CloneableImplementsClone"})               // Not intended to be serialized.
 final class GridTileCache extends LinkedHashMap<GridTile,GridTile> {
     /**
      * Creates a new cache of tiles.
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ResourceEvent.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ResourceEvent.java
index 915e34d9fd..1f44d45726 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ResourceEvent.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ResourceEvent.java
@@ -57,6 +57,9 @@ public class ResourceEvent extends Event {
 
     /**
      * Path to the resource being loaded or closed.
+     *
+     * @todo The default implementation provided by the JDK is not serializable.
+     *       We have no workaround at this time.
      */
     private final Path path;
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/Category.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/Category.java
index 064932a449..59efc35e42 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/Category.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/Category.java
@@ -103,6 +103,7 @@ public class Category implements Serializable {
      *
      * @see #getName()
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final InternationalString name;
 
     /**
@@ -139,6 +140,7 @@ public class Category implements Serializable {
      *
      * @see #getTransferFunction()
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final MathTransform1D toConverse;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/RegionOfInterest.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/RegionOfInterest.java
index a5cfd024dc..7477a479e4 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/RegionOfInterest.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/RegionOfInterest.java
@@ -49,7 +49,7 @@ import org.apache.sis.util.Utilities;
  * Future versions may allow other ways such as mask rasters.</p>
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.2
+ * @version 1.4
  * @since   1.2
  */
 public class RegionOfInterest implements LenientComparable, Serializable {
@@ -61,6 +61,7 @@ public class RegionOfInterest implements LenientComparable, Serializable {
     /**
      * The region of interest as a geometry. Coordinates are in the CRS given be {@link #crs}.
      */
+    @SuppressWarnings("serial")                     // Most Java2D implementations are serializable.
     private final Shape geometry;
 
     /**
@@ -68,6 +69,7 @@ public class RegionOfInterest implements LenientComparable, Serializable {
      * In current version, it shall be a two-dimensional CRS.
      * May be {@code null} if unknown.
      */
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private final CoordinateReferenceSystem crs;
 
     /**
@@ -134,7 +136,7 @@ public class RegionOfInterest implements LenientComparable, Serializable {
      */
     @Override
     public boolean equals(final Object other, final ComparisonMode mode) {
-        if (other instanceof ComparisonMode) {
+        if (other instanceof RegionOfInterest) {
             final RegionOfInterest that = (RegionOfInterest) other;
             if (mode != ComparisonMode.STRICT || other.getClass() == getClass()) {
                 return geometry.equals(that.geometry) && Utilities.deepEquals(crs, that.crs, mode);
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleDimension.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleDimension.java
index f2cb9f40db..8f105ffe50 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleDimension.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleDimension.java
@@ -96,6 +96,7 @@ public class SampleDimension implements Serializable {
      *
      * @see #getName()
      */
+    @SuppressWarnings("serial")       // Most SIS implementations are serializable.
     private final GenericName name;
 
     /**
@@ -117,6 +118,7 @@ public class SampleDimension implements Serializable {
      *
      * @see #getTransferFunction()
      */
+    @SuppressWarnings("serial")                         // Most SIS implementations are serializable.
     private final MathTransform1D transferFunction;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleRangeFormat.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleRangeFormat.java
index b41e4ef1e6..06ef7c6f49 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleRangeFormat.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleRangeFormat.java
@@ -38,7 +38,7 @@ import org.apache.sis.util.resources.Vocabulary;
  * @version 1.1
  * @since   1.0
  */
-@SuppressWarnings({"CloneableImplementsClone", "serial"})           // Not intended to be cloned or serialized.
+@SuppressWarnings({"serial", "CloneableImplementsClone"})           // Not intended to serialized.
 final class SampleRangeFormat extends RangeFormat {
     /**
      * Maximum value for {@link #numFractionDigits}. This is the number
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/ToNaN.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/ToNaN.java
index 14c4d5eaba..411e74b6ae 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/ToNaN.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/ToNaN.java
@@ -32,7 +32,7 @@ import org.apache.sis.internal.feature.Resources;
  * @version 1.1
  * @since   1.0
  */
-@SuppressWarnings({"CloneableImplementsClone", "serial"})           // Not intended to be cloned or serialized.
+@SuppressWarnings({"serial", "CloneableImplementsClone"})                       // Not intended to be serialized.
 final class ToNaN extends HashSet<Integer> implements DoubleToIntFunction {
     /**
      * The value which should be assigned ordinal 0 if that ordinal value is available.
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index 3a2aaf195e..5933ed685d 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -232,7 +232,7 @@ public class GridGeometry implements LenientComparable, Serializable {
      * @see #getGridToCRS(PixelInCell)
      * @see PixelInCell#CELL_CENTER
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     protected final MathTransform gridToCRS;
 
     /**
@@ -242,7 +242,7 @@ public class GridGeometry implements LenientComparable, Serializable {
      * @serial This field is serialized because it may be a value specified explicitly at construction time,
      *         in which case it can be more accurate than a computed value.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final MathTransform cornerToCRS;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/package-info.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/package-info.java
index 433124dd5f..65ea533405 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/package-info.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/package-info.java
@@ -23,7 +23,7 @@
  * {@link org.apache.sis.coverage.grid}.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.2
+ * @version 1.4
  * @since   1.0
  */
 package org.apache.sis.coverage;
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java
index 4d8e4d3892..116f1f8e91 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java
@@ -63,6 +63,7 @@ public abstract class AbstractAssociation extends Field<Feature> implements Feat
     /**
      * Information about the association.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final FeatureAssociationRole role;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java
index a7e169cb12..545156f1ba 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java
@@ -86,6 +86,7 @@ public abstract class AbstractAttribute<V> extends Field<V> implements Attribute
     /**
      * Information about the attribute (base Java class, domain of values, <i>etc.</i>).
      */
+    @SuppressWarnings("serial")     // Most SIS implementations are serializable.
     final AttributeType<V> type;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractFeature.java b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractFeature.java
index 932de85abe..b644531b7f 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractFeature.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractFeature.java
@@ -101,6 +101,7 @@ public abstract class AbstractFeature implements Feature, Serializable {
     /**
      * Information about the feature (name, characteristics, <i>etc.</i>).
      */
+    @SuppressWarnings("serial")     // Most SIS implementations are serializable.
     final FeatureType type;
 
     /**
@@ -844,7 +845,7 @@ public abstract class AbstractFeature implements Feature, Serializable {
      * Notifies that the comparison of {@code this} feature is finished.
      */
     final void comparisonEnd() {
-        if (COMPARING.get().remove(this) != Boolean.TRUE) {
+        if (!Boolean.TRUE.equals(COMPARING.get().remove(this))) {
             throw new AssertionError();     // Should never happen.
         }
     }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractIdentifiedType.java b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractIdentifiedType.java
index 9267611d2d..d8e1c54604 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractIdentifiedType.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractIdentifiedType.java
@@ -98,6 +98,7 @@ public class AbstractIdentifiedType implements IdentifiedType, Deprecable, Seria
      * @see #getName()
      * @see #NAME_KEY
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private final GenericName name;
 
     /**
@@ -106,6 +107,7 @@ public class AbstractIdentifiedType implements IdentifiedType, Deprecable, Seria
      * @see #getDefinition()
      * @see #DEFINITION_KEY
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private final InternationalString definition;
 
     /**
@@ -115,6 +117,7 @@ public class AbstractIdentifiedType implements IdentifiedType, Deprecable, Seria
      * @see #getDesignation()
      * @see #DESIGNATION_KEY
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private final InternationalString designation;
 
     /**
@@ -124,6 +127,7 @@ public class AbstractIdentifiedType implements IdentifiedType, Deprecable, Seria
      * @see #getDescription()
      * @see #DESCRIPTION_KEY
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private final InternationalString description;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/AssociationView.java b/core/sis-feature/src/main/java/org/apache/sis/feature/AssociationView.java
index 71373715ae..3b44cc198e 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/AssociationView.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/AssociationView.java
@@ -47,6 +47,7 @@ class AssociationView extends PropertyView<Feature> implements FeatureAssociatio
     /**
      * The role of this association. Must be one of the properties listed in the {@link #feature}.
      */
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private final FeatureAssociationRole role;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/AttributeView.java b/core/sis-feature/src/main/java/org/apache/sis/feature/AttributeView.java
index b31a7b24f8..fead64f113 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/AttributeView.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/AttributeView.java
@@ -53,7 +53,7 @@ class AttributeView<V> extends PropertyView<V> implements Attribute<V> {
     /**
      * The type of this attribute. Must be one of the properties listed in the {@link #feature}.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final AttributeType<V> type;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java b/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
index 14f98fc51b..b7f0bbbbc3 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
@@ -74,6 +74,7 @@ public class DefaultAssociationRole extends FieldType implements FeatureAssociat
      *
      * @see #getValueType()
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private volatile FeatureType valueType;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAttributeType.java b/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAttributeType.java
index e9623d6cd8..00c813eba5 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAttributeType.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAttributeType.java
@@ -123,6 +123,7 @@ public class DefaultAttributeType<V> extends FieldType implements AttributeType<
      *
      * @see #getDefaultValue()
      */
+    @SuppressWarnings("serial")         // Not statically typed as Serializable.
     private final V defaultValue;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java b/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java
index 8d21a8cbb0..29841e9f5a 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java
@@ -156,6 +156,7 @@ public class DefaultFeatureType extends AbstractIdentifiedType implements Featur
      *
      * @see #getSuperTypes()
      */
+    @SuppressWarnings("serial")                     // Can be various serializable implementations.
     private final Set<FeatureType> superTypes;
 
     /**
@@ -173,6 +174,7 @@ public class DefaultFeatureType extends AbstractIdentifiedType implements Featur
      *
      * @see #getProperties(boolean)
      */
+    @SuppressWarnings("serial")                     // Can be various serializable implementations.
     private final List<PropertyType> properties;
 
     /**
@@ -198,6 +200,8 @@ public class DefaultFeatureType extends AbstractIdentifiedType implements Featur
      *
      * The size of this map may be smaller than the {@link #byName} size.
      * This map shall not be modified after construction.
+     *
+     * @see #indices()
      */
     private transient Map<String, Integer> indices;
 
@@ -875,6 +879,7 @@ public class DefaultFeatureType extends AbstractIdentifiedType implements Featur
     /**
      * Returns the map from names to indices in an array of properties.
      * This is used for {@link DenseFeature} implementation.
+     * Caller shall not modify the returned map.
      */
     @SuppressWarnings("ReturnOfCollectionOrArrayField")
     final Map<String,Integer> indices() {
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/DenseFeature.java b/core/sis-feature/src/main/java/org/apache/sis/feature/DenseFeature.java
index e6fd97f7bf..319a81f9d1 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/DenseFeature.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/DenseFeature.java
@@ -55,6 +55,7 @@ final class DenseFeature extends AbstractFeature implements Cloneable {
      * {@link DefaultFeatureType#indices} map (potentially shared by many feature instances) and shall not be
      * modified.
      */
+    @SuppressWarnings("serial")                     // Can be various serializable implementations.
     private final Map<String, Integer> indices;
 
     /**
@@ -65,6 +66,7 @@ final class DenseFeature extends AbstractFeature implements Cloneable {
      * property is requested. The intent is to reduce the amount of allocated objects as much as possible,
      * because typical SIS applications may create a very large amount of features.
      */
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private Object[] properties;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/EnvelopeOperation.java b/core/sis-feature/src/main/java/org/apache/sis/feature/EnvelopeOperation.java
index 5ed1cfdbfa..6018a951d6 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/EnvelopeOperation.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/EnvelopeOperation.java
@@ -96,6 +96,7 @@ final class EnvelopeOperation extends AbstractOperation {
      * Note that this is the CRS desired by user of this {@link EnvelopeOperation};
      * it may be unrelated to the CRS of stored geometries.
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     final CoordinateReferenceSystem targetCRS;
 
     /**
@@ -114,6 +115,7 @@ final class EnvelopeOperation extends AbstractOperation {
      * implementations of {@link DenseFeature} and {@link SparseFeature} have a "all of nothing" behavior anyway.
      * So there is no performance gain to expect from a fine-grained knowledge of which properties declare a CRS.
      */
+    @SuppressWarnings("serial")                         // Most SIS implementations are serializable.
     private final CoordinateOperation[] attributeToCRS;
 
     /**
@@ -124,6 +126,7 @@ final class EnvelopeOperation extends AbstractOperation {
     /**
      * The type of the result returned by the envelope operation.
      */
+    @SuppressWarnings("serial")                         // Most SIS implementations are serializable.
     private final AttributeType<Envelope> resultType;
 
     /**
@@ -278,6 +281,7 @@ final class EnvelopeOperation extends AbstractOperation {
         /**
          * The feature specified to the {@link StringJoinOperation#apply(Feature, ParameterValueGroup)} method.
          */
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         private final Feature feature;
 
         /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureOperationException.java b/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureOperationException.java
index 870cfefbcc..530ddddf6a 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureOperationException.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureOperationException.java
@@ -39,6 +39,7 @@ final class FeatureOperationException extends IllegalStateException implements L
     /**
      * A description of the computation error.
      */
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private final InternationalString message;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/InvalidFeatureException.java b/core/sis-feature/src/main/java/org/apache/sis/feature/InvalidFeatureException.java
index 9c920ace88..6e14737c1e 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/InvalidFeatureException.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/InvalidFeatureException.java
@@ -47,6 +47,7 @@ final class InvalidFeatureException extends InvalidPropertyValueException implem
     /**
      * A description of the illegal feature.
      */
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private final InternationalString message;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/LinkOperation.java b/core/sis-feature/src/main/java/org/apache/sis/feature/LinkOperation.java
index f6c2115b52..c83f847b61 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/LinkOperation.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/LinkOperation.java
@@ -54,6 +54,7 @@ final class LinkOperation extends AbstractOperation {
     /**
      * The type of the result.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final PropertyType result;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/NamedFeatureType.java b/core/sis-feature/src/main/java/org/apache/sis/feature/NamedFeatureType.java
index dc2bd3bd4f..6d09745246 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/NamedFeatureType.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/NamedFeatureType.java
@@ -49,6 +49,7 @@ final class NamedFeatureType implements FeatureType, Serializable {
     /**
      * The name of the feature type for which this {@code NamedFeatureType} is a placeholder.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final GenericName name;
 
     /**
@@ -57,6 +58,7 @@ final class NamedFeatureType implements FeatureType, Serializable {
      * to create it. This information is stored in case the same {@code NamedFeatureType} instance has been used
      * in more than one {@link DefaultFeatureType}.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     volatile FeatureType resolved;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/PropertyView.java b/core/sis-feature/src/main/java/org/apache/sis/feature/PropertyView.java
index d54694ded0..cca9096f3e 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/PropertyView.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/PropertyView.java
@@ -62,7 +62,7 @@ abstract class PropertyView<V> extends Field<V> implements Property, Serializabl
     /**
      * The feature from which to read and where to write the attribute or association value.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final Feature feature;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAssociation.java b/core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAssociation.java
index 3dfe0d4fc7..2aaa206fee 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAssociation.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAssociation.java
@@ -53,6 +53,7 @@ final class SingletonAssociation extends AbstractAssociation {
     /**
      * The associated feature.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Feature value;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAttribute.java b/core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAttribute.java
index d5872eed54..ab25bc7501 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAttribute.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAttribute.java
@@ -56,6 +56,7 @@ final class SingletonAttribute<V> extends AbstractAttribute<V> implements Clonea
     /**
      * The attribute value, or {@code null} if none.
      */
+    @SuppressWarnings("serial")         // Not statically typed as Serializable.
     private V value;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/SparseFeature.java b/core/sis-feature/src/main/java/org/apache/sis/feature/SparseFeature.java
index 4652ce707e..55af5252ed 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/SparseFeature.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/SparseFeature.java
@@ -77,6 +77,7 @@ final class SparseFeature extends AbstractFeature implements Cloneable {
      * <p>We use those indices as {@link #properties} keys instead of using directly the property names
      * in order to resolve aliases.</p>
      */
+    @SuppressWarnings("serial")                     // Can be various serializable implementations.
     private final Map<String, Integer> indices;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/StringJoinOperation.java b/core/sis-feature/src/main/java/org/apache/sis/feature/StringJoinOperation.java
index 9c3565b64f..a618de04a4 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/StringJoinOperation.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/StringJoinOperation.java
@@ -107,6 +107,7 @@ final class StringJoinOperation extends AbstractOperation {
          * array if the property was an attribute instead of an association. For formatting the feature
          * identifier, we need to use the inverse of that converter.
          */
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         final ObjectConverter<? super String, ?> converter;
 
         /** Creates a new wrapper over the given converter. */
@@ -144,6 +145,7 @@ final class StringJoinOperation extends AbstractOperation {
      * the inverse conversion is often a simple call to {@link Object#toString()}, so there
      * is a risk that some of the latter converters do not bother to remember their inverse.</p>
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final ObjectConverter<? super String, ?>[] converters;
 
     /**
@@ -154,6 +156,7 @@ final class StringJoinOperation extends AbstractOperation {
     /**
      * The type of the result returned by the string concatenation operation.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final AttributeType<String> resultType;
 
     /**
@@ -323,6 +326,7 @@ final class StringJoinOperation extends AbstractOperation {
         /**
          * The feature specified to the {@link StringJoinOperation#apply(Feature, ParameterValueGroup)} method.
          */
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         private final Feature feature;
 
         /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryFunction.java b/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryFunction.java
index 8eff3facc7..4b8062442d 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryFunction.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryFunction.java
@@ -58,7 +58,7 @@ abstract class BinaryFunction<R,V1,V2> extends Node {
      *
      * @see #getExpression1()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     protected final Expression<? super R, ? extends V1> expression1;
 
     /**
@@ -66,7 +66,7 @@ abstract class BinaryFunction<R,V1,V2> extends Node {
      *
      * @see #getExpression2()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     protected final Expression<? super R, ? extends V2> expression2;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryGeometryFilter.java b/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryGeometryFilter.java
index a830518e4e..b936b9d522 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryGeometryFilter.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryGeometryFilter.java
@@ -66,7 +66,7 @@ abstract class BinaryGeometryFilter<R,G> extends FilterNode<R> implements Spatia
      *
      * @see BinarySpatialOperator#getOperand1()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     protected final Expression<? super R, GeometryWrapper<G>> expression1;
 
     /**
@@ -74,7 +74,7 @@ abstract class BinaryGeometryFilter<R,G> extends FilterNode<R> implements Spatia
      *
      * @see BinarySpatialOperator#getOperand2()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     protected final Expression<? super R, GeometryWrapper<G>> expression2;
 
     /**
@@ -156,6 +156,7 @@ abstract class BinaryGeometryFilter<R,G> extends FilterNode<R> implements Spatia
      * @param  expression  the expression to unwrap.
      * @return the unwrapped expression.
      */
+    @SuppressWarnings("unchecked")      // We replace <? super ? super R> by <? super R>.
     protected static <R,G> Expression<? super R, ?> original(final Expression<R, GeometryWrapper<G>> expression) {
         Expression<? super R, ?> unwrapped = unwrap(expression);
         if (unwrapped instanceof LeafExpression.Transformed<?, ?>) {
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/ConvertFunction.java b/core/sis-feature/src/main/java/org/apache/sis/filter/ConvertFunction.java
index b6e6b6459c..43f6f8eb4b 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/ConvertFunction.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/ConvertFunction.java
@@ -63,7 +63,7 @@ final class ConvertFunction<R,S,V> extends UnaryFunction<R,S>
     /**
      * The converter to use.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final ObjectConverter<? super S, ? extends V> converter;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/DefaultSortProperty.java b/core/sis-feature/src/main/java/org/apache/sis/filter/DefaultSortProperty.java
index b24f391cda..03c6e46c40 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/DefaultSortProperty.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/DefaultSortProperty.java
@@ -49,7 +49,7 @@ final class DefaultSortProperty<R> implements SortProperty<R>, Serializable {
     /**
      * The property on which to apply sorting.
      */
-    @SuppressWarnings("serial")     // Not statically typed as Serializable.
+    @SuppressWarnings("serial")     // Most SIS implementations are serializable.
     private final ValueReference<? super R, ?> property;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/DistanceFilter.java b/core/sis-feature/src/main/java/org/apache/sis/filter/DistanceFilter.java
index 915aebda28..aea44fe99c 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/DistanceFilter.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/DistanceFilter.java
@@ -64,7 +64,7 @@ final class DistanceFilter<R,G> extends BinaryGeometryFilter<R,G> implements Dis
     /**
      * The buffer distance around the geometry of the second expression.
      */
-    @SuppressWarnings("serial")                         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                         // Most SIS implementations are serializable.
     private final Quantity<Length> distance;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/LeafExpression.java b/core/sis-feature/src/main/java/org/apache/sis/filter/LeafExpression.java
index 5f72c00ca7..1926511b5c 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/LeafExpression.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/LeafExpression.java
@@ -185,7 +185,7 @@ abstract class LeafExpression<R,V> extends Node implements FeatureExpression<R,V
         private static final long serialVersionUID = -5120203649333919221L;
 
         /** The original expression. */
-        @SuppressWarnings("serial")         // Not statically typed as Serializable.
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         final Expression<R,?> original;
 
         /** Creates a new literal holding the given constant value. */
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/LikeFilter.java b/core/sis-feature/src/main/java/org/apache/sis/filter/LikeFilter.java
index 50d8edd090..63ed1bbdf4 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/LikeFilter.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/LikeFilter.java
@@ -47,7 +47,7 @@ final class LikeFilter<R> extends FilterNode<R> implements LikeOperator<R>, Opti
     /**
      * The source of values to compare against the pattern.
      */
-    @SuppressWarnings("serial")                         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                         // Most SIS implementations are serializable.
     private final Expression<? super R, ?> expression;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/LogicalFilter.java b/core/sis-feature/src/main/java/org/apache/sis/filter/LogicalFilter.java
index 39b45858b1..2916fa227a 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/LogicalFilter.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/LogicalFilter.java
@@ -51,7 +51,7 @@ abstract class LogicalFilter<R> extends FilterNode<R> implements LogicalOperator
     /**
      * The filter on which to apply the logical operator.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     protected final Filter<? super R>[] operands;
 
     /**
@@ -219,7 +219,7 @@ abstract class LogicalFilter<R> extends FilterNode<R> implements LogicalOperator
         private static final long serialVersionUID = -1296823195138427781L;
 
         /** The filter to negate. */
-        @SuppressWarnings("serial")         // Not statically typed as Serializable.
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         private final Filter<? super R> operand;
 
         /** Creates a new operator. */
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/PropertyValue.java b/core/sis-feature/src/main/java/org/apache/sis/filter/PropertyValue.java
index ad996001fc..20d281e95e 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/PropertyValue.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/PropertyValue.java
@@ -192,6 +192,7 @@ split:  if (path != null) {
      * put the column name in the SQL {@code WHERE} clause. It makes the difference between
      * using or not the database index.
      */
+    @Override
     public abstract PropertyValue<V> optimize(Optimization optimization);
 
 
@@ -404,7 +405,7 @@ split:  if (path != null) {
         private final Class<S> source;
 
         /** The conversion from source type to the type to be returned. */
-        @SuppressWarnings("serial")         // Not statically typed as Serializable.
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         private final ObjectConverter<? super S, ? extends V> converter;
 
         /** Creates a new expression retrieving values from a property of the given name. */
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/UnaryFunction.java b/core/sis-feature/src/main/java/org/apache/sis/filter/UnaryFunction.java
index ebea70a8fb..cb51eaa56d 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/UnaryFunction.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/UnaryFunction.java
@@ -54,7 +54,7 @@ class UnaryFunction<R,V> extends Node {
      *
      * @see #getExpression()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     protected final Expression<? super R, ? extends V> expression;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/index/tree/NodeIterator.java b/core/sis-feature/src/main/java/org/apache/sis/index/tree/NodeIterator.java
index 96199e114d..f34c03d513 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/index/tree/NodeIterator.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/index/tree/NodeIterator.java
@@ -37,6 +37,7 @@ import org.apache.sis.internal.util.Numerics;
  *
  * @since 1.1
  */
+@SuppressWarnings("CloneableImplementsClone")
 class NodeIterator<E> implements Spliterator<E>, Cloneable {
     /**
      * Sentinel value meaning that iteration is over.
diff --git a/core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTree.java b/core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTree.java
index fddacf1312..9a77fda74e 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTree.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTree.java
@@ -16,7 +16,6 @@
  */
 package org.apache.sis.index.tree;
 
-import java.io.Serializable;
 import java.util.Optional;
 import java.util.AbstractSet;
 import java.util.Collection;
@@ -73,13 +72,18 @@ import org.apache.sis.util.collection.CheckedContainer;
  *
  * @author  Chris Mattmann
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.1
+ * @version 1.4
  *
  * @param  <E>  the type of elements stored in this tree.
  *
  * @since 1.1
  */
-public class PointTree<E> extends AbstractSet<E> implements CheckedContainer<E>, Serializable {
+public class PointTree<E> extends AbstractSet<E> implements CheckedContainer<E> {
+    /*
+     * We do not declare this class as Serializable because we would need to serialize
+     * the lambda function `Locator`. While technically possible, this is not recommended.
+     */
+
     /**
      * Provides the coordinates of any element stored in {@link PointTree}.
      *
@@ -97,11 +101,6 @@ public class PointTree<E> extends AbstractSet<E> implements CheckedContainer<E>,
         void getPositionOf(E element, double[] dest);
     }
 
-    /**
-     * For cross-version compatibility.
-     */
-    private static final long serialVersionUID = 488727778652772913L;
-
     /**
      * The maximum number of dimensions (inclusive) that this class currently supports.
      * Current maximum is {@value}. This restriction come from 2⁶ = {@value Long#SIZE}.
diff --git a/core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTreeNode.java b/core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTreeNode.java
index bd7a60e998..771d2a0111 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTreeNode.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTreeNode.java
@@ -17,7 +17,6 @@
 package org.apache.sis.index.tree;
 
 import java.util.Arrays;
-import java.io.Serializable;
 
 
 /**
@@ -44,15 +43,10 @@ import java.io.Serializable;
  *
  * @author  Chris Mattmann
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.1
+ * @version 1.4
  * @since   1.1
  */
-abstract class PointTreeNode implements Cloneable, Serializable {
-    /**
-     * For cross-version compatibility.
-     */
-    private static final long serialVersionUID = -5911043832415017844L;
-
+abstract class PointTreeNode implements Cloneable {
     /**
      * Constructs an initially empty {@link PointTree} node.
      */
@@ -180,11 +174,6 @@ abstract class PointTreeNode implements Cloneable, Serializable {
      * the cost of arrays creation should be less significant compared to array length.
      */
     static final class Default extends PointTreeNode {
-        /**
-         * For cross-version compatibility.
-         */
-        private static final long serialVersionUID = 5726750714534959859L;
-
         /**
          * The nodes or element values in each quadrant/octant of this node.
          * Each array element can be null or an instance of one of the classes
diff --git a/core/sis-feature/src/main/java/org/apache/sis/index/tree/QuadTreeNode.java b/core/sis-feature/src/main/java/org/apache/sis/index/tree/QuadTreeNode.java
index 6b37b01dbf..cb9bc30ef0 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/index/tree/QuadTreeNode.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/index/tree/QuadTreeNode.java
@@ -25,15 +25,10 @@ package org.apache.sis.index.tree;
  *
  * @author  Chris Mattmann
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.1
+ * @version 1.4
  * @since   0.1
  */
 final class QuadTreeNode extends PointTreeNode {
-    /**
-     * For cross-version compatibility.
-     */
-    private static final long serialVersionUID = 3860185925702742700L;
-
     /**
      * The 4 quadrants of a {@link QuadTreeNode}: North-West (NW), North-East (NE),
      * South-West (SW) and South-East (SE). Numerical values follow this bit pattern:
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources.java b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources.java
index 6e5e148385..d15501c53e 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources.java
@@ -599,7 +599,6 @@ public final class Resources extends IndexedResourceBundle {
     private static final class International extends ResourceInternationalString {
         private static final long serialVersionUID = -667435900917846518L;
 
-        International(short key)                           {super(key);}
         International(short key, Object args)              {super(key, args);}
         @Override protected KeyConstants getKeyConstants() {return Keys.INSTANCE;}
         @Override protected IndexedResourceBundle getBundle(final Locale locale) {
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/SpatialOperationContext.java b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/SpatialOperationContext.java
index 62bc8f1dcc..4221b7572d 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/SpatialOperationContext.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/SpatialOperationContext.java
@@ -77,13 +77,13 @@ public final class SpatialOperationContext implements Serializable {
     /**
      * Approximate geographic area of geometries, or {@code null} if unspecified.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final GeographicBoundingBox areaOfInterest;
 
     /**
      * The target CRS in which to transform geometries, or {@code null} for inferring automatically.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final CoordinateReferenceSystem computationCRS;
 
     /**
@@ -92,7 +92,7 @@ public final class SpatialOperationContext implements Serializable {
      * Note that it does not mean that the units of measurement must be meters; only that they must
      * be compatible with meters.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final Unit<?> systemUnit;
 
     /**
@@ -104,7 +104,7 @@ public final class SpatialOperationContext implements Serializable {
     /**
      * The common CRS found by {@link #transform(GeometryWrapper[])}. May be null.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     CoordinateReferenceSystem commonCRS;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/ShapeWrapper.java b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/ShapeWrapper.java
index 232c6b5a6b..e08a665eef 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/ShapeWrapper.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/ShapeWrapper.java
@@ -43,6 +43,7 @@ abstract class ShapeWrapper extends AbstractShape implements Serializable {
     /**
      * The source of coordinate values.
      */
+    @SuppressWarnings("serial")         // Most Java2D implementations are serializable.
     protected final Shape source;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/PackedCoordinateSequence.java b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/PackedCoordinateSequence.java
index 64d8660bf9..fd912d09f3 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/PackedCoordinateSequence.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/PackedCoordinateSequence.java
@@ -262,6 +262,7 @@ abstract class PackedCoordinateSequence implements CoordinateSequence, Serializa
     /**
      * Coordinate sequence storing values in a packed {@code double[]} array.
      */
+    @SuppressWarnings("CloneableImplementsClone")
     static final class Double extends PackedCoordinateSequence {
         /** For cross-version compatibility. */
         private static final long serialVersionUID = 1940132733783453171L;
@@ -349,6 +350,7 @@ abstract class PackedCoordinateSequence implements CoordinateSequence, Serializa
     /**
      * Coordinate sequence storing values in a packed {@code float[]} array.
      */
+    @SuppressWarnings("CloneableImplementsClone")
     static final class Float extends PackedCoordinateSequence {
         /** For cross-version compatibility. */
         private static final long serialVersionUID = 2625498691139718968L;
@@ -448,6 +450,7 @@ abstract class PackedCoordinateSequence implements CoordinateSequence, Serializa
     /**
      * Returns a string representation of this coordinate sequence.
      */
+    @Override
     public final String toString() {
         return CoordinateSequences.toString(this);
     }
@@ -477,7 +480,9 @@ abstract class PackedCoordinateSequence implements CoordinateSequence, Serializa
      *
      * @deprecated Inherits the deprecation status from JTS.
      */
+    @Override
     @Deprecated
+    @SuppressWarnings("CloneDoesntCallSuperClone")
     public final Object clone() {
         return copy();
     }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/GeometryConverter.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/GeometryConverter.java
index a39c920b2f..fc204d038a 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/GeometryConverter.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/GeometryConverter.java
@@ -73,7 +73,7 @@ final class GeometryConverter<R,G> extends Node implements Optimization.OnExpres
      *
      * @see #getParameters()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final Expression<? super R, ?> expression;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/SortByComparator.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/SortByComparator.java
index 2d4b2787a9..42425aa7a1 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/SortByComparator.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/SortByComparator.java
@@ -53,6 +53,7 @@ public final class SortByComparator<R> implements SortBy<R>, Serializable {
      *
      * @see #getSortProperties()
      */
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private final SortProperty<R>[] properties;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/FunctionWithSRID.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/FunctionWithSRID.java
index 6b4931546c..8a7ed8afe3 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/FunctionWithSRID.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/FunctionWithSRID.java
@@ -59,6 +59,7 @@ abstract class FunctionWithSRID<R> extends SpatialFunction<R> {
     /**
      * The expression giving the spatial reference system identifier, or {@code null} if none.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final Expression<? super R, ?> srid;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/GeometryConstructor.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/GeometryConstructor.java
index 620280cc3b..6f781e1cf6 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/GeometryConstructor.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/GeometryConstructor.java
@@ -51,6 +51,7 @@ class GeometryConstructor<R,G> extends FunctionWithSRID<R> {
     /**
      * The expression giving the geometry.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final Expression<? super R, ?> geometry;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/OneGeometry.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/OneGeometry.java
index bb6fb1ac7c..50c299ca57 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/OneGeometry.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/OneGeometry.java
@@ -47,7 +47,7 @@ class OneGeometry<R,G> extends SpatialFunction<R> {
     /**
      * The expression giving the geometry.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final Expression<? super R, GeometryWrapper<G>> geometry;
 
     /**
@@ -107,6 +107,7 @@ class OneGeometry<R,G> extends SpatialFunction<R> {
         /**
          * The first argument after the geometry.
          */
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         final Expression<? super R, ?> argument;
 
         /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Point.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Point.java
index be91be1b5f..5be5872f8b 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Point.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Point.java
@@ -61,6 +61,7 @@ final class ST_Point<R,G> extends FunctionWithSRID<R> {
     /**
      * The expression giving the coordinate values. May include the SRID as last parameter.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final Expression<? super R, ?>[] parameters;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java
index 4e93fa066e..9861c9baf5 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java
@@ -70,6 +70,7 @@ final class ST_Transform<R,G> extends FunctionWithSRID<R> {
     /**
      * The expression giving the geometry.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final Expression<? super R, GeometryWrapper<G>> geometry;
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/TwoGeometries.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/TwoGeometries.java
index d80cc93ed3..7b81f2c337 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/TwoGeometries.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/TwoGeometries.java
@@ -53,6 +53,7 @@ class TwoGeometries<R,G> extends SpatialFunction<R> {
     /**
      * The expression giving the geometries.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final Expression<? super R, GeometryWrapper<G>> geometry1, geometry2;
 
     /**
@@ -151,6 +152,7 @@ class TwoGeometries<R,G> extends SpatialFunction<R> {
         /**
          * The first argument after the geometries.
          */
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         final Expression<? super R, ?> argument;
 
         /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/processing/isoline/Fragments.java b/core/sis-feature/src/main/java/org/apache/sis/internal/processing/isoline/Fragments.java
index 0e684512b1..f44a5b4254 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/processing/isoline/Fragments.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/processing/isoline/Fragments.java
@@ -44,7 +44,7 @@ import org.apache.sis.internal.util.Numerics;
  *
  * @since 1.1
  */
-@SuppressWarnings({"CloneableImplementsClone", "serial"})           // Not intended to be cloned or serialized.
+@SuppressWarnings({"serial", "CloneableImplementsClone"})           // Not intended to be serialized.
 final class Fragments extends ArrayList<double[]> {
     /**
      * The first points and last point in this list of polylines. By convention the coordinate having fraction
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/IdentifierMapAdapter.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/IdentifierMapAdapter.java
index cc92d21399..65533ce214 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/IdentifierMapAdapter.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/IdentifierMapAdapter.java
@@ -103,7 +103,7 @@ public class IdentifierMapAdapter extends AbstractMap<Citation,String> implement
      *
      * @see #getIdentifiers(Class)
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     public final Collection<Identifier> identifiers;
 
     /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/SpecializedIdentifier.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/SpecializedIdentifier.java
index d285d5b499..4620c3c516 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/SpecializedIdentifier.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/SpecializedIdentifier.java
@@ -59,7 +59,7 @@ public final class SpecializedIdentifier<T> implements Identifier, Cloneable, Se
      *
      * @see #getAuthority()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final IdentifierSpace<T> authority;
 
     /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/Resources.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/Resources.java
index f3fdafdcaf..9dfde583cb 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/Resources.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/Resources.java
@@ -183,7 +183,6 @@ public final class Resources extends IndexedResourceBundle {
         private static final long serialVersionUID = 7465539282825054584L;
 
         International(short key)                           {super(key);}
-        International(short key, Object args)              {super(key, args);}
         @Override protected KeyConstants getKeyConstants() {return Resources.Keys.INSTANCE;}
         @Override protected IndexedResourceBundle getBundle(final Locale locale) {
             return forLocale(locale);
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleAttributeType.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleAttributeType.java
index 7b24606142..8f85f31945 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleAttributeType.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleAttributeType.java
@@ -46,6 +46,7 @@ public final class SimpleAttributeType<V> implements AttributeType<V>, Type, Ser
     /**
      * The name for this attribute type.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final TypeName name;
 
     /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleIdentifiedObject.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleIdentifiedObject.java
index b8d058ab0d..7b3b9d21f2 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleIdentifiedObject.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleIdentifiedObject.java
@@ -51,6 +51,7 @@ public class SimpleIdentifiedObject implements IdentifiedObject, LenientComparab
     /**
      * The primary name by which this object is identified.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     protected Identifier name;
 
     /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleIdentifier.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleIdentifier.java
index abc8684333..8206513ff2 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleIdentifier.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleIdentifier.java
@@ -49,6 +49,7 @@ public class SimpleIdentifier implements Identifier, Deprecable, Serializable {
      * @see #getCodeSpace()
      * @see #getVersion()
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     protected final Citation authority;
 
     /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataFormat.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataFormat.java
index c0f07e9877..34cd53944d 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataFormat.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataFormat.java
@@ -31,7 +31,7 @@ import org.apache.sis.io.TableAppender;
  * @version 1.0
  * @since   1.0
  */
-@SuppressWarnings({"CloneableImplementsClone", "serial"})       // Not intended to be cloned or serialized.
+@SuppressWarnings({"serial", "CloneableImplementsClone"})       // Not intended to be serialized.
 final class MetadataFormat extends TreeTableFormat {
     /**
      * The shared instance to use for the {@link TreeTableView#toString()} method implementation.
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java
index 234fb2d125..24c276ce3f 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java
@@ -174,7 +174,7 @@ public class MetadataStandard implements Serializable {
      *
      * @see #getCitation()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final Citation citation;
 
     /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ISOMetadata.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ISOMetadata.java
index fd8c2eb0ea..bcac4318db 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ISOMetadata.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ISOMetadata.java
@@ -73,7 +73,7 @@ public class ISOMetadata extends ModifiableMetadata implements IdentifiedObject,
      * All identifiers associated with this metadata, or {@code null} if none.
      * This field is initialized to a non-null value when first needed.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     protected Collection<Identifier> identifiers;
 
     /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecord.java b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecord.java
index 1ca956cba9..4a8bc3d062 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecord.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecord.java
@@ -72,7 +72,7 @@ public class DefaultRecord implements Record, Serializable {
     /**
      * The type definition of this record. Cannot be {@code null}.
      */
-    @SuppressWarnings("serial")
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final RecordDefinition definition;
 
     /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordType.java b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordType.java
index c7b2f7877c..3351e560b5 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordType.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordType.java
@@ -107,7 +107,7 @@ public class DefaultRecordType extends RecordDefinition implements RecordType, S
      *
      * @see #getTypeName()
      */
-    @SuppressWarnings("serial")
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final TypeName typeName;
 
     /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultTypeName.java b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultTypeName.java
index 2d89d18350..7a64737f32 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultTypeName.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultTypeName.java
@@ -147,7 +147,7 @@ public class DefaultTypeName extends DefaultLocalName implements TypeName {
      * The value returned by {@link #toJavaType()}, or {@code null} if none.
      * This is usually a {@link Class}, which is serializable.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")
     private final Type javaType;
 
     /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/RecordDefinition.java b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/RecordDefinition.java
index 9b2ce0d031..e5893496b4 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/RecordDefinition.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/RecordDefinition.java
@@ -69,7 +69,7 @@ abstract class RecordDefinition {                                       // Inten
         /**
          * The wrapped record type.
          */
-        @SuppressWarnings("serial")                     // Not statically typed as Serializable.
+        @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
         private final RecordType recordType;            // This is the only serialized field in this file.
 
         /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/Types.java b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/Types.java
index e714c40340..aae61ea6bf 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/Types.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/Types.java
@@ -438,6 +438,7 @@ public final class Types extends Static {
         /**
          * The code list for which to create a title.
          */
+        @SuppressWarnings("serial")         // Enum and CodeList implementations are serializable.
         final ControlledVocabulary code;
 
         /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/xml/NilReason.java b/core/sis-metadata/src/main/java/org/apache/sis/xml/NilReason.java
index 828c66614e..9ac9b410da 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/xml/NilReason.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/xml/NilReason.java
@@ -144,8 +144,9 @@ public final class NilReason implements Serializable {
 
     /**
      * Either the XML value as a {@code String} (including the explanation if the prefix
-     * is "{@code other}", or a {@link URI}.
+     * is "{@code other}", or a {@link URI}. Those types are serializable.
      */
+    @SuppressWarnings("serial")
     private final Object reason;
 
     /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/xml/XLink.java b/core/sis-metadata/src/main/java/org/apache/sis/xml/XLink.java
index 7cc56daa7d..abfac9a314 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/xml/XLink.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/xml/XLink.java
@@ -126,6 +126,7 @@ public class XLink implements Serializable {
      * @see #getTitle()
      * @category semantic
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private InternationalString title;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/ArrayEnvelope.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/ArrayEnvelope.java
index 44c8a527d7..2c10ad3686 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/ArrayEnvelope.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/ArrayEnvelope.java
@@ -75,6 +75,7 @@ class ArrayEnvelope extends AbstractEnvelope implements Serializable {
     /**
      * The coordinate reference system, or {@code null}.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     CoordinateReferenceSystem crs;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/CoordinateFormat.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/CoordinateFormat.java
index 8238da32db..6412aa4037 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/CoordinateFormat.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/CoordinateFormat.java
@@ -158,6 +158,7 @@ public class CoordinateFormat extends CompoundFormat<DirectPosition> {
      * @see #groundDimensions
      * @see #setGroundPrecision(Quantity)
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private Quantity<?> groundPrecision;
 
     /**
@@ -171,6 +172,7 @@ public class CoordinateFormat extends CompoundFormat<DirectPosition> {
      * @see #accuracyThreshold
      * @see #setGroundAccuracy(Quantity)
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private Quantity<?> groundAccuracy;
 
     /**
@@ -246,6 +248,7 @@ public class CoordinateFormat extends CompoundFormat<DirectPosition> {
      *
      * @see #setDefaultCRS(CoordinateReferenceSystem)
      */
+    @SuppressWarnings("serial")                         // Most SIS implementations are serializable.
     private CoordinateReferenceSystem defaultCRS;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition1D.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition1D.java
index 4bbc99474e..90364785d2 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition1D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition1D.java
@@ -52,6 +52,7 @@ public class DirectPosition1D extends AbstractDirectPosition implements Serializ
     /**
      * The coordinate reference system for this position;
      */
+    @SuppressWarnings("serial")             // Most SIS implementations are serializable.
     private CoordinateReferenceSystem crs;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition2D.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition2D.java
index 6a147900eb..a6eef5174d 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition2D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition2D.java
@@ -77,6 +77,7 @@ public class DirectPosition2D extends Point2D.Double implements DirectPosition,
     /**
      * The coordinate reference system for this position;
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private CoordinateReferenceSystem crs;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/Envelope2D.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/Envelope2D.java
index ca5f61ef7e..35ac3589f5 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/Envelope2D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/Envelope2D.java
@@ -124,6 +124,7 @@ public class Envelope2D extends Rectangle2D.Double implements Envelope, Emptiabl
     /**
      * The coordinate reference system, or {@code null}.
      */
+    @SuppressWarnings("serial")             // Most SIS implementations are serializable.
     private CoordinateReferenceSystem crs;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralDirectPosition.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralDirectPosition.java
index 1ce7526640..bfefda5417 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralDirectPosition.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralDirectPosition.java
@@ -79,6 +79,7 @@ public class GeneralDirectPosition extends AbstractDirectPosition implements Ser
     /**
      * The coordinate reference system for this position, or {@code null}.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private CoordinateReferenceSystem crs;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/EPSGParameterDomain.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/EPSGParameterDomain.java
index 98f8989dfb..d0988d76f6 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/EPSGParameterDomain.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/EPSGParameterDomain.java
@@ -40,6 +40,7 @@ public final class EPSGParameterDomain extends NumberRange<Double> {
     /**
      * The units of measurement.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     public final Set<Unit<?>> units;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/RTreeNode.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/RTreeNode.java
index 23c874e2ad..39864790e7 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/RTreeNode.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/RTreeNode.java
@@ -51,6 +51,7 @@ import org.apache.sis.util.collection.DefaultTreeTable;
  * @version 1.1
  * @since   1.1
  */
+@SuppressWarnings("CloneableImplementsClone")
 public class RTreeNode extends GeneralEnvelope {
     /**
      * For cross-version compatibility.
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/AffineTransform2D.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/AffineTransform2D.java
index 8902b5961d..c13c82ad0a 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/AffineTransform2D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/AffineTransform2D.java
@@ -112,7 +112,7 @@ public class AffineTransform2D extends ImmutableAffineTransform
      * Work around for RFE #4093999 in Sun's bug database
      * ("Relax constraint on placement of this()/super() call in constructors").
      */
-    @Workaround(library="JDK", version="1.7")
+    @Workaround(library="JDK", version="1.7", fixed="20")
     private AffineTransform2D(final ExtendedPrecisionMatrix m, final double[] elements) {
         super(pz(elements[0]), pz(elements[3]),
               pz(elements[1]), pz(elements[4]),
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/IntervalRectangle.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/IntervalRectangle.java
index a09a745708..07a336cf40 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/IntervalRectangle.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/IntervalRectangle.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.internal.referencing.j2d;
 
+import java.io.Serializable;
 import java.awt.geom.Rectangle2D;
 import org.opengis.geometry.Envelope;
 import org.opengis.geometry.DirectPosition;
@@ -59,11 +60,14 @@ import org.apache.sis.internal.util.Strings;
  * recommended approach, but for Apache SIS private classes this is a way to reduce pressure on garbage collector.</div>
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.1
+ * @version 1.4
  * @since   0.8
  */
 @SuppressWarnings("CloneableImplementsClone")
-public class IntervalRectangle extends Rectangle2D {
+public class IntervalRectangle extends Rectangle2D implements Serializable {
+    /** For cross-version compatibility. */
+    private static final long serialVersionUID = -5921513912411186629L;
+
     /** Minimal <var>x</var> coordinate value. */ public double xmin;
     /** Minimal <var>y</var> coordinate value. */ public double ymin;
     /** Maximal <var>x</var> coordinate value. */ public double xmax;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/ParameterizedAffine.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/ParameterizedAffine.java
index 825ad5338f..93c5c8c65b 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/ParameterizedAffine.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/ParameterizedAffine.java
@@ -46,6 +46,7 @@ import org.apache.sis.internal.system.Semaphores;
  * @version 0.6
  * @since   0.6
  */
+@SuppressWarnings("CloneableImplementsClone")
 public final class ParameterizedAffine extends AffineTransform2D {
     /**
      * For cross-version compatibility.
@@ -55,7 +56,7 @@ public final class ParameterizedAffine extends AffineTransform2D {
     /**
      * The (presumed immutable) parameters used for creating this transform.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final ParameterValueGroup parameters;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/package-info.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/package-info.java
index af99c0e43d..2795ae536c 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/package-info.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/package-info.java
@@ -26,7 +26,7 @@
  * may change in incompatible ways in any future version without notice.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.3
+ * @version 1.4
  *
  * @see org.apache.sis.internal.feature.j2d
  *
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridFile.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridFile.java
index 100b8b5361..70510c524d 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridFile.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridFile.java
@@ -105,12 +105,15 @@ abstract class DatumShiftGridFile<C extends Quantity<C>, T extends Quantity<T>>
     /**
      * The parameter descriptor of the provider that created this grid.
      */
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private final ParameterDescriptorGroup descriptor;
 
     /**
      * The files from which the grid has been loaded. This is not used directly by this class
      * (except for {@link #equals(Object)} and {@link #hashCode()}), but can be used by math
      * transform for setting the parameter values. Shall never be null and never empty.
+     *
+     * @todo We have a serialization problem here. Possible workaround may be to replace by URI.
      */
     private final Path[] files;
 
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridGroup.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridGroup.java
index f153c6cbcb..7d98c5b849 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridGroup.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridGroup.java
@@ -57,7 +57,7 @@ import org.apache.sis.util.collection.Containers;
  * </ol>
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.1
+ * @version 1.4
  * @since   1.1
  */
 final class DatumShiftGridGroup<C extends Quantity<C>, T extends Quantity<T>> extends DatumShiftGridFile<C,T> {
@@ -73,6 +73,9 @@ final class DatumShiftGridGroup<C extends Quantity<C>, T extends Quantity<T>> ex
      */
     @SuppressWarnings("CloneableImplementsClone")
     private static final class Region extends IntervalRectangle {
+        /** For cross-version compatibility. */
+        private static final long serialVersionUID = -2925837396412170681L;
+
         /** Subsampling compared to the grid having finest resolution. */
         private final double sx, sy;
 
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/package-info.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/package-info.java
index a7758f6ce5..93ec656af1 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/package-info.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/package-info.java
@@ -22,7 +22,7 @@
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @author  Matthieu Bastianelli (Geomatys)
- * @version 1.3
+ * @version 1.4
  *
  * @see org.apache.sis.referencing.operation.transform.MathTransformProvider
  *
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/StoredTree.java b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/StoredTree.java
index c16eb018db..7fff322f32 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/StoredTree.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/StoredTree.java
@@ -86,6 +86,7 @@ final class StoredTree implements Serializable {
          * (e.g. "north"). A null value is not equivalent to an empty list. For example, the
          * list is null when parsing {@code "FOO"} but is empty when parsing {@code "FOO[]"}.
          */
+        @SuppressWarnings("serial")                 // Not statically typed as Serializable.
         private final Object[] children;
 
         /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/WKTFormat.java b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/WKTFormat.java
index fd499dc990..4f1173bfeb 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/WKTFormat.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/WKTFormat.java
@@ -168,7 +168,7 @@ public class WKTFormat extends CompoundFormat<Object> {
      * The preferred authority for objects or parameter names. A {@code null} value
      * means that the authority shall be inferred from the {@linkplain #convention}.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Citation authority;
 
     /**
@@ -226,8 +226,7 @@ public class WKTFormat extends CompoundFormat<Object> {
      *
      * @see #fragments(boolean)
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
-    private Map<String,StoredTree> fragments;
+    private TreeMap<String,StoredTree> fragments;
 
     /**
      * {@code true} if the {@link #fragments} map is shared by two or more {@code WKTFormat} instances.
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Warnings.java b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Warnings.java
index 2e1342733c..0f7528f1c0 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Warnings.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Warnings.java
@@ -69,7 +69,7 @@ import org.apache.sis.util.resources.Vocabulary;
  * </div>
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.6
+ * @version 1.4
  *
  * @see WKTFormat#getWarnings()
  *
@@ -104,9 +104,7 @@ public final class Warnings implements Localized, Serializable {
 
     /**
      * Warning messages or exceptions emitted during parsing or formatting.
-     * Initially {@code null} and created when first needed.
-     *
-     * <p>Objects in this list must be a sequence of the following tuple:</p>
+     * Objects in this list must be a sequence of the following tuple:
      *
      * <ul>
      *   <li>An optional message as an {@link InternationalString}.</li>
@@ -117,18 +115,16 @@ public final class Warnings implements Localized, Serializable {
      *
      * @see #add(InternationalString, Exception, String[])
      */
-    private List<Object> messages;
+    private final ArrayList<Object> messages;
 
     /**
      * The keywords of elements in which exception occurred.
-     * Initially {@code null} and created when first needed.
-     *
-     * <p>For each {@code String[]} value, the first array element shall be the keyword of the WKT element
+     * For each {@code String[]} value, the first array element shall be the keyword of the WKT element
      * in which the exception occurred. The second array element shall be the parent of above-cited first
      * element. Other array elements can optionally be present for declaring the parents of the parent,
-     * but they will be ignored by this {@code Warnings} implementation.</p>
+     * but they will be ignored by this {@code Warnings} implementation.
      */
-    private Map<Exception, String[]> exceptionSources;
+    private final LinkedHashMap<Exception, String[]> exceptionSources;
 
     /**
      * Keyword of unknown elements. This is initially a direct reference to the {@link AbstractParser#ignoredElements}
@@ -137,6 +133,7 @@ public final class Warnings implements Localized, Serializable {
      *
      * @see AbstractParser#ignoredElements
      */
+    @SuppressWarnings("serial")                             // Various serializable implementations.
     private Map<String, List<String>> ignoredElements;
 
     /**
@@ -155,6 +152,8 @@ public final class Warnings implements Localized, Serializable {
         this.errorLocale     = locale;
         this.isParsing       = isParsing;
         this.ignoredElements = ignoredElements;
+        exceptionSources = new LinkedHashMap<>(4);
+        messages = new ArrayList<>();
     }
 
     /**
@@ -184,15 +183,9 @@ public final class Warnings implements Localized, Serializable {
      */
     final void add(final InternationalString message, final Exception cause, final String[] source) {
         assert (message != null) || (cause != null);
-        if (messages == null) {
-            messages = new ArrayList<>(4);                          // We expect few items.
-        }
         messages.add(message);
         messages.add(cause);
         if (cause != null) {
-            if (exceptionSources == null) {
-                exceptionSources = new LinkedHashMap<>(4);          // We expect few items.
-            }
             exceptionSources.put(cause, source);
         }
     }
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/package-info.java b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/package-info.java
index b288d04368..934feec6a9 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/package-info.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/package-info.java
@@ -83,7 +83,7 @@
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Rémi Eve (IRD)
  * @author  Rueben Schulz (UBC)
- * @version 1.3
+ * @version 1.4
  *
  * @see <a href="http://docs.opengeospatial.org/is/12-063r5/12-063r5.html">WKT 2 specification</a>
  * @see <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/doc-files/WKT.html">Legacy WKT 1</a>
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptorGroup.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptorGroup.java
index d1b3071673..18ec28ddd6 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptorGroup.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptorGroup.java
@@ -107,7 +107,7 @@ public class DefaultParameterDescriptorGroup extends AbstractParameterDescriptor
      *
      * @see #descriptors()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private List<GeneralParameterDescriptor> descriptors;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterValue.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterValue.java
index 6240fb10ec..f6efa95e34 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterValue.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterValue.java
@@ -148,7 +148,7 @@ public class DefaultParameterValue<T> extends FormattableObject implements Param
      *
      * @see #getDescriptor()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private ParameterDescriptor<T> descriptor;
 
     /**
@@ -168,7 +168,7 @@ public class DefaultParameterValue<T> extends FormattableObject implements Param
      *
      * @since 0.7
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     protected Unit<?> unit;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/FilteredParameters.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/FilteredParameters.java
index ef1d17dec3..d310cc5909 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/FilteredParameters.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/FilteredParameters.java
@@ -35,6 +35,7 @@ import org.apache.sis.util.ComparisonMode;
  * @version 1.3
  * @since   1.3
  */
+@SuppressWarnings("CloneableImplementsClone")
 final class FilteredParameters extends UnmodifiableParameterValueGroup {
     /**
      * For cross-version compatibility.
@@ -44,7 +45,7 @@ final class FilteredParameters extends UnmodifiableParameterValueGroup {
     /**
      * The filtered parameter values.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final GeneralParameterValue[] filtered;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/MapProjectionParameters.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/MapProjectionParameters.java
index 1aeabe1985..c47cefde99 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/MapProjectionParameters.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/MapProjectionParameters.java
@@ -172,6 +172,7 @@ final class MapProjectionParameters extends DefaultParameterValueGroup {
         /**
          * The parameters for the semi-major and semi-minor axis length.
          */
+        @SuppressWarnings("serial")     // Most SIS implementations are serializable.
         private final ParameterValue<?> semiMajor, semiMinor;
 
         /**
@@ -264,6 +265,7 @@ final class MapProjectionParameters extends DefaultParameterValueGroup {
         /**
          * The parameters for the semi-major and semi-minor axis length.
          */
+        @SuppressWarnings("serial")     // Most SIS implementations are serializable.
         private final ParameterValue<?> semiMajor, semiMinor;
 
         /**
@@ -441,6 +443,7 @@ final class MapProjectionParameters extends DefaultParameterValueGroup {
         /**
          * The parameters for the standard parallels.
          */
+        @SuppressWarnings("serial")     // Most SIS implementations are serializable.
         private final ParameterValue<?> standardParallel1, standardParallel2;
 
         /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterFormat.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterFormat.java
index f0b84a0d72..e9ea1f8f21 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterFormat.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterFormat.java
@@ -244,7 +244,7 @@ public class ParameterFormat extends TabularFormat<Object> {
      *
      * @see #getPreferredCodespaces()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                 // Various serializable implementations.
     private Set<String> preferredCodespaces;
 
     /**
@@ -333,7 +333,7 @@ public class ParameterFormat extends TabularFormat<Object> {
      */
     public String[] getPreferredCodespaces() {
         final Set<String> p = preferredCodespaces;
-        return (p != null) ? p.toArray(new String[p.size()]) : null;
+        return (p != null) ? p.toArray(String[]::new) : null;
     }
 
     /**
@@ -350,7 +350,7 @@ public class ParameterFormat extends TabularFormat<Object> {
         if (codespaces != null) {
             copy = CollectionsExt.immutableSet(true, codespaces);
         }
-        this.preferredCodespaces = copy;
+        preferredCodespaces = copy;
     }
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterValueList.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterValueList.java
index faf9c7fa9d..de4c7735b5 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterValueList.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterValueList.java
@@ -65,14 +65,14 @@ final class ParameterValueList extends AbstractList<GeneralParameterValue> imple
      * <p>This descriptor shall not be used in {@link #equals(Object)} and {@link #hashCode()}
      * implementations in order to stay consistent with the {@link List} contract.</p>
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final ParameterDescriptorGroup descriptor;
 
     /**
      * The parameter values in the group. The length of this array is the list capacity.
      * This array will growth as needed.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private GeneralParameterValue[] values;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java
index c68b6d02c6..460142560c 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java
@@ -198,7 +198,7 @@ public abstract class Parameters implements ParameterValueGroup, Cloneable {
     private static final class Wrapper extends Parameters implements Serializable {
         private static final long serialVersionUID = -5491790565456920471L;
 
-        @SuppressWarnings("serial")         // Not statically typed as Serializable.
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         private final ParameterValueGroup delegate;
         Wrapper(final ParameterValueGroup delegate) {this.delegate = delegate;}
 
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/TensorParameters.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/TensorParameters.java
index 0deb6b7acb..95b48ae4d2 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/TensorParameters.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/TensorParameters.java
@@ -277,7 +277,7 @@ public class TensorParameters<E> implements Serializable {
      *
      * <p>The length of this array determine the tensor {@linkplain #rank() rank}.</p>
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final ParameterDescriptor<Integer>[] dimensions;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/TensorValues.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/TensorValues.java
index 80729182a3..233d0c32d7 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/TensorValues.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/TensorValues.java
@@ -80,7 +80,7 @@ final class TensorValues<E> extends AbstractParameterDescriptor
     /**
      * The parameter for the number of row, columns and other dimensions in the tensor.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final ParameterValue<Integer>[] dimensions;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/UninitializedParameter.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/UninitializedParameter.java
index bcee320e02..feeebc7e83 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/UninitializedParameter.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/UninitializedParameter.java
@@ -42,7 +42,7 @@ final class UninitializedParameter implements GeneralParameterValue, Serializabl
     /**
      * The descriptor of the parameter to initialize.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final GeneralParameterDescriptor descriptor;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/UnmodifiableParameterValueGroup.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/UnmodifiableParameterValueGroup.java
index 3c08afb126..72fdab3524 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/UnmodifiableParameterValueGroup.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/UnmodifiableParameterValueGroup.java
@@ -58,7 +58,7 @@ class UnmodifiableParameterValueGroup extends Parameters implements LenientCompa
      *
      * @see #getDescriptor()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final ParameterDescriptorGroup descriptor;
 
     /**
@@ -66,7 +66,7 @@ class UnmodifiableParameterValueGroup extends Parameters implements LenientCompa
      *
      * @see #values()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final List<GeneralParameterValue> values;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java
index d46a30b423..1f9d776561 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java
@@ -177,7 +177,7 @@ public class AbstractIdentifiedObject extends FormattableObject implements Ident
      * @see #getName()
      * @see #getNames()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Identifier name;
 
     /**
@@ -188,7 +188,7 @@ public class AbstractIdentifiedObject extends FormattableObject implements Ident
      * <p><b>Consider this field as final!</b>
      * This field is modified only at unmarshalling time by {@link Names#add(Identifier)}.</p>
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Collection<GenericName> alias;
 
     /**
@@ -201,7 +201,7 @@ public class AbstractIdentifiedObject extends FormattableObject implements Ident
      * @see #getIdentifiers()
      * @see #getIdentifier()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Set<Identifier> identifiers;
 
     /**
@@ -212,7 +212,7 @@ public class AbstractIdentifiedObject extends FormattableObject implements Ident
      *
      * @see #getRemarks()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private InternationalString remarks;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractReferenceSystem.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractReferenceSystem.java
index 57297d8a17..20572bc3d2 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractReferenceSystem.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractReferenceSystem.java
@@ -81,7 +81,7 @@ public class AbstractReferenceSystem extends AbstractIdentifiedObject implements
      *
      * @see #getDomainOfValidity()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Extent domainOfValidity;
 
     /**
@@ -93,7 +93,7 @@ public class AbstractReferenceSystem extends AbstractIdentifiedObject implements
      *
      * @see #getScope()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private InternationalString scope;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/ImmutableIdentifier.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/ImmutableIdentifier.java
index 987691dc5f..1038861c67 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/ImmutableIdentifier.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/ImmutableIdentifier.java
@@ -121,7 +121,7 @@ public class ImmutableIdentifier extends FormattableObject implements Identifier
      *
      * @see #getAuthority()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final Citation authority;
 
     /**
@@ -151,7 +151,7 @@ public class ImmutableIdentifier extends FormattableObject implements Identifier
     /**
      * Natural language description of the meaning of the code value.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final InternationalString description;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/Properties.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/Properties.java
index 1cc90f6521..1451bb7a71 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/Properties.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/Properties.java
@@ -92,6 +92,7 @@ final class Properties extends AbstractMap<String,Object> implements Serializabl
     /**
      * The object where all properties come from.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final IdentifiedObject object;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java
index 19387b6fb8..aec6873097 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java
@@ -117,7 +117,7 @@ public class AbstractCRS extends AbstractReferenceSystem implements CoordinateRe
      *
      * @see #getCoordinateSystem()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private CoordinateSystem coordinateSystem;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractDerivedCRS.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractDerivedCRS.java
index da7d39d4ec..c25fb52c43 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractDerivedCRS.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractDerivedCRS.java
@@ -80,7 +80,7 @@ abstract class AbstractDerivedCRS<C extends Conversion> extends AbstractCRS impl
      *
      * @see #getConversionFromBase()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private C conversionFromBase;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java
index e09d69358f..e1f2c36228 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java
@@ -131,6 +131,7 @@ public class DefaultCompoundCRS extends AbstractCRS implements CompoundCRS {
      * <p><b>Consider this field as final!</b>
      * This field is modified only at construction and unmarshalling time by {@link #setComponents(List)}</p>
      */
+    @SuppressWarnings("serial")     // Most SIS implementations are serializable.
     private List<? extends CoordinateReferenceSystem> components;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultEngineeringCRS.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultEngineeringCRS.java
index 36b4389d4c..ff0d0f48e1 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultEngineeringCRS.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultEngineeringCRS.java
@@ -94,7 +94,7 @@ public class DefaultEngineeringCRS extends AbstractCRS implements EngineeringCRS
      *
      * @see #getDatum()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private EngineeringDatum datum;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeodeticCRS.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeodeticCRS.java
index 64f2651764..9baa92bf78 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeodeticCRS.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeodeticCRS.java
@@ -84,6 +84,7 @@ class DefaultGeodeticCRS extends AbstractCRS implements GeodeticCRS { // If made
      *
      * @see #getDatum()
      */
+    @SuppressWarnings("serial")     // Most SIS implementations are serializable.
     private GeodeticDatum datum;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultImageCRS.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultImageCRS.java
index 4977e635da..b0029e4d8f 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultImageCRS.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultImageCRS.java
@@ -79,6 +79,7 @@ public class DefaultImageCRS extends AbstractCRS implements ImageCRS {
      *
      * @see #getDatum()
      */
+    @SuppressWarnings("serial")     // Most SIS implementations are serializable.
     private ImageDatum datum;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultParametricCRS.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultParametricCRS.java
index 128cee1c6c..8da528526d 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultParametricCRS.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultParametricCRS.java
@@ -79,6 +79,7 @@ public class DefaultParametricCRS extends AbstractCRS implements ParametricCRS {
      *
      * @see #getDatum()
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private ParametricDatum datum;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultTemporalCRS.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultTemporalCRS.java
index a2698c3044..99b7b49ad0 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultTemporalCRS.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultTemporalCRS.java
@@ -93,6 +93,7 @@ public class DefaultTemporalCRS extends AbstractCRS implements TemporalCRS {
      *
      * @see #getDatum()
      */
+    @SuppressWarnings("serial")     // Most SIS implementations are serializable.
     private TemporalDatum datum;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultVerticalCRS.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultVerticalCRS.java
index 20aeac5f0c..eaca04829f 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultVerticalCRS.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultVerticalCRS.java
@@ -77,6 +77,7 @@ public class DefaultVerticalCRS extends AbstractCRS implements VerticalCRS {
      *
      * @see #getDatum()
      */
+    @SuppressWarnings("serial")     // Most SIS implementations are serializable.
     private VerticalDatum datum;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/AbstractCS.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/AbstractCS.java
index 19960cdb98..6e439d5f3a 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/AbstractCS.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/AbstractCS.java
@@ -116,7 +116,7 @@ public class AbstractCS extends AbstractIdentifiedObject implements CoordinateSy
      *
      * @see #getAxis(int)
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private CoordinateSystemAxis[] axes;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DefaultCompoundCS.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DefaultCompoundCS.java
index 7cf5b154d3..05bdadea81 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DefaultCompoundCS.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DefaultCompoundCS.java
@@ -62,8 +62,9 @@ public class DefaultCompoundCS extends AbstractCS {
     private static final long serialVersionUID = -5726410275278843373L;
 
     /**
-     * The coordinate systems.
+     * The coordinate systems in an unmodifiable list.
      */
+    @SuppressWarnings("serial")                         // Most SIS implementations are serializable.
     private final List<CoordinateSystem> components;
 
     /**
@@ -171,7 +172,7 @@ public class DefaultCompoundCS extends AbstractCS {
      */
     @SuppressWarnings("ReturnOfCollectionOrArrayField")
     public List<CoordinateSystem> getComponents() {
-        return components;  // Unmodifiable.
+        return components;          // Unmodifiable.
     }
 
     /*
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DefaultCoordinateSystemAxis.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DefaultCoordinateSystemAxis.java
index 47c55016c9..319baafe72 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DefaultCoordinateSystemAxis.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DefaultCoordinateSystemAxis.java
@@ -206,6 +206,7 @@ public class DefaultCoordinateSystemAxis extends AbstractIdentifiedObject implem
      *
      * @see #getUnit()
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Unit<?> unit;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/AbstractDatum.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/AbstractDatum.java
index 4fb4ac6713..fd6b351d48 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/AbstractDatum.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/AbstractDatum.java
@@ -101,6 +101,7 @@ public class AbstractDatum extends AbstractIdentifiedObject implements Datum {
      *
      * @see #getAnchorPoint()
      */
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private InternationalString anchorDefinition;
 
     /**
@@ -121,6 +122,7 @@ public class AbstractDatum extends AbstractIdentifiedObject implements Datum {
      *
      * @see #getDomainOfValidity()
      */
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private Extent domainOfValidity;
 
     /**
@@ -131,6 +133,7 @@ public class AbstractDatum extends AbstractIdentifiedObject implements Datum {
      *
      * @see #getScope()
      */
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private InternationalString scope;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/BursaWolfParameters.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/BursaWolfParameters.java
index c009e25373..91ff7ce939 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/BursaWolfParameters.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/BursaWolfParameters.java
@@ -196,6 +196,7 @@ public class BursaWolfParameters extends FormattableObject implements Cloneable,
      *
      * @see #getTargetDatum()
      */
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private final GeodeticDatum targetDatum;
 
     /**
@@ -204,6 +205,7 @@ public class BursaWolfParameters extends FormattableObject implements Cloneable,
      *
      * @see #getDomainOfValidity()
      */
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private final Extent domainOfValidity;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DatumShiftGrid.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DatumShiftGrid.java
index aab09a0318..25d19b1b5d 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DatumShiftGrid.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DatumShiftGrid.java
@@ -182,6 +182,7 @@ public abstract class DatumShiftGrid<C extends Quantity<C>, T extends Quantity<T
      *
      * @see #getCoordinateUnit()
      */
+    @SuppressWarnings("serial")                         // Most SIS implementations are serializable.
     private final Unit<C> coordinateUnit;
 
     /**
@@ -190,6 +191,7 @@ public abstract class DatumShiftGrid<C extends Quantity<C>, T extends Quantity<T
      *
      * @see #getCoordinateToGrid()
      */
+    @SuppressWarnings("serial")                         // Most SIS implementations are serializable.
     private final LinearTransform coordinateToGrid;
 
     /**
@@ -197,6 +199,7 @@ public abstract class DatumShiftGrid<C extends Quantity<C>, T extends Quantity<T
      *
      * @see #getTranslationUnit()
      */
+    @SuppressWarnings("serial")                         // Most SIS implementations are serializable.
     private final Unit<T> translationUnit;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultEllipsoid.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultEllipsoid.java
index 98f6151a6a..cf339dc8a2 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultEllipsoid.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultEllipsoid.java
@@ -157,6 +157,7 @@ public class DefaultEllipsoid extends AbstractIdentifiedObject implements Ellips
     /**
      * The units of the semi-major and semi-minor axis values.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Unit<Length> unit;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultGeodeticDatum.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultGeodeticDatum.java
index e92f5c76b6..71e7269752 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultGeodeticDatum.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultGeodeticDatum.java
@@ -166,6 +166,7 @@ public class DefaultGeodeticDatum extends AbstractDatum implements GeodeticDatum
      *
      * @see #getEllipsoid()
      */
+    @SuppressWarnings("serial")             // Most SIS implementations are serializable.
     private Ellipsoid ellipsoid;
 
     /**
@@ -176,6 +177,7 @@ public class DefaultGeodeticDatum extends AbstractDatum implements GeodeticDatum
      *
      * @see #getPrimeMeridian()
      */
+    @SuppressWarnings("serial")             // Most SIS implementations are serializable.
     private PrimeMeridian primeMeridian;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultPrimeMeridian.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultPrimeMeridian.java
index 6787d48f63..7ac6d72f53 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultPrimeMeridian.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultPrimeMeridian.java
@@ -111,6 +111,7 @@ public class DefaultPrimeMeridian extends AbstractIdentifiedObject implements Pr
      * <p><b>Consider this field as final!</b>
      * This field is modified only at unmarshalling time by {@link #setGreenwichMeasure(Measure)}</p>
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Unit<Angle> angularUnit;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/Sphere.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/Sphere.java
index d429adcc10..131d54b0e3 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/Sphere.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/Sphere.java
@@ -22,8 +22,6 @@ import javax.measure.quantity.Length;
 import javax.xml.bind.annotation.XmlTransient;
 import org.opengis.referencing.datum.Ellipsoid;
 
-import static java.lang.Math.*;
-
 
 /**
  * A ellipsoid which is spherical.
@@ -95,5 +93,4 @@ final class Sphere extends DefaultEllipsoid {
     public double flatteningDifference(final Ellipsoid other) {
         return 1 / other.getInverseFlattening();
     }
-
 }
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/UnavailableFactoryException.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/UnavailableFactoryException.java
index 4fe2be98d4..8a244522d2 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/UnavailableFactoryException.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/UnavailableFactoryException.java
@@ -30,7 +30,7 @@ import org.opengis.referencing.AuthorityFactory;
  * cannot be created, but other objects may be okay.
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
- * @version 0.7
+ * @version 1.4
  *
  * @see ConcurrentAuthorityFactory#newDataAccess()
  *
@@ -45,7 +45,7 @@ public class UnavailableFactoryException extends MissingFactoryResourceException
     /**
      * The factory that cannot perform its work, or {@code null} if unknown.
      */
-    private AuthorityFactory factory;
+    private transient AuthorityFactory factory;
 
     /**
      * Construct an exception with no detail message.
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/package-info.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/package-info.java
index cbdba32291..373041442d 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/package-info.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/package-info.java
@@ -56,7 +56,7 @@
  * </table>
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
- * @version 1.3
+ * @version 1.4
  * @since   0.6
  */
 package org.apache.sis.referencing.factory;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/AbstractCoordinateOperation.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/AbstractCoordinateOperation.java
index 2ad33ec0b6..086c820b73 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/AbstractCoordinateOperation.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/AbstractCoordinateOperation.java
@@ -137,7 +137,7 @@ public class AbstractCoordinateOperation extends AbstractIdentifiedObject implem
      *
      * @see #getSourceCRS()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     CoordinateReferenceSystem sourceCRS;
 
     /**
@@ -149,7 +149,7 @@ public class AbstractCoordinateOperation extends AbstractIdentifiedObject implem
      *
      * @see #getTargetCRS()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     CoordinateReferenceSystem targetCRS;
 
     /**
@@ -161,7 +161,7 @@ public class AbstractCoordinateOperation extends AbstractIdentifiedObject implem
      *
      * @see #getInterpolationCRS()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private CoordinateReferenceSystem interpolationCRS;
 
     /**
@@ -184,7 +184,7 @@ public class AbstractCoordinateOperation extends AbstractIdentifiedObject implem
      *
      * @see #getCoordinateOperationAccuracy()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     Collection<PositionalAccuracy> coordinateOperationAccuracy;
 
     /**
@@ -196,7 +196,7 @@ public class AbstractCoordinateOperation extends AbstractIdentifiedObject implem
      *
      * @see #getDomainOfValidity()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     Extent domainOfValidity;
 
     /**
@@ -207,7 +207,7 @@ public class AbstractCoordinateOperation extends AbstractIdentifiedObject implem
      *
      * @see #getScope()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private InternationalString scope;
 
     /**
@@ -218,7 +218,7 @@ public class AbstractCoordinateOperation extends AbstractIdentifiedObject implem
      * This field is non-final only for the convenience of constructors and for initialization
      * at XML unmarshalling time by {@link AbstractSingleOperation#afterUnmarshal(Unmarshaller, Object)}.</p>
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     MathTransform transform;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/AbstractSingleOperation.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/AbstractSingleOperation.java
index d0de657224..acd6c2f177 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/AbstractSingleOperation.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/AbstractSingleOperation.java
@@ -94,7 +94,7 @@ class AbstractSingleOperation extends AbstractCoordinateOperation implements Sin
      *
      * @see #getMethod()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private OperationMethod method;
 
     /**
@@ -107,7 +107,7 @@ class AbstractSingleOperation extends AbstractCoordinateOperation implements Sin
      * @see #getParameterValues()
      * @see #setParameterValues(ParameterValueGroup, Map)
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     ParameterValueGroup parameters;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationContext.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationContext.java
index b645c92fce..922b3bc43a 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationContext.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationContext.java
@@ -74,7 +74,7 @@ public class CoordinateOperationContext implements Serializable {
      * The spatiotemporal area of interest, or {@code null} if none. This instance may be updated or
      * replaced by other methods in this class, or (indirectly) by {@link CoordinateOperationFinder}.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Extent areaOfInterest;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultConcatenatedOperation.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultConcatenatedOperation.java
index 72d84182c6..dbd6c52dcd 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultConcatenatedOperation.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultConcatenatedOperation.java
@@ -70,7 +70,7 @@ final class DefaultConcatenatedOperation extends AbstractCoordinateOperation imp
      * <p><b>Consider this field as final!</b>
      * This field is modified only at unmarshalling time by {@link #setSteps(CoordinateOperation[])}</p>
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private List<? extends CoordinateOperation> operations;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultFormula.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultFormula.java
index a184bbfee8..4b59cacf2c 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultFormula.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultFormula.java
@@ -57,13 +57,13 @@ public class DefaultFormula extends FormattableObject implements Formula, Serial
     /**
      * Formula(s) or procedure used by the operation method.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final InternationalString formula;
 
     /**
      * Reference to a publication giving the formula(s) or procedure used by the coordinate operation method.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final Citation citation;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultOperationMethod.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultOperationMethod.java
index 4b6e9d46d1..8411135d51 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultOperationMethod.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultOperationMethod.java
@@ -154,7 +154,7 @@ public class DefaultOperationMethod extends AbstractIdentifiedObject implements
      * This field is modified only at unmarshalling time by {@link #setFormulaCitation(Citation)}
      * or {@link #setFormulaDescription(String)}.</p>
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Formula formula;
 
     /**
@@ -194,7 +194,7 @@ public class DefaultOperationMethod extends AbstractIdentifiedObject implements
      * This field is modified only at unmarshalling time by {@link #setDescriptors(GeneralParameterDescriptor[])}
      * or {@link #afterUnmarshal(Unmarshaller, Object)}.</p>
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private ParameterDescriptorGroup parameters;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java
index f0e3f1e38f..4ac1387348 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java
@@ -72,7 +72,7 @@ public class DefaultPassThroughOperation extends AbstractCoordinateOperation imp
      *
      * @see #getOperation()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private CoordinateOperation operation;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/InverseOperationMethod.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/InverseOperationMethod.java
index 973e6f04a2..0fa154aa3e 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/InverseOperationMethod.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/InverseOperationMethod.java
@@ -59,7 +59,7 @@ final class InverseOperationMethod extends DefaultOperationMethod {
     /**
      * The original operation method for which this {@code InverseOperationMethod} is the inverse.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private final OperationMethod inverse;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/LinearTransformBuilder.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/LinearTransformBuilder.java
index 293c15134d..42874d9d40 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/LinearTransformBuilder.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/LinearTransformBuilder.java
@@ -1496,7 +1496,6 @@ search:         for (int j=domain(); --j >= 0;) {
      * some codes may not work anymore. Search for {@code isAffine()} statements for locating codes
      * that depend on affine transform assumption.</p>
      */
-    @SuppressWarnings("serial")
     private MatrixSIS fit() throws FactoryException {
         final double[][] sources = this.sources;                    // Protect from changes.
         final double[][] targets = this.targets;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/LocalizationGridException.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/LocalizationGridException.java
index f2483ae330..1c19d0c157 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/LocalizationGridException.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/LocalizationGridException.java
@@ -52,6 +52,7 @@ public class LocalizationGridException extends FactoryDataException {
      *
      * @see #getPotentialCause()
      */
+    @SuppressWarnings("serial")             // String and most InternationalString are serializable.
     private CharSequence potentialCause;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/ResidualGrid.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/ResidualGrid.java
index e5968ed889..5f153d9e99 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/ResidualGrid.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/ResidualGrid.java
@@ -123,6 +123,7 @@ final class ResidualGrid extends DatumShiftGrid<Dimensionless,Dimensionless> {
      * inverse of {@link #getCoordinateToGrid()}. But in this {@code ResidualGrid} case, we need to override with
      * the linear regression computed by {@link LocalizationGridBuilder}.
      */
+    @SuppressWarnings("serial")             // Most SIS implementations are serializable.
     final LinearTransform gridToTarget;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/UnmodifiableMatrix.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/UnmodifiableMatrix.java
index 6e7183fd19..aae5271267 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/UnmodifiableMatrix.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/UnmodifiableMatrix.java
@@ -38,6 +38,7 @@ final class UnmodifiableMatrix extends MatrixSIS implements ExtendedPrecisionMat
     /**
      * The wrapped matrix.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final Matrix matrix;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Inverter.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Inverter.java
index 62a1e9e23a..e2cc7668e3 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Inverter.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Inverter.java
@@ -50,7 +50,7 @@ import static java.lang.Math.abs;
  *
  * @since 1.1
  */
-@SuppressWarnings({"CloneableImplementsClone", "serial"})
+@SuppressWarnings({"serial", "CloneableImplementsClone"})       // Not intended to be serialized.
 final class Inverter extends Matrix2 {
     /**
      * Creates a new matrix initialized to identity.
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Mercator.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Mercator.java
index 0ca7f6aa27..43ac3b9e62 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Mercator.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Mercator.java
@@ -241,12 +241,6 @@ public class Mercator extends ConformalProjection {
     private Mercator(final Initializer initializer) {
         super(initializer);
         variant = (Variant) initializer.variant;
-        /*
-         * The "Longitude of natural origin" parameter is found in all Mercator projections and is mandatory.
-         * Since this is usually the Greenwich meridian, the default value is 0°. We keep the value in degrees
-         * for now; it will be converted to radians later.
-         */
-        final double λ0 = initializer.getAndStore(Mercator1SP.LONGITUDE_OF_ORIGIN);
         /*
          * The "Latitude of natural origin" is not formally a parameter of Mercator projection. But the parameter
          * is included for completeness in CRS labelling, with the restriction (specified in EPSG documentation)
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java
index d560fbddeb..7a82723003 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java
@@ -236,7 +236,7 @@ public abstract class NormalizedProjection extends AbstractMathTransform2D imple
      * construction time). In addition this field is part of serialization form in order to preserve the
      * references graph.</div>
      */
-    private final MathTransform2D inverse;
+    private final Inverse inverse;
 
     /**
      * Maps the parameters to be used for initializing {@link NormalizedProjection} and its
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ZonedGridSystem.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ZonedGridSystem.java
index 85dda95f27..c43800595c 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ZonedGridSystem.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ZonedGridSystem.java
@@ -98,11 +98,13 @@ public class ZonedGridSystem extends AbstractMathTransform2D implements Serializ
     /**
      * The projection that performs the actual work before we add the zone number.
      */
+    @SuppressWarnings("serial")             // Most SIS implementations are serializable.
     final AbstractMathTransform projection;
 
     /**
      * The inverse of this map projection.
      */
+    @SuppressWarnings("serial")             // Most SIS implementations are serializable.
     private final MathTransform2D inverse;
 
     /**
@@ -220,6 +222,7 @@ public class ZonedGridSystem extends AbstractMathTransform2D implements Serializ
         /**
          * The projection that performs the actual work after we removed the zone number.
          */
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         private final AbstractMathTransform inverseProjection;
 
         /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/AbstractLinearTransform.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/AbstractLinearTransform.java
index e41b38a184..c9688059d4 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/AbstractLinearTransform.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/AbstractLinearTransform.java
@@ -61,7 +61,7 @@ abstract class AbstractLinearTransform extends AbstractMathTransform implements
      *
      * @see #inverse()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     volatile LinearTransform inverse;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ConcatenatedTransform.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ConcatenatedTransform.java
index 690d9cbc4e..f1f0c1482c 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ConcatenatedTransform.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ConcatenatedTransform.java
@@ -84,11 +84,13 @@ class ConcatenatedTransform extends AbstractMathTransform implements Serializabl
     /**
      * The first math transform.
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     protected final MathTransform transform1;
 
     /**
      * The second math transform.
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     protected final MathTransform transform2;
 
     /**
@@ -98,6 +100,7 @@ class ConcatenatedTransform extends AbstractMathTransform implements Serializabl
      *
      * @see #inverse()
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private MathTransform inverse;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ContextualParameters.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ContextualParameters.java
index 9c6c8ecc71..6085df0ce8 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ContextualParameters.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ContextualParameters.java
@@ -187,7 +187,7 @@ public class ContextualParameters extends Parameters implements Serializable {
      *
      * @see #getDescriptor()
      */
-    @SuppressWarnings("serial")                         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                         // Most SIS implementations are serializable.
     private final ParameterDescriptorGroup descriptor;
 
     /**
@@ -199,7 +199,7 @@ public class ContextualParameters extends Parameters implements Serializable {
      *
      * @see #getMatrix(MatrixRole)
      */
-    @SuppressWarnings("serial")                 // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private Matrix normalize, denormalize;
 
     /**
@@ -212,7 +212,7 @@ public class ContextualParameters extends Parameters implements Serializable {
      * @see #parameter(String)
      * @see #freeze()
      */
-    @SuppressWarnings("serial")                 // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private ParameterValue<?>[] values;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DatumShiftTransform.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DatumShiftTransform.java
index 783921f0ce..95fdd872db 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DatumShiftTransform.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DatumShiftTransform.java
@@ -111,6 +111,8 @@ public abstract class DatumShiftTransform extends AbstractMathTransform implemen
      *
      * Those factors are extracted from the {@link DatumShiftGrid#getCoordinateToGrid()}
      * transform for performance reasons.
+     *
+     * @see #computeConversionFactors()
      */
     private transient double scaleX, scaleY, x0, y0;
 
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
index 571062d004..895c5ef0eb 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
@@ -557,7 +557,7 @@ public class DefaultMathTransformFactory extends AbstractFactory implements Math
      * @version 1.3
      * @since   0.7
      */
-    @SuppressWarnings("serial")         // Fields are not statically typed as Serializable.
+    @SuppressWarnings("serial")         // All field values are usually serializable instances.
     public static class Context implements Serializable {
         /**
          * For cross-version compatibility.
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/EllipsoidToCentricTransform.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/EllipsoidToCentricTransform.java
index 8ce552ab11..ecc26c1040 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/EllipsoidToCentricTransform.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/EllipsoidToCentricTransform.java
@@ -214,7 +214,7 @@ public class EllipsoidToCentricTransform extends AbstractMathTransform implement
      * construction time). In addition this field is part of serialization form in order to preserve the
      * references graph.</div>
      */
-    @SuppressWarnings("serial")                     // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                     // Most SIS implementations are serializable.
     private final AbstractMathTransform inverse;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ExponentialTransform1D.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ExponentialTransform1D.java
index 03512753b2..527a618dd4 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ExponentialTransform1D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ExponentialTransform1D.java
@@ -83,7 +83,7 @@ final class ExponentialTransform1D extends AbstractMathTransform1D implements Se
      * The inverse of this transform. Created only when first needed. Serialized in order to avoid
      * rounding error if this transform is actually the one which was created from the inverse.
      */
-    @SuppressWarnings("serial")                 // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private MathTransform1D inverse;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/InterpolatedGeocentricTransform.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/InterpolatedGeocentricTransform.java
index 582f27ce18..2320e3ee9e 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/InterpolatedGeocentricTransform.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/InterpolatedGeocentricTransform.java
@@ -141,6 +141,7 @@ public class InterpolatedGeocentricTransform extends DatumShiftTransform {
      * The transform to apply before and after the geocentric translation. Shall be instance of
      * {@link EllipsoidToCentricTransform} and {@code EllipsoidToCentricTransform.Inverse} respectively.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final AbstractMathTransform ellipsoidToCentric, centricToEllipsoid;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LinearInterpolator1D.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LinearInterpolator1D.java
index c3faf5bdd7..bc7f110505 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LinearInterpolator1D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LinearInterpolator1D.java
@@ -76,6 +76,7 @@ final class LinearInterpolator1D extends AbstractMathTransform1D implements Seri
      * If the transform is invertible, the inverse. Otherwise {@code null}.
      * The transform is invertible only if values are in increasing order.
      */
+    @SuppressWarnings("serial")                         // Most SIS implementations are serializable.
     private final MathTransform1D inverse;
 
     /**
@@ -91,7 +92,7 @@ final class LinearInterpolator1D extends AbstractMathTransform1D implements Seri
         this.values = values;                           // Cloning this array is caller's responsibility.
         double last = values[0];
         for (int i=1; i<values.length; i++) {
-            if (!(last <= (last = values[i]))) {        // Use '!' for catching NaN values.
+            if (!(last <= (last = values[i]))) {        // Use `!` for catching NaN values.
                 inverse = null;                         // Transform is not reversible.
                 return;
             }
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LogarithmicTransform1D.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LogarithmicTransform1D.java
index ec735528af..5f8f1f2b33 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LogarithmicTransform1D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LogarithmicTransform1D.java
@@ -61,6 +61,7 @@ class LogarithmicTransform1D extends AbstractMathTransform1D implements Serializ
      * The inverse of this transform. Created only when first needed. Serialized in order to avoid
      * rounding error if this transform is actually the one which was created from the inverse.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private MathTransform1D inverse;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PassThroughTransform.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PassThroughTransform.java
index 2a1c75efcc..38107bf365 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PassThroughTransform.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PassThroughTransform.java
@@ -96,6 +96,7 @@ public class PassThroughTransform extends AbstractMathTransform implements Seria
      * The sub-transform to apply on the {@linkplain #getModifiedCoordinates() modified coordinates}.
      * This is often the sub-transform specified at construction time, but not necessarily.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final MathTransform subTransform;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PoleRotation.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PoleRotation.java
index a445b93e44..bc477b0986 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PoleRotation.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PoleRotation.java
@@ -126,7 +126,7 @@ public class PoleRotation extends AbstractMathTransform2D implements Serializabl
      *
      * @see #inverse()
      */
-    @SuppressWarnings("serial")                 // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private MathTransform2D inverse;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/SpecializableTransform.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/SpecializableTransform.java
index 88736c4abe..b15a47c206 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/SpecializableTransform.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/SpecializableTransform.java
@@ -56,6 +56,7 @@ class SpecializableTransform extends AbstractMathTransform implements Serializab
     /**
      * The global transform to use if there is no suitable specialization.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final MathTransform global;
 
     /**
@@ -73,6 +74,7 @@ class SpecializableTransform extends AbstractMathTransform implements Serializab
         /**
          * The transform to apply in this area.
          */
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         final MathTransform transform;
 
         /**
@@ -81,6 +83,7 @@ class SpecializableTransform extends AbstractMathTransform implements Serializab
          *
          * @see #createInverseTransform()
          */
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         MathTransform inverse;
 
         /**
@@ -140,6 +143,7 @@ class SpecializableTransform extends AbstractMathTransform implements Serializab
      *
      * @see #inverse()
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private MathTransform inverse;
 
     /**
@@ -533,6 +537,7 @@ class SpecializableTransform extends AbstractMathTransform implements Serializab
         /**
          * The inverse of {@link SpecializableTransform#global}.
          */
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         private final MathTransform global;
 
         /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/TransferFunction.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/TransferFunction.java
index 782e072a8f..5c051ea061 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/TransferFunction.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/TransferFunction.java
@@ -97,6 +97,7 @@ public class TransferFunction implements Cloneable, Serializable {
      *
      * <p>This field is serialized because the transform may be a user-provided one.</p>
      */
+    @SuppressWarnings("serial")             // Most SIS implementations are serializable.
     private MathTransform1D transform;
 
     /**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/TransformAdapter2D.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/TransformAdapter2D.java
index 858983cf0a..92cc51a26f 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/TransformAdapter2D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/TransformAdapter2D.java
@@ -47,6 +47,7 @@ final class TransformAdapter2D extends AbstractMathTransform2D implements Serial
     /**
      * The math transform which was supposed to implement the {@link MathTransform2D} interface..
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final MathTransform impl;
 
     /**
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/SinusoidalShiftGrid.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/SinusoidalShiftGrid.java
index 8b96a0777d..d7f72f4c67 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/SinusoidalShiftGrid.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/SinusoidalShiftGrid.java
@@ -37,7 +37,7 @@ import static org.junit.Assert.*;
  * @version 1.0
  * @since   1.0
  */
-@SuppressWarnings("serial")                             // Not intended to be serialized.
+@SuppressWarnings("serial")                       // Not intended to be serialized.
 final class SinusoidalShiftGrid extends DatumShiftGrid<Dimensionless,Dimensionless> {
     /**
      * Number of source and target dimensions of the grid.
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/ArrayConverter.java b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/ArrayConverter.java
index ace70cadde..2238df33c9 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/ArrayConverter.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/ArrayConverter.java
@@ -57,6 +57,7 @@ final class ArrayConverter<S,T> extends SystemConverter<S,T> {
      * The converter for array elements. The source and target types shall be compatible with the array component
      * types of {@code <S>} and {@code <T>} (this constraint cannot be expressed by JDK 7 parameterized types).
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final ObjectConverter<?,?> converter;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/CharSequenceConverter.java b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/CharSequenceConverter.java
index a32982071d..170e08afd3 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/CharSequenceConverter.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/CharSequenceConverter.java
@@ -49,6 +49,7 @@ final class CharSequenceConverter<T> extends SystemConverter<CharSequence,T> {
     /**
      * The converter to apply after this one.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final ObjectConverter<? super String, ? extends T> next;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/FallbackConverter.java b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/FallbackConverter.java
index b88dd94e07..23f869a289 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/FallbackConverter.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/FallbackConverter.java
@@ -67,6 +67,7 @@ final class FallbackConverter<S,T> extends SystemConverter<S,T> {
     /**
      * The primary converter, to be tried first.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final ObjectConverter<S, ? extends T> primary;
 
     /**
@@ -76,6 +77,7 @@ final class FallbackConverter<S,T> extends SystemConverter<S,T> {
      * type he would have asked explicitly for it. In addition this layout reduces the amount of
      * exceptions to be thrown and caught before we found a successful conversion.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final ObjectConverter<S, ? extends T> fallback;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/IdentityConverter.java b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/IdentityConverter.java
index e9a56e02b1..f73d835ec1 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/IdentityConverter.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/IdentityConverter.java
@@ -29,7 +29,7 @@ import org.apache.sis.math.FunctionProperty;
  * This class is immutable and thus inherently thread-safe.
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
- * @version 0.3
+ * @version 1.4
  *
  * @param <S>  the base type of source objects.
  * @param <T>  the base type of converted objects.
@@ -47,7 +47,7 @@ public final class IdentityConverter<S extends T, T> extends SystemConverter<S,T
     /**
      * The inverse converter specified at construction time, or {@code null} if none.
      */
-    private final ObjectConverter<T, S> inverse;
+    private final SystemConverter<T, S> inverse;
 
     /**
      * Creates a new identity converter.
@@ -58,11 +58,11 @@ public final class IdentityConverter<S extends T, T> extends SystemConverter<S,T
      */
     @SuppressWarnings("unchecked")
     public IdentityConverter(final Class<S> sourceClass, final Class<T> targetClass,
-            ObjectConverter<T, S> inverse)
+            SystemConverter<T, S> inverse)
     {
         super(sourceClass, targetClass);
         if (inverse == null && sourceClass == targetClass) {
-            inverse = (ObjectConverter<T,S>) this;
+            inverse = (SystemConverter<T,S>) this;
         }
         this.inverse = inverse;
     }
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/StringConverter.java b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/StringConverter.java
index 329df588a0..4fe9b79381 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/StringConverter.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/StringConverter.java
@@ -65,7 +65,7 @@ import org.apache.sis.measure.Units;
  * This base class and all inner classes are immutable, and thus inherently thread-safe.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.5
+ * @version 1.4
  * @since   0.3
  */
 abstract class StringConverter<T> extends SystemConverter<String, T> {
@@ -77,7 +77,7 @@ abstract class StringConverter<T> extends SystemConverter<String, T> {
     /**
      * The inverse converter from the target to the source class.
      */
-    private final ObjectConverter<T, String> inverse;
+    private final ObjectToString<T> inverse;
 
     /**
      * Creates a new converter for the given target class.
@@ -94,7 +94,7 @@ abstract class StringConverter<T> extends SystemConverter<String, T> {
      * Invoked by the constructor for creating the inverse converter.
      * To be overridden by classes which need a specialized instance.
      */
-    ObjectConverter<T, String> createInverse() {
+    ObjectToString<T> createInverse() {
         return new ObjectToString<>(targetClass, this);
     }
 
@@ -166,7 +166,7 @@ abstract class StringConverter<T> extends SystemConverter<String, T> {
         public Double() {super(java.lang.Double.class);}                            // Instantiated by ServiceLoader.
 
         @Override java.lang.Double doConvert(String source) throws NumberFormatException {
-            return java.lang.Double.parseDouble(source);
+            return java.lang.Double.valueOf(source);
         }
     }
 
@@ -175,7 +175,7 @@ abstract class StringConverter<T> extends SystemConverter<String, T> {
         public Float() {super(java.lang.Float.class);}                              // Instantiated by ServiceLoader.
 
         @Override java.lang.Float doConvert(String source) throws NumberFormatException {
-            return java.lang.Float.parseFloat(source);
+            return java.lang.Float.valueOf(source);
         }
     }
 
@@ -184,7 +184,7 @@ abstract class StringConverter<T> extends SystemConverter<String, T> {
         public Long() {super(java.lang.Long.class);}                                // Instantiated by ServiceLoader.
 
         @Override java.lang.Long doConvert(String source) throws NumberFormatException {
-            return java.lang.Long.parseLong(source);
+            return java.lang.Long.valueOf(source);
         }
     }
 
@@ -193,7 +193,7 @@ abstract class StringConverter<T> extends SystemConverter<String, T> {
         public Integer() {super(java.lang.Integer.class);}                          // Instantiated by ServiceLoader.
 
         @Override java.lang.Integer doConvert(String source) throws NumberFormatException {
-            return java.lang.Integer.parseInt(source);
+            return java.lang.Integer.valueOf(source);
         }
     }
 
@@ -202,7 +202,7 @@ abstract class StringConverter<T> extends SystemConverter<String, T> {
         public Short() {super(java.lang.Short.class);}                              // Instantiated by ServiceLoader.
 
         @Override java.lang.Short doConvert(String source) throws NumberFormatException {
-            return java.lang.Short.parseShort(source);
+            return java.lang.Short.valueOf(source);
         }
     }
 
@@ -211,7 +211,7 @@ abstract class StringConverter<T> extends SystemConverter<String, T> {
         public Byte() {super(java.lang.Byte.class);}                                // Instantiated by ServiceLoader.
 
         @Override java.lang.Byte doConvert(String source) throws NumberFormatException {
-            return java.lang.Byte.parseByte(source);
+            return java.lang.Byte.valueOf(source);
         }
     }
 
@@ -361,7 +361,7 @@ abstract class StringConverter<T> extends SystemConverter<String, T> {
         }
 
         /** Invoked by the constructor for creating the inverse converter. */
-        @Override ObjectConverter<T, String> createInverse() {
+        @Override ObjectToString<T> createInverse() {
             return new ObjectToString.CodeList<>(targetClass, this);
         }
     }
@@ -393,7 +393,7 @@ abstract class StringConverter<T> extends SystemConverter<String, T> {
         }
 
         /** Invoked by the constructor for creating the inverse converter. */
-        @Override ObjectConverter<T, String> createInverse() {
+        @Override ObjectToString<T> createInverse() {
             return new ObjectToString.Enum<>(targetClass, this);
         }
     }
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/package-info.java b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/package-info.java
index 3e6cf6439e..a65dca2b4a 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/package-info.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/package-info.java
@@ -39,7 +39,7 @@
  * classpath changes.</p>
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
+ * @version 1.4
  * @since   0.3
  */
 package org.apache.sis.internal.converter;
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/AutoMessageFormat.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/AutoMessageFormat.java
index df945b6a33..2d43bfa9cb 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/AutoMessageFormat.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/AutoMessageFormat.java
@@ -30,7 +30,7 @@ import java.text.MessageFormat;
  * @version 1.0
  * @since   1.0
  */
-@SuppressWarnings({"serial", "CloneableImplementsClone"})               // Not to be serialized.
+@SuppressWarnings({"serial", "CloneableImplementsClone"})               // Not intended to be serialized.
 public final class AutoMessageFormat extends MessageFormat {
     /**
      * Formats that may need to be configured before to write a value, or {@code null} if none.
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/CheckedHashSet.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/CheckedHashSet.java
index 257f592455..41cee05f58 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/CheckedHashSet.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/CheckedHashSet.java
@@ -46,6 +46,7 @@ import static org.apache.sis.util.ArgumentChecks.ensureNonNull;
  *
  * @since 0.3
  */
+@SuppressWarnings("CloneableImplementsClone")
 public final class CheckedHashSet<E> extends LinkedHashSet<E> implements CheckedContainer<E> {
     /**
      * Serial version UID for compatibility with different versions.
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/SimpleCharacterIterator.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/SimpleCharacterIterator.java
index 5693c6bf3b..be685e6295 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/SimpleCharacterIterator.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/SimpleCharacterIterator.java
@@ -16,7 +16,6 @@
  */
 package org.apache.sis.internal.util;
 
-import java.io.Serializable;
 import java.text.CharacterIterator;
 import org.apache.sis.util.ArgumentChecks;
 
@@ -26,15 +25,10 @@ import org.apache.sis.util.ArgumentChecks;
  * around a given {@link CharSequence}.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.3
+ * @version 1.4
  * @since   0.3
  */
-public class SimpleCharacterIterator implements CharacterIterator, CharSequence, Serializable {
-    /**
-     * For cross-version compatibility.
-     */
-    private static final long serialVersionUID = 4211374670559434445L;
-
+public class SimpleCharacterIterator implements CharacterIterator, CharSequence {
     /**
      * The wrapped character sequence.
      */
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/UnmodifiableArrayList.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/UnmodifiableArrayList.java
index f35f8d7455..2dcf736b91 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/UnmodifiableArrayList.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/UnmodifiableArrayList.java
@@ -70,6 +70,7 @@ public class UnmodifiableArrayList<E> extends AbstractList<E> implements RandomA
     /**
      * The wrapped array.
      */
+    @SuppressWarnings("serial")         // Not statically typed as Serializable.
     final E[] array;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/math/ArrayVector.java b/core/sis-utility/src/main/java/org/apache/sis/math/ArrayVector.java
index b92c86a738..e2c830ad7f 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/math/ArrayVector.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/math/ArrayVector.java
@@ -1229,7 +1229,7 @@ abstract class ArrayVector<E extends Number> extends Vector implements CheckedCo
         @Override public byte     byteValue(int index) {return Byte   .parseByte  (array[index]);}
         @Override public Number         get(int index) {
             final String value = array[index];
-            return (value != null) ? Double.parseDouble(value) : null;
+            return (value != null) ? Double.valueOf(value) : null;
         }
 
         /** Stores the given value in this vector and returns the previous value. */
diff --git a/core/sis-utility/src/main/java/org/apache/sis/math/ConcatenatedVector.java b/core/sis-utility/src/main/java/org/apache/sis/math/ConcatenatedVector.java
index d4362e22fe..874008316e 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/math/ConcatenatedVector.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/math/ConcatenatedVector.java
@@ -38,6 +38,7 @@ final class ConcatenatedVector extends Vector implements Serializable {
     /**
      * The vectors to concatenate.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final Vector first, second;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/math/LinearlyDerivedVector.java b/core/sis-utility/src/main/java/org/apache/sis/math/LinearlyDerivedVector.java
index 8cda33925a..15142ca79e 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/math/LinearlyDerivedVector.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/math/LinearlyDerivedVector.java
@@ -47,6 +47,7 @@ final class LinearlyDerivedVector extends Vector implements Serializable {
     /**
      * The vector on which this vector is derived from.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final Vector base;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/math/RepeatedVector.java b/core/sis-utility/src/main/java/org/apache/sis/math/RepeatedVector.java
index 70332e9127..338d872e7c 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/math/RepeatedVector.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/math/RepeatedVector.java
@@ -65,6 +65,7 @@ final class RepeatedVector extends Vector implements Serializable {
     /**
      * The vector on which this vector is derived from.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final Vector base;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/math/Statistics.java b/core/sis-utility/src/main/java/org/apache/sis/math/Statistics.java
index 54e1a90cf9..2e36491e3d 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/math/Statistics.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/math/Statistics.java
@@ -104,6 +104,7 @@ public class Statistics implements DoubleConsumer, LongConsumer, Cloneable, Seri
      *
      * @see #name()
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final InternationalString name;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/ConcatenatedConverter.java b/core/sis-utility/src/main/java/org/apache/sis/measure/ConcatenatedConverter.java
index e099355d49..5a9e72bfb0 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/ConcatenatedConverter.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/ConcatenatedConverter.java
@@ -41,11 +41,13 @@ final class ConcatenatedConverter extends AbstractConverter implements LenientCo
     /**
      * The first unit converter to apply.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final UnitConverter c1;
 
     /**
      * The second unit converter to apply, after {@code c1}.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final UnitConverter c2;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/ConventionalUnit.java b/core/sis-utility/src/main/java/org/apache/sis/measure/ConventionalUnit.java
index ba32acceb7..641fe29042 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/ConventionalUnit.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/ConventionalUnit.java
@@ -59,7 +59,7 @@ final class ConventionalUnit<Q extends Quantity<Q>> extends AbstractUnit<Q> {
     /**
      * The conversion from this unit to the {@linkplain #target} unit.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     final UnitConverter toTarget;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/DerivedScalar.java b/core/sis-utility/src/main/java/org/apache/sis/measure/DerivedScalar.java
index fdc669828d..3358262bb9 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/DerivedScalar.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/DerivedScalar.java
@@ -59,13 +59,13 @@ class DerivedScalar<Q extends Quantity<Q>> extends Scalar<Q> {
      * and its system unit (stored in super-class) is something more complex than a scale
      * factor, otherwise we would not need this {@code DerivedScalar}.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")             // Most SIS implementations are serializable.
     private final Unit<Q> derivedUnit;
 
     /**
      * Converter from the system unit to the unit of this quantity.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")             // Most SIS implementations are serializable.
     private final UnitConverter fromSystem;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/FormattedCharacterIterator.java b/core/sis-utility/src/main/java/org/apache/sis/measure/FormattedCharacterIterator.java
index 11317891a4..85c8fe3528 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/FormattedCharacterIterator.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/FormattedCharacterIterator.java
@@ -16,7 +16,6 @@
  */
 package org.apache.sis.measure;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -47,16 +46,11 @@ import org.apache.sis.internal.util.SimpleCharacterIterator;
  * will still been seen as 3 separated fields by this implementation.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.3
+ * @version 1.4
  * @since   0.3
  */
 @SuppressWarnings("CloneableImplementsClone")     // Not needed - see comment about clone() at the end of this file.
 final class FormattedCharacterIterator extends SimpleCharacterIterator implements AttributedCharacterIterator {
-    /**
-     * For cross-version compatibility.
-     */
-    private static final long serialVersionUID = -5864519830922231670L;
-
     /**
      * Holds a field value, together with the run range in which this value is valid.
      * Contains also a reference to the previous {@code Entry} in order to build a chained
@@ -80,12 +74,7 @@ final class FormattedCharacterIterator extends SimpleCharacterIterator implement
      *   <li>{@link #limit} is 3.</li>
      * </ul>
      */
-    private static final class Entry implements Serializable {
-        /**
-         * For cross-version compatibility.
-         */
-        private static final long serialVersionUID = 3297480138621390486L;
-
+    private static final class Entry {
         /**
          * The attribute value.
          */
@@ -332,9 +321,7 @@ final class FormattedCharacterIterator extends SimpleCharacterIterator implement
      * by {@link FormattedCharacterIterator#getAttributes()}. The value to extract depends
      * on the character index.
      */
-    private static final class Selector extends SurjectiveConverter<Entry,Object> implements Serializable {
-        private static final long serialVersionUID = -7281235148346378214L;
-
+    private static final class Selector extends SurjectiveConverter<Entry,Object> {
         /** Index of the character for which the map of attributes is requested. */
         private final int index;
 
@@ -363,9 +350,7 @@ final class FormattedCharacterIterator extends SimpleCharacterIterator implement
      * The object converter to use for filtering the keys in the map returned by
      * {@link FormattedCharacterIterator#getAttributes()}.
      */
-    private static class Filter extends SurjectiveConverter<Attribute,Attribute> implements Serializable {
-        private static final long serialVersionUID = 6951804952836918035L;
-
+    private static class Filter extends SurjectiveConverter<Attribute,Attribute> {
         /** A reference to {@link FormattedCharacterIterator#attributes}. */
         private final Map<Attribute,Entry> attributes;
 
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/MeasurementRange.java b/core/sis-utility/src/main/java/org/apache/sis/measure/MeasurementRange.java
index 5fb67e5e82..acca67d316 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/MeasurementRange.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/MeasurementRange.java
@@ -74,6 +74,7 @@ public class MeasurementRange<E extends Number & Comparable<? super E>> extends
      *
      * @see #unit()
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final Unit<?> unit;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/Range.java b/core/sis-utility/src/main/java/org/apache/sis/measure/Range.java
index 80376cfe88..a22c730c59 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/Range.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/Range.java
@@ -105,6 +105,7 @@ public class Range<E extends Comparable<? super E>> implements CheckedContainer<
     /**
      * The minimal and maximal values.
      */
+    @SuppressWarnings("serial")         // Not statically typed as Serializable.
     final E minValue, maxValue;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/Scalar.java b/core/sis-utility/src/main/java/org/apache/sis/measure/Scalar.java
index f5cd5e6f55..65f8351f17 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/Scalar.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/Scalar.java
@@ -63,7 +63,7 @@ class Scalar<Q extends Quantity<Q>> extends Number implements Quantity<Q>, Compa
     /**
      * The unit of measurement associated to the value.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private final Unit<Q> unit;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/SexagesimalConverter.java b/core/sis-utility/src/main/java/org/apache/sis/measure/SexagesimalConverter.java
index 7ff83cad10..4385b1c4f0 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/SexagesimalConverter.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/SexagesimalConverter.java
@@ -126,7 +126,7 @@ class SexagesimalConverter extends AbstractConverter {
     /**
      * The inverse of this converter.
      */
-    private final UnitConverter inverse;
+    private final SexagesimalConverter inverse;
 
     /**
      * Constructs a converter for sexagesimal units.
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/UnitDimension.java b/core/sis-utility/src/main/java/org/apache/sis/measure/UnitDimension.java
index 5ee6fa4ca6..7b861a7527 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/UnitDimension.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/UnitDimension.java
@@ -77,7 +77,7 @@ final class UnitDimension implements Dimension, Serializable {
      *
      * @see #getBaseDimensions()
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                     // The implementation is serializable.
     final Map<UnitDimension,Fraction> components;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/UnitFormat.java b/core/sis-utility/src/main/java/org/apache/sis/measure/UnitFormat.java
index abcbe693d2..99d603ea93 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/UnitFormat.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/UnitFormat.java
@@ -266,7 +266,7 @@ public class UnitFormat extends Format implements javax.measure.format.UnitForma
      *
      * @see #label(Unit, String)
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                         // Various serializable implementations.
     private final Map<Unit<?>,String> unitToLabel;
 
     /**
@@ -277,7 +277,7 @@ public class UnitFormat extends Format implements javax.measure.format.UnitForma
      *
      * @see #label(Unit, String)
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")                         // Various serializable implementations.
     private final Map<String,Unit<?>> labelToUnit;
 
     /**
@@ -1102,6 +1102,7 @@ appPow: if (unit == null) {
      * @return the unit parsed from the specified symbols.
      * @throws MeasurementParseException if a problem occurred while parsing the given symbols.
      */
+    @Override
     @SuppressWarnings({"null", "fallthrough"})
     public Unit<?> parse(CharSequence symbols, final ParsePosition position) throws MeasurementParseException {
         ArgumentChecks.ensureNonNull("symbols",  symbols);
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/collection/DefaultTreeTable.java b/core/sis-utility/src/main/java/org/apache/sis/util/collection/DefaultTreeTable.java
index 3ef3214f3d..0059575199 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/collection/DefaultTreeTable.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/collection/DefaultTreeTable.java
@@ -81,7 +81,7 @@ public class DefaultTreeTable implements TreeTable, Cloneable, Serializable {
      * @see #getRoot()
      * @see #setRoot(TreeTable.Node)
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private TreeTable.Node root;
 
     /**
@@ -390,7 +390,7 @@ public class DefaultTreeTable implements TreeTable, Cloneable, Serializable {
          * @see #getParent()
          * @see #setParent(TreeTable.Node)
          */
-        @SuppressWarnings("serial")         // Not statically typed as Serializable.
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         private TreeTable.Node parent;
 
         /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/collection/DerivedMap.java b/core/sis-utility/src/main/java/org/apache/sis/util/collection/DerivedMap.java
index c4a6c44156..876401fc11 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/collection/DerivedMap.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/collection/DerivedMap.java
@@ -209,7 +209,7 @@ class DerivedMap<SK,SV,K,V> extends AbstractMap<K,V> implements
         private static final long serialVersionUID = 3499911507293121425L;
 
         /** The inverse of {@link #keyConverter}. */
-        @SuppressWarnings("serial")         // Not statically typed as Serializable.
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         protected final ObjectConverter<K,SK> keyInverse;
 
         InvertibleKey(final Map<SK,SV> storage,
@@ -253,7 +253,7 @@ class DerivedMap<SK,SV,K,V> extends AbstractMap<K,V> implements
         private static final long serialVersionUID = -8290698486357636366L;
 
         /** The inverse of {@link #valueConverter}. */
-        @SuppressWarnings("serial")         // Not statically typed as Serializable.
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         private final ObjectConverter<V,SV> valueInverse;
 
         InvertibleValue(final Map<SK,SV> storage,
@@ -285,7 +285,7 @@ class DerivedMap<SK,SV,K,V> extends AbstractMap<K,V> implements
         private static final long serialVersionUID = -6625938922337246124L;
 
         /** The inverse of {@link #valueConverter}. */
-        @SuppressWarnings("serial")         // Not statically typed as Serializable.
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         private final ObjectConverter<V,SV> valueInverse;
 
         /** The inverse of this entry converter. */
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/collection/DerivedSet.java b/core/sis-utility/src/main/java/org/apache/sis/util/collection/DerivedSet.java
index 5576778be3..ecd6307bfb 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/collection/DerivedSet.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/collection/DerivedSet.java
@@ -185,7 +185,7 @@ class DerivedSet<S,E> extends SetOfUnknownSize<E> implements CheckedContainer<E>
         /**
          * The converter from the derived to the storage type.
          */
-        @SuppressWarnings("serial")         // Not statically typed as Serializable.
+        @SuppressWarnings("serial")         // Most SIS implementations are serializable.
         private final ObjectConverter<E,S> inverse;
 
         /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/collection/FrequencySortedSet.java b/core/sis-utility/src/main/java/org/apache/sis/util/collection/FrequencySortedSet.java
index 79e0779926..fae1cbd41d 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/collection/FrequencySortedSet.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/collection/FrequencySortedSet.java
@@ -62,8 +62,7 @@ public class FrequencySortedSet<E> extends AbstractSet<E> implements SortedSet<E
      * Values are positives if this set sorts by increasing frequencies, or negatives if this set sorts by
      * decreasing frequencies.
      */
-    @SuppressWarnings("serial")         // Not statically typed as Serializable.
-    private final Map<E,Integer> count;
+    private final LinkedHashMap<E,Integer> count;
 
     /**
      * {@code 0} if the element should be sorted in the usual order, or {@code -1}
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/collection/RangeSet.java b/core/sis-utility/src/main/java/org/apache/sis/util/collection/RangeSet.java
index 3be0bef1bc..1bbf68e843 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/collection/RangeSet.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/collection/RangeSet.java
@@ -1511,6 +1511,7 @@ public class RangeSet<E extends Comparable<? super E>> extends AbstractSet<Range
      *
      * @see RangeSet#create(Class, boolean, boolean)
      */
+    @SuppressWarnings("CloneableImplementsClone")
     private static final class Numeric<E extends Number & Comparable<? super E>> extends RangeSet<E> {
         private static final long serialVersionUID = 5603640102714482527L;
 
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeNodeList.java b/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeNodeList.java
index 9d21eed1d3..d9821689a2 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeNodeList.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeNodeList.java
@@ -77,12 +77,14 @@ abstract class TreeNodeList extends AbstractList<TreeTable.Node>
     /**
      * The parent of all children managed by this list.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     protected final TreeTable.Node parent;
 
     /**
      * The children, or {@code null} if none.
      * This array will be created when first needed.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private TreeTable.Node[] children;
 
     /**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeTableFormat.java b/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeTableFormat.java
index 8eea14fe63..5aa7e23416 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeTableFormat.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeTableFormat.java
@@ -117,6 +117,7 @@ public class TreeTableFormat extends TabularFormat<TreeTable> {
      * @see #getColumns()
      * @see #setColumns(TableColumn[])
      */
+    @SuppressWarnings("serial")         // The implementations that we use are Serializable.
     private Map<TableColumn<?>,Integer> columnIndices;
 
     /**
@@ -158,6 +159,8 @@ public class TreeTableFormat extends TabularFormat<TreeTable> {
      * A filter for specifying whether a node should be formatted, or {@code null} if no filtering is applied.
      * This is ignored at parsing time.
      *
+     * <p>A non-null value may cause the serialization to fail.</p>
+     *
      * @see #getNodeFilter()
      * @see #setNodeFilter(Predicate)
      */
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/resources/ResourceInternationalString.java b/core/sis-utility/src/main/java/org/apache/sis/util/resources/ResourceInternationalString.java
index 7b8be6a767..dd9fbe4930 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/resources/ResourceInternationalString.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/resources/ResourceInternationalString.java
@@ -65,6 +65,7 @@ public abstract class ResourceInternationalString extends AbstractInternationalS
      * specify {@code null} as an argument value. We distinguish the two cases with the sign
      * of the {@link #key} value.
      */
+    @SuppressWarnings("serial")         // Not statically typed as Serializable.
     private final Object arguments;
 
     /**
diff --git a/core/sis-utility/src/test/java/org/apache/sis/measure/FormattedCharacterIteratorTest.java b/core/sis-utility/src/test/java/org/apache/sis/measure/FormattedCharacterIteratorTest.java
index 266ad16ef0..965772a103 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/measure/FormattedCharacterIteratorTest.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/measure/FormattedCharacterIteratorTest.java
@@ -129,7 +129,7 @@ public final class FormattedCharacterIteratorTest extends TestCase {
      * with attributes. Built in a sub-class of {@link SimpleCharacterIterator} in
      * order to have access to the protected {@link #upper} field.
      */
-    @SuppressWarnings({"serial", "CloneableImplementsClone"})
+    @SuppressWarnings("CloneableImplementsClone")
     private static class LatitudeString extends SimpleCharacterIterator {
         LatitudeString() {
             super(LATITUDE_STRING);
diff --git a/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/Constraints.java b/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/Constraints.java
index 29a9bc6cf6..69ade75f99 100644
--- a/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/Constraints.java
+++ b/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/Constraints.java
@@ -60,6 +60,7 @@ public class Constraints extends DefaultConstraints {
     /**
      * The documents that specifies the nature of the constraints.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Collection<Citation> citations;
 
     /**
diff --git a/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/DataIdentification.java b/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/DataIdentification.java
index eb34437d02..b7089ce84d 100644
--- a/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/DataIdentification.java
+++ b/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/DataIdentification.java
@@ -59,6 +59,7 @@ public class DataIdentification extends DefaultDataIdentification {
     /**
      * The documents at the origin of the creation of the identified resources.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Collection<Citation> relatedCitations;
 
     /**
diff --git a/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/DirectReferenceSystem.java b/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/DirectReferenceSystem.java
index b91fce84dd..318f10de13 100644
--- a/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/DirectReferenceSystem.java
+++ b/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/DirectReferenceSystem.java
@@ -53,7 +53,7 @@ public class DirectReferenceSystem extends ReferenceSystemMetadata {
     /**
      * Empty constructor for JAXB.
      */
-    private DirectReferenceSystem() {
+    public DirectReferenceSystem() {
     }
 
     /**
diff --git a/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/IndirectReferenceSystem.java b/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/IndirectReferenceSystem.java
index 7e7191716e..706170c8b5 100644
--- a/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/IndirectReferenceSystem.java
+++ b/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/IndirectReferenceSystem.java
@@ -53,7 +53,7 @@ public class IndirectReferenceSystem extends ReferenceSystemMetadata {
     /**
      * Empty constructor for JAXB.
      */
-    private IndirectReferenceSystem() {
+    public IndirectReferenceSystem() {
     }
 
     /**
diff --git a/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/LegalConstraints.java b/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/LegalConstraints.java
index bf22c875d4..37b2a430b5 100644
--- a/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/LegalConstraints.java
+++ b/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/LegalConstraints.java
@@ -60,6 +60,7 @@ public class LegalConstraints extends DefaultLegalConstraints {
     /**
      * The documents that specifies the nature of the constraints.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Collection<Citation> citations;
 
     /**
diff --git a/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/SecurityConstraints.java b/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/SecurityConstraints.java
index e2e3f67f5a..55d53fe262 100644
--- a/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/SecurityConstraints.java
+++ b/profiles/sis-french-profile/src/main/java/org/apache/sis/internal/profile/fra/SecurityConstraints.java
@@ -60,6 +60,7 @@ public class SecurityConstraints extends DefaultSecurityConstraints {
     /**
      * The documents that specifies the nature of the constraints.
      */
+    @SuppressWarnings("serial")         // Most SIS implementations are serializable.
     private Collection<Citation> citations;
 
     /**
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/StoreFormat.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/StoreFormat.java
index c403105ea0..798768bd65 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/StoreFormat.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/StoreFormat.java
@@ -46,7 +46,7 @@ import org.apache.sis.util.ArraysExt;
  * @version 1.2
  * @since   0.8
  */
-@SuppressWarnings("serial")
+@SuppressWarnings({"serial", "CloneableImplementsClone"})       // Not intended to be serialized.
 public final class StoreFormat extends WKTFormat {
     /**
      * The geometry library, or {@code null} for the default.
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/CanNotProbeException.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/CanNotProbeException.java
index 17eafb357a..dd1321f779 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/CanNotProbeException.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/CanNotProbeException.java
@@ -36,8 +36,9 @@ public class CanNotProbeException extends DataStoreException {
 
     /**
      * The data store provider that failed to probe a file.
+     * This is null if this exception has been deserialized.
      */
-    private final DataStoreProvider provider;
+    private final transient DataStoreProvider provider;
 
     /**
      * Creates an exception with the specified details message and cause.
@@ -67,7 +68,7 @@ public class CanNotProbeException extends DataStoreException {
     /**
      * Returns the data store provider that failed to probe a file.
      *
-     * @return the data store provider that failed to probe a file.
+     * @return the data store provider that failed to probe a file, or {@code null} if unknown.
      *
      * @see DataStore#getProvider()
      */
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/CoverageQuery.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/CoverageQuery.java
index 464ab01d0e..2bfc6007b6 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/CoverageQuery.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/CoverageQuery.java
@@ -357,7 +357,7 @@ next:       for (int i=0; i<rangeNames.length; i++) {
                               new Longitude(box.getEastBoundLongitude()));
             } else {
                 sb.append('?');     // If the domain cannot be expressed as a geographic bounding box.
-            };
+            }
             sb.append(']');
             if (sourceDomainExpansion != 0) {
                 sb.append(" + margin(").append(sourceDomainExpansion).append(')');
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/FeatureQuery.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/FeatureQuery.java
index 049666b127..e7409c28ba 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/FeatureQuery.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/FeatureQuery.java
@@ -108,6 +108,7 @@ public class FeatureQuery extends Query implements Cloneable, Serializable {
      * @see #getSelection()
      * @see #setSelection(Filter)
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private Filter<? super Feature> selection;
 
     /**
@@ -136,6 +137,7 @@ public class FeatureQuery extends Query implements Cloneable, Serializable {
      * @see #getSortBy()
      * @see #setSortBy(SortBy)
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private SortBy<Feature> sortBy;
 
     /**
@@ -146,6 +148,7 @@ public class FeatureQuery extends Query implements Cloneable, Serializable {
      * @see #getLinearResolution()
      * @see #setLinearResolution(Quantity)
      */
+    @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
     private Quantity<Length> linearResolution;
 
     /**
@@ -415,11 +418,13 @@ public class FeatureQuery extends Query implements Cloneable, Serializable {
          * The literal, value reference or more complex expression to be retrieved by a {@code Query}.
          * Never {@code null}.
          */
+        @SuppressWarnings("serial")
         public final Expression<? super Feature, ?> expression;
 
         /**
          * The name to assign to the expression result, or {@code null} if unspecified.
          */
+        @SuppressWarnings("serial")                 // Most SIS implementations are serializable.
         public final GenericName alias;
 
         /**
diff --git a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java
index 57f643e102..8277244ea7 100644
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java
@@ -153,6 +153,7 @@ final class GroupAsPolylineOperation extends AbstractOperation {
         /**
          * The feature on which to execute the operation.
          */
+        @SuppressWarnings("serial")     // Most SIS implementations are serializable.
         private final Feature feature;
 
         /**