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

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

commit f1ea2363008539e55a199db0529b053c98b3f850
Merge: 2f048bc7a0 4afa8fd56a
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Mon Jul 3 15:20:20 2023 +0200

    Merge branch 'geoapi-3.1'.
    This merge prepares Apache SIS to JPMS (Jigsaw) modularisation.
    
    https://github.com/apache/sis/pull/34
    https://issues.apache.org/jira/browse/SIS-584
    https://issues.apache.org/jira/browse/SIS-585

 .../org/apache/sis/internal/gui/Resources.java     |  39 ++-
 .../org/apache/sis/internal/gui/Resources_en.java  |  18 +-
 .../org/apache/sis/internal/gui/Resources_fr.java  |  18 +-
 .../apache/sis/cloud/aws/internal/Resources.java   |  35 ++-
 .../sis/cloud/aws/internal/Resources_en.java       |  18 +-
 .../sis/cloud/aws/internal/Resources_fr.java       |  18 +-
 .../sis/coverage/grid/DimensionalityReduction.java |  10 +-
 .../apache/sis/coverage/grid/GridCoverage2D.java   |   6 +-
 .../sis/coverage/grid/GridCoverageProcessor.java   |  13 +-
 .../org/apache/sis/coverage/grid/GridExtent.java   |   2 +-
 .../apache/sis/coverage/grid/GridExtentCRS.java    |   8 +-
 .../apache/sis/feature/AbstractIdentifiedType.java |   4 +-
 .../org/apache/sis/feature/CharacteristicMap.java  |   5 +-
 .../java/org/apache/sis/feature/DenseFeature.java  |   5 +-
 .../apache/sis/feature/ExpressionOperation.java    |   2 +-
 .../apache/sis/feature/MultiValuedAttribute.java   |   5 +-
 .../org/apache/sis/feature/SingletonAttribute.java |   5 +-
 .../java/org/apache/sis/feature/SparseFeature.java |   5 +-
 .../sis/feature/builder/FeatureTypeBuilder.java    |   6 +-
 .../org/apache/sis/filter/ConvertFunction.java     |   2 +-
 .../java/org/apache/sis/image/ImageProcessor.java  |   4 +-
 .../sis/internal/coverage/j2d/ObservableImage.java |   2 +-
 .../org/apache/sis/internal/feature/Resources.java |  35 ++-
 .../apache/sis/internal/feature/Resources_en.java} |  18 +-
 .../apache/sis/internal/feature/Resources_fr.java} |  18 +-
 .../sis/feature/DefaultAssociationRoleTest.java    |   8 +-
 .../apache/sis/feature/DefaultFeatureTypeTest.java |   8 +-
 .../sis/internal/jaxb/SpecializedIdentifier.java   |   5 +-
 .../apache/sis/internal/jaxb/TypeRegistration.java |  59 +++--
 .../apache/sis/internal/jaxb/cat/CodeListUID.java  |   6 +-
 .../apache/sis/internal/jaxb/cat/package-info.java |   2 +-
 .../apache/sis/internal/jaxb/gml/TM_Primitive.java |   2 +-
 .../sis/internal/jaxb/gts/TM_PeriodDuration.java   |   2 +-
 .../sis/internal/metadata/ReferencingServices.java |  10 +-
 .../apache/sis/internal/metadata/Resources.java    |  35 ++-
 .../Resources_en.java}                             |  18 +-
 .../Resources_fr.java}                             |  18 +-
 .../sis/internal/metadata}/TemporalUtilities.java  |  49 ++--
 .../apache/sis/internal/metadata/package-info.java |   2 +-
 .../sis/internal/metadata/sql/Initializer.java     |  18 +-
 .../sis/internal/metadata/sql/LocalDataSource.java |   6 +-
 .../org/apache/sis/metadata/MetadataStandard.java  |  25 +-
 .../sis/metadata/StandardImplementation.java       |   6 +-
 .../metadata/iso/extent/DefaultTemporalExtent.java |   2 +-
 .../metadata/iso/lineage/DefaultProcessStep.java   |   2 +-
 .../iso/quality/DefaultEvaluationMethod.java       |   3 +-
 .../java/org/apache/sis/util/iso/AbstractName.java |   7 +-
 .../apache/sis/util/iso/DefaultNameFactory.java    |  25 +-
 .../apache/sis/util/iso/DefaultRecordSchema.java   |   5 +-
 .../main/java/org/apache/sis/util/iso/Names.java   |  19 +-
 .../main/java/org/apache/sis/util/iso/Types.java   |  23 +-
 .../java/org/apache/sis/xml/MarshalContext.java    |   2 +-
 .../java/org/apache/sis/xml/MarshallerPool.java    |   4 +-
 .../main/java/org/apache/sis/xml/Transformer.java  |  16 +-
 .../apache/sis/metadata/iso/CodeLists.properties   |  18 ++
 .../sis/metadata/iso/CodeLists_en.properties       |   1 +
 .../sis/metadata/iso/CodeLists_fr.properties       |  18 ++
 .../sis/internal/jaxb/gml/TimePeriodTest.java      |   2 +-
 .../sis/metadata/iso/CustomMetadataTest.java       |   4 +-
 .../identification/DefaultCoupledResourceTest.java |   6 +-
 .../DefaultServiceIdentificationTest.java          |   4 +-
 .../apache/sis/util/iso/NameMarshallingTest.java   |  11 +-
 .../java/org/apache/sis/util/iso/NamesTest.java    |   8 +-
 .../org/apache/sis/util/iso/TypeNamesTest.java     |   7 +-
 .../java/org/apache/sis/util/iso/TypesTest.java    |   8 +-
 .../sis/internal/map/coverage/RenderingData.java   |   3 +-
 .../main/java/org/apache/sis/portrayal/Canvas.java |   3 +-
 .../main/java/org/apache/sis/style/se1/Rule.java   |   4 +-
 .../org/apache/sis/style/se1/StyleElement.java     |   2 +-
 .../org/apache/sis/style/se1/StyleTestCase.java    |   2 +-
 .../apache/sis/internal/gazetteer/Resources.java   |  35 ++-
 .../sis/internal/gazetteer/Resources_en.java}      |  18 +-
 .../sis/internal/gazetteer/Resources_fr.java}      |  18 +-
 .../java/org/apache/sis/geometry/Envelopes.java    |   5 +-
 .../jaxb/referencing/CC_OperationMethod.java       |   4 +-
 .../sis/internal/referencing/AnnotatedMatrix.java  |   5 +-
 .../internal/referencing/CoordinateOperations.java |  87 +++----
 .../apache/sis/internal/referencing/LazySet.java   |  93 +++-----
 .../internal/referencing/PositionTransformer.java  |   6 +-
 .../referencing/ReferencingFactoryContainer.java   | 231 +++++++++++-------
 .../apache/sis/internal/referencing/Resources.java |  35 ++-
 .../sis/internal/referencing/Resources_en.java}    |  18 +-
 .../sis/internal/referencing/Resources_fr.java}    |  18 +-
 .../internal/referencing/ServicesForMetadata.java  |  13 +-
 .../sis/internal/referencing/j2d/AffineMatrix.java |   3 +-
 .../referencing/j2d/AffineTransform2D.java         |   2 +-
 .../referencing/provider/AbridgedMolodensky.java   |  36 ++-
 .../referencing/provider/AbstractProvider.java     |  80 ++++++-
 .../sis/internal/referencing/provider/Affine.java  | 130 ++++++----
 .../referencing/provider/AxisOrderReversal.java    |  23 +-
 .../referencing/provider/AxisOrderReversal3D.java  |   2 +-
 .../provider/CoordinateFrameRotation.java          |   2 +-
 .../provider/CoordinateFrameRotation2D.java        |  23 +-
 .../provider/CoordinateFrameRotation3D.java        |  38 ++-
 .../referencing/provider/Equirectangular.java      |   4 +-
 .../provider/FranceGeocentricInterpolation.java    |  62 +++--
 .../referencing/provider/GeocentricAffine.java     |  42 ++--
 .../GeocentricAffineBetweenGeographic.java         |  31 ++-
 .../provider/GeocentricToGeographic.java           |  39 ++-
 .../provider/GeocentricToTopocentric.java          |  24 +-
 .../provider/GeocentricTranslation.java            |   2 +-
 .../provider/GeocentricTranslation2D.java          |  23 +-
 .../provider/GeocentricTranslation3D.java          |  38 ++-
 .../referencing/provider/GeodeticOperation.java    | 122 +++++++---
 .../referencing/provider/Geographic2Dto3D.java     |  25 +-
 .../referencing/provider/Geographic3Dto2D.java     |  50 ++--
 .../provider/GeographicAndVerticalOffsets.java     |  32 ++-
 .../referencing/provider/GeographicOffsets.java    |  64 ++++-
 .../referencing/provider/GeographicOffsets2D.java  |  19 +-
 .../provider/GeographicRedimension.java            |  35 ++-
 .../provider/GeographicToGeocentric.java           |  39 ++-
 .../provider/GeographicToTopocentric.java          |  24 +-
 .../referencing/provider/Interpolation1D.java      |  24 +-
 .../referencing/provider/LongitudeRotation.java    |  36 ++-
 .../referencing/provider/MapProjection.java        |  34 ++-
 .../referencing/provider/MapProjection3D.java      |  38 +--
 .../internal/referencing/provider/Molodensky.java  |  38 ++-
 .../provider/MolodenskyInterpolation.java          |  45 ++--
 .../sis/internal/referencing/provider/NADCON.java  |   4 +-
 .../sis/internal/referencing/provider/NTv1.java    |   4 +-
 .../sis/internal/referencing/provider/NTv2.java    |   4 +-
 .../referencing/provider/NorthPoleRotation.java    |   4 +-
 .../referencing/provider/PositionVector7Param.java |   2 +-
 .../provider/PositionVector7Param2D.java           |  23 +-
 .../provider/PositionVector7Param3D.java           |  38 ++-
 .../internal/referencing/provider/Providers.java   |  72 ------
 .../referencing/provider/PseudoPlateCarree.java    |   4 +-
 .../referencing/provider/SouthPoleRotation.java    |   4 +-
 .../referencing/provider/VerticalOffset.java       |   6 +-
 .../internal/referencing/provider/Wraparound.java  |   4 +-
 .../provider/ZonedTransverseMercator.java          |   4 +-
 .../apache/sis/io/wkt/GeodeticObjectParser.java    |   2 +-
 .../org/apache/sis/parameter/TensorParameters.java |  14 +-
 .../org/apache/sis/parameter/TensorValues.java     |   3 +-
 .../sis/referencing/AbstractIdentifiedObject.java  |   9 +-
 .../apache/sis/referencing/AuthorityFactories.java |  16 +-
 .../java/org/apache/sis/referencing/Builder.java   |   6 +-
 .../main/java/org/apache/sis/referencing/CRS.java  |  18 +-
 .../sis/referencing/EPSGFactoryFallback.java       |   7 +-
 .../referencing/EllipsoidalHeightSeparator.java    |   4 +-
 .../apache/sis/referencing/GeodeticCalculator.java |   3 +-
 .../apache/sis/referencing/NamedIdentifier.java    |   6 +-
 .../sis/referencing/StandardDefinitions.java       |   6 +-
 .../sis/referencing/datum/BursaWolfParameters.java |   2 +-
 .../sis/referencing/datum/TimeDependentBWP.java    |   2 +-
 .../referencing/factory/GeodeticObjectFactory.java |  39 +--
 .../factory/MultiAuthoritiesFactory.java           |  10 +-
 .../referencing/factory/sql/EPSGDataAccess.java    | 119 +--------
 .../sis/referencing/factory/sql/EPSGFactory.java   |  26 +-
 .../sis/referencing/factory/sql/EPSGInstaller.java |   5 +-
 .../operation/AbstractSingleOperation.java         |   5 +-
 .../operation/CoordinateOperationFinder.java       |  13 +-
 .../operation/CoordinateOperationRegistry.java     |  33 +--
 .../operation/DefaultConcatenatedOperation.java    |   4 +-
 .../referencing/operation/DefaultConversion.java   |   3 +-
 .../DefaultCoordinateOperationFactory.java         | 106 +++++----
 .../operation/DefaultOperationMethod.java          | 255 +-------------------
 .../operation/InverseOperationMethod.java          |   2 +-
 .../operation/builder/TransformBuilder.java        |   5 +-
 .../transform/AbstractLinearTransform.java         |   2 +-
 .../transform/CoordinateSystemTransform.java       |   8 +-
 .../transform/DefaultMathTransformFactory.java     |  60 ++---
 .../operation/transform/LinearTransform1D.java     |   2 +-
 .../referencing/EllipsoidalHeightCombinerTest.java |   6 +-
 .../sis/internal/referencing/LazySetTest.java      |   8 +-
 .../internal/referencing/provider/AffineTest.java  |   4 +-
 .../provider/GeocentricTranslationTest.java        |   8 +-
 .../provider/GeographicOffsetsTest.java            |   5 +-
 .../provider/PositionVector7ParamTest.java         |   7 +-
 .../referencing/provider/ProviderMock.java         |  15 +-
 .../referencing/provider/ProvidersTest.java        |  73 +++---
 .../referencing/provider/SeismicBinGridMock.java   |   4 +-
 .../apache/sis/io/wkt/MathTransformParserTest.java |   6 +-
 .../org/apache/sis/referencing/BuilderTest.java    |   8 +-
 .../sis/referencing/IdentifiedObjectsTest.java     |   6 +-
 .../sis/referencing/NamedIdentifierTest.java       |   6 +-
 .../sis/referencing/factory/TestFactorySource.java |   2 +-
 .../DefaultConcatenatedOperationTest.java          |   8 +-
 .../operation/DefaultConversionTest.java           |  20 +-
 .../operation/DefaultOperationMethodTest.java      |  59 +----
 .../operation/DefaultTransformationTest.java       |   4 +-
 .../operation/SingleOperationMarshallingTest.java  |   6 +-
 .../sis/referencing/operation/projection/NoOp.java |   3 +-
 .../projection/ObliqueStereographicTest.java       |   7 +-
 .../transform/AbridgedMolodenskyTransformTest.java |   6 +-
 .../operation/transform/CopyTransformTest.java     |   2 +-
 .../transform/DefaultMathTransformFactoryTest.java |  38 ++-
 .../transform/EllipsoidToCentricTransformTest.java |  11 +-
 .../InterpolatedGeocentricTransformTest.java       |   6 +-
 .../transform/InterpolatedTransformTest.java       |   6 +-
 .../transform/MolodenskyTransformTest.java         |   9 +-
 .../transform/OperationMethodSetTest.java          |   4 +-
 .../operation/transform/PolarToCartesianTest.java  |   5 +-
 .../transform/ProjectiveTransformTest.java         |   2 +-
 .../transform/SphericalToCartesianTest.java        |   3 +-
 .../operation/transform/TransferFunctionTest.java  |   5 +-
 .../transform/TransformSeparatorTest.java          |   5 +-
 .../report/CoordinateOperationMethods.java         |   6 +-
 .../test/integration/CoordinateOperationTest.java  |   6 +-
 .../org/apache/sis/referencing/crs/DerivedCRS.xml  |   2 -
 .../apache/sis/referencing/crs/ProjectedCRS.xml    |   2 -
 .../operation/ConcatenatedOperation.xml            |   2 -
 .../referencing/operation/PassThroughOperation.xml |   2 -
 .../sis/internal/converter/SystemRegistry.java     |   7 +-
 .../sis/internal/system/DefaultFactories.java      | 265 ---------------------
 .../org/apache/sis/internal/system/Reflect.java    | 106 +++++++++
 .../internal/temporal/DefaultTemporalFactory.java  |   9 +-
 .../apache/sis/internal/temporal/package-info.java |   2 +-
 .../org/apache/sis/internal/util/CloneAccess.java  |  48 ++++
 .../java/org/apache/sis/internal/util/Cloner.java  | 155 ++++++------
 .../org/apache/sis/internal/util/CodeLists.java    |   7 +-
 .../apache/sis/internal/util/FinalFieldSetter.java | 128 ----------
 .../apache/sis/internal/util/MetadataServices.java |  21 +-
 .../java/org/apache/sis/measure/FormatField.java   |   4 +-
 .../org/apache/sis/measure/QuantityFormat.java     |  21 +-
 .../java/org/apache/sis/measure/RangeFormat.java   |  19 +-
 .../java/org/apache/sis/measure/UnitFormat.java    |  24 +-
 .../apache/sis/setup/InstallationResources.java    |  15 +-
 .../sis/util/collection/DefaultTreeTable.java      |   4 +-
 .../java/org/apache/sis/util/resources/Errors.java |  35 ++-
 .../org/apache/sis/util/resources/Errors_en.java}  |  18 +-
 .../org/apache/sis/util/resources/Errors_fr.java}  |  18 +-
 .../sis/util/resources/IndexedResourceBundle.java  |  83 +++----
 .../java/org/apache/sis/util/resources/Loader.java | 120 ----------
 .../org/apache/sis/util/resources/Messages.java    |  35 ++-
 .../apache/sis/util/resources/Messages_en.java}    |  18 +-
 .../apache/sis/util/resources/Messages_fr.java}    |  18 +-
 .../org/apache/sis/util/resources/Vocabulary.java  |  35 ++-
 .../apache/sis/util/resources/Vocabulary_en.java}  |  18 +-
 .../apache/sis/util/resources/Vocabulary_fr.java}  |  18 +-
 .../util/resources/IndexedResourceBundleTest.java  |  13 +-
 .../org/apache/sis/util/resources/LoaderTest.java  |  48 ----
 .../sis/internal/profile/fra/ProfileTypes.java     |  20 +-
 .../apache/sis/storage/landsat/LandsatStore.java   |   4 +-
 .../org/apache/sis/internal/geotiff/Resources.java |  35 ++-
 .../apache/sis/internal/geotiff/Resources_en.java  |  18 +-
 .../apache/sis/internal/geotiff/Resources_fr.java  |  18 +-
 .../sis/storage/geotiff/GridGeometryBuilder.java   |   4 +-
 .../sis/storage/geotiff/ImageMetadataBuilder.java  |   2 +-
 .../org/apache/sis/storage/geotiff/Reader.java     |   6 +-
 .../apache/sis/storage/geotiff/XMLMetadata.java    |   2 +-
 .../apache/sis/storage/geotiff/GeoCodesTest.java   |   6 +-
 .../apache/sis/storage/geotiff/GeoKeysTest.java    |   8 +-
 .../org/apache/sis/internal/netcdf/CRSBuilder.java |   7 +-
 .../org/apache/sis/internal/netcdf/Convention.java |   8 +-
 .../org/apache/sis/internal/netcdf/Decoder.java    |   8 +-
 .../org/apache/sis/internal/netcdf/Resources.java  |  35 ++-
 .../apache/sis/internal/netcdf/Resources_en.java   |  18 +-
 .../apache/sis/internal/netcdf/Resources_fr.java   |  18 +-
 .../apache/sis/internal/sql/feature/Analyzer.java  |   6 +-
 .../apache/sis/internal/sql/feature/Resources.java |  35 ++-
 .../sis/internal/sql/feature/Resources_en.java     |  18 +-
 .../sis/internal/sql/feature/Resources_fr.java     |  18 +-
 .../apache/sis/storage/sql/ResourceDefinition.java |  10 +-
 .../org/apache/sis/internal/storage/Resources.java |  35 ++-
 .../apache/sis/internal/storage/Resources_en.java  |  18 +-
 .../apache/sis/internal/storage/Resources_fr.java  |  18 +-
 .../apache/sis/internal/storage/folder/Store.java  |   6 +-
 .../org/apache/sis/storage/DataStoreRegistry.java  |  64 ++---
 .../java/org/apache/sis/storage/DataStores.java    |  54 +----
 .../org/apache/sis/storage/DataStoresTest.java     |   6 +-
 .../org/apache/sis/internal/storage/gpx/Store.java |   6 +-
 .../org/apache/sis/internal/storage/gpx/Types.java |   3 +-
 263 files changed, 2851 insertions(+), 2934 deletions(-)

diff --cc 
core/sis-feature/src/main/java/org/apache/sis/feature/CharacteristicMap.java
index 188bfc749c,c5b19ed0ee..30be513879
--- 
a/core/sis-feature/src/main/java/org/apache/sis/feature/CharacteristicMap.java
+++ 
b/core/sis-feature/src/main/java/org/apache/sis/feature/CharacteristicMap.java
@@@ -30,10 -37,10 +31,10 @@@ import org.apache.sis.internal.feature.
   * This map holds only the attribute characteristics which have been 
explicitly set or requested.
   *
   * @author  Martin Desruisseaux (Geomatys)
-  * @version 0.6
+  * @version 1.4
   * @since   0.5
   */
- final class CharacteristicMap extends 
AbstractMap<String,AbstractAttribute<?>> implements Cloneable {
 -final class CharacteristicMap extends AbstractMap<String,Attribute<?>> 
implements CloneAccess {
++final class CharacteristicMap extends 
AbstractMap<String,AbstractAttribute<?>> implements CloneAccess {
      /**
       * The attribute source for which to provide characteristics.
       */
diff --cc 
core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAttribute.java
index f96cbea44f,0750738d1c..7a0a22d26c
--- 
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
@@@ -17,8 -17,10 +17,9 @@@
  package org.apache.sis.feature;
  
  import java.util.Objects;
+ import org.apache.sis.internal.util.CloneAccess;
  
  // Branch-dependent imports
 -import org.opengis.feature.AttributeType;
  
  
  /**
diff --cc 
core/sis-feature/src/test/java/org/apache/sis/feature/DefaultAssociationRoleTest.java
index 19ba9432b2,8b52d9b209..108dc421dd
--- 
a/core/sis-feature/src/test/java/org/apache/sis/feature/DefaultAssociationRoleTest.java
+++ 
b/core/sis-feature/src/test/java/org/apache/sis/feature/DefaultAssociationRoleTest.java
@@@ -19,7 -19,8 +19,7 @@@ package org.apache.sis.feature
  import java.util.Map;
  import org.opengis.util.GenericName;
  import org.opengis.util.NameFactory;
- import org.apache.sis.internal.system.DefaultFactories;
 -import org.opengis.feature.FeatureAssociationRole;
+ import org.apache.sis.util.iso.DefaultNameFactory;
  import org.apache.sis.test.DependsOnMethod;
  import org.apache.sis.test.DependsOn;
  import org.apache.sis.test.TestCase;
diff --cc 
core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/SpecializedIdentifier.java
index 7513919cc4,b783a3188f..90865a015e
--- 
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
@@@ -46,7 -47,7 +47,7 @@@ import org.opengis.referencing.Referenc
   *
   * @since 0.3
   */
- public final class SpecializedIdentifier<T> implements ReferenceIdentifier, 
Cloneable, Serializable {
 -public final class SpecializedIdentifier<T> implements Identifier, 
CloneAccess, Serializable {
++public final class SpecializedIdentifier<T> implements ReferenceIdentifier, 
CloneAccess, Serializable {
      /**
       * For cross-version compatibility.
       */
diff --cc 
core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/cat/CodeListUID.java
index 3b1204135f,01ba3becd3..def2c56cab
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/cat/CodeListUID.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/cat/CodeListUID.java
@@@ -23,8 -22,10 +23,9 @@@ import jakarta.xml.bind.annotation.XmlA
  import jakarta.xml.bind.annotation.XmlType;
  import jakarta.xml.bind.annotation.XmlValue;
  import org.opengis.util.CodeList;
 -import org.opengis.util.ControlledVocabulary;
 -import org.opengis.annotation.ResourceBundles;
  import org.apache.sis.util.iso.Types;
  import org.apache.sis.internal.jaxb.Context;
++import org.apache.sis.internal.util.CodeLists;
  
  import static 
org.apache.sis.internal.metadata.ImplementationHelper.ISO_NAMESPACE;
  
@@@ -242,11 -243,7 +243,8 @@@ public final class CodeListUID 
          if (locale != null) {
              final String key = classID + '.' + fieldID;
              try {
-                 value = 
ResourceBundle.getBundle("org.opengis.metadata.CodeLists",
 -                value = ResourceBundles.codeLists(locale).getString(key);
++                value = ResourceBundle.getBundle(CodeLists.RESOURCES,
 +                        locale, 
CodeList.class.getClassLoader()).getString(key);
-                 if ("Off line access".equals(value)) {
-                     value = "Offline access";               // For having the 
same value than GeoAPI 3.1.
-                 }
              } catch (MissingResourceException e) {
                  Context.warningOccured(context, CodeListAdapter.class, 
"marshal", e, false);
              }
diff --cc 
core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/TM_Primitive.java
index fb82a3b4a6,236d7bdf09..936c2281b1
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/TM_Primitive.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/TM_Primitive.java
@@@ -22,13 -24,9 +22,13 @@@ import org.opengis.temporal.TemporalPri
  import org.apache.sis.internal.xml.XmlUtilities;
  import org.apache.sis.internal.jaxb.Context;
  import org.apache.sis.internal.jaxb.gco.PropertyType;
- import org.apache.sis.internal.util.TemporalUtilities;
+ import org.apache.sis.internal.metadata.TemporalUtilities;
  import org.apache.sis.util.resources.Errors;
  
 +// Branch-dependent imports
 +import org.apache.sis.internal.geoapi.temporal.Period;
 +import org.apache.sis.internal.geoapi.temporal.Instant;
 +
  
  /**
   * JAXB adapter for {@link TemporalPrimitive}, in order to integrate the 
value in an element complying
diff --cc 
core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TemporalUtilities.java
index e89868db28,48c23bb4dd..582980cc50
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TemporalUtilities.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TemporalUtilities.java
@@@ -14,15 -14,17 +14,17 @@@
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
- package org.apache.sis.internal.util;
+ package org.apache.sis.internal.metadata;
  
  import java.util.Date;
+ import java.util.ServiceLoader;
 -import org.opengis.temporal.Instant;
 -import org.opengis.temporal.Period;
 -import org.opengis.temporal.TemporalFactory;
+ import org.opengis.temporal.TemporalPrimitive;
 +import org.apache.sis.internal.geoapi.temporal.Instant;
 +import org.apache.sis.internal.geoapi.temporal.Period;
 +import org.apache.sis.internal.geoapi.temporal.TemporalFactory;
- import org.opengis.temporal.TemporalPrimitive;
- import org.apache.sis.util.Static;
- import org.apache.sis.internal.system.DefaultFactories;
+ import org.apache.sis.internal.system.Modules;
+ import org.apache.sis.internal.system.Reflect;
+ import org.apache.sis.internal.system.SystemListener;
  import org.apache.sis.internal.temporal.DefaultTemporalFactory;
  
  
diff --cc 
core/sis-metadata/src/main/java/org/apache/sis/metadata/StandardImplementation.java
index 6f8124ecae,14196dcfee..12b30f5025
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/StandardImplementation.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/StandardImplementation.java
@@@ -20,7 -20,10 +20,8 @@@ import java.util.Map
  import java.util.IdentityHashMap;
  import java.util.logging.Logger;
  import java.io.ObjectStreamException;
+ import java.util.concurrent.ConcurrentHashMap;
  import org.opengis.annotation.UML;
 -import org.opengis.annotation.Classifier;
 -import org.opengis.annotation.Stereotype;
  import org.apache.sis.util.CharSequences;
  import org.apache.sis.util.logging.Logging;
  import org.apache.sis.internal.system.Modules;
diff --cc 
core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/lineage/DefaultProcessStep.java
index 40650b42ee,22df7fce8a..b965330163
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/lineage/DefaultProcessStep.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/lineage/DefaultProcessStep.java
@@@ -39,13 -39,8 +39,13 @@@ import org.apache.sis.internal.jaxb.Fil
  import org.apache.sis.internal.xml.LegacyNamespaces;
  import org.apache.sis.internal.jaxb.gml.TM_Primitive;
  import org.apache.sis.internal.jaxb.metadata.MD_Scope;
- import org.apache.sis.internal.util.TemporalUtilities;
+ import org.apache.sis.internal.metadata.TemporalUtilities;
  
 +// Branch-specific imports
 +import org.opengis.annotation.UML;
 +import static org.opengis.annotation.Obligation.OPTIONAL;
 +import static org.opengis.annotation.Specification.ISO_19115;
 +
  
  /**
   * Information about an event or transformation in the life of a resource.
diff --cc 
core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultEvaluationMethod.java
index 3eb0f7d26a,98b8c69e3c..bda1fdd6bf
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultEvaluationMethod.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultEvaluationMethod.java
@@@ -27,8 -27,12 +27,9 @@@ import jakarta.xml.bind.annotation.XmlR
  import jakarta.xml.bind.annotation.XmlSeeAlso;
  import org.opengis.util.InternationalString;
  import org.opengis.metadata.citation.Citation;
 -import org.opengis.metadata.quality.EvaluationMethod;
  import org.opengis.metadata.quality.EvaluationMethodType;
 -import org.opengis.metadata.quality.DataEvaluation;
 -import org.opengis.metadata.quality.AggregationDerivation;
  import org.apache.sis.internal.system.Semaphores;
+ import org.apache.sis.internal.util.CloneAccess;
  import org.apache.sis.util.collection.CheckedContainer;
  import org.apache.sis.util.resources.Errors;
  import org.apache.sis.util.ArgumentChecks;
diff --cc 
core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordSchema.java
index 9829d6ec7d,7eb478f92b..8b3cfbfcf0
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordSchema.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordSchema.java
@@@ -128,12 -124,13 +127,12 @@@ public class DefaultRecordSchema implem
       * @param parent       the parent namespace, or {@code null} if none.
       * @param schemaName   the name of the new schema.
       */
 -    public DefaultRecordSchema(NameFactory nameFactory, final NameSpace 
parent, final CharSequence schemaName) {
 +    public DefaultRecordSchema(DefaultNameFactory nameFactory, final 
NameSpace parent, final CharSequence schemaName) {
          ArgumentChecks.ensureNonNull("schemaName", schemaName);
          if (nameFactory == null) {
-             nameFactory = DefaultFactories.forBuildin(NameFactory.class, 
DefaultNameFactory.class);
+             nameFactory = DefaultNameFactory.provider();
          }
          this.nameFactory    = nameFactory;
 -        this.typeFactory    = (nameFactory instanceof DefaultNameFactory) ? 
null : new TypeNames(nameFactory);
          this.namespace      = 
nameFactory.createNameSpace(nameFactory.createLocalName(parent, schemaName), 
null);
          this.description    = new WeakValueHashMap<>(TypeName.class);
          this.attributeTypes = new ConcurrentHashMap<>();
diff --cc core/sis-metadata/src/main/java/org/apache/sis/util/iso/Names.java
index 84e6d4afbf,082413384d..40b8112f92
--- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/Names.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/Names.java
@@@ -333,7 -332,7 +332,7 @@@ public final class Names extends Stati
      {
          ensureNonNull("localPart", localPart);
          ensureNonNull("attributeType", attributeType);
-         final DefaultNameFactory factory = 
DefaultFactories.forBuildin(NameFactory.class, DefaultNameFactory.class);
 -        final NameFactory factory = DefaultNameFactory.provider();
++        final DefaultNameFactory factory = DefaultNameFactory.provider();
          return factory.createMemberName(createNameSpace(factory, namespace, 
separator), localPart, attributeType);
      }
  
diff --cc core/sis-metadata/src/main/java/org/apache/sis/util/iso/Types.java
index 9362211772,7fc10558b4..6ec6d7cf87
--- 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
@@@ -292,9 -293,9 +292,9 @@@ public final class Types extends Stati
       * @see #getDescription(Class)
       */
      @OptionalCandidate
 -    public static InternationalString getDescription(final 
ControlledVocabulary code) {
 +    public static InternationalString getDescription(final CodeList<?> code) {
          if (code != null) {
-             final String resources = getResources(code.getClass().getName());
+             final String resources = 
toResourceName(code.getClass().getName());
              if (resources != null) {
                  return new Description(resources, 
Description.resourceKey(code));
              }
@@@ -359,15 -360,10 +359,13 @@@
           */
          private static final long serialVersionUID = -6202647167398898834L;
  
 +        /**
 +         * The class loader to use for fetching GeoAPI resources.
-          * Since the resources are bundled in the GeoAPI JAR file,
-          * we use the instance that loaded GeoAPI for more determinist 
behavior.
 +         */
-         private static final ClassLoader CLASSLOADER = 
UML.class.getClassLoader();
++        private static final ClassLoader CLASSLOADER = 
Types.class.getClassLoader();
 +
          /**
           * Creates a new international string from the specified resource 
bundle and key.
 -         * The {@code resources} argument is only informative since this 
class overrides
 -         * the {@link #getBundle(Locale)} method.
           *
           * @param resources  the name of the resource bundle, as a fully 
qualified class name.
           * @param key        the key for the resource to fetch.
@@@ -377,11 -373,12 +375,11 @@@
          }
  
          /**
-          * Loads the resources using the class loader used for loading GeoAPI 
interfaces.
+          * Loads the GeoAPI resources. A cache is managed by {@link 
ResourceBundle}.
 -         * Note that the {@link #resources} field value is ignored.
           */
          @Override
-         protected final ResourceBundle getBundle(final Locale locale) {
+         protected ResourceBundle getBundle(final Locale locale) {
 -            return ResourceBundles.descriptions(locale);
 +            return ResourceBundle.getBundle(resources, locale, CLASSLOADER);
          }
  
          /**
@@@ -460,6 -467,9 +458,9 @@@
  
      /**
       * Returns the resource name for the given GeoAPI type, or {@code null} 
if none.
+      * The non-null resource name is only informative in this implementation.
 -     * However we need {@code null} value is still necessary for telling that
 -     * no resource is expected to exist for the given class.
++     * We need to allow {@code null} return value for telling that no resource
++     * is expected to exist for the given class.
       *
       * @param  classname  the fully qualified name of the GeoAPI type.
       * @return the resource bundle to load, or {@code null} if none.
@@@ -525,16 -539,10 +526,16 @@@
              return null;
          }
          if (typeForNames == null) {
 -            final Properties props;
 +            final Class<Types> c = Types.class;
 +            final InputStream in = 
c.getResourceAsStream("class-index.properties");
 +            if (in == null) {
 +                throw new MissingResourceException("class-index.properties", 
c.getName(), identifier);
 +            }
 +            final Properties props = new Properties();
              try {
 -                props = ResourceBundles.classIndex();
 +                props.load(in);
 +                in.close();
-             } catch (IOException | IllegalArgumentException e) {
+             } catch (IOException e) {
                  throw new BackingStoreException(e);
              }
              /*
diff --cc 
core/sis-metadata/src/main/resources/org/apache/sis/metadata/iso/CodeLists.properties
index 0000000000,0000000000..cb51675dc4
new file mode 100644
--- /dev/null
+++ 
b/core/sis-metadata/src/main/resources/org/apache/sis/metadata/iso/CodeLists.properties
@@@ -1,0 -1,0 +1,18 @@@
++# Copy from GeoAPI 3.0 (BSD-like license)
++CI_DateTypeCode.creation=Creation
++CI_DateTypeCode.publication=Publication
++CI_DateTypeCode.revision=Revision
++CI_OnLineFunctionCode.download=Download
++CI_OnLineFunctionCode.information=Information
++CI_OnLineFunctionCode.offlineAccess=Offline access
++CI_OnLineFunctionCode.order=Order
++CI_OnLineFunctionCode.search=Search
++MD_ScopeCode.attribute=Attribute
++MD_ScopeCode.attributeType=Attribute type
++MD_ScopeCode.dataset=Dataset
++MD_ScopeCode.series=Series
++MD_ScopeCode.nonGeographicDataset=Non geographic dataset
++MD_ScopeCode.feature=Feature
++MD_ScopeCode.featureType=Feature type
++MD_ScopeCode.propertyType=Property type
++MD_ScopeCode.tile=Tile
diff --cc 
core/sis-metadata/src/main/resources/org/apache/sis/metadata/iso/CodeLists_en.properties
index 0000000000,0000000000..d70945d8ec
new file mode 100644
--- /dev/null
+++ 
b/core/sis-metadata/src/main/resources/org/apache/sis/metadata/iso/CodeLists_en.properties
@@@ -1,0 -1,0 +1,1 @@@
++# Inherit all resources from CodeLists.properties
diff --cc 
core/sis-metadata/src/main/resources/org/apache/sis/metadata/iso/CodeLists_fr.properties
index 0000000000,0000000000..f8afb6f9ed
new file mode 100644
--- /dev/null
+++ 
b/core/sis-metadata/src/main/resources/org/apache/sis/metadata/iso/CodeLists_fr.properties
@@@ -1,0 -1,0 +1,18 @@@
++# Copy from GeoAPI 3.0 (BSD-like license)
++CI_DateTypeCode.creation=Cr�ation
++CI_DateTypeCode.publication=Publication
++CI_DateTypeCode.revision=R�vision
++CI_OnLineFunctionCode.download=T�l�chargement
++CI_OnLineFunctionCode.information=Information
++CI_OnLineFunctionCode.offlineAccess=Acc�s hors ligne
++CI_OnLineFunctionCode.order=Commande en ligne
++CI_OnLineFunctionCode.search=Moteur de recherche
++MD_ScopeCode.attribute=Attribut
++MD_ScopeCode.attributeType=Type d\u2019attribut
++MD_ScopeCode.dataset=Jeu de donn�es
++MD_ScopeCode.series=S�rie
++MD_ScopeCode.nonGeographicDataset=Jeu de donn�es non g�ographiques
++MD_ScopeCode.feature=�l�ment
++MD_ScopeCode.featureType=Type d\u2019�l�ment
++MD_ScopeCode.propertyType=Type de propri�t�
++MD_ScopeCode.tile=Tuile
diff --cc 
core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/identification/DefaultCoupledResourceTest.java
index b32f592e0d,484eb40ef5..88d90a1963
--- 
a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/identification/DefaultCoupledResourceTest.java
+++ 
b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/identification/DefaultCoupledResourceTest.java
@@@ -21,9 -21,10 +21,9 @@@ import org.opengis.util.ScopedName
  import org.opengis.util.NameFactory;
  import org.opengis.parameter.ParameterDescriptor;
  import org.opengis.metadata.citation.OnlineResource;
 -import org.opengis.metadata.identification.OperationMetadata;
 -import org.opengis.metadata.identification.DistributedComputingPlatform;
 +import org.apache.sis.internal.geoapi.evolution.UnsupportedCodeList;
  import org.apache.sis.internal.jaxb.metadata.replace.ServiceParameterTest;
- import org.apache.sis.internal.system.DefaultFactories;
+ import org.apache.sis.util.iso.DefaultNameFactory;
  import org.apache.sis.xml.NilReason;
  import org.apache.sis.test.DependsOn;
  import org.apache.sis.test.TestCase;
@@@ -62,8 -62,8 +62,8 @@@ public final class DefaultCoupledResour
       */
      @Test
      public void testOperationNameResolve() {
-         final DefaultCoupledResource resource  = 
create(DefaultFactories.forBuildin(NameFactory.class));
+         final DefaultCoupledResource resource  = 
create(DefaultNameFactory.provider());
 -        final OperationMetadata      operation = resource.getOperation();
 +        final DefaultOperationMetadata operation = resource.getOperation();
          /*
           * Test OperationName replacement when the name matches.
           */
diff --cc 
core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/identification/DefaultServiceIdentificationTest.java
index 9e7c37c5c4,98c87b2420..8abc32c730
--- 
a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/identification/DefaultServiceIdentificationTest.java
+++ 
b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/identification/DefaultServiceIdentificationTest.java
@@@ -19,12 -19,17 +19,12 @@@ package org.apache.sis.metadata.iso.ide
  import java.util.Set;
  import jakarta.xml.bind.JAXBException;
  import org.opengis.util.NameFactory;
 -import org.opengis.parameter.ParameterDirection;
  import org.opengis.parameter.ParameterDescriptor;
  import org.opengis.metadata.citation.Citation;
 -import org.opengis.metadata.identification.CouplingType;
 -import org.opengis.metadata.identification.CoupledResource;
 -import org.opengis.metadata.identification.OperationMetadata;
 -import org.opengis.metadata.identification.ServiceIdentification;
 -import org.opengis.metadata.identification.DistributedComputingPlatform;
 +import org.apache.sis.internal.geoapi.evolution.UnsupportedCodeList;
  import org.apache.sis.metadata.iso.citation.DefaultCitation;
- import org.apache.sis.internal.system.DefaultFactories;
  import org.apache.sis.metadata.xml.TestUsingFile;
+ import org.apache.sis.util.iso.DefaultNameFactory;
  import org.apache.sis.xml.NilReason;
  import org.apache.sis.test.DependsOn;
  import org.junit.Test;
diff --cc 
core/sis-metadata/src/test/java/org/apache/sis/util/iso/TypeNamesTest.java
index 92f43b50c0,f3a5174413..5f129b4609
--- a/core/sis-metadata/src/test/java/org/apache/sis/util/iso/TypeNamesTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/util/iso/TypeNamesTest.java
@@@ -53,10 -52,10 +52,10 @@@ public final class TypeNamesTest extend
      private static void verifyLookup(final String namespace, final String 
name, final Class<?> valueClass)
              throws ClassNotFoundException
      {
-         final DefaultNameFactory factory = 
DefaultFactories.forBuildin(NameFactory.class, DefaultNameFactory.class);
+         final DefaultNameFactory factory = DefaultNameFactory.provider();
          final TypeName type = factory.toTypeName(valueClass);
          assertNotNull(name, type);
 -        assertSame   (name, valueClass, type.toJavaType().get());
 +        assertSame   (name, valueClass, ((DefaultTypeName) 
type).toJavaType().get());
          assertEquals (name, namespace,  type.scope().name().toString());
          assertEquals (name, name,       type.toString());
          assertEquals (name, valueClass, TypeNames.toClass(namespace, name));
diff --cc 
core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ReferencingFactoryContainer.java
index c7085dcbfc,d1b9933bc6..fa2600eb43
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ReferencingFactoryContainer.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ReferencingFactoryContainer.java
@@@ -17,8 -17,9 +17,8 @@@
  package org.apache.sis.internal.referencing;
  
  import java.util.Map;
--import org.opengis.util.Factory;
  import org.opengis.util.FactoryException;
+ import org.opengis.util.NameFactory;
  import org.opengis.referencing.cs.CartesianCS;
  import org.opengis.referencing.cs.CSFactory;
  import org.opengis.referencing.cs.CSAuthorityFactory;
@@@ -29,15 -30,14 +29,17 @@@ import org.opengis.referencing.datum.Da
  import org.opengis.referencing.operation.MathTransformFactory;
  import org.opengis.referencing.operation.CoordinateOperationFactory;
  import org.opengis.referencing.operation.CoordinateOperationAuthorityFactory;
+ import 
org.apache.sis.referencing.operation.transform.DefaultMathTransformFactory;
  import org.apache.sis.referencing.factory.NoSuchAuthorityFactoryException;
+ import org.apache.sis.referencing.factory.GeodeticObjectFactory;
  import org.apache.sis.referencing.CRS;
- import org.apache.sis.internal.system.DefaultFactories;
  import org.apache.sis.internal.util.Constants;
+ import org.apache.sis.util.iso.DefaultNameFactory;
  import org.apache.sis.util.resources.Errors;
  
 +// Branch-dependent imports
 +import org.apache.sis.referencing.operation.DefaultCoordinateOperationFactory;
 +
  
  /**
   * A container of factories frequently used together.
@@@ -126,6 -142,23 +144,23 @@@ public class ReferencingFactoryContaine
      public ReferencingFactoryContainer() {
      }
  
+     /**
+      * Creates a new instance with factories fetched from the given map of 
properties.
+      * Factories that are not present in the map will be left to their 
default value.
+      * This method recognizes the keys declared as static {@link String} 
constants in this class.
+      * Other entries are ignored.
+      *
+      * @param  properties  the factories.
+      */
+     public ReferencingFactoryContainer(final Map<String,?> properties) {
+         nameFactory      = (NameFactory)                
properties.get(NAME_FACTORY);
+         datumFactory     = (DatumFactory)               
properties.get(DATUM_FACTORY);
+         csFactory        = (CSFactory)                  
properties.get(CS_FACTORY);
+         crsFactory       = (CRSFactory)                 
properties.get(CRS_FACTORY);
 -        operationFactory = (CoordinateOperationFactory) 
properties.get(OPERATION_FACTORY);
++        operationFactory = (DefaultCoordinateOperationFactory) 
properties.get(OPERATION_FACTORY);
+         mtFactory        = (MathTransformFactory)       
properties.get(MT_FACTORY);
+     }
+ 
      /**
       * Creates a new instance which will use the given factories.
       * Any factory given in argument may be {@code null} if lazy 
instantiation is desired.
@@@ -173,11 -207,12 +209,12 @@@
       * @return {@code true} if the factory changed as a result of this method 
call.
       * @throws IllegalArgumentException if the {@code type} argument is not 
one of the valid values.
       */
--    public final <T extends Factory> boolean setFactory(final Class<T> type, 
final T factory) {
-         if (type == CRSFactory.class)                 return crsFactory       
!= (crsFactory       = (CRSFactory)                 factory);
-         if (type == CSFactory.class)                  return csFactory        
!= (csFactory        = (CSFactory)                  factory);
++    public final <T> boolean setFactory(final Class<T> type, final T factory) 
{
+         if (type == NameFactory.class)                return nameFactory      
!= (nameFactory      = (NameFactory)                factory);
          if (type == DatumFactory.class)               return datumFactory     
!= (datumFactory     = (DatumFactory)               factory);
+         if (type == CSFactory.class)                  return csFactory        
!= (csFactory        = (CSFactory)                  factory);
+         if (type == CRSFactory.class)                 return crsFactory       
!= (crsFactory       = (CRSFactory)                 factory);
 -        if (type == CoordinateOperationFactory.class) return operationFactory 
!= (operationFactory = (CoordinateOperationFactory) factory);
 +        if (type == CoordinateOperationFactory.class) return operationFactory 
!= (operationFactory = (DefaultCoordinateOperationFactory) factory);
          if (type == MathTransformFactory.class)       return mtFactory        
!= (mtFactory        = (MathTransformFactory)       factory);
          throw new 
IllegalArgumentException(Errors.format(Errors.Keys.IllegalArgumentValue_2, 
"type", type));
      }
@@@ -202,11 -238,12 +240,12 @@@
       * @return the factory for the given type.
       * @throws IllegalArgumentException if the {@code type} argument is not 
one of the valid values.
       */
--    public final <T extends Factory> T getFactory(final Class<T> type) {
--        final Factory f;
-              if (type == CRSFactory.class)                 f = 
getCRSFactory();
-         else if (type == CSFactory.class)                  f = getCSFactory();
++    public final <T> T getFactory(final Class<T> type) {
++        final Object f;
+              if (type == NameFactory.class)                f = 
getNameFactory();
          else if (type == DatumFactory.class)               f = 
getDatumFactory();
+         else if (type == CSFactory.class)                  f = getCSFactory();
+         else if (type == CRSFactory.class)                 f = 
getCRSFactory();
          else if (type == CoordinateOperationFactory.class) f = 
getCoordinateOperationFactory();
          else if (type == MathTransformFactory.class)       f = 
getMathTransformFactory();
          else {
@@@ -317,15 -307,10 +309,15 @@@
       *
       * @return the Coordinate Operation factory (never {@code null}).
       */
 -    public final CoordinateOperationFactory getCoordinateOperationFactory() {
 +    public final DefaultCoordinateOperationFactory 
getCoordinateOperationFactory() {
          if (operationFactory == null) {
 -            operationFactory = 
CoordinateOperations.getCoordinateOperationFactory(defaultProperties, 
mtFactory, crsFactory, csFactory);
 +            CoordinateOperationFactory op = 
CoordinateOperations.getCoordinateOperationFactory(defaultProperties, 
mtFactory, crsFactory, csFactory);
              defaultProperties = null;       // Not needed anymore.
 +            if (op instanceof DefaultCoordinateOperationFactory) {
 +                operationFactory = (DefaultCoordinateOperationFactory) op;
 +            } else {
-                 operationFactory = CoordinateOperations.factory();
++                operationFactory = 
DefaultCoordinateOperationFactory.provider();
 +            }
          }
          return operationFactory;
      }
diff --cc 
core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ServicesForMetadata.java
index af0ace2389,748613cc6d..3eb2ba5006
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ServicesForMetadata.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ServicesForMetadata.java
@@@ -500,86 -470,6 +499,86 @@@ public final class ServicesForMetadata 
          return DefaultParameterDescriptor.castOrCopy(parameter);
      }
  
 +    /**
 +     * Creates a parametric CS. This method requires the SIS factory
 +     * since parametric CRS were not available in GeoAPI 3.0.
 +     *
 +     * <p>This method is actually not needed anymore for {@code sis-metadata} 
module,
 +     * but is still defined here for historical reason. This method is 
removed on SIS
 +     * branches using a GeoAPI versions more recent than 3.0.</p>
 +     *
 +     * @param  properties  the coordinate system name, and optionally other 
properties.
 +     * @param  axis        the axis of the parametric coordinate system.
 +     * @param  factory     the factory to use for creating the coordinate 
system.
 +     * @return a parametric coordinate system using the given axes.
 +     * @throws FactoryException if the parametric object creation failed.
 +     *
 +     * @since 0.7
 +     */
 +    public static CoordinateSystem createParametricCS(final Map<String,?> 
properties, final CoordinateSystemAxis axis,
 +            CSFactory factory) throws FactoryException
 +    {
 +        if (!(factory instanceof GeodeticObjectFactory)) {
-             factory = DefaultFactories.forBuildin(CSFactory.class, 
GeodeticObjectFactory.class);
++            factory = GeodeticObjectFactory.provider();
 +        }
 +        return ((GeodeticObjectFactory) 
factory).createParametricCS(properties, axis);
 +    }
 +
 +    /**
 +     * Creates a parametric datum. This method requires the SIS factory
 +     * since parametric CRS were not available in GeoAPI 3.0.
 +     *
 +     * <p>This method is actually not needed anymore for {@code sis-metadata} 
module,
 +     * but is still defined here for historical reason. This method is 
removed on SIS
 +     * branches using a GeoAPI versions more recent than 3.0.</p>
 +     *
 +     * @param  properties  the datum name, and optionally other properties.
 +     * @param  factory     the factory to use for creating the datum.
 +     * @return a parametric datum using the given name.
 +     * @throws FactoryException if the parametric object creation failed.
 +     *
 +     * @since 0.7
 +     */
 +    public static Datum createParametricDatum(final Map<String,?> properties, 
DatumFactory factory)
 +            throws FactoryException
 +    {
 +        if (!(factory instanceof GeodeticObjectFactory)) {
-             factory = DefaultFactories.forBuildin(DatumFactory.class, 
GeodeticObjectFactory.class);
++            factory = GeodeticObjectFactory.provider();
 +        }
 +        return ((GeodeticObjectFactory) 
factory).createParametricDatum(properties);
 +    }
 +
 +    /**
 +     * Creates a parametric CRS. This method requires the SIS factory
 +     * since parametric CRS were not available in GeoAPI 3.0.
 +     *
 +     * <p>This method is actually not needed anymore for {@code sis-metadata} 
module,
 +     * but is still defined here for historical reason. This method is 
removed on SIS
 +     * branches using a GeoAPI versions more recent than 3.0.</p>
 +     *
 +     * @param  properties  the coordinate reference system name, and 
optionally other properties.
 +     * @param  datum       the parametric datum.
 +     * @param  cs          the parametric coordinate system.
 +     * @param  factory     the factory to use for creating the coordinate 
reference system.
 +     * @return a parametric coordinate system using the given axes.
 +     * @throws FactoryException if the parametric object creation failed.
 +     *
 +     * @since 0.7
 +     */
 +    public static SingleCRS createParametricCRS(final Map<String,?> 
properties, final Datum datum,
 +            final CoordinateSystem cs, CRSFactory factory) throws 
FactoryException
 +    {
 +        if (!(factory instanceof GeodeticObjectFactory)) {
-             factory = DefaultFactories.forBuildin(CRSFactory.class, 
GeodeticObjectFactory.class);
++            factory = GeodeticObjectFactory.provider();
 +        }
 +        try {
 +            return ((GeodeticObjectFactory) 
factory).createParametricCRS(properties,
 +                    (DefaultParametricDatum) datum, (DefaultParametricCS) cs);
 +        } catch (ClassCastException e) {
 +            throw new InvalidGeodeticParameterException(e.toString(), e);
 +        }
 +    }
 +
      /**
       * Creates a format for {@link DirectPosition} instances.
       *
@@@ -601,73 -491,9 +600,73 @@@
       */
      @Override
      public CoordinateOperationFactory getCoordinateOperationFactory() {
-         return CoordinateOperations.factory();
+         return DefaultCoordinateOperationFactory.provider();
      }
  
 +    /**
 +     * Returns the coordinate operation method for the given classification.
 +     * This method checks if the given {@code opFactory} is a SIS 
implementation
 +     * before to fallback on a slower fallback.
 +     *
 +     * <p>This method is actually not needed anymore for {@code sis-metadata} 
module,
 +     * but is still defined here for historical reason. This method is 
removed on SIS
 +     * branches using a GeoAPI versions more recent than 3.0.</p>
 +     *
 +     * @param  opFactory  The coordinate operation factory to use if it is a 
SIS implementation.
 +     * @param  mtFactory  The math transform factory to use as a fallback.
 +     * @param  identifier The name or identifier of the operation method to 
search.
 +     * @return The coordinate operation method for the given name or 
identifier.
 +     * @throws FactoryException if an error occurred which searching for the 
given method.
 +     *
 +     * @since 0.6
 +     */
 +    public static OperationMethod getOperationMethod(final 
CoordinateOperationFactory opFactory,
 +            final MathTransformFactory mtFactory, final String identifier) 
throws FactoryException
 +    {
 +        if (opFactory instanceof DefaultCoordinateOperationFactory) {
 +            ((DefaultCoordinateOperationFactory) 
opFactory).getOperationMethod(identifier);
 +        }
 +        final OperationMethod method = 
getOperationMethod(mtFactory.getAvailableMethods(SingleOperation.class), 
identifier);
 +        if (method != null) {
 +            return method;
 +        }
 +        throw new NoSuchIdentifierException("No such operation method: " + 
identifier, identifier);
 +    }
 +
 +    /**
 +     * Returns the operation method for the specified name or identifier. The 
given argument shall be either a
 +     * method name (e.g. <cite>"Transverse Mercator"</cite>) or one of its 
identifiers (e.g. {@code "EPSG:9807"}).
 +     *
 +     * @param  methods     the method candidates.
 +     * @param  identifier  the name or identifier of the operation method to 
search.
 +     * @return the coordinate operation method for the given name or 
identifier, or {@code null} if none.
 +     *
 +     * @see 
org.apache.sis.referencing.operation.DefaultCoordinateOperationFactory#getOperationMethod(String)
 +     * @see 
org.apache.sis.referencing.operation.transform.DefaultMathTransformFactory#getOperationMethod(String)
 +     *
 +     * @since 0.6
 +     */
 +    private static OperationMethod getOperationMethod(final Iterable<? 
extends OperationMethod> methods, final String identifier) {
 +        OperationMethod fallback = null;
 +        for (final OperationMethod method : methods) {
 +            if (IdentifiedObjects.isHeuristicMatchForName(method, identifier) 
||
 +                    
NameToIdentifier.isHeuristicMatchForIdentifier(method.getIdentifiers(), 
identifier))
 +            {
 +                /*
 +                 * Stop the iteration at the first non-deprecated method.
 +                 * If we find only deprecated methods, take the first one.
 +                 */
 +                if (!(method instanceof Deprecable) || !((Deprecable) 
method).isDeprecated()) {
 +                    return method;
 +                }
 +                if (fallback == null) {
 +                    fallback = method;
 +                }
 +            }
 +        }
 +        return fallback;
 +    }
 +
      /**
       * Returns information about the Apache SIS configuration.
       * See super-class for a list of keys.
diff --cc 
core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java
index 27a1ca7f1b,b6d8da1e7f..6d38a42191
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java
@@@ -1290,13 -1280,13 +1280,10 @@@ class CoordinateOperationRegistry 
                  if (descriptor != null) {
                      final Identifier name = descriptor.getName();
                      if (name != null) {
 -                        method = factory.getOperationMethod(name.getCode());
 +                        method = 
factorySIS.getOperationMethod(name.getCode());
                      }
                      if (method == null) {
-                         method = factorySIS.createOperationMethod(properties,
 -                        method = factory.createOperationMethod(properties,
--                                
sourceCRS.getCoordinateSystem().getDimension(),
--                                
targetCRS.getCoordinateSystem().getDimension(),
--                                descriptor);
++                        method = factorySIS.createOperationMethod(properties, 
descriptor);
                      }
                  }
              }
diff --cc 
core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/GeocentricTranslationTest.java
index b9339c56e2,c22d216e3d..70a0ff4b2b
--- 
a/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/GeocentricTranslationTest.java
+++ 
b/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/GeocentricTranslationTest.java
@@@ -23,7 -24,7 +23,6 @@@ import org.opengis.referencing.operatio
  import org.opengis.referencing.operation.MathTransformFactory;
  import org.opengis.referencing.operation.NoninvertibleTransformException;
  import org.opengis.referencing.operation.TransformException;
- import org.apache.sis.internal.system.DefaultFactories;
 -import org.opengis.test.ToleranceModifier;
  import org.apache.sis.internal.referencing.Formulas;
  import org.apache.sis.parameter.Parameters;
  import org.apache.sis.referencing.CommonCRS;
diff --cc 
core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java
index 83ebfba9d9,14cac2b1b5..8e2fd0865a
--- 
a/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java
+++ 
b/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java
@@@ -24,8 -25,6 +25,7 @@@ import org.opengis.metadata.Identifier
  import org.opengis.parameter.GeneralParameterDescriptor;
  import org.opengis.parameter.ParameterDescriptorGroup;
  import org.opengis.referencing.operation.OperationMethod;
- import org.apache.sis.referencing.operation.DefaultOperationMethod;
 +import org.apache.sis.parameter.DefaultParameterDescriptor;
  import org.apache.sis.test.DependsOn;
  import org.apache.sis.test.TestCase;
  import org.junit.Test;
diff --cc 
core/sis-referencing/src/test/java/org/apache/sis/referencing/BuilderTest.java
index 46fa7ad0c2,0c257e34fb..814c8b103c
--- 
a/core/sis-referencing/src/test/java/org/apache/sis/referencing/BuilderTest.java
+++ 
b/core/sis-referencing/src/test/java/org/apache/sis/referencing/BuilderTest.java
@@@ -24,11 -24,10 +24,11 @@@ import org.opengis.util.GenericName
  import org.opengis.util.NameFactory;
  import org.opengis.metadata.citation.Citation;
  import org.opengis.metadata.Identifier;
 +import org.opengis.referencing.ReferenceIdentifier;
  import org.apache.sis.internal.simple.SimpleCitation;
  import org.apache.sis.internal.simple.SimpleIdentifier;
- import org.apache.sis.internal.system.DefaultFactories;
  import org.apache.sis.metadata.iso.citation.Citations;
+ import org.apache.sis.util.iso.DefaultNameFactory;
  import org.apache.sis.test.DependsOnMethod;
  import org.apache.sis.test.DependsOn;
  import org.apache.sis.test.TestCase;
diff --cc 
core/sis-referencing/src/test/java/org/apache/sis/referencing/NamedIdentifierTest.java
index a84c54f616,9118984e9c..c4bd875e58
--- 
a/core/sis-referencing/src/test/java/org/apache/sis/referencing/NamedIdentifierTest.java
+++ 
b/core/sis-referencing/src/test/java/org/apache/sis/referencing/NamedIdentifierTest.java
@@@ -22,10 -21,11 +22,10 @@@ import org.opengis.util.InternationalSt
  import org.opengis.util.NameSpace;
  import org.opengis.util.GenericName;
  import org.opengis.util.NameFactory;
 -import org.opengis.metadata.Identifier;
  import org.opengis.test.Validators;
  import org.apache.sis.metadata.iso.citation.Citations;
- import org.apache.sis.internal.system.DefaultFactories;
  import org.apache.sis.util.DefaultInternationalString;
+ import org.apache.sis.util.iso.DefaultNameFactory;
  import org.apache.sis.test.DependsOnMethod;
  import org.apache.sis.test.TestCase;
  import org.junit.Test;
@@@ -72,10 -72,10 +72,10 @@@ public final class NamedIdentifierTest 
       */
      @Test
      public void testCreateFromName() {
-         final NameFactory factory = 
DefaultFactories.forBuildin(NameFactory.class);
+         final NameFactory factory = DefaultNameFactory.provider();
          final NameSpace scope = 
factory.createNameSpace(factory.createLocalName(null, "IOGP"), null);
          final NamedIdentifier identifier = new 
NamedIdentifier(factory.createGenericName(scope, "EPSG", "4326"));
 -        Validators.validate((Identifier)  identifier);
 +        Validators.validate((ReferenceIdentifier) identifier);
          Validators.validate((GenericName) identifier);
  
          // ImmutableIdentifier properties
diff --cc 
core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/projection/ObliqueStereographicTest.java
index c8ca9b95a5,3090beb435..1e52e5a265
--- 
a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/projection/ObliqueStereographicTest.java
+++ 
b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/projection/ObliqueStereographicTest.java
@@@ -20,12 -20,12 +20,11 @@@ import org.opengis.parameter.ParameterV
  import org.opengis.referencing.operation.Matrix;
  import org.opengis.referencing.operation.OperationMethod;
  import org.opengis.referencing.operation.TransformException;
- import org.opengis.referencing.operation.MathTransformFactory;
  import org.opengis.util.FactoryException;
  import org.apache.sis.parameter.Parameters;
+ import 
org.apache.sis.referencing.operation.transform.DefaultMathTransformFactory;
  import org.apache.sis.referencing.operation.transform.ContextualParameters;
 -import org.apache.sis.referencing.operation.matrix.Matrix2;
  import org.apache.sis.internal.referencing.Formulas;
- import org.apache.sis.internal.system.DefaultFactories;
  import org.apache.sis.measure.Units;
  import org.apache.sis.test.DependsOnMethod;
  import org.apache.sis.test.DependsOn;
diff --cc 
core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/AbridgedMolodenskyTransformTest.java
index 57bc1e94da,98e0060247..94b7e2a679
--- 
a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/AbridgedMolodenskyTransformTest.java
+++ 
b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/AbridgedMolodenskyTransformTest.java
@@@ -16,12 -16,11 +16,10 @@@
   */
  package org.apache.sis.referencing.operation.transform;
  
 -import org.opengis.test.CalculationType;
  import org.opengis.util.FactoryException;
  import org.opengis.referencing.operation.MathTransform;
- import org.opengis.referencing.operation.MathTransformFactory;
  import org.opengis.referencing.operation.TransformException;
  import org.apache.sis.referencing.datum.HardCodedDatum;
- import org.apache.sis.internal.system.DefaultFactories;
  import org.apache.sis.internal.referencing.Formulas;
  import org.apache.sis.test.DependsOnMethod;
  import org.apache.sis.test.DependsOn;
diff --cc 
core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/MolodenskyTransformTest.java
index 6712429d88,68357ece80..021659da02
--- 
a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/MolodenskyTransformTest.java
+++ 
b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/MolodenskyTransformTest.java
@@@ -23,12 -25,15 +23,11 @@@ import org.opengis.referencing.operatio
  import org.opengis.referencing.operation.TransformException;
  import org.opengis.parameter.ParameterValueGroup;
  import 
org.apache.sis.internal.referencing.provider.FranceGeocentricInterpolation;
 -import org.apache.sis.internal.referencing.provider.AbridgedMolodensky;
  import org.apache.sis.internal.referencing.provider.Molodensky;
- import org.apache.sis.internal.system.DefaultFactories;
  import org.apache.sis.internal.referencing.Formulas;
  import org.apache.sis.referencing.CommonCRS;
 -import org.apache.sis.math.StatisticsFormat;
 -import org.apache.sis.math.Statistics;
  
  import static java.lang.StrictMath.*;
 -import static 
org.apache.sis.internal.metadata.ReferencingServices.NAUTICAL_MILE;
  
  // Test dependencies
  import 
org.apache.sis.internal.referencing.provider.FranceGeocentricInterpolationTest;
diff --cc 
core/sis-utility/src/main/java/org/apache/sis/internal/util/CodeLists.java
index 618b2803bf,d46f79a4c1..6a5c9919c9
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/CodeLists.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/CodeLists.java
@@@ -26,21 -27,16 +26,20 @@@ import org.apache.sis.util.Characters.F
  
  /**
   * Implementation of some {@link org.apache.sis.util.iso.Types} methods 
needed by {@code sis-utility} module.
 - * This class opportunistically implements {@link Predicate} interface, but 
this is an implementation details.
 + * This class opportunistically implements {@link CodeList.Filter} interface, 
but this should be considered
 + * an implementation details.
   *
   * @author  Martin Desruisseaux (Geomatys)
-  * @version 1.0
+  * @version 1.4
   * @since   1.0
   */
 -public final class CodeLists implements Predicate<CodeList<?>> {
 +public final class CodeLists implements CodeList.Filter {
 +    /**
-      * The name of bundle resources for code list titles. The resources 
should be loaded with
-      * the same class loader than {@code 
org.opengis.annotation.UML.class.getClassLoader()}.
++     * The name of bundle resources for code list titles.
 +     * Keys are {@link CodeList#identifier()}.
 +     */
-     public static final String RESOURCES = "org.opengis.metadata.CodeLists";
++    public static final String RESOURCES = 
"org.apache.sis.metadata.iso.CodeLists";
 +
      /**
       * The name to compare during filtering operation.
       */
diff --cc 
core/sis-utility/src/main/java/org/apache/sis/internal/util/MetadataServices.java
index 1dbc36fcdd,ff6a7f1f12..6a51e000bc
--- 
a/core/sis-utility/src/main/java/org/apache/sis/internal/util/MetadataServices.java
+++ 
b/core/sis-utility/src/main/java/org/apache/sis/internal/util/MetadataServices.java
@@@ -19,12 -19,12 +19,9 @@@ package org.apache.sis.internal.util
  import java.text.Format;
  import java.util.Locale;
  import java.util.TimeZone;
- import java.util.ResourceBundle;
--import java.util.MissingResourceException;
  import java.util.function.Supplier;
  import javax.sql.DataSource;
  import java.sql.SQLException;
--import org.opengis.annotation.UML;
 -import org.opengis.annotation.ResourceBundles;
  import org.opengis.metadata.citation.Citation;
  import org.apache.sis.internal.system.Modules;
  import org.apache.sis.internal.system.OptionalDependency;
@@@ -121,25 -121,24 +118,9 @@@ public class MetadataServices extends O
       * @param  locale  desired locale for the title.
       * @return the title.
       *
 -     * @see org.apache.sis.util.iso.Types#getCodeTitle(ControlledVocabulary)
 +     * @see org.apache.sis.util.iso.Types#getCodeTitle(CodeList)
       */
 -    public String getCodeTitle(final ControlledVocabulary code, final Locale 
locale) {
 -        /*
 -         * Following code reproduces the work done by 
org.apache.sis.util.iso.Types.getCodeList(…)
 -         * with less handling of special cases. It is executed only if the 
sis-metadata module is
 -         * not on the classpath, otherwise the sis-metadata implementation 
will be used.
 -         */
 -        final UML uml = code.getClass().getAnnotation(UML.class);
 -        if (uml != null) try {
 -            return 
ResourceBundles.codeLists(locale).getString(uml.identifier() + '.' + 
code.identifier());
 -        } catch (MissingResourceException e) {
 -            /*
 -             * Ignore. The reason for not finding the resource may because of 
above code not covering enough cases.
 -             * Usually the sis-metadata module will be present on the 
classpath, in which case this implementation
 -             * will not be used. We need just enough code for allowing 
sis-utility tests to pass.
 -             */
 -        }
 +    public String getCodeTitle(final CodeList<?> code, final Locale locale) {
-         /*
-          * Following code reproduces the work done by 
org.apache.sis.util.iso.Types.getCodeList(…)
-          * with less handling of special cases. It is executed only if the 
sis-metadata module is
-          * not on the classpath, otherwise the sis-metadata implementation 
will be used.
-          */
-         final UML uml = code.getClass().getAnnotation(UML.class);
-         if (uml != null) try {
-             return ResourceBundle.getBundle(CodeLists.RESOURCES, locale, 
UML.class.getClassLoader())
-                                  .getString(uml.identifier() + '.' + 
code.identifier());
-         } catch (MissingResourceException e) {
-             /*
-              * Ignore. The reason for not finding the resource may because of 
above code not covering enough cases.
-              * Usually the sis-metadata module will be present on the 
classpath, in which case this implementation
-              * will not be used. We need just enough code for allowing 
sis-utility tests to pass.
-              */
-         }
          return 
CharSequences.camelCaseToSentence(code.identifier()).toString();
      }
  
diff --cc 
core/sis-utility/src/test/java/org/apache/sis/util/resources/IndexedResourceBundleTest.java
index c1f1c34312,2851ee6382..c3c549f484
--- 
a/core/sis-utility/src/test/java/org/apache/sis/util/resources/IndexedResourceBundleTest.java
+++ 
b/core/sis-utility/src/test/java/org/apache/sis/util/resources/IndexedResourceBundleTest.java
@@@ -161,7 -159,7 +159,6 @@@ public final class IndexedResourceBundl
  
      /**
       * Tests the {@link IndexedResourceBundle#getString(short, Object)} 
method with a {@code CodeList} argument.
--     * The intent is to test the code list localization.
       */
      @Test
      @DependsOnMethod("testGetStringWithParameter")
@@@ -169,7 -167,7 +166,7 @@@
          testing = Errors.getResources(Locale.ENGLISH);
          assertEquals("Argument ‘Series’ shall not be null.", 
testing.getString(Errors.Keys.NullArgument_1, ScopeCode.SERIES));
          testing = Errors.getResources(Locale.FRENCH);
--        assertEquals("L’argument ‘Série’ ne doit pas être nul.", 
testing.getString(Errors.Keys.NullArgument_1, ScopeCode.SERIES));
++        assertEquals("L’argument ‘Series’ ne doit pas être nul.", 
testing.getString(Errors.Keys.NullArgument_1, ScopeCode.SERIES));
          testing = null;
      }
  
diff --cc 
storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/CRSBuilder.java
index 43ba5eaa80,6ef4948732..14c79675c7
--- 
a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/CRSBuilder.java
+++ 
b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/CRSBuilder.java
@@@ -37,7 -37,7 +37,6 @@@ import org.opengis.referencing.crs.Geog
  import org.opengis.referencing.crs.GeocentricCRS;
  import org.opengis.referencing.crs.CoordinateReferenceSystem;
  import org.opengis.referencing.NoSuchAuthorityCodeException;
--import org.opengis.referencing.operation.CoordinateOperationFactory;
  import org.opengis.referencing.operation.OperationMethod;
  import org.opengis.referencing.operation.Conversion;
  import org.opengis.referencing.operation.Matrix;
@@@ -50,9 -50,9 +49,8 @@@ import org.apache.sis.referencing.crs.A
  import org.apache.sis.referencing.crs.DefaultGeographicCRS;
  import org.apache.sis.referencing.crs.DefaultGeocentricCRS;
  import org.apache.sis.referencing.factory.InvalidGeodeticParameterException;
 -import org.apache.sis.referencing.operation.DefaultCoordinateOperationFactory;
  import org.apache.sis.internal.referencing.provider.Equirectangular;
- import org.apache.sis.internal.system.DefaultFactories;
- import org.apache.sis.internal.util.TemporalUtilities;
+ import org.apache.sis.internal.metadata.TemporalUtilities;
  import org.apache.sis.storage.DataStoreContentException;
  import org.apache.sis.storage.DataStoreException;
  import org.apache.sis.util.resources.Errors;
@@@ -794,8 -788,7 +792,7 @@@ previous:   for (int i=components.size(
           */
          private static final Conversion UNKNOWN_PROJECTION;
          static {
-             final DefaultCoordinateOperationFactory factory = 
DefaultFactories.forBuildin(
-                     CoordinateOperationFactory.class, 
DefaultCoordinateOperationFactory.class);
 -            final CoordinateOperationFactory factory = 
DefaultCoordinateOperationFactory.provider();
++            final DefaultCoordinateOperationFactory factory = 
DefaultCoordinateOperationFactory.provider();
              try {
                  final OperationMethod method = 
factory.getOperationMethod(Equirectangular.NAME);
                  UNKNOWN_PROJECTION = factory.createDefiningConversion(
diff --cc 
storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
index 1805fdd7aa,c9578e6ffe..257a82fd74
--- 
a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
+++ 
b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
@@@ -31,7 -31,7 +31,6 @@@ import java.util.logging.Level
  import java.io.IOException;
  import java.nio.file.Path;
  import org.opengis.util.NameSpace;
--import org.opengis.util.NameFactory;
  import org.opengis.referencing.datum.Datum;
  import org.opengis.referencing.crs.CoordinateReferenceSystem;
  import org.apache.sis.setup.GeometryLibrary;

Reply via email to