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 2022/10/13 14:26:39 UTC

[sis] branch geoapi-4.0 updated (81e26d4920 -> a3a1bb0985)

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

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


    from 81e26d4920 Upgrade Maven plugins and PostgreSQL dependency.
     new f6d4dd2ba2 Spelling fixes in comments.
     new 09ed02f631 Update for compatibility with Java 19: fix an ambiguity with the new Future.State enumeration.
     new a3a1bb0985 Upgrade `org.apache.sis.metadata.quality` package to ISO 19157:2013. Work partially done by Alexis Gaillard.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/sis/gui/dataset/FeatureList.java    |   3 +-
 .../java/org/apache/sis/gui/map/MapCanvas.java     |   3 +-
 .../org/apache/sis/gui/map/ValuesUnderCursor.java  |   4 +-
 .../apache/sis/internal/jaxb/FilterByVersion.java  |   4 +-
 ...V_CouplingType.java => DQM_ValueStructure.java} |  24 +-
 .../sis/internal/jaxb/code/package-info.java       |   3 +-
 ...D_AttributeGroup.java => DQM_BasicMeasure.java} |  42 +-
 ...{MD_MetadataScope.java => DQM_Description.java} |  42 +-
 .../metadata/{CI_Series.java => DQM_Measure.java}  |  43 +-
 .../{CI_Series.java => DQM_Parameter.java}         |  43 +-
 .../{CI_Contact.java => DQM_SourceReference.java}  |  43 +-
 .../{DQ_Element.java => DQ_EvaluationMethod.java}  |  44 +-
 .../{DQ_Element.java => DQ_MeasureReference.java}  |  44 +-
 ... => DQ_StandaloneQualityReportInformation.java} |  46 +-
 .../sis/internal/jaxb/metadata/package-info.java   |   3 +-
 .../org/apache/sis/metadata/MetadataStandard.java  |  63 ++-
 .../org/apache/sis/metadata/PropertyAccessor.java  |   4 +-
 .../java/org/apache/sis/metadata/SpecialCases.java |  19 +-
 .../sis/metadata/StandardImplementation.java       |   6 +-
 .../iso/extent/DefaultGeographicBoundingBox.java   |   2 +-
 .../metadata/iso/quality/AbstractCompleteness.java |   2 +-
 ...ractResult.java => AbstractDataEvaluation.java} |  77 ++-
 .../sis/metadata/iso/quality/AbstractElement.java  | 567 +++++++++++----------
 .../iso/quality/AbstractLogicalConsistency.java    |   2 +-
 ...bstractResult.java => AbstractMetaquality.java} |  82 +--
 .../iso/quality/AbstractPositionalAccuracy.java    |  12 +-
 .../sis/metadata/iso/quality/AbstractResult.java   | 100 +++-
 .../iso/quality/AbstractTemporalAccuracy.java      |  42 +-
 ...lAccuracy.java => AbstractTemporalQuality.java} |  52 +-
 .../iso/quality/AbstractThematicAccuracy.java      |  17 +-
 .../DefaultAbsoluteExternalPositionalAccuracy.java |   5 +-
 .../quality/DefaultAccuracyOfATimeMeasurement.java |  10 +-
 ...lity.java => DefaultAggregationDerivation.java} |  49 +-
 .../metadata/iso/quality/DefaultBasicMeasure.java  | 225 ++++++++
 .../iso/quality/DefaultCompletenessCommission.java |   3 +-
 .../iso/quality/DefaultCompletenessOmission.java   |   3 +-
 .../iso/quality/DefaultConceptualConsistency.java  |   7 +-
 ...efaultUsability.java => DefaultConfidence.java} |  53 +-
 .../iso/quality/DefaultConformanceResult.java      |   7 +-
 .../iso/quality/DefaultCoverageResult.java         |  67 ++-
 .../metadata/iso/quality/DefaultDataQuality.java   |  80 ++-
 .../DefaultDescription.java}                       | 120 ++---
 .../DefaultDescriptiveResult.java}                 |  93 ++--
 .../iso/quality/DefaultDomainConsistency.java      |   3 +-
 ...ctElement.java => DefaultEvaluationMethod.java} | 311 +++--------
 .../iso/quality/DefaultFormatConsistency.java      |   5 +-
 ...ltUsability.java => DefaultFullInspection.java} |  51 +-
 .../DefaultGriddedDataPositionalAccuracy.java      |   3 +-
 ...faultUsability.java => DefaultHomogeneity.java} |  53 +-
 .../DefaultIndirectEvaluation.java}                |  91 ++--
 .../sis/metadata/iso/quality/DefaultMeasure.java   | 467 +++++++++++++++++
 .../iso/quality/DefaultMeasureReference.java       | 201 ++++++++
 .../DefaultNonQuantitativeAttributeAccuracy.java   |  22 +-
 ...efaultNonQuantitativeAttributeCorrectness.java} |  56 +-
 .../sis/metadata/iso/quality/DefaultParameter.java | 252 +++++++++
 .../DefaultQuantitativeAttributeAccuracy.java      |   3 +-
 .../iso/quality/DefaultQuantitativeResult.java     |  17 +-
 .../DefaultRelativeInternalPositionalAccuracy.java |   3 +-
 ...lValidity.java => DefaultRepresentativity.java} |  51 +-
 .../iso/quality/DefaultSampleBasedInspection.java  | 191 +++++++
 ...alAccuracy.java => DefaultSourceReference.java} |  86 +++-
 .../DefaultStandaloneQualityReportInformation.java | 163 ++++++
 .../iso/quality/DefaultTemporalConsistency.java    |   8 +-
 .../iso/quality/DefaultTemporalValidity.java       |   8 +-
 .../DefaultThematicClassificationCorrectness.java  |   3 +-
 .../iso/quality/DefaultTopologicalConsistency.java |   9 +-
 .../sis/metadata/iso/quality/DefaultUsability.java |  19 +-
 ...lAccuracy.java => DefaultUsabilityElement.java} |  54 +-
 .../sis/metadata/iso/quality/ISOMetadata.java}     |  40 +-
 .../sis/metadata/iso/quality/package-info.java     |  93 +---
 .../java/org/apache/sis/metadata/package-info.java |   2 +-
 .../main/java/org/apache/sis/xml/Namespaces.java   |  14 +-
 .../org/apache/sis/metadata/sql/Citations.sql      |   6 +-
 .../sis/metadata/PropertyConsistencyCheck.java     |   3 +-
 .../apache/sis/metadata/iso/AllMetadataTest.java   |  52 +-
 .../quality/AbstractPositionalAccuracyTest.java    |  13 +-
 .../sis/test/xml/AnnotationConsistencyCheck.java   |  62 ++-
 .../org/apache/sis/test/xml/SchemaCompliance.java  |   5 +-
 .../java/org/apache/sis/util/iso/TypesTest.java    |   2 +-
 .../sis/metadata/xml/2007/PositionalAccuracy.xml   |  11 +-
 .../sis/metadata/xml/2016/PositionalAccuracy.xml   |  33 +-
 .../org/apache/sis/internal/util/AbstractMap.java  |   2 +-
 .../apache/sis/internal/netcdf/RasterResource.java |   2 +-
 83 files changed, 3098 insertions(+), 1532 deletions(-)
 copy core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/{SV_CouplingType.java => DQM_ValueStructure.java} (77%)
 copy core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/{MD_AttributeGroup.java => DQM_BasicMeasure.java} (67%)
 copy core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/{MD_MetadataScope.java => DQM_Description.java} (68%)
 copy core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/{CI_Series.java => DQM_Measure.java} (69%)
 copy core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/{CI_Series.java => DQM_Parameter.java} (69%)
 copy core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/{CI_Contact.java => DQM_SourceReference.java} (66%)
 copy core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/{DQ_Element.java => DQ_EvaluationMethod.java} (65%)
 copy core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/{DQ_Element.java => DQ_MeasureReference.java} (65%)
 copy core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/{MD_MetadataExtensionInformation.java => DQ_StandaloneQualityReportInformation.java} (59%)
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/{AbstractResult.java => AbstractDataEvaluation.java} (59%)
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/{AbstractResult.java => AbstractMetaquality.java} (56%)
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/{AbstractTemporalAccuracy.java => AbstractTemporalQuality.java} (75%)
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/{DefaultUsability.java => DefaultAggregationDerivation.java} (66%)
 create mode 100644 core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultBasicMeasure.java
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/{DefaultUsability.java => DefaultConfidence.java} (66%)
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/{DefaultMetadataScope.java => quality/DefaultDescription.java} (52%)
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/{citation/DefaultIndividual.java => quality/DefaultDescriptiveResult.java} (53%)
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/{AbstractElement.java => DefaultEvaluationMethod.java} (57%)
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/{DefaultUsability.java => DefaultFullInspection.java} (65%)
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/{DefaultUsability.java => DefaultHomogeneity.java} (65%)
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/{citation/DefaultIndividual.java => quality/DefaultIndirectEvaluation.java} (54%)
 create mode 100644 core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultMeasure.java
 create mode 100644 core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultMeasureReference.java
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/{DefaultNonQuantitativeAttributeAccuracy.java => DefaultNonQuantitativeAttributeCorrectness.java} (62%)
 create mode 100644 core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultParameter.java
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/{DefaultTemporalValidity.java => DefaultRepresentativity.java} (64%)
 create mode 100644 core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultSampleBasedInspection.java
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/{DefaultRelativeInternalPositionalAccuracy.java => DefaultSourceReference.java} (54%)
 create mode 100644 core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultStandaloneQualityReportInformation.java
 copy core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/{DefaultRelativeInternalPositionalAccuracy.java => DefaultUsabilityElement.java} (65%)
 copy core/{sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/AxisOrderReversal3D.java => sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/ISOMetadata.java} (51%)


[sis] 01/03: Spelling fixes in comments.

Posted by de...@apache.org.
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 f6d4dd2ba2aefff337360a3e6d91c3a2cd051d3f
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Sat Oct 8 12:22:58 2022 +0200

    Spelling fixes in comments.
---
 .../src/main/java/org/apache/sis/gui/map/ValuesUnderCursor.java     | 4 ++--
 .../sis/metadata/iso/extent/DefaultGeographicBoundingBox.java       | 2 +-
 .../src/main/resources/org/apache/sis/metadata/sql/Citations.sql    | 6 +++---
 .../src/main/java/org/apache/sis/internal/util/AbstractMap.java     | 2 +-
 .../main/java/org/apache/sis/internal/netcdf/RasterResource.java    | 2 +-
 5 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/ValuesUnderCursor.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/ValuesUnderCursor.java
index f256595343..84c178f0fd 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/ValuesUnderCursor.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/ValuesUnderCursor.java
@@ -83,8 +83,8 @@ public abstract class ValuesUnderCursor {
 
         /**
          * Sets the result to the given value, then submits a task in JavaFX thread if no task is already waiting.
-         * If a task is already waiting to be executed, then that task will use the specified value instead than
-         * the value which was specified when the previous task was submitted.
+         * If a task is already waiting to be executed, then that task will use the specified value instead of the
+         * value which was specified when the previous task was submitted.
          */
         final void setLater(final String result) {
             if (getAndSet(result) == null) {
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultGeographicBoundingBox.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultGeographicBoundingBox.java
index 7bfdfa74c8..ed0420408b 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultGeographicBoundingBox.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultGeographicBoundingBox.java
@@ -550,7 +550,7 @@ public class DefaultGeographicBoundingBox extends AbstractGeographicExtent imple
 
     /*
      * IMPLEMENTATION NOTE: For the handling of anti-meridian crossing in union and intersection operations,
-     * this class applies a different strategy than GeneralEnvelope. Instead than trying to work directly with
+     * this class applies a different strategy than GeneralEnvelope. Instead of trying to work directly with
      * the coordinate values without adding or removing offset (which may cause rounding errors), we apply a ±360°
      * shift on longitude values. This simpler strategy is okay here because the range is fixed in the code (not
      * an arbitrarily high range), and GeographicBoundingBox are approximations by definition anyway.
diff --git a/core/sis-metadata/src/main/resources/org/apache/sis/metadata/sql/Citations.sql b/core/sis-metadata/src/main/resources/org/apache/sis/metadata/sql/Citations.sql
index 37e4ab38d8..ae1119eefe 100644
--- a/core/sis-metadata/src/main/resources/org/apache/sis/metadata/sql/Citations.sql
+++ b/core/sis-metadata/src/main/resources/org/apache/sis/metadata/sql/Citations.sql
@@ -216,9 +216,9 @@ INSERT INTO metadata."Citation" ("ID", "onlineResource", "edition", "citedRespon
 -- But we have to declare some organizations as "citations" because this is the kind of object required
 -- by the "authority" attribute of factories.
 --
--- Instead than repeating the organization name, the title should reference some naming authority
--- in that organization. The identifier should have no codespace, and the identifier code should be
--- the codespace of objects created by the authority represented by that organisation.
+-- Instead of repeating the organization name, the title should reference some naming authority
+-- in that organization. The identifier should have no codespace, and the identifier code should
+-- be the codespace of objects created by the authority represented by that organisation.
 --
 INSERT INTO metadata."Identifier" ("ID", "code") VALUES
   ('OGC',  'OGC'),
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/AbstractMap.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/AbstractMap.java
index d1bbed5681..165156514d 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/AbstractMap.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/AbstractMap.java
@@ -29,7 +29,7 @@ import org.apache.sis.util.resources.Errors;
 
 /**
  * An alternative to {@link java.util.AbstractMap java.util.AbstractMap} using different implementation strategies.
- * Instead than providing default method implementations on top of {@link #entrySet()}, this base class uses more
+ * Instead of providing default method implementations on top of {@link #entrySet()}, this base class uses more
  * often the {@link #get(Object)} method with the assumption that the map can not contain null values, or use a
  * special-purpose {@link #entryIterator()} which can reduce the amount of object creations.
  *
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/RasterResource.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/RasterResource.java
index 65aaee48a3..d79494f084 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/RasterResource.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/RasterResource.java
@@ -773,7 +773,7 @@ public final class RasterResource extends AbstractGridCoverageResource implement
     }
 
     /**
-     * Returns a string representation of this resource for debuging purposes.
+     * Returns a string representation of this resource for debugging purposes.
      */
     @Override
     public String toString() {


[sis] 02/03: Update for compatibility with Java 19: fix an ambiguity with the new Future.State enumeration.

Posted by de...@apache.org.
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 09ed02f6314a46a9e904b3cceb56c602192eadcc
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Thu Oct 13 16:14:28 2022 +0200

    Update for compatibility with Java 19: fix an ambiguity with the new Future.State enumeration.
---
 .../src/main/java/org/apache/sis/gui/dataset/FeatureList.java          | 3 ++-
 .../sis-javafx/src/main/java/org/apache/sis/gui/map/MapCanvas.java     | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/FeatureList.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/FeatureList.java
index 99a45768bd..f3d57a34c3 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/FeatureList.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/FeatureList.java
@@ -22,6 +22,7 @@ import java.util.Collections;
 import java.util.Spliterator;
 import javafx.application.Platform;
 import javafx.collections.ObservableListBase;
+import javafx.concurrent.Worker;
 import org.opengis.feature.Feature;
 import org.apache.sis.storage.FeatureSet;
 import org.apache.sis.internal.gui.BackgroundThreads;
@@ -316,7 +317,7 @@ final class FeatureList extends ObservableListBase<Feature> {
             throw new IndexOutOfBoundsException(index);
         }
         final FeatureLoader loader = nextPageLoader;
-        if (loader != null && loader.getState() == FeatureLoader.State.READY) {
+        if (loader != null && loader.getState() == Worker.State.READY) {
             BackgroundThreads.execute(loader);
         }
         return null;
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/MapCanvas.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/MapCanvas.java
index 41dfe18c8d..05b8ee348f 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/MapCanvas.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/MapCanvas.java
@@ -44,6 +44,7 @@ import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.beans.value.WritableValue;
 import javafx.concurrent.Task;
+import javafx.concurrent.Worker;
 import javafx.event.EventHandler;
 import javafx.scene.control.ContextMenu;
 import javafx.scene.control.ToggleGroup;
@@ -1334,7 +1335,7 @@ public abstract class MapCanvas extends PlanarCanvas {
         assert Platform.isFxApplicationThread();
         assert renderingInProgress == task : "Expected " + renderingInProgress + " but was " + task;
         // Keep cursor unchanged if contents changed, because caller will invoke `repaint()` again.
-        if (!contentsChanged() || task.getState() != Task.State.SUCCEEDED) {
+        if (!contentsChanged() || task.getState() != Worker.State.SUCCEEDED) {
             restoreCursorAfterPaint();
         }
         renderingInProgress = null;


[sis] 03/03: Upgrade `org.apache.sis.metadata.quality` package to ISO 19157:2013. Work partially done by Alexis Gaillard.

Posted by de...@apache.org.
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 a3a1bb098525a8758c9ecb2049016ff75a90efb9
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Wed Oct 12 18:15:11 2022 +0200

    Upgrade `org.apache.sis.metadata.quality` package to ISO 19157:2013.
    Work partially done by Alexis Gaillard.
    
    https://issues.apache.org/jira/browse/SIS-394
    https://github.com/opengeospatial/geoapi/issues/44
---
 .../apache/sis/internal/jaxb/FilterByVersion.java  |   4 +-
 .../sis/internal/jaxb/code/DQM_ValueStructure.java |  89 ++++
 .../sis/internal/jaxb/code/package-info.java       |   3 +-
 .../internal/jaxb/metadata/DQM_BasicMeasure.java   |  92 ++++
 .../internal/jaxb/metadata/DQM_Description.java    |  92 ++++
 .../sis/internal/jaxb/metadata/DQM_Measure.java    |  92 ++++
 .../sis/internal/jaxb/metadata/DQM_Parameter.java  |  92 ++++
 .../jaxb/metadata/DQM_SourceReference.java         |  92 ++++
 .../jaxb/metadata/DQ_EvaluationMethod.java         |  93 ++++
 .../jaxb/metadata/DQ_MeasureReference.java         |  93 ++++
 .../DQ_StandaloneQualityReportInformation.java     |  95 ++++
 .../sis/internal/jaxb/metadata/package-info.java   |   3 +-
 .../org/apache/sis/metadata/MetadataStandard.java  |  63 ++-
 .../org/apache/sis/metadata/PropertyAccessor.java  |   4 +-
 .../java/org/apache/sis/metadata/SpecialCases.java |  19 +-
 .../sis/metadata/StandardImplementation.java       |   6 +-
 .../metadata/iso/quality/AbstractCompleteness.java |   2 +-
 ...ractResult.java => AbstractDataEvaluation.java} |  77 ++-
 .../sis/metadata/iso/quality/AbstractElement.java  | 567 +++++++++++----------
 .../iso/quality/AbstractLogicalConsistency.java    |   2 +-
 ...bstractResult.java => AbstractMetaquality.java} |  82 +--
 .../iso/quality/AbstractPositionalAccuracy.java    |  12 +-
 .../sis/metadata/iso/quality/AbstractResult.java   | 100 +++-
 .../iso/quality/AbstractTemporalAccuracy.java      |  42 +-
 ...lAccuracy.java => AbstractTemporalQuality.java} |  52 +-
 .../iso/quality/AbstractThematicAccuracy.java      |  17 +-
 .../DefaultAbsoluteExternalPositionalAccuracy.java |   5 +-
 .../quality/DefaultAccuracyOfATimeMeasurement.java |  10 +-
 ...lity.java => DefaultAggregationDerivation.java} |  49 +-
 .../metadata/iso/quality/DefaultBasicMeasure.java  | 225 ++++++++
 .../iso/quality/DefaultCompletenessCommission.java |   3 +-
 .../iso/quality/DefaultCompletenessOmission.java   |   3 +-
 .../iso/quality/DefaultConceptualConsistency.java  |   7 +-
 ...efaultUsability.java => DefaultConfidence.java} |  53 +-
 .../iso/quality/DefaultConformanceResult.java      |   7 +-
 .../iso/quality/DefaultCoverageResult.java         |  67 ++-
 .../metadata/iso/quality/DefaultDataQuality.java   |  80 ++-
 .../metadata/iso/quality/DefaultDescription.java   | 162 ++++++
 ...sistency.java => DefaultDescriptiveResult.java} |  94 +++-
 .../iso/quality/DefaultDomainConsistency.java      |   3 +-
 ...ctElement.java => DefaultEvaluationMethod.java} | 311 +++--------
 .../iso/quality/DefaultFormatConsistency.java      |   5 +-
 ...ltUsability.java => DefaultFullInspection.java} |  51 +-
 .../DefaultGriddedDataPositionalAccuracy.java      |   3 +-
 ...faultUsability.java => DefaultHomogeneity.java} |  53 +-
 ...ability.java => DefaultIndirectEvaluation.java} |  94 +++-
 .../sis/metadata/iso/quality/DefaultMeasure.java   | 467 +++++++++++++++++
 .../iso/quality/DefaultMeasureReference.java       | 201 ++++++++
 .../DefaultNonQuantitativeAttributeAccuracy.java   |  22 +-
 ...efaultNonQuantitativeAttributeCorrectness.java} |  56 +-
 .../sis/metadata/iso/quality/DefaultParameter.java | 252 +++++++++
 .../DefaultQuantitativeAttributeAccuracy.java      |   3 +-
 .../iso/quality/DefaultQuantitativeResult.java     |  17 +-
 .../DefaultRelativeInternalPositionalAccuracy.java |   3 +-
 ...lValidity.java => DefaultRepresentativity.java} |  51 +-
 .../iso/quality/DefaultSampleBasedInspection.java  | 191 +++++++
 ...alAccuracy.java => DefaultSourceReference.java} |  86 +++-
 .../DefaultStandaloneQualityReportInformation.java | 163 ++++++
 .../iso/quality/DefaultTemporalConsistency.java    |   8 +-
 .../iso/quality/DefaultTemporalValidity.java       |   8 +-
 .../DefaultThematicClassificationCorrectness.java  |   3 +-
 .../iso/quality/DefaultTopologicalConsistency.java |   9 +-
 .../sis/metadata/iso/quality/DefaultUsability.java |  19 +-
 ...lAccuracy.java => DefaultUsabilityElement.java} |  54 +-
 .../sis/metadata/iso/quality/ISOMetadata.java      |  60 +++
 .../sis/metadata/iso/quality/package-info.java     |  93 +---
 .../java/org/apache/sis/metadata/package-info.java |   2 +-
 .../main/java/org/apache/sis/xml/Namespaces.java   |  14 +-
 .../sis/metadata/PropertyConsistencyCheck.java     |   3 +-
 .../apache/sis/metadata/iso/AllMetadataTest.java   |  52 +-
 .../quality/AbstractPositionalAccuracyTest.java    |  13 +-
 .../sis/test/xml/AnnotationConsistencyCheck.java   |  62 ++-
 .../org/apache/sis/test/xml/SchemaCompliance.java  |   5 +-
 .../java/org/apache/sis/util/iso/TypesTest.java    |   2 +-
 .../sis/metadata/xml/2007/PositionalAccuracy.xml   |  11 +-
 .../sis/metadata/xml/2016/PositionalAccuracy.xml   |  33 +-
 76 files changed, 3922 insertions(+), 1211 deletions(-)

diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/FilterByVersion.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/FilterByVersion.java
index e4e729cc80..164b199afc 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/FilterByVersion.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/FilterByVersion.java
@@ -32,14 +32,14 @@ package org.apache.sis.internal.jaxb;
  */
 public enum FilterByVersion {
     /**
-     * {@code accept() == true} if marshalling of an ISO 19139:2007 document in in progress,
+     * {@code accept() == true} if marshalling of an ISO 19139:2007 document is in progress,
      * or if no marshalling in underway. Those documents are based on ISO 19115:2003 model.
      */
     LEGACY_METADATA(Context.MARSHALLING | Context.LEGACY_METADATA,
                     Context.MARSHALLING),
 
     /**
-     * {@code accept() == true} if marshalling of an ISO 19115-3 document in in progress,
+     * {@code accept() == true} if marshalling of an ISO 19115-3 document is in progress,
      * or if no marshalling in underway. Those documents are based on ISO 19115:2014 model.
      */
     CURRENT_METADATA(Context.MARSHALLING | Context.LEGACY_METADATA,
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/DQM_ValueStructure.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/DQM_ValueStructure.java
new file mode 100644
index 0000000000..d07cfabd67
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/DQM_ValueStructure.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.internal.jaxb.code;
+
+import javax.xml.bind.annotation.XmlElement;
+import org.opengis.metadata.quality.ValueStructure;
+import org.apache.sis.internal.jaxb.cat.CodeListAdapter;
+import org.apache.sis.internal.jaxb.cat.CodeListUID;
+import org.apache.sis.xml.Namespaces;
+
+
+/**
+ * JAXB adapter for {@link ValueStructure}
+ * in order to wrap the value in an XML element as specified by ISO 19115-3 standard.
+ * See package documentation for more information about the handling of {@code CodeList} in ISO 19115-3.
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+public final class DQM_ValueStructure extends CodeListAdapter<DQM_ValueStructure, ValueStructure> {
+    /**
+     * Empty constructor for JAXB only.
+     */
+    public DQM_ValueStructure() {
+    }
+
+    /**
+     * Creates a new adapter for the given value.
+     */
+    private DQM_ValueStructure(final CodeListUID value) {
+        super(value);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @return the wrapper for the code list value.
+     */
+    @Override
+    protected DQM_ValueStructure wrap(final CodeListUID value) {
+        return new DQM_ValueStructure(value);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @return the code list class.
+     */
+    @Override
+    protected Class<ValueStructure> getCodeListClass() {
+        return ValueStructure.class;
+    }
+
+    /**
+     * Invoked by JAXB on marshalling.
+     *
+     * @return the value to be marshalled.
+     */
+    @Override
+    @XmlElement(name = "DQM_ValueStructure", namespace = Namespaces.DQM)
+    public CodeListUID getElement() {
+        return identifier;
+    }
+
+    /**
+     * Invoked by JAXB on unmarshalling.
+     *
+     * @param  value  the unmarshalled value.
+     */
+    public void setElement(final CodeListUID value) {
+        identifier = value;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/package-info.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/package-info.java
index 7596367221..f95d40b272 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/package-info.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/package-info.java
@@ -32,7 +32,7 @@
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
  * @author  Cullen Rombach (Image Matters)
- * @version 1.0
+ * @version 1.3
  *
  * @see javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
  * @see org.opengis.util.CodeList
@@ -49,6 +49,7 @@
     @XmlNs(prefix = "mex", namespaceURI = Namespaces.MEX),      // Metadata with Schema Extensions
     @XmlNs(prefix = "mac", namespaceURI = Namespaces.MAC),      // Metadata for Acquisition
     @XmlNs(prefix = "mdq", namespaceURI = Namespaces.MDQ),      // Metadata for Data Quality
+    @XmlNs(prefix = "dqm", namespaceURI = Namespaces.DQM),      // Metadata for Data Quality Measures
     @XmlNs(prefix = "mco", namespaceURI = Namespaces.MCO),      // Metadata for Constraints
     @XmlNs(prefix = "srv", namespaceURI = Namespaces.SRV),      // Metadata for Services
     @XmlNs(prefix = "cit", namespaceURI = Namespaces.CIT),      // Citation and responsible party information
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_BasicMeasure.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_BasicMeasure.java
new file mode 100644
index 0000000000..c4b045f3a8
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_BasicMeasure.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.internal.jaxb.metadata;
+
+import javax.xml.bind.annotation.XmlElementRef;
+import org.opengis.metadata.quality.BasicMeasure;
+import org.apache.sis.metadata.iso.quality.DefaultBasicMeasure;
+import org.apache.sis.internal.jaxb.gco.PropertyType;
+
+
+/**
+ * JAXB adapter mapping implementing class to the GeoAPI interface. See
+ * package documentation for more information about JAXB and interface.
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+public final class DQM_BasicMeasure extends PropertyType<DQM_BasicMeasure, BasicMeasure> {
+    /**
+     * Empty constructor for JAXB only.
+     */
+    public DQM_BasicMeasure() {
+    }
+
+    /**
+     * Returns the GeoAPI interface which is bound by this adapter.
+     * This method is indirectly invoked by the private constructor
+     * below, so it shall not depend on the state of this object.
+     *
+     * @return {@code BasicMeasure.class}
+     */
+    @Override
+    protected Class<BasicMeasure> getBoundType() {
+        return BasicMeasure.class;
+    }
+
+    /**
+     * Constructor for the {@link #wrap} method only.
+     */
+    private DQM_BasicMeasure(final BasicMeasure metadata) {
+        super(metadata);
+    }
+
+    /**
+     * Invoked by {@link PropertyType} at marshalling time for wrapping the given metadata value
+     * in a {@code <dqm:DQ_BasicMeasure>} XML element.
+     *
+     * @param  metadata  the metadata element to marshal.
+     * @return a {@code PropertyType} wrapping the given the metadata element.
+     */
+    @Override
+    protected DQM_BasicMeasure wrap(final BasicMeasure metadata) {
+        return new DQM_BasicMeasure(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at marshalling time for getting the actual metadata to write
+     * inside the {@code <dqm:DQ_BasicMeasure>} XML element.
+     * This is the value or a copy of the value given in argument to the {@code wrap} method.
+     *
+     * @return the metadata to be marshalled.
+     */
+    @XmlElementRef
+    public DefaultBasicMeasure getElement() {
+        return DefaultBasicMeasure.castOrCopy(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at unmarshalling time for storing the result temporarily.
+     *
+     * @param  metadata  the unmarshalled metadata.
+     */
+    public void setElement(final DefaultBasicMeasure metadata) {
+        this.metadata = metadata;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_Description.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_Description.java
new file mode 100644
index 0000000000..30e555685f
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_Description.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.internal.jaxb.metadata;
+
+import javax.xml.bind.annotation.XmlElementRef;
+import org.opengis.metadata.quality.Description;
+import org.apache.sis.metadata.iso.quality.DefaultDescription;
+import org.apache.sis.internal.jaxb.gco.PropertyType;
+
+
+/**
+ * JAXB adapter mapping implementing class to the GeoAPI interface. See
+ * package documentation for more information about JAXB and interface.
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+public final class DQM_Description extends PropertyType<DQM_Description, Description> {
+    /**
+     * Empty constructor for JAXB only.
+     */
+    public DQM_Description() {
+    }
+
+    /**
+     * Returns the GeoAPI interface which is bound by this adapter.
+     * This method is indirectly invoked by the private constructor
+     * below, so it shall not depend on the state of this object.
+     *
+     * @return {@code Description.class}
+     */
+    @Override
+    protected Class<Description> getBoundType() {
+        return Description.class;
+    }
+
+    /**
+     * Constructor for the {@link #wrap} method only.
+     */
+    private DQM_Description(final Description metadata) {
+        super(metadata);
+    }
+
+    /**
+     * Invoked by {@link PropertyType} at marshalling time for wrapping the given metadata value
+     * in a {@code <dqm:DQ_Description>} XML element.
+     *
+     * @param  metadata  the metadata element to marshal.
+     * @return a {@code PropertyType} wrapping the given the metadata element.
+     */
+    @Override
+    protected DQM_Description wrap(final Description metadata) {
+        return new DQM_Description(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at marshalling time for getting the actual metadata to write
+     * inside the {@code <dqm:DQ_Description>} XML element.
+     * This is the value or a copy of the value given in argument to the {@code wrap} method.
+     *
+     * @return the metadata to be marshalled.
+     */
+    @XmlElementRef
+    public DefaultDescription getElement() {
+        return DefaultDescription.castOrCopy(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at unmarshalling time for storing the result temporarily.
+     *
+     * @param  metadata  the unmarshalled metadata.
+     */
+    public void setElement(final DefaultDescription metadata) {
+        this.metadata = metadata;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_Measure.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_Measure.java
new file mode 100644
index 0000000000..9f0eb67d3f
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_Measure.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.internal.jaxb.metadata;
+
+import javax.xml.bind.annotation.XmlElementRef;
+import org.opengis.metadata.quality.Measure;
+import org.apache.sis.metadata.iso.quality.DefaultMeasure;
+import org.apache.sis.internal.jaxb.gco.PropertyType;
+
+
+/**
+ * JAXB adapter mapping implementing class to the GeoAPI interface. See
+ * package documentation for more information about JAXB and interface.
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+public final class DQM_Measure extends PropertyType<DQM_Measure, Measure> {
+    /**
+     * Empty constructor for JAXB only.
+     */
+    public DQM_Measure() {
+    }
+
+    /**
+     * Returns the GeoAPI interface which is bound by this adapter.
+     * This method is indirectly invoked by the private constructor
+     * below, so it shall not depend on the state of this object.
+     *
+     * @return {@code Measure.class}
+     */
+    @Override
+    protected Class<Measure> getBoundType() {
+        return Measure.class;
+    }
+
+    /**
+     * Constructor for the {@link #wrap} method only.
+     */
+    private DQM_Measure(final Measure metadata) {
+        super(metadata);
+    }
+
+    /**
+     * Invoked by {@link PropertyType} at marshalling time for wrapping the given metadata value
+     * in a {@code <dqm:DQ_Measure>} XML element.
+     *
+     * @param  metadata  the metadata element to marshal.
+     * @return a {@code PropertyType} wrapping the given the metadata element.
+     */
+    @Override
+    protected DQM_Measure wrap(final Measure metadata) {
+        return new DQM_Measure(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at marshalling time for getting the actual metadata to write
+     * inside the {@code <dqm:DQ_Measure>} XML element.
+     * This is the value or a copy of the value given in argument to the {@code wrap} method.
+     *
+     * @return the metadata to be marshalled.
+     */
+    @XmlElementRef
+    public DefaultMeasure getElement() {
+        return DefaultMeasure.castOrCopy(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at unmarshalling time for storing the result temporarily.
+     *
+     * @param  metadata  the unmarshalled metadata.
+     */
+    public void setElement(final DefaultMeasure metadata) {
+        this.metadata = metadata;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_Parameter.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_Parameter.java
new file mode 100644
index 0000000000..ba308a6b39
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_Parameter.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.internal.jaxb.metadata;
+
+import javax.xml.bind.annotation.XmlElementRef;
+import org.opengis.metadata.quality.Parameter;
+import org.apache.sis.metadata.iso.quality.DefaultParameter;
+import org.apache.sis.internal.jaxb.gco.PropertyType;
+
+
+/**
+ * JAXB adapter mapping implementing class to the GeoAPI interface. See
+ * package documentation for more information about JAXB and interface.
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+public final class DQM_Parameter extends PropertyType<DQM_Parameter, Parameter> {
+    /**
+     * Empty constructor for JAXB only.
+     */
+    public DQM_Parameter() {
+    }
+
+    /**
+     * Returns the GeoAPI interface which is bound by this adapter.
+     * This method is indirectly invoked by the private constructor
+     * below, so it shall not depend on the state of this object.
+     *
+     * @return {@code Parameter.class}
+     */
+    @Override
+    protected Class<Parameter> getBoundType() {
+        return Parameter.class;
+    }
+
+    /**
+     * Constructor for the {@link #wrap} method only.
+     */
+    private DQM_Parameter(final Parameter metadata) {
+        super(metadata);
+    }
+
+    /**
+     * Invoked by {@link PropertyType} at marshalling time for wrapping the given metadata value
+     * in a {@code <dqm:DQ_Parameter>} XML element.
+     *
+     * @param  metadata  the metadata element to marshal.
+     * @return a {@code PropertyType} wrapping the given the metadata element.
+     */
+    @Override
+    protected DQM_Parameter wrap(final Parameter metadata) {
+        return new DQM_Parameter(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at marshalling time for getting the actual metadata to write
+     * inside the {@code <dqm:DQ_Parameter>} XML element.
+     * This is the value or a copy of the value given in argument to the {@code wrap} method.
+     *
+     * @return the metadata to be marshalled.
+     */
+    @XmlElementRef
+    public DefaultParameter getElement() {
+        return DefaultParameter.castOrCopy(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at unmarshalling time for storing the result temporarily.
+     *
+     * @param  metadata  the unmarshalled metadata.
+     */
+    public void setElement(final DefaultParameter metadata) {
+        this.metadata = metadata;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_SourceReference.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_SourceReference.java
new file mode 100644
index 0000000000..5f18c9688c
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQM_SourceReference.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.internal.jaxb.metadata;
+
+import javax.xml.bind.annotation.XmlElementRef;
+import org.opengis.metadata.quality.SourceReference;
+import org.apache.sis.metadata.iso.quality.DefaultSourceReference;
+import org.apache.sis.internal.jaxb.gco.PropertyType;
+
+
+/**
+ * JAXB adapter mapping implementing class to the GeoAPI interface. See
+ * package documentation for more information about JAXB and interface.
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+public final class DQM_SourceReference extends PropertyType<DQM_SourceReference, SourceReference> {
+    /**
+     * Empty constructor for JAXB only.
+     */
+    public DQM_SourceReference() {
+    }
+
+    /**
+     * Returns the GeoAPI interface which is bound by this adapter.
+     * This method is indirectly invoked by the private constructor
+     * below, so it shall not depend on the state of this object.
+     *
+     * @return {@code SourceReference.class}
+     */
+    @Override
+    protected Class<SourceReference> getBoundType() {
+        return SourceReference.class;
+    }
+
+    /**
+     * Constructor for the {@link #wrap} method only.
+     */
+    private DQM_SourceReference(final SourceReference metadata) {
+        super(metadata);
+    }
+
+    /**
+     * Invoked by {@link PropertyType} at marshalling time for wrapping the given metadata value
+     * in a {@code <dqm:DQ_SourceReference>} XML element.
+     *
+     * @param  metadata  the metadata element to marshal.
+     * @return a {@code PropertyType} wrapping the given the metadata element.
+     */
+    @Override
+    protected DQM_SourceReference wrap(final SourceReference metadata) {
+        return new DQM_SourceReference(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at marshalling time for getting the actual metadata to write
+     * inside the {@code <dqm:DQ_SourceReference>} XML element.
+     * This is the value or a copy of the value given in argument to the {@code wrap} method.
+     *
+     * @return the metadata to be marshalled.
+     */
+    @XmlElementRef
+    public DefaultSourceReference getElement() {
+        return DefaultSourceReference.castOrCopy(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at unmarshalling time for storing the result temporarily.
+     *
+     * @param  metadata  the unmarshalled metadata.
+     */
+    public void setElement(final DefaultSourceReference metadata) {
+        this.metadata = metadata;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQ_EvaluationMethod.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQ_EvaluationMethod.java
new file mode 100644
index 0000000000..245c4ce976
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQ_EvaluationMethod.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.internal.jaxb.metadata;
+
+import javax.xml.bind.annotation.XmlElementRef;
+import org.opengis.metadata.quality.EvaluationMethod;
+import org.apache.sis.metadata.iso.quality.DefaultEvaluationMethod;
+import org.apache.sis.internal.jaxb.gco.PropertyType;
+
+
+/**
+ * JAXB adapter mapping implementing class to the GeoAPI interface. See
+ * package documentation for more information about JAXB and interface.
+ *
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+public final class DQ_EvaluationMethod extends PropertyType<DQ_EvaluationMethod, EvaluationMethod> {
+    /**
+     * Empty constructor for JAXB only.
+     */
+    public DQ_EvaluationMethod() {
+    }
+
+    /**
+     * Returns the GeoAPI interface which is bound by this adapter.
+     * This method is indirectly invoked by the private constructor
+     * below, so it shall not depend on the state of this object.
+     *
+     * @return {@code EvaluationMethod.class}
+     */
+    @Override
+    protected Class<EvaluationMethod> getBoundType() {
+        return EvaluationMethod.class;
+    }
+
+    /**
+     * Constructor for the {@link #wrap} method only.
+     */
+    private DQ_EvaluationMethod(final EvaluationMethod metadata) {
+        super(metadata);
+    }
+
+    /**
+     * Invoked by {@link PropertyType} at marshalling time for wrapping the given metadata value
+     * in a {@code <mdq:DQ_EvaluationMethod>} XML element.
+     *
+     * @param  metadata  the metadata element to marshal.
+     * @return a {@code PropertyType} wrapping the given the metadata element.
+     */
+    @Override
+    protected DQ_EvaluationMethod wrap(final EvaluationMethod metadata) {
+        return new DQ_EvaluationMethod(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at marshalling time for getting the actual metadata to write
+     * inside the {@code <mdq:DQ_EvaluationMethod>} XML element.
+     * This is the value or a copy of the value given in argument to the {@code wrap} method.
+     *
+     * @return the metadata to be marshalled.
+     */
+    @XmlElementRef
+    public DefaultEvaluationMethod getElement() {
+        return DefaultEvaluationMethod.castOrCopy(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at unmarshalling time for storing the result temporarily.
+     *
+     * @param  metadata  the unmarshalled metadata.
+     */
+    public void setElement(final DefaultEvaluationMethod metadata) {
+        this.metadata = metadata;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQ_MeasureReference.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQ_MeasureReference.java
new file mode 100644
index 0000000000..14d60127dc
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQ_MeasureReference.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.internal.jaxb.metadata;
+
+import javax.xml.bind.annotation.XmlElementRef;
+import org.opengis.metadata.quality.MeasureReference;
+import org.apache.sis.metadata.iso.quality.DefaultMeasureReference;
+import org.apache.sis.internal.jaxb.gco.PropertyType;
+
+
+/**
+ * JAXB adapter mapping implementing class to the GeoAPI interface. See
+ * package documentation for more information about JAXB and interface.
+ *
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+public final class DQ_MeasureReference extends PropertyType<DQ_MeasureReference, MeasureReference> {
+    /**
+     * Empty constructor for JAXB only.
+     */
+    public DQ_MeasureReference() {
+    }
+
+    /**
+     * Returns the GeoAPI interface which is bound by this adapter.
+     * This method is indirectly invoked by the private constructor
+     * below, so it shall not depend on the state of this object.
+     *
+     * @return {@code MeasureReference.class}
+     */
+    @Override
+    protected Class<MeasureReference> getBoundType() {
+        return MeasureReference.class;
+    }
+
+    /**
+     * Constructor for the {@link #wrap} method only.
+     */
+    private DQ_MeasureReference(final MeasureReference metadata) {
+        super(metadata);
+    }
+
+    /**
+     * Invoked by {@link PropertyType} at marshalling time for wrapping the given metadata value
+     * in a {@code <mdq:DQ_MeasureReference>} XML element.
+     *
+     * @param  metadata  the metadata element to marshal.
+     * @return a {@code PropertyType} wrapping the given the metadata element.
+     */
+    @Override
+    protected DQ_MeasureReference wrap(final MeasureReference metadata) {
+        return new DQ_MeasureReference(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at marshalling time for getting the actual metadata to write
+     * inside the {@code <mdq:DQ_MeasureReference>} XML element.
+     * This is the value or a copy of the value given in argument to the {@code wrap} method.
+     *
+     * @return the metadata to be marshalled.
+     */
+    @XmlElementRef
+    public DefaultMeasureReference getElement() {
+        return DefaultMeasureReference.castOrCopy(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at unmarshalling time for storing the result temporarily.
+     *
+     * @param  metadata  the unmarshalled metadata.
+     */
+    public void setElement(final DefaultMeasureReference metadata) {
+        this.metadata = metadata;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQ_StandaloneQualityReportInformation.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQ_StandaloneQualityReportInformation.java
new file mode 100644
index 0000000000..181195e264
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/DQ_StandaloneQualityReportInformation.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.internal.jaxb.metadata;
+
+import javax.xml.bind.annotation.XmlElementRef;
+import org.opengis.metadata.quality.StandaloneQualityReportInformation;
+import org.apache.sis.metadata.iso.quality.DefaultStandaloneQualityReportInformation;
+import org.apache.sis.internal.jaxb.gco.PropertyType;
+
+
+/**
+ * JAXB adapter mapping implementing class to the GeoAPI interface. See
+ * package documentation for more information about JAXB and interface.
+ *
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+public final class DQ_StandaloneQualityReportInformation extends
+        PropertyType<DQ_StandaloneQualityReportInformation, StandaloneQualityReportInformation>
+{
+    /**
+     * Empty constructor for JAXB only.
+     */
+    public DQ_StandaloneQualityReportInformation() {
+    }
+
+    /**
+     * Returns the GeoAPI interface which is bound by this adapter.
+     * This method is indirectly invoked by the private constructor
+     * below, so it shall not depend on the state of this object.
+     *
+     * @return {@code StandaloneQualityReportInformation.class}
+     */
+    @Override
+    protected Class<StandaloneQualityReportInformation> getBoundType() {
+        return StandaloneQualityReportInformation.class;
+    }
+
+    /**
+     * Constructor for the {@link #wrap} method only.
+     */
+    private DQ_StandaloneQualityReportInformation(final StandaloneQualityReportInformation metadata) {
+        super(metadata);
+    }
+
+    /**
+     * Invoked by {@link PropertyType} at marshalling time for wrapping the given metadata value
+     * in a {@code <mdq:DQ_StandaloneQualityReportInformation>} XML element.
+     *
+     * @param  metadata  the metadata element to marshal.
+     * @return a {@code PropertyType} wrapping the given the metadata element.
+     */
+    @Override
+    protected DQ_StandaloneQualityReportInformation wrap(final StandaloneQualityReportInformation metadata) {
+        return new DQ_StandaloneQualityReportInformation(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at marshalling time for getting the actual metadata to write
+     * inside the {@code <mdq:DQ_StandaloneQualityReportInformation>} XML element.
+     * This is the value or a copy of the value given in argument to the {@code wrap} method.
+     *
+     * @return the metadata to be marshalled.
+     */
+    @XmlElementRef
+    public DefaultStandaloneQualityReportInformation getElement() {
+        return DefaultStandaloneQualityReportInformation.castOrCopy(metadata);
+    }
+
+    /**
+     * Invoked by JAXB at unmarshalling time for storing the result temporarily.
+     *
+     * @param  metadata  the unmarshalled metadata.
+     */
+    public void setElement(final DefaultStandaloneQualityReportInformation metadata) {
+        this.metadata = metadata;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/package-info.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/package-info.java
index 0f03d9d128..2a87af664f 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/package-info.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/package-info.java
@@ -50,7 +50,8 @@
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
  * @author  Cullen Rombach (Image Matters)
- * @since   1.1
+ * @author  Alexis Gaillard (Geomatys)
+ * @since   1.3
  *
  * @see javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
  *
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 986a3ba754..447f79c90f 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
@@ -64,7 +64,7 @@ import static org.apache.sis.util.ArgumentChecks.ensureNonNullElement;
  *   <li>All properties are <cite>readable</cite>.</li>
  *   <li>A property is also <cite>writable</cite> if a {@code set*(…)} method is defined
  *       <strong>in the implementation class</strong> for the corresponding getter method.
- *       The setter method doesn't need to be defined in the interface.</li>
+ *       The setter method does not need to be defined in the interface.</li>
  * </ul>
  *
  * An instance of {@code MetadataStandard} is associated to every {@link AbstractMetadata} objects.
@@ -72,7 +72,7 @@ import static org.apache.sis.util.ArgumentChecks.ensureNonNullElement;
  * can also be used for other standards.
  *
  * <h2>Defining new {@code MetadataStandard} instances</h2>
- * Users should use the pre-defined constants when applicable.
+ * Users should use the predefined constants when applicable.
  * However if new instances need to be defined, then there is a choice:
  *
  * <ul>
@@ -90,7 +90,7 @@ import static org.apache.sis.util.ArgumentChecks.ensureNonNullElement;
  * by a large amount of {@link ModifiableMetadata}.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.2
+ * @version 1.3
  *
  * @see AbstractMetadata
  *
@@ -116,23 +116,34 @@ public class MetadataStandard implements Serializable {
     static final boolean IMPLEMENTATION_CAN_ALTER_API = false;
 
     /**
-     * Metadata instances defined in this class. The current implementation does not yet
-     * contains the user-defined instances. However this may be something we will need to
-     * do in the future.
+     * Metadata instances defined in this class. Standards will be tested in the order they appear in this array.
+     * So if {@link #isSupported(String)} may return {@code true} for two or more standards, the standard which
+     * should have precedence should be declared first.
+     *
+     * <p>The current implementation does not yet contains the user-defined instances.
+     * However it may be something that we will need to do in the future.</p>
      */
     private static final MetadataStandard[] INSTANCES;
 
     /**
-     * An instance working on ISO 19111 standard as defined by GeoAPI interfaces
-     * in the {@link org.opengis.referencing} package and sub-packages.
+     * An instance working on ISO 19115 standard as defined by GeoAPI interfaces
+     * in the {@link org.opengis.metadata} package and sub-packages, except {@code quality}.
      */
-    public static final MetadataStandard ISO_19111;
+    public static final MetadataStandard ISO_19115;
 
     /**
-     * An instance working on ISO 19115 standard as defined by GeoAPI interfaces
-     * in the {@link org.opengis.metadata} package and sub-packages.
+     * An instance working on ISO 19157 standard as defined by GeoAPI interfaces
+     * in the {@link org.opengis.metadata.quality} package.
+     *
+     * @since 1.3
      */
-    public static final MetadataStandard ISO_19115;
+    public static final MetadataStandard ISO_19157;
+
+    /**
+     * An instance working on ISO 19111 standard as defined by GeoAPI interfaces
+     * in the {@link org.opengis.referencing} package and sub-packages.
+     */
+    public static final MetadataStandard ISO_19111;
 
     /**
      * An instance working on ISO 19123 standard as defined by GeoAPI interfaces
@@ -143,12 +154,14 @@ public class MetadataStandard implements Serializable {
         final String[] acronyms = {"CoordinateSystem", "CS", "CoordinateReferenceSystem", "CRS"};
 
         // If new StandardImplementation instances are added below, please update StandardImplementation.readResolve().
-        ISO_19115 = new StandardImplementation("ISO 19115", "org.opengis.metadata.", "org.apache.sis.metadata.iso.", null, null);
-        ISO_19111 = new StandardImplementation("ISO 19111", "org.opengis.referencing.", "org.apache.sis.referencing.", acronyms, new MetadataStandard[] {ISO_19115});
-        ISO_19123 = new MetadataStandard      ("ISO 19123", "org.opengis.coverage.", new MetadataStandard[] {ISO_19111});
+        ISO_19115 = new StandardImplementation("ISO 19115", "org.opengis.metadata.", "org.apache.sis.metadata.iso.", null, (MetadataStandard[]) null);
+        ISO_19157 = new StandardImplementation("ISO 19157", "org.opengis.metadata.quality.", "org.apache.sis.metadata.iso.quality.", null, ISO_19115);
+        ISO_19111 = new StandardImplementation("ISO 19111", "org.opengis.referencing.", "org.apache.sis.referencing.", acronyms, ISO_19157, ISO_19115);
+        ISO_19123 = new MetadataStandard      ("ISO 19123", "org.opengis.coverage.", ISO_19111);
         INSTANCES = new MetadataStandard[] {
-            ISO_19111,
+            ISO_19157,      // Need to be declared before ISO 19115.
             ISO_19115,
+            ISO_19111,
             ISO_19123
         };
         SystemListener.add(new SystemListener(Modules.METADATA) {
@@ -173,8 +186,11 @@ public class MetadataStandard implements Serializable {
 
     /**
      * The dependencies, or {@code null} if none.
+     * If non-null, dependencies will be tested in the order they appear in this array.
+     * Consequently if {@link #isMetadata(Class)} may return {@code true} for two or more
+     * dependencies, then the dependency which should have precedence should be declared first.
      *
-     * Note: the {@code null} value is for serialization compatibility.
+     * <p>Note: the {@code null} value is for serialization compatibility.</p>
      */
     private final MetadataStandard[] dependencies;
 
@@ -188,13 +204,18 @@ public class MetadataStandard implements Serializable {
      *   <li>{@link PropertyAccessor} otherwise.</li>
      * </ul>
      */
-    private final transient ConcurrentMap<CacheKey,Object> accessors;      // written by reflection on deserialization.
+    private final transient ConcurrentMap<CacheKey,Object> accessors;      // Written by reflection on deserialization.
 
     /**
      * Creates a new instance working on implementation of interfaces defined in the specified package.
+     * If this {@code MetadataStandard} does not support a given class, then the dependencies will be
+     * tested in the order declared to this constructor. Consequently if {@link #isMetadata(Class)} may
+     * return {@code true} for two or more dependencies, then the dependency which should have precedence
+     * should be declared first.
      *
-     * <div class="note"><b>Example:</b>: For the ISO 19115 standard reflected by GeoAPI interfaces,
-     * {@code interfacePackage} shall be the {@link org.opengis.metadata} package.</div>
+     * <div class="note"><b>Example:</b>: For the ISO 19157 standard reflected by GeoAPI interfaces,
+     * {@code interfacePackage} shall be the {@link org.opengis.metadata.quality} package.
+     * Its dependency is {@link #ISO_19115} in the {@link org.opengis.metadata} package.</div>
      *
      * @param  citation          bibliographical reference to the international standard.
      * @param  interfacePackage  the root package for metadata interfaces.
@@ -225,7 +246,7 @@ public class MetadataStandard implements Serializable {
      * @param  interfacePackage  the root package for metadata interfaces.
      * @param  dependencies      the dependencies to other metadata standards, or {@code null} if none.
      */
-    MetadataStandard(final String citation, final String interfacePackage, final MetadataStandard[] dependencies) {
+    MetadataStandard(final String citation, final String interfacePackage, final MetadataStandard... dependencies) {
         this.citation         = new SimpleCitation(citation);
         this.interfacePackage = interfacePackage;
         this.accessors        = new ConcurrentHashMap<>();
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java
index 0ee1c89c63..a703710bbf 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java
@@ -79,7 +79,7 @@ import static org.apache.sis.util.collection.Containers.hashMapCapacity;
  * {@link ModifiableMetadata} instances.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
+ * @version 1.3
  * @since   0.3
  * @module
  */
@@ -419,7 +419,7 @@ class PropertyAccessor {
         for (Method candidate : getters) {
             if (Classes.isPossibleGetter(candidate)) {
                 final String name = candidate.getName();
-                if (name.startsWith(SET)) {                         // Paranoiac check.
+                if (name.startsWith(SET) || SpecialCases.exclude(type, name)) {
                     continue;
                 }
                 /*
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/SpecialCases.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/SpecialCases.java
index a60883060d..326f510c64 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/SpecialCases.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/SpecialCases.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.metadata;
 
+import org.opengis.metadata.quality.Element;
 import org.opengis.metadata.extent.GeographicBoundingBox;
 import org.apache.sis.measure.Latitude;
 import org.apache.sis.measure.Longitude;
@@ -29,7 +30,7 @@ import org.apache.sis.util.collection.BackingStoreException;
  * which are returned as {@link Longitude} or {@link Latitude} instances instead of {@link Double}.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.1
+ * @version 1.3
  * @since   0.4
  * @module
  */
@@ -67,6 +68,18 @@ final class SpecialCases extends PropertyAccessor {
         return type == GeographicBoundingBox.class;
     }
 
+    /**
+     * Returns {@code true} if the given method should be excluded in current Apache SIS version.
+     * A future SIS version may handle that property as a special case instead.
+     *
+     * @param  type    the class or interface containing the method.
+     * @param  method  the method to test for exclusion.
+     * @return {@code true} if the given method should be excluded.
+     */
+    static boolean exclude(final Class<?> type, final String method) {
+        return method.equals("getMeasure") && Element.class.isAssignableFrom(type);
+    }
+
     /**
      * Delegates to {@link PropertyAccessor#type(int, TypeValuePolicy)},
      * then substitutes the type for the properties handled in a special way.
@@ -166,8 +179,8 @@ final class SpecialCases extends PropertyAccessor {
 
     /**
      * Returns the identifier to use in replacement of the identifier given in {@link org.opengis.annotation.UML} annotations.
-     * We usually want to use those identifiers as-is because they were specified by ISO standards, but we may an exception if
-     * the identifier is actually a construction of two or more identifiers like {@code "defaultLocale+otherLocale"}.
+     * We usually want to use those identifiers as-is because they were specified by ISO standards, but we may do an exception
+     * if the identifier is actually a construction of two or more identifiers like {@code "defaultLocale+otherLocale"}.
      *
      * @param  name  the UML identifier(s) from ISO specification.
      * @return the potentially simplified identifier to use for displaying purpose.
diff --git 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
index b54389bc7b..c254319109 100644
--- 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
@@ -71,8 +71,8 @@ final class StandardImplementation extends MetadataStandard {
     private final transient Map<Class<?>,Class<?>> implementations;     // written by reflection on deserialization.
 
     /**
-     * Creates a new instance working on implementation of interfaces defined in the
-     * specified package. This constructor is used only for the pre-defined constants.
+     * Creates a new instance working on implementation of interfaces defined in the specified package.
+     * This constructor is used only for the predefined constants.
      *
      * @param citation               the title of the standard.
      * @param interfacePackage       the root package for metadata interfaces, with a trailing {@code '.'}.
@@ -81,7 +81,7 @@ final class StandardImplementation extends MetadataStandard {
      * @param dependencies           the dependencies to other metadata standards, or {@code null} if none.
      */
     StandardImplementation(final String citation, final String interfacePackage, final String implementationPackage,
-            final String[] acronyms, final MetadataStandard[] dependencies)
+            final String[] acronyms, final MetadataStandard... dependencies)
     {
         super(citation, interfacePackage, dependencies);
         this.implementationPackage = implementationPackage;
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractCompleteness.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractCompleteness.java
index 543c44ab68..1f35c277b8 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractCompleteness.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractCompleteness.java
@@ -26,7 +26,7 @@ import org.opengis.metadata.quality.CompletenessCommission;
 
 /**
  * Presence and absence of features, their attributes and their relationships.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_Completeness}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractResult.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractDataEvaluation.java
similarity index 59%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractResult.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractDataEvaluation.java
index eb3f97f9e8..1e1e04860f 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractResult.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractDataEvaluation.java
@@ -17,17 +17,17 @@
 package org.apache.sis.metadata.iso.quality;
 
 import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.metadata.quality.Result;
-import org.opengis.metadata.quality.CoverageResult;
-import org.opengis.metadata.quality.ConformanceResult;
-import org.opengis.metadata.quality.QuantitativeResult;
-import org.apache.sis.metadata.iso.ISOMetadata;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import org.opengis.metadata.quality.DataEvaluation;
+import org.opengis.metadata.quality.FullInspection;
+import org.opengis.metadata.quality.IndirectEvaluation;
+import org.opengis.metadata.quality.SampleBasedInspection;
 
 
 /**
- * Type of test applied to the data specified by a data quality scope.
+ * Data evaluation method.
+ * See the {@link DataEvaluation} GeoAPI interface for more details.
  *
  * <h2>Limitations</h2>
  * <ul>
@@ -38,29 +38,29 @@ import org.apache.sis.metadata.iso.ISOMetadata;
  *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
  * </ul>
  *
- * @author  Martin Desruisseaux (IRD, Geomatys)
- * @author  Touraïvane (IRD)
- * @version 1.0
- * @since   0.3
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
  * @module
  */
-@XmlType(name = "AbstractDQ_Result_Type")
-@XmlRootElement(name = "AbstractDQ_Result")
+@XmlType(name = "AbstractDQ_DataEvaluation_Type")
+@XmlRootElement(name = "AbstractDQ_DataEvaluation")
 @XmlSeeAlso({
-    DefaultConformanceResult.class,
-    DefaultQuantitativeResult.class,
-    DefaultCoverageResult.class
+    DefaultFullInspection.class,
+    DefaultIndirectEvaluation .class,
+    DefaultSampleBasedInspection.class
 })
-public class AbstractResult extends ISOMetadata implements Result {
+public class AbstractDataEvaluation extends DefaultEvaluationMethod implements DataEvaluation {
     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = 3510023908820052467L;
+    private static final long serialVersionUID = 6572802343890855687L;
 
     /**
-     * Constructs an initially empty result.
+     * Constructs an initially empty Evaluation for data.
      */
-    public AbstractResult() {
+    public AbstractDataEvaluation() {
     }
 
     /**
@@ -70,9 +70,9 @@ public class AbstractResult extends ISOMetadata implements Result {
      *
      * @param  object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(Result)
+     * @see #castOrCopy(DataEvaluation)
      */
-    public AbstractResult(final Result object) {
+    public AbstractDataEvaluation(final DataEvaluation object) {
         super(object);
     }
 
@@ -82,16 +82,16 @@ public class AbstractResult extends ISOMetadata implements Result {
      *
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
-     *   <li>Otherwise if the given object is an instance of {@link ConformanceResult},
-     *       {@link QuantitativeResult}or {@link CoverageResult}, then this method delegates to
+     *   <li>Otherwise if the given object is an instance of {@link IndirectEvaluation},
+     *       {@link SampleBasedInspection} or {@link FullInspection}, then this method delegates to
      *       the {@code castOrCopy(…)} method of the corresponding SIS subclass.
      *       Note that if the given object implements more than one of the above-cited interfaces,
      *       then the {@code castOrCopy(…)} method to be used is unspecified.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code AbstractResult}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code AbstractResult} instance is created using the
-     *       {@linkplain #AbstractResult(Result) copy constructor}
-     *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       {@code AbstractDataEvaluation}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code AbstractDataEvaluation} instance is created using the
+     *       {@linkplain #AbstractDataEvaluation(DataEvaluation) copy constructor} and returned.
+     *       Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
      *
@@ -99,20 +99,19 @@ public class AbstractResult extends ISOMetadata implements Result {
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static AbstractResult castOrCopy(final Result object) {
-        if (object instanceof CoverageResult) {
-            return DefaultCoverageResult.castOrCopy((CoverageResult) object);
+    public static AbstractDataEvaluation castOrCopy(final DataEvaluation object) {
+        if (object instanceof FullInspection) {
+            return DefaultFullInspection.castOrCopy((FullInspection) object);
         }
-        if (object instanceof QuantitativeResult) {
-            return DefaultQuantitativeResult.castOrCopy((QuantitativeResult) object);
+        if (object instanceof SampleBasedInspection) {
+            return DefaultSampleBasedInspection.castOrCopy((SampleBasedInspection) object);
         }
-        if (object instanceof ConformanceResult) {
-            return DefaultConformanceResult.castOrCopy((ConformanceResult) object);
+        if (object instanceof IndirectEvaluation) {
+            return DefaultIndirectEvaluation.castOrCopy((IndirectEvaluation) object);
         }
-        // Intentionally tested after the sub-interfaces.
-        if (object == null || object instanceof AbstractResult) {
-            return (AbstractResult) object;
+        if (object == null || object instanceof AbstractDataEvaluation) {
+            return (AbstractDataEvaluation) object;
         }
-        return new AbstractResult(object);
+        return new AbstractDataEvaluation(object);
     }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java
index 5febb30461..1a426d8151 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java
@@ -17,10 +17,10 @@
 package org.apache.sis.metadata.iso.quality;
 
 import java.util.Date;
-import java.util.Iterator;
 import java.util.Collection;
-import java.util.AbstractList;
-import java.io.Serializable;
+import java.util.Collections;
+import java.util.function.Function;
+import java.util.function.BiConsumer;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -29,28 +29,28 @@ import org.opengis.metadata.Identifier;
 import org.opengis.metadata.citation.Citation;
 import org.opengis.metadata.quality.Result;
 import org.opengis.metadata.quality.Element;
-import org.opengis.metadata.quality.Usability;
+import org.opengis.metadata.quality.UsabilityElement;
 import org.opengis.metadata.quality.Completeness;
-import org.opengis.metadata.quality.TemporalAccuracy;
+import org.opengis.metadata.quality.TemporalQuality;
 import org.opengis.metadata.quality.ThematicAccuracy;
 import org.opengis.metadata.quality.PositionalAccuracy;
 import org.opengis.metadata.quality.LogicalConsistency;
 import org.opengis.metadata.quality.EvaluationMethodType;
+import org.opengis.metadata.quality.EvaluationMethod;
+import org.opengis.metadata.quality.MeasureReference;
+import org.opengis.metadata.quality.Metaquality;
 import org.opengis.util.InternationalString;
-import org.apache.sis.metadata.iso.ISOMetadata;
-import org.apache.sis.internal.system.Semaphores;
 import org.apache.sis.internal.jaxb.FilterByVersion;
+import org.apache.sis.internal.metadata.Dependencies;
 import org.apache.sis.internal.xml.LegacyNamespaces;
-import org.apache.sis.util.collection.CheckedContainer;
-import org.apache.sis.util.resources.Errors;
 
 import static org.apache.sis.util.collection.Containers.isNullOrEmpty;
-import static org.apache.sis.internal.metadata.ImplementationHelper.valueIfDefined;
 
 
 /**
- * Type of test applied to the data specified by a data quality scope.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * Aspect of quantitative quality information.
+ * See the {@link Element} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_Element}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
@@ -67,11 +67,15 @@ import static org.apache.sis.internal.metadata.ImplementationHelper.valueIfDefin
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Guilhem Legal (Geomatys)
- * @version 1.0
+ * @author  Alexis Gaillard (Geomatys)
+ * @version 1.3
  * @since   0.3
  * @module
  */
 @XmlType(name = "AbstractDQ_Element_Type", propOrder = {
+    "standaloneQualityReportDetails",
+    "measureReference",
+    "evaluationMethod",
     "namesOfMeasure",
     "measureIdentification",
     "measureDescription",
@@ -79,7 +83,8 @@ import static org.apache.sis.internal.metadata.ImplementationHelper.valueIfDefin
     "evaluationMethodDescription",
     "evaluationProcedure",
     "dates",
-    "results"
+    "results",
+    "derivedElements"
 })
 @XmlRootElement(name = "AbstractDQ_Element")
 @XmlSeeAlso({
@@ -87,226 +92,46 @@ import static org.apache.sis.internal.metadata.ImplementationHelper.valueIfDefin
     AbstractLogicalConsistency.class,
     AbstractPositionalAccuracy.class,
     AbstractThematicAccuracy.class,
-    AbstractTemporalAccuracy.class,
-    DefaultUsability.class
+    AbstractTemporalQuality.class,
+    DefaultUsabilityElement.class,
+    AbstractMetaquality.class,
+    DefaultMeasure.class            // Not a subclass, but "weakly" associated.
 })
 public class AbstractElement extends ISOMetadata implements Element {
     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = 3963454452767190970L;
+    private static final long serialVersionUID = -406229448295586970L;
 
     /**
-     * Name of the test applied to the data.
+     * Clause in the standalone quality report where this data quality element is described.
      */
     @SuppressWarnings("serial")
-    private Collection<InternationalString> namesOfMeasure;
+    private InternationalString standaloneQualityReportDetails;
 
     /**
-     * Code identifying a registered standard procedure, or {@code null} if none.
+     * Reference to measure used.
      */
     @SuppressWarnings("serial")
-    private Identifier measureIdentification;
+    private MeasureReference measureReference;
 
     /**
-     * Description of the measure being determined.
+     * Evaluation information.
      */
     @SuppressWarnings("serial")
-    private InternationalString measureDescription;
+    private EvaluationMethod evaluationMethod;
 
     /**
-     * Type of method used to evaluate quality of the dataset, or {@code null} if unspecified.
+     * Value (or set of values) obtained from applying a data quality measure.
      */
     @SuppressWarnings("serial")
-    private EvaluationMethodType evaluationMethodType;
-
-    /**
-     * Description of the evaluation method.
-     */
-    @SuppressWarnings("serial")
-    private InternationalString evaluationMethodDescription;
-
-    /**
-     * Reference to the procedure information, or {@code null} if none.
-     */
-    @SuppressWarnings("serial")
-    private Citation evaluationProcedure;
-
-    /**
-     * Start time ({@code date1}) and end time ({@code date2}) on which a data quality measure was applied.
-     *
-     * @todo Needs to be made unmodifiable after transition to {@link State#FINAL}.
-     */
-    private Dates dates;
-
-    /**
-     * The start and end times as a list of O, 1 or 2 elements.
-     */
-    private static final class Dates extends AbstractList<Date>
-            implements CheckedContainer<Date>, Cloneable, Serializable
-    {
-        /**
-         * For cross-version compatibility.
-         */
-        private static final long serialVersionUID = 1210175223467194009L;
-
-        /**
-         * Start time ({@code date1}) and end time ({@code date2}) on which a data quality measure
-         * was applied. Value is {@link Long#MIN_VALUE} if this information is not available.
-         */
-        private long date1, date2;
-
-        /**
-         * Creates a new list initialized with no dates.
-         */
-        Dates() {
-            clear();
-        }
-
-        /**
-         * Returns the type of elements in this list.
-         */
-        @Override
-        public Class<Date> getElementType() {
-            return Date.class;
-        }
-
-        /**
-         * Removes all dates in this list.
-         */
-        @Override
-        public void clear() {
-            date1 = Long.MIN_VALUE;
-            date2 = Long.MIN_VALUE;
-        }
-
-        /**
-         * Returns the number of elements in this list.
-         */
-        @Override
-        public int size() {
-            if (date2 != Long.MIN_VALUE) return 2;
-            if (date1 != Long.MIN_VALUE) return 1;
-            return 0;
-        }
-
-        /**
-         * Returns the value at the given index.
-         */
-        @Override
-        @SuppressWarnings("fallthrough")
-        public Date get(final int index) {
-            long date = date1;
-            switch (index) {
-                case 1:  date = date2;                                          // Fall through
-                case 0:  if (date != Long.MIN_VALUE) return new Date(date);     // else fallthrough.
-                default: throw new IndexOutOfBoundsException(Errors.format(Errors.Keys.IndexOutOfBounds_1, index));
-            }
-        }
-
-        /**
-         * Sets the value at the given index.
-         * Null values are not allowed.
-         */
-        @Override
-        public Date set(final int index, final Date value) {
-            final long date = value.getTime();
-            final Date previous = get(index);
-            switch (index) {
-                case 0: date1 = date; break;
-                case 1: date2 = date; break;
-            }
-            modCount++;
-            return previous;
-        }
-
-        /**
-         * Removes the value at the given index.
-         */
-        @Override
-        @SuppressWarnings("fallthrough")
-        public Date remove(final int index) {
-            final Date previous = get(index);
-            switch (index) {
-                case 0: date1 = date2;                      // Fallthrough
-                case 1: date2 = Long.MIN_VALUE; break;
-            }
-            modCount++;
-            return previous;
-        }
-
-        /**
-         * Adds a date at the given position.
-         * Null values are not allowed.
-         */
-        @Override
-        public void add(final int index, final Date value) {
-            final long date = value.getTime();
-            if (date2 == Long.MIN_VALUE) {
-                switch (index) {
-                    case 0: {
-                        date2 = date1;
-                        date1 = date;
-                        modCount++;
-                        return;
-                    }
-                    case 1: {
-                        if (date1 == Long.MIN_VALUE) {
-                            break; // Exception will be thrown below.
-                        }
-                        date2 = date;
-                        modCount++;
-                        return;
-                    }
-                }
-            }
-            throw new IndexOutOfBoundsException(Errors.format(Errors.Keys.IndexOutOfBounds_1, index));
-        }
-
-        /**
-         * Adds all content from the given collection into this collection.
-         */
-        @Override
-        @SuppressWarnings("fallthrough")
-        public boolean addAll(final Collection<? extends Date> dates) {
-            final int c = modCount;
-            if (dates != null) {
-                final Iterator<? extends Date> it = dates.iterator();
-                switch (size()) { // Fallthrough everywhere.
-                    case 0:  if (!it.hasNext()) break;
-                             date1 = it.next().getTime();
-                             modCount++;
-                    case 1:  if (!it.hasNext()) break;
-                             date2 = it.next().getTime();
-                             modCount++;
-                    default: if (!it.hasNext()) break;
-                             throw new IllegalArgumentException(Errors.format(
-                                     Errors.Keys.TooManyCollectionElements_3, "dates", 2, dates.size()));
-                }
-            }
-            return modCount != c;
-        }
-
-        /**
-         * Returns a clone of this list.
-         */
-        @Override
-        public Object clone() {
-            try {
-                return super.clone();
-            } catch (CloneNotSupportedException e) {
-                throw new AssertionError(e);
-            }
-        }
-    }
+    private Collection<Result> results;
 
     /**
-     * Value (or set of values) obtained from applying a data quality measure or the out
-     * come of evaluating the obtained value (or set of values) against a specified
-     * acceptable conformance quality level.
+     * In case of aggregation or derivation, indicates the original element.
      */
     @SuppressWarnings("serial")
-    private Collection<Result> results;
+    private Collection<Element> derivedElements;
 
     /**
      * Constructs an initially empty element.
@@ -336,14 +161,14 @@ public class AbstractElement extends ISOMetadata implements Element {
     public AbstractElement(final Element object) {
         super(object);
         if (object != null) {
-            namesOfMeasure              = copyCollection(object.getNamesOfMeasure(), InternationalString.class);
-            measureIdentification       = object.getMeasureIdentification();
-            measureDescription          = object.getMeasureDescription();
-            evaluationMethodType        = object.getEvaluationMethodType();
-            evaluationMethodDescription = object.getEvaluationMethodDescription();
-            evaluationProcedure         = object.getEvaluationProcedure();
-            results                     = copyCollection(object.getResults(), Result.class);
-            writeDates(object.getDates());
+            standaloneQualityReportDetails = object.getStandaloneQualityReportDetails();
+            if ((measureReference = object.getMeasureReference()) == null) {
+                DefaultMeasureReference candidate = new DefaultMeasureReference();
+                if (candidate.setLegacy(object)) measureReference = candidate;
+            }
+            evaluationMethod = object.getEvaluationMethod();
+            results          = copyCollection(object.getResults(), Result.class);
+            derivedElements  = copyCollection(object.getDerivedElements(), Element.class);
         }
     }
 
@@ -354,16 +179,16 @@ public class AbstractElement extends ISOMetadata implements Element {
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
      *   <li>Otherwise if the given object is an instance of {@link PositionalAccuracy},
-     *       {@link TemporalAccuracy}, {@link ThematicAccuracy}, {@link LogicalConsistency},
-     *       {@link Completeness} or {@link Usability}, then this method delegates to the
-     *       {@code castOrCopy(…)} method of the corresponding SIS subclass.
+     *       {@link TemporalQuality}, {@link ThematicAccuracy}, {@link LogicalConsistency},
+     *       {@link Completeness}, {@link UsabilityElement} or {@link Metaquality},
+     *       then this method delegates to the {@code castOrCopy(…)} method of the corresponding SIS subclass.
      *       Note that if the given object implements more than one of the above-cited interfaces,
      *       then the {@code castOrCopy(…)} method to be used is unspecified.</li>
      *   <li>Otherwise if the given object is already an instance of
      *       {@code AbstractElement}, then it is returned unchanged.</li>
      *   <li>Otherwise a new {@code AbstractElement} instance is created using the
-     *       {@linkplain #AbstractElement(Element) copy constructor}
-     *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       {@linkplain #AbstractElement(Element) copy constructor} and returned.
+     *       Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
      *
@@ -375,8 +200,8 @@ public class AbstractElement extends ISOMetadata implements Element {
         if (object instanceof PositionalAccuracy) {
             return AbstractPositionalAccuracy.castOrCopy((PositionalAccuracy) object);
         }
-        if (object instanceof TemporalAccuracy) {
-            return AbstractTemporalAccuracy.castOrCopy((TemporalAccuracy) object);
+        if (object instanceof TemporalQuality) {
+            return AbstractTemporalQuality.castOrCopy((TemporalQuality) object);
         }
         if (object instanceof ThematicAccuracy) {
             return AbstractThematicAccuracy.castOrCopy((ThematicAccuracy) object);
@@ -387,8 +212,11 @@ public class AbstractElement extends ISOMetadata implements Element {
         if (object instanceof Completeness) {
             return AbstractCompleteness.castOrCopy((Completeness) object);
         }
-        if (object instanceof Usability) {
-            return DefaultUsability.castOrCopy((Usability) object);
+        if (object instanceof UsabilityElement) {
+            return DefaultUsabilityElement.castOrCopy((UsabilityElement) object);
+        }
+        if (object instanceof Metaquality) {
+            return AbstractMetaquality.castOrCopy((Metaquality) object);
         }
         // Intentionally tested after the sub-interfaces.
         if (object == null || object instanceof AbstractElement) {
@@ -397,27 +225,122 @@ public class AbstractElement extends ISOMetadata implements Element {
         return new AbstractElement(object);
     }
 
+    /**
+     * Returns the clause in the standalone quality report where this data quality element is described.
+     * May apply to any related data quality element (original results in case of derivation or aggregation).
+     *
+     * @return clause where this data quality element is described, or {@code null} if none.
+     *
+     * @since 1.3
+     */
+    @Override
+    @XmlElement(name = "standaloneQualityReportDetails")
+    public InternationalString getStandaloneQualityReportDetails() {
+        return FilterByVersion.CURRENT_METADATA.accept() ? standaloneQualityReportDetails : null;
+    }
+
+    /**
+     * Sets the clause in the standalone quality report where this data quality element is described.
+     *
+     * @param  newValue  the clause in the standalone quality report.
+     *
+     * @since 1.3
+     */
+    public void setStandaloneQualityReportDetails(final InternationalString newValue)  {
+        checkWritePermission(standaloneQualityReportDetails);
+        standaloneQualityReportDetails = newValue;
+    }
+
+    /**
+     * Returns an identifier of a measure fully described elsewhere.
+     *
+     * @return reference to the measure used, or {@code null} if none.
+     *
+     * @since 1.3
+     */
+    @Override
+    @XmlElement(name = "measure", required = false)
+    public MeasureReference getMeasureReference() {
+        if (FilterByVersion.CURRENT_METADATA.accept()) {
+            return (measureReference != null) ? measureReference : Element.super.getMeasureReference();
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Sets an identifier of a measure fully described elsewhere.
+     *
+     * @param  newValues  the new measure identifier.
+     *
+     * @since 1.3
+     */
+    public void setMeasureReference(final MeasureReference newValues) {
+        checkWritePermission(measureReference);
+        measureReference = newValues;
+    }
+
+    /**
+     * Returns the value of a {@link #measureReference} property.
+     * This is used only for deprecated setter methods from older ISO 19115 version.
+     *
+     * @see #getEvaluationMethodProperty(Function)
+     */
+    private <V> V getMeasureReferenceProperty(final Function<MeasureReference,V> getter) {
+        final MeasureReference m = measureReference;
+        return (m != null) && FilterByVersion.LEGACY_METADATA.accept() ? getter.apply(m) : null;
+    }
+
+    /**
+     * Sets the value of a {@link #measureReference} property.
+     * This is used only for deprecated setter methods from older ISO 19115 version.
+     *
+     * @see #setEvaluationMethodProperty(BiConsumer, Object)
+     */
+    private <V> void setMeasureReferenceProperty(final BiConsumer<DefaultMeasureReference,V> setter, final V newValue) {
+        if (newValue != null) {
+            if (!(measureReference instanceof DefaultEvaluationMethod)) {
+                measureReference = new DefaultMeasureReference(measureReference);
+            }
+            setter.accept((DefaultMeasureReference) measureReference, newValue);
+        }
+    }
+
     /**
      * Returns the name of the test applied to the data.
      *
      * @return name of the test applied to the data.
      *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
+     * @deprecated Replaced by {@link DefaultMeasureReference#getNamesOfMeasure()}.
      */
     @Override
+    @Deprecated
     @XmlElement(name = "nameOfMeasure", namespace = LegacyNamespaces.GMD)
     public Collection<InternationalString> getNamesOfMeasure() {
-        if (!FilterByVersion.LEGACY_METADATA.accept()) return null;
-        return namesOfMeasure = nonNullCollection(namesOfMeasure, InternationalString.class);
+        if (!FilterByVersion.LEGACY_METADATA.accept()) {
+            return null;
+        }
+        if (measureReference == null) {
+            measureReference = new DefaultMeasureReference();
+        }
+        if (measureReference instanceof DefaultMeasureReference) {
+            return ((DefaultMeasureReference) measureReference).getNamesOfMeasure();
+        }
+        return Collections.unmodifiableCollection(measureReference.getNamesOfMeasure());
     }
 
     /**
      * Sets the name of the test applied to the data.
      *
      * @param  newValues  the new name of measures.
+     *
+     * @deprecated Replaced by {@link DefaultMeasureReference#setNamesOfMeasure(Collection)}.
      */
+    @Deprecated
     public void setNamesOfMeasure(final Collection<? extends InternationalString> newValues) {
-        namesOfMeasure = writeCollection(newValues, namesOfMeasure, InternationalString.class);
+        if (!isNullOrEmpty(newValues)) {
+            setMeasureReferenceProperty(DefaultMeasureReference::setNamesOfMeasure, newValues);
+        }
     }
 
     /**
@@ -425,22 +348,25 @@ public class AbstractElement extends ISOMetadata implements Element {
      *
      * @return code identifying a registered standard procedure, or {@code null}.
      *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
+     * @deprecated Replaced by {@link DefaultMeasureReference#getMeasureIdentification()}.
      */
     @Override
+    @Deprecated
     @XmlElement(name = "measureIdentification", namespace = LegacyNamespaces.GMD)
     public Identifier getMeasureIdentification() {
-        return FilterByVersion.LEGACY_METADATA.accept() ? measureIdentification : null;
+        return getMeasureReferenceProperty(MeasureReference::getMeasureIdentification);
     }
 
     /**
      * Sets the code identifying a registered standard procedure.
      *
      * @param  newValue  the new measure identification.
+     *
+     * @deprecated Replaced by {@link DefaultMeasureReference#setMeasureIdentification(Identifier)}.
      */
+    @Deprecated
     public void setMeasureIdentification(final Identifier newValue)  {
-        checkWritePermission(measureIdentification);
-        measureIdentification = newValue;
+        setMeasureReferenceProperty(DefaultMeasureReference::setMeasureIdentification, newValue);
     }
 
     /**
@@ -448,22 +374,76 @@ public class AbstractElement extends ISOMetadata implements Element {
      *
      * @return description of the measure being determined, or {@code null}.
      *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
+     * @deprecated Replaced by {@link DefaultMeasureReference#getMeasureDescription()}.
      */
     @Override
+    @Deprecated
     @XmlElement(name = "measureDescription", namespace = LegacyNamespaces.GMD)
     public InternationalString getMeasureDescription() {
-        return FilterByVersion.LEGACY_METADATA.accept() ? measureDescription : null;
+        return getMeasureReferenceProperty(MeasureReference::getMeasureDescription);
     }
 
     /**
      * Sets the description of the measure being determined.
      *
      * @param  newValue  the new measure description.
+     *
+     * @deprecated Replaced by {@link DefaultMeasureReference#setMeasureDescription(InternationalString)}.
      */
+    @Deprecated
     public void setMeasureDescription(final InternationalString newValue)  {
-        checkWritePermission(measureDescription);
-        measureDescription = newValue;
+        setMeasureReferenceProperty(DefaultMeasureReference::setMeasureDescription, newValue);
+    }
+
+    /**
+     * Returns the evaluation information.
+     *
+     * @return information about the evaluation method, or {@code null} if none.
+     *
+     * @since 1.3
+     */
+    @Override
+    @XmlElement(name = "evaluationMethod", required = false)
+    public EvaluationMethod getEvaluationMethod() {
+        return FilterByVersion.CURRENT_METADATA.accept() ? evaluationMethod : null;
+    }
+
+    /**
+     * Sets the evaluation information.
+     *
+     * @param  newValue  the new evaluation information.
+     *
+     * @since 1.3
+     */
+    public void setEvaluationMethod(final EvaluationMethod newValue) {
+        checkWritePermission(evaluationMethod);
+        evaluationMethod = newValue;
+    }
+
+    /**
+     * Returns the value of a {@link #evaluationMethod} property.
+     * This is used only for deprecated setter methods from older ISO 19115 version.
+     *
+     * @see #getMeasureReferenceProperty(Function)
+     */
+    private <V> V getEvaluationMethodProperty(final Function<EvaluationMethod,V> getter) {
+        final EvaluationMethod m = evaluationMethod;
+        return (m != null) && FilterByVersion.LEGACY_METADATA.accept() ? getter.apply(m) : null;
+    }
+
+    /**
+     * Sets the value of a {@link #evaluationMethod} property.
+     * This is used only for deprecated setter methods from older ISO 19115 version.
+     *
+     * @see #setMeasureReferenceProperty(BiConsumer, Object)
+     */
+    private <V> void setEvaluationMethodProperty(final BiConsumer<DefaultEvaluationMethod,V> setter, final V newValue) {
+        if (newValue != null) {
+            if (!(evaluationMethod instanceof DefaultEvaluationMethod)) {
+                evaluationMethod = new DefaultEvaluationMethod(evaluationMethod);
+            }
+            setter.accept((DefaultEvaluationMethod) evaluationMethod, newValue);
+        }
     }
 
     /**
@@ -471,22 +451,25 @@ public class AbstractElement extends ISOMetadata implements Element {
      *
      * @return type of method used to evaluate quality, or {@code null}.
      *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
+     * @deprecated Replaced by {@link DefaultEvaluationMethod#getEvaluationMethodType()}.
      */
     @Override
+    @Deprecated
     @XmlElement(name = "evaluationMethodType", namespace = LegacyNamespaces.GMD)
     public EvaluationMethodType getEvaluationMethodType() {
-        return FilterByVersion.LEGACY_METADATA.accept() ? evaluationMethodType : null;
+        return getEvaluationMethodProperty(EvaluationMethod::getEvaluationMethodType);
     }
 
     /**
      * Sets the type of method used to evaluate quality of the dataset.
      *
      * @param  newValue  the new evaluation method type.
+     *
+     * @deprecated Replaced by {@link DefaultEvaluationMethod#setEvaluationMethodType(EvaluationMethodType)}.
      */
+    @Deprecated
     public void setEvaluationMethodType(final EvaluationMethodType newValue)  {
-        checkWritePermission(evaluationMethodType);
-        evaluationMethodType = newValue;
+        setEvaluationMethodProperty(DefaultEvaluationMethod::setEvaluationMethodType, newValue);
     }
 
     /**
@@ -494,22 +477,25 @@ public class AbstractElement extends ISOMetadata implements Element {
      *
      * @return description of the evaluation method, or {@code null}.
      *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
+     * @deprecated Replaced by {@link DefaultEvaluationMethod#getEvaluationMethodDescription()}.
      */
     @Override
+    @Deprecated
     @XmlElement(name = "evaluationMethodDescription", namespace = LegacyNamespaces.GMD)
     public InternationalString getEvaluationMethodDescription() {
-        return FilterByVersion.LEGACY_METADATA.accept() ? evaluationMethodDescription : null;
+        return getEvaluationMethodProperty(EvaluationMethod::getEvaluationMethodDescription);
     }
 
     /**
      * Sets the description of the evaluation method.
      *
      * @param  newValue  the new evaluation method description.
+     *
+     * @deprecated Replaced by {@link DefaultEvaluationMethod#setEvaluationMethodDescription(InternationalString)}.
      */
+    @Deprecated
     public void setEvaluationMethodDescription(final InternationalString newValue)  {
-        checkWritePermission(evaluationMethodDescription);
-        evaluationMethodDescription = newValue;
+        setEvaluationMethodProperty(DefaultEvaluationMethod::setEvaluationMethodDescription, newValue);
     }
 
     /**
@@ -517,22 +503,25 @@ public class AbstractElement extends ISOMetadata implements Element {
      *
      * @return reference to the procedure information, or {@code null}.
      *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
+     * @deprecated Replaced by {@link DefaultEvaluationMethod#getEvaluationProcedure()}.
      */
     @Override
+    @Deprecated
     @XmlElement(name = "evaluationProcedure", namespace = LegacyNamespaces.GMD)
     public Citation getEvaluationProcedure() {
-        return FilterByVersion.LEGACY_METADATA.accept() ? evaluationProcedure : null;
+        return getEvaluationMethodProperty(EvaluationMethod::getEvaluationProcedure);
     }
 
     /**
      * Sets the reference to the procedure information.
      *
      * @param  newValue  the new evaluation procedure.
+     *
+     * @deprecated Replaced by {@link DefaultEvaluationMethod#setEvaluationProcedure(Citation)}.
      */
+    @Deprecated
     public void setEvaluationProcedure(final Citation newValue) {
-        checkWritePermission(evaluationProcedure);
-        evaluationProcedure = newValue;
+        setEvaluationMethodProperty(DefaultEvaluationMethod::setEvaluationProcedure, newValue);
     }
 
     /**
@@ -541,18 +530,24 @@ public class AbstractElement extends ISOMetadata implements Element {
      * Returns an empty collection if this information is not available.
      *
      * @return date or range of dates on which a data quality measure was applied.
+     *
+     * @deprecated Replaced by {@link DefaultEvaluationMethod#getDates()}.
      */
     @Override
+    @Deprecated
+    @Dependencies("getEvaluationMethod")
     @XmlElement(name = "dateTime", namespace = LegacyNamespaces.GMD)
-    @SuppressWarnings("ReturnOfCollectionOrArrayField")
     public Collection<Date> getDates() {
-        if (Semaphores.query(Semaphores.NULL_COLLECTION)) {
-            return isNullOrEmpty(dates) ? null : dates;
+        if (!FilterByVersion.LEGACY_METADATA.accept()) {
+            return null;
         }
-        if (dates == null) {
-            dates = new Dates();
+        if (evaluationMethod == null) {
+            evaluationMethod = new DefaultEvaluationMethod();
         }
-        return dates;
+        if (evaluationMethod instanceof DefaultEvaluationMethod) {
+            return ((DefaultEvaluationMethod) evaluationMethod).getDates();
+        }
+        return Collections.unmodifiableCollection(evaluationMethod.getDates());
     }
 
     /**
@@ -560,33 +555,20 @@ public class AbstractElement extends ISOMetadata implements Element {
      * The collection size is 1 for a single date, or 2 for a range.
      *
      * @param  newValues  the new dates, or {@code null}.
+     *
+     * @deprecated Replaced by {@link DefaultEvaluationMethod#setDates(Collection)}.
      */
+    @Deprecated
     public void setDates(final Collection<? extends Date> newValues) {
-        if (newValues != dates) {               // Mandatory check for avoiding the call to 'dates.clear()'.
-            checkWritePermission(valueIfDefined(dates));
-            writeDates(newValues);
-        }
-    }
-
-    /**
-     * Implementation of {@link #setDates(Collection)}.
-     */
-    private void writeDates(final Collection<? extends Date> newValues) {
-        if (isNullOrEmpty(newValues)) {
-            dates = null;
-        } else {
-            if (dates == null) {
-                dates = new Dates();
-            }
-            dates.clear();
-            dates.addAll(newValues);
+        if (!isNullOrEmpty(newValues)) {
+            setEvaluationMethodProperty(DefaultEvaluationMethod::setDates, newValues);
         }
     }
 
     /**
-     * Returns the value (or set of values) obtained from applying a data quality measure or
-     * the out come of evaluating the obtained value (or set of values) against a specified
-     * acceptable conformance quality level.
+     * Returns the value(s) obtained from applying a data quality measure.
+     * May be an outcome of evaluating the obtained value (or set of values)
+     * against a specified acceptable conformance quality level.
      *
      * @return set of values obtained from applying a data quality measure.
      */
@@ -597,13 +579,36 @@ public class AbstractElement extends ISOMetadata implements Element {
     }
 
     /**
-     * Sets the value (or set of values) obtained from applying a data quality measure or
-     * the out come of evaluating the obtained value (or set of values) against a specified
-     * acceptable conformance quality level.
+     * Sets the value(s) obtained from applying a data quality measure.
      *
-     * @param  newValues  the new results.
+     * @param  newValues  the new set of value.
      */
     public void setResults(final Collection<? extends Result> newValues) {
         results = writeCollection(newValues, results, Result.class);
     }
+
+    /**
+     * Returns the original elements in case of aggregation or derivation.
+     *
+     * @return original element(s) when there is an aggregation or derivation.
+     *
+     * @since 1.3
+     */
+    @Override
+    @XmlElement(name = "derivedElement")
+    public Collection<Element> getDerivedElements() {
+        if (!FilterByVersion.CURRENT_METADATA.accept()) return null;
+        return derivedElements = nonNullCollection(derivedElements, Element.class);
+    }
+
+    /**
+     * Sets the original elements in case of aggregation or derivation.
+     *
+     * @param  newValues  the new elements.
+     *
+     * @since 1.3
+     */
+    public void setDerivedElements(final Collection<? extends Element> newValues) {
+        derivedElements = writeCollection(newValues, derivedElements, Element.class);
+    }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractLogicalConsistency.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractLogicalConsistency.java
index 0a68158115..9b38deacdb 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractLogicalConsistency.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractLogicalConsistency.java
@@ -29,7 +29,7 @@ import org.opengis.metadata.quality.ConceptualConsistency;
 /**
  * Degree of adherence to logical rules of data structure, attribution and relationships.
  * Data structure can be conceptual, logical or physical.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_LogicalConsistency}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractResult.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractMetaquality.java
similarity index 56%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractResult.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractMetaquality.java
index eb3f97f9e8..79bf5758ba 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractResult.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractMetaquality.java
@@ -17,17 +17,21 @@
 package org.apache.sis.metadata.iso.quality;
 
 import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.metadata.quality.Result;
-import org.opengis.metadata.quality.CoverageResult;
-import org.opengis.metadata.quality.ConformanceResult;
-import org.opengis.metadata.quality.QuantitativeResult;
-import org.apache.sis.metadata.iso.ISOMetadata;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import org.opengis.metadata.quality.Metaquality;
+import org.opengis.metadata.quality.Confidence;
+import org.opengis.metadata.quality.Representativity;
+import org.opengis.metadata.quality.Homogeneity;
 
 
 /**
- * Type of test applied to the data specified by a data quality scope.
+ * Information about the reliability of data quality results.
+ * The following properties are mandatory in a well-formed metadata according ISO 19157:
+ *
+ * <div class="preformat">{@code DQ_Metaquality}
+ * {@code   ├─result…………………………} Value obtained from applying a data quality measure.
+ * {@code   └─derivedElement……} Derived element.</div>
  *
  * <h2>Limitations</h2>
  * <ul>
@@ -38,29 +42,29 @@ import org.apache.sis.metadata.iso.ISOMetadata;
  *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
  * </ul>
  *
- * @author  Martin Desruisseaux (IRD, Geomatys)
- * @author  Touraïvane (IRD)
- * @version 1.0
- * @since   0.3
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
  * @module
  */
-@XmlType(name = "AbstractDQ_Result_Type")
-@XmlRootElement(name = "AbstractDQ_Result")
+@XmlType(name = "AbstractDQ_Metaquality_Type")
+@XmlRootElement(name = "AbstractDQ_Metaquality")
 @XmlSeeAlso({
-    DefaultConformanceResult.class,
-    DefaultQuantitativeResult.class,
-    DefaultCoverageResult.class
+    DefaultConfidence.class,
+    DefaultRepresentativity.class,
+    DefaultHomogeneity.class
 })
-public class AbstractResult extends ISOMetadata implements Result {
+public class AbstractMetaquality extends AbstractElement implements Metaquality {
     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = 3510023908820052467L;
+    private static final long serialVersionUID = -3672977971960830867L;
 
     /**
-     * Constructs an initially empty result.
+     * Constructs an initially empty metaquality.
      */
-    public AbstractResult() {
+    public AbstractMetaquality() {
     }
 
     /**
@@ -70,9 +74,10 @@ public class AbstractResult extends ISOMetadata implements Result {
      *
      * @param  object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(Result)
+     * @see #castOrCopy(Metaquality)
      */
-    public AbstractResult(final Result object) {
+    @SuppressWarnings("unchecked")
+    public AbstractMetaquality(final Metaquality object) {
         super(object);
     }
 
@@ -82,16 +87,15 @@ public class AbstractResult extends ISOMetadata implements Result {
      *
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
-     *   <li>Otherwise if the given object is an instance of {@link ConformanceResult},
-     *       {@link QuantitativeResult}or {@link CoverageResult}, then this method delegates to
-     *       the {@code castOrCopy(…)} method of the corresponding SIS subclass.
+     *   <li>Otherwise if the given object is an instance of {@link Confidence}, {@link Representativity} or {@link Homogeneity},
+     *       then this method delegates to the {@code castOrCopy(…)} method of the corresponding SIS subclass.
      *       Note that if the given object implements more than one of the above-cited interfaces,
      *       then the {@code castOrCopy(…)} method to be used is unspecified.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code AbstractResult}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code AbstractResult} instance is created using the
-     *       {@linkplain #AbstractResult(Result) copy constructor}
-     *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       {@code AbstractMetaquality}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code AbstractMetaquality} instance is created using the
+     *       {@linkplain #AbstractMetaquality(Metaquality) copy constructor} and returned.
+     *       Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
      *
@@ -99,20 +103,20 @@ public class AbstractResult extends ISOMetadata implements Result {
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static AbstractResult castOrCopy(final Result object) {
-        if (object instanceof CoverageResult) {
-            return DefaultCoverageResult.castOrCopy((CoverageResult) object);
+    public static AbstractMetaquality castOrCopy(final Metaquality object) {
+        if (object instanceof Confidence) {
+            return DefaultConfidence.castOrCopy((Confidence) object);
         }
-        if (object instanceof QuantitativeResult) {
-            return DefaultQuantitativeResult.castOrCopy((QuantitativeResult) object);
+        if (object instanceof Representativity) {
+            return DefaultRepresentativity.castOrCopy((Representativity) object);
         }
-        if (object instanceof ConformanceResult) {
-            return DefaultConformanceResult.castOrCopy((ConformanceResult) object);
+        if (object instanceof Homogeneity) {
+            return DefaultHomogeneity.castOrCopy((Homogeneity) object);
         }
         // Intentionally tested after the sub-interfaces.
-        if (object == null || object instanceof AbstractResult) {
-            return (AbstractResult) object;
+        if (object == null || object instanceof AbstractMetaquality) {
+            return (AbstractMetaquality) object;
         }
-        return new AbstractResult(object);
+        return new AbstractMetaquality(object);
     }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractPositionalAccuracy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractPositionalAccuracy.java
index 0e1f8a7a4d..acd210bd22 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractPositionalAccuracy.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractPositionalAccuracy.java
@@ -28,7 +28,7 @@ import org.opengis.metadata.quality.RelativeInternalPositionalAccuracy;
 
 /**
  * Accuracy of the position of features.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_PositionalAccuracy}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
@@ -52,8 +52,8 @@ import org.opengis.metadata.quality.RelativeInternalPositionalAccuracy;
 @XmlRootElement(name = "AbstractDQ_PositionalAccuracy")
 @XmlSeeAlso({
     DefaultAbsoluteExternalPositionalAccuracy.class,
-    DefaultGriddedDataPositionalAccuracy.class,
-    DefaultRelativeInternalPositionalAccuracy.class
+    DefaultRelativeInternalPositionalAccuracy.class,
+    DefaultGriddedDataPositionalAccuracy.class
 })
 public class AbstractPositionalAccuracy extends AbstractElement implements PositionalAccuracy {
     /**
@@ -117,12 +117,12 @@ public class AbstractPositionalAccuracy extends AbstractElement implements Posit
         if (object instanceof AbsoluteExternalPositionalAccuracy) {
             return DefaultAbsoluteExternalPositionalAccuracy.castOrCopy((AbsoluteExternalPositionalAccuracy) object);
         }
-        if (object instanceof GriddedDataPositionalAccuracy) {
-            return DefaultGriddedDataPositionalAccuracy.castOrCopy((GriddedDataPositionalAccuracy) object);
-        }
         if (object instanceof RelativeInternalPositionalAccuracy) {
             return DefaultRelativeInternalPositionalAccuracy.castOrCopy((RelativeInternalPositionalAccuracy) object);
         }
+        if (object instanceof GriddedDataPositionalAccuracy) {
+            return DefaultGriddedDataPositionalAccuracy.castOrCopy((GriddedDataPositionalAccuracy) object);
+        }
         // Intentionally tested after the sub-interfaces.
         if (object == null || object instanceof AbstractPositionalAccuracy) {
             return (AbstractPositionalAccuracy) object;
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractResult.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractResult.java
index eb3f97f9e8..f1ca9dcf32 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractResult.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractResult.java
@@ -16,18 +16,22 @@
  */
 package org.apache.sis.metadata.iso.quality;
 
+import java.util.Date;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlRootElement;
+import org.apache.sis.internal.metadata.ImplementationHelper;
 import org.opengis.metadata.quality.Result;
 import org.opengis.metadata.quality.CoverageResult;
 import org.opengis.metadata.quality.ConformanceResult;
 import org.opengis.metadata.quality.QuantitativeResult;
-import org.apache.sis.metadata.iso.ISOMetadata;
+import org.opengis.metadata.quality.DescriptiveResult;
+import org.opengis.metadata.maintenance.Scope;
 
 
 /**
- * Type of test applied to the data specified by a data quality scope.
+ * Base class of more specific result classes.
  *
  * <h2>Limitations</h2>
  * <ul>
@@ -40,15 +44,20 @@ import org.apache.sis.metadata.iso.ISOMetadata;
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
- * @version 1.0
+ * @author  Alexis Gaillard (Geomatys)
+ * @version 1.3
  * @since   0.3
  * @module
  */
-@XmlType(name = "AbstractDQ_Result_Type")
+@XmlType(name = "AbstractDQ_Result_Type", propOrder = {
+    "resultScope",
+    "dateTime"
+})
 @XmlRootElement(name = "AbstractDQ_Result")
 @XmlSeeAlso({
     DefaultConformanceResult.class,
     DefaultQuantitativeResult.class,
+    DefaultDescriptiveResult.class,
     DefaultCoverageResult.class
 })
 public class AbstractResult extends ISOMetadata implements Result {
@@ -57,10 +66,22 @@ public class AbstractResult extends ISOMetadata implements Result {
      */
     private static final long serialVersionUID = 3510023908820052467L;
 
+    /**
+     * Scope of the result.
+     */
+    @SuppressWarnings("serial")
+    private Scope resultScope;
+
+    /**
+     * Date when the result was generated, or {@link Long#MIN_VALUE} if none.
+     */
+    private long dateTime;
+
     /**
      * Constructs an initially empty result.
      */
     public AbstractResult() {
+        dateTime = Long.MIN_VALUE;
     }
 
     /**
@@ -74,6 +95,12 @@ public class AbstractResult extends ISOMetadata implements Result {
      */
     public AbstractResult(final Result object) {
         super(object);
+        if (object != null) {
+            resultScope = object.getResultScope();
+            dateTime    = ImplementationHelper.toMilliseconds(object.getDateTime());
+        } else {
+            dateTime = Long.MIN_VALUE;
+        }
     }
 
     /**
@@ -83,15 +110,15 @@ public class AbstractResult extends ISOMetadata implements Result {
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
      *   <li>Otherwise if the given object is an instance of {@link ConformanceResult},
-     *       {@link QuantitativeResult}or {@link CoverageResult}, then this method delegates to
-     *       the {@code castOrCopy(…)} method of the corresponding SIS subclass.
+     *       {@link QuantitativeResult}, {@link DescriptiveResult} or {@link CoverageResult},
+     *       then this method delegates to the {@code castOrCopy(…)} method of the corresponding SIS subclass.
      *       Note that if the given object implements more than one of the above-cited interfaces,
      *       then the {@code castOrCopy(…)} method to be used is unspecified.</li>
      *   <li>Otherwise if the given object is already an instance of
      *       {@code AbstractResult}, then it is returned unchanged.</li>
      *   <li>Otherwise a new {@code AbstractResult} instance is created using the
-     *       {@linkplain #AbstractResult(Result) copy constructor}
-     *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       {@linkplain #AbstractResult(Result) copy constructor} and returned.
+     *       Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
      *
@@ -100,19 +127,70 @@ public class AbstractResult extends ISOMetadata implements Result {
      *         given object itself), or {@code null} if the argument was null.
      */
     public static AbstractResult castOrCopy(final Result object) {
-        if (object instanceof CoverageResult) {
-            return DefaultCoverageResult.castOrCopy((CoverageResult) object);
-        }
         if (object instanceof QuantitativeResult) {
             return DefaultQuantitativeResult.castOrCopy((QuantitativeResult) object);
         }
         if (object instanceof ConformanceResult) {
             return DefaultConformanceResult.castOrCopy((ConformanceResult) object);
         }
+        if (object instanceof DescriptiveResult) {
+            return DefaultDescriptiveResult.castOrCopy((DescriptiveResult) object);
+        }
+        if (object instanceof CoverageResult) {
+            return DefaultCoverageResult.castOrCopy((CoverageResult) object);
+        }
         // Intentionally tested after the sub-interfaces.
         if (object == null || object instanceof AbstractResult) {
             return (AbstractResult) object;
         }
         return new AbstractResult(object);
     }
+
+    /**
+     * Returns the scope of the result.
+     *
+     * @return scope of the result, or {@code null} if unspecified.
+     *
+     * @since 1.3
+     */
+    @Override
+    @XmlElement(name = "resultScope")
+    public Scope getResultScope() {
+        return resultScope;
+    }
+
+    /**
+     * Sets the scope of the result.
+     *
+     * @param  newValue  the new evaluation procedure.
+     *
+     * @since 1.3
+     */
+    public void setResultScope(final Scope newValue) {
+        resultScope = newValue;
+    }
+
+    /**
+     * Returns the date when the result was generated.
+     *
+     * @return date of the result, or {@code null} if none.
+     *
+     * @since 1.3
+     */
+    @Override
+    @XmlElement(name = "dateTime")
+    public Date getDateTime() {
+        return ImplementationHelper.toDate(dateTime);
+    }
+
+    /**
+     * Sets the date when the result was generated.
+     *
+     * @param  newValue  the new date, or {@code null}.
+     *
+     * @since 1.3
+     */
+    public void setDateTime(final Date newValue) {
+        dateTime = ImplementationHelper.toMilliseconds(newValue);
+    }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalAccuracy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalAccuracy.java
index 4efd56c06c..b06f75b03c 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalAccuracy.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalAccuracy.java
@@ -18,44 +18,28 @@ package org.apache.sis.metadata.iso.quality;
 
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSeeAlso;
+import org.apache.sis.xml.Namespaces;
 import org.opengis.metadata.quality.TemporalAccuracy;
 import org.opengis.metadata.quality.TemporalValidity;
 import org.opengis.metadata.quality.TemporalConsistency;
 import org.opengis.metadata.quality.AccuracyOfATimeMeasurement;
-import org.apache.sis.internal.xml.LegacyNamespaces;
 
 
 /**
  * Accuracy of the temporal attributes and temporal relationships of features.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
- *
- * <div class="preformat">{@code DQ_TemporalAccuracy}
- * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
- *
- * <h2>Limitations</h2>
- * <ul>
- *   <li>Instances of this class are not synchronized for multi-threading.
- *       Synchronization, if needed, is caller's responsibility.</li>
- *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
- *       Serialization support is appropriate for short term storage or RMI between applications running the
- *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
- * </ul>
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
- * @version 1.0
+ * @version 1.3
  * @since   0.3
  * @module
+ *
+ * @deprecated Renamed {@link AbstractTemporalQuality} for following a renaming in ISO 19157:2013.
  */
-@XmlType(name = "AbstractDQ_TemporalAccuracy_Type", namespace = LegacyNamespaces.GMD)     // TODO: renamed TemporalQuality
-@XmlRootElement(name = "AbstractDQ_TemporalAccuracy", namespace = LegacyNamespaces.GMD)
-@XmlSeeAlso({
-    DefaultAccuracyOfATimeMeasurement.class,
-    DefaultTemporalConsistency.class,
-    DefaultTemporalValidity.class
-})
-public class AbstractTemporalAccuracy extends AbstractElement implements TemporalAccuracy {
+@Deprecated
+@XmlType(name = "AbstractDQ_TemporalAccuracy_Type", namespace = Namespaces.GMD)
+@XmlRootElement(name = "AbstractDQ_TemporalAccuracy", namespace = Namespaces.GMD)
+public class AbstractTemporalAccuracy extends AbstractTemporalQuality implements TemporalAccuracy {
     /**
      * Serial number for inter-operability with different versions.
      */
@@ -104,16 +88,6 @@ public class AbstractTemporalAccuracy extends AbstractElement implements Tempora
      *         given object itself), or {@code null} if the argument was null.
      */
     public static AbstractTemporalAccuracy castOrCopy(final TemporalAccuracy object) {
-        if (object instanceof AccuracyOfATimeMeasurement) {
-            return DefaultAccuracyOfATimeMeasurement.castOrCopy((AccuracyOfATimeMeasurement) object);
-        }
-        if (object instanceof TemporalConsistency) {
-            return DefaultTemporalConsistency.castOrCopy((TemporalConsistency) object);
-        }
-        if (object instanceof TemporalValidity) {
-            return DefaultTemporalValidity.castOrCopy((TemporalValidity) object);
-        }
-        // Intentionally tested after the sub-interfaces.
         if (object == null || object instanceof AbstractTemporalAccuracy) {
             return (AbstractTemporalAccuracy) object;
         }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalAccuracy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalQuality.java
similarity index 75%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalAccuracy.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalQuality.java
index 4efd56c06c..18267041b7 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalAccuracy.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalQuality.java
@@ -19,18 +19,18 @@ package org.apache.sis.metadata.iso.quality;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlSeeAlso;
-import org.opengis.metadata.quality.TemporalAccuracy;
+import org.opengis.metadata.quality.TemporalQuality;
 import org.opengis.metadata.quality.TemporalValidity;
 import org.opengis.metadata.quality.TemporalConsistency;
 import org.opengis.metadata.quality.AccuracyOfATimeMeasurement;
-import org.apache.sis.internal.xml.LegacyNamespaces;
+import org.opengis.metadata.quality.TemporalAccuracy;
 
 
 /**
  * Accuracy of the temporal attributes and temporal relationships of features.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
- * <div class="preformat">{@code DQ_TemporalAccuracy}
+ * <div class="preformat">{@code DQ_TemporalQuality}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
  *
  * <h2>Limitations</h2>
@@ -42,29 +42,30 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
  *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
  * </ul>
  *
- * @author  Martin Desruisseaux (IRD, Geomatys)
- * @author  Touraïvane (IRD)
- * @version 1.0
- * @since   0.3
+ * @author  Martin Desruisseaux (Geomatys)
+ * @author  Alexis Gaillard (Geomatys)
+ * @version 1.3
+ * @since   1.3
  * @module
  */
-@XmlType(name = "AbstractDQ_TemporalAccuracy_Type", namespace = LegacyNamespaces.GMD)     // TODO: renamed TemporalQuality
-@XmlRootElement(name = "AbstractDQ_TemporalAccuracy", namespace = LegacyNamespaces.GMD)
+@XmlType(name = "AbstractDQ_TemporalQuality_Type")
+@XmlRootElement(name = "AbstractDQ_TemporalQuality")
 @XmlSeeAlso({
+    AbstractTemporalAccuracy.class,
     DefaultAccuracyOfATimeMeasurement.class,
     DefaultTemporalConsistency.class,
     DefaultTemporalValidity.class
 })
-public class AbstractTemporalAccuracy extends AbstractElement implements TemporalAccuracy {
+public class AbstractTemporalQuality extends AbstractElement implements TemporalQuality {
     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = -6273519060177989201L;
+    private static final long serialVersionUID = -442029273458043017L;
 
     /**
      * Constructs an initially empty temporal accuracy.
      */
-    public AbstractTemporalAccuracy() {
+    public AbstractTemporalQuality() {
     }
 
     /**
@@ -74,9 +75,9 @@ public class AbstractTemporalAccuracy extends AbstractElement implements Tempora
      *
      * @param  object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(TemporalAccuracy)
+     * @see #castOrCopy(TemporalQuality)
      */
-    public AbstractTemporalAccuracy(final TemporalAccuracy object) {
+    public AbstractTemporalQuality(final TemporalQuality object) {
         super(object);
     }
 
@@ -92,10 +93,10 @@ public class AbstractTemporalAccuracy extends AbstractElement implements Tempora
      *       Note that if the given object implements more than one of the above-cited interfaces,
      *       then the {@code castOrCopy(…)} method to be used is unspecified.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code AbstractTemporalAccuracy}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code AbstractTemporalAccuracy} instance is created using the
-     *       {@linkplain #AbstractTemporalAccuracy(TemporalAccuracy) copy constructor}
-     *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       {@code AbstractTemporalQuality}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code AbstractTemporalQuality} instance is created using the
+     *       {@linkplain #AbstractTemporalQuality(TemporalQuality) copy constructor} and returned.
+     *       Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
      *
@@ -103,7 +104,8 @@ public class AbstractTemporalAccuracy extends AbstractElement implements Tempora
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static AbstractTemporalAccuracy castOrCopy(final TemporalAccuracy object) {
+    @SuppressWarnings("deprecation")
+    public static AbstractTemporalQuality castOrCopy(final TemporalQuality object) {
         if (object instanceof AccuracyOfATimeMeasurement) {
             return DefaultAccuracyOfATimeMeasurement.castOrCopy((AccuracyOfATimeMeasurement) object);
         }
@@ -113,10 +115,12 @@ public class AbstractTemporalAccuracy extends AbstractElement implements Tempora
         if (object instanceof TemporalValidity) {
             return DefaultTemporalValidity.castOrCopy((TemporalValidity) object);
         }
-        // Intentionally tested after the sub-interfaces.
-        if (object == null || object instanceof AbstractTemporalAccuracy) {
-            return (AbstractTemporalAccuracy) object;
+        if (object instanceof TemporalAccuracy) {
+            return AbstractTemporalAccuracy.castOrCopy((TemporalAccuracy) object);
+        }
+        if (object == null || object instanceof AbstractTemporalQuality) {
+            return (AbstractTemporalQuality) object;
         }
-        return new AbstractTemporalAccuracy(object);
+        return new AbstractTemporalQuality(object);
     }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractThematicAccuracy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractThematicAccuracy.java
index 7bf8f7c992..314b3859e5 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractThematicAccuracy.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractThematicAccuracy.java
@@ -21,14 +21,13 @@ import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlRootElement;
 import org.opengis.metadata.quality.ThematicAccuracy;
 import org.opengis.metadata.quality.ThematicClassificationCorrectness;
-import org.opengis.metadata.quality.NonQuantitativeAttributeAccuracy;
+import org.opengis.metadata.quality.NonQuantitativeAttributeCorrectness;
 import org.opengis.metadata.quality.QuantitativeAttributeAccuracy;
 
 
 /**
- * Accuracy of quantitative attributes and the correctness of non-quantitative attributes
- * and of the classifications of features and their relationships.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * Accuracy and correctness of attributes and classification of features.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_ThematicAccuracy}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
@@ -44,7 +43,7 @@ import org.opengis.metadata.quality.QuantitativeAttributeAccuracy;
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
- * @version 1.0
+ * @version 1.3
  * @since   0.3
  * @module
  */
@@ -52,7 +51,7 @@ import org.opengis.metadata.quality.QuantitativeAttributeAccuracy;
 @XmlRootElement(name = "AbstractDQ_ThematicAccuracy")
 @XmlSeeAlso({
     DefaultThematicClassificationCorrectness.class,
-    DefaultNonQuantitativeAttributeAccuracy.class,
+    DefaultNonQuantitativeAttributeCorrectness.class,
     DefaultQuantitativeAttributeAccuracy.class
 })
 public class AbstractThematicAccuracy extends AbstractElement implements ThematicAccuracy {
@@ -87,7 +86,7 @@ public class AbstractThematicAccuracy extends AbstractElement implements Themati
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
      *   <li>Otherwise if the given object is an instance of {@link QuantitativeAttributeAccuracy},
-     *       {@link NonQuantitativeAttributeAccuracy} or {@link ThematicClassificationCorrectness},
+     *       {@link NonQuantitativeAttributeCorrectness} or {@link ThematicClassificationCorrectness},
      *       then this method delegates to the {@code castOrCopy(…)} method of the corresponding
      *       SIS subclass. Note that if the given object implements more than one of the above-cited
      *       interfaces, then the {@code castOrCopy(…)} method to be used is unspecified.</li>
@@ -107,8 +106,8 @@ public class AbstractThematicAccuracy extends AbstractElement implements Themati
         if (object instanceof QuantitativeAttributeAccuracy) {
             return DefaultQuantitativeAttributeAccuracy.castOrCopy((QuantitativeAttributeAccuracy) object);
         }
-        if (object instanceof NonQuantitativeAttributeAccuracy) {
-            return DefaultNonQuantitativeAttributeAccuracy.castOrCopy((NonQuantitativeAttributeAccuracy) object);
+        if (object instanceof NonQuantitativeAttributeCorrectness) {
+            return DefaultNonQuantitativeAttributeCorrectness.castOrCopy((NonQuantitativeAttributeCorrectness) object);
         }
         if (object instanceof ThematicClassificationCorrectness) {
             return DefaultThematicClassificationCorrectness.castOrCopy((ThematicClassificationCorrectness) object);
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultAbsoluteExternalPositionalAccuracy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultAbsoluteExternalPositionalAccuracy.java
index c4d6101020..7a986098c4 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultAbsoluteExternalPositionalAccuracy.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultAbsoluteExternalPositionalAccuracy.java
@@ -24,7 +24,8 @@ import org.opengis.metadata.quality.AbsoluteExternalPositionalAccuracy;
 
 /**
  * Closeness of reported coordinate values to values accepted as or being true.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * See the {@link AbsoluteExternalPositionalAccuracy} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_AbsoluteExternalPositionalAccuracy}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
@@ -47,7 +48,7 @@ import org.opengis.metadata.quality.AbsoluteExternalPositionalAccuracy;
 @XmlType(name = "DQ_AbsoluteExternalPositionalAccuracy_Type")
 @XmlRootElement(name = "DQ_AbsoluteExternalPositionalAccuracy")
 public class DefaultAbsoluteExternalPositionalAccuracy extends AbstractPositionalAccuracy
-       implements AbsoluteExternalPositionalAccuracy
+        implements AbsoluteExternalPositionalAccuracy
 {
     /**
      * Serial number for inter-operability with different versions.
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultAccuracyOfATimeMeasurement.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultAccuracyOfATimeMeasurement.java
index c6391ca70b..4e5627da58 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultAccuracyOfATimeMeasurement.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultAccuracyOfATimeMeasurement.java
@@ -23,7 +23,8 @@ import org.opengis.metadata.quality.AccuracyOfATimeMeasurement;
 
 /**
  * Correctness of the temporal references of an item (reporting of error in time measurement).
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * See the {@link AccuracyOfATimeMeasurement} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_AccuracyOfATimeMeasurement}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
@@ -39,15 +40,14 @@ import org.opengis.metadata.quality.AccuracyOfATimeMeasurement;
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
- * @version 1.0
+ * @author  Alexis Gaillard (Geomatys)
+ * @version 1.3
  * @since   0.3
  * @module
  */
 @XmlType(name = "DQ_AccuracyOfATimeMeasurement_Type")
 @XmlRootElement(name = "DQ_AccuracyOfATimeMeasurement")
-public class DefaultAccuracyOfATimeMeasurement extends AbstractTemporalAccuracy
-        implements AccuracyOfATimeMeasurement
-{
+public class DefaultAccuracyOfATimeMeasurement extends AbstractTemporalQuality implements AccuracyOfATimeMeasurement {
     /**
      * Serial number for inter-operability with different versions.
      */
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultAggregationDerivation.java
similarity index 66%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultAggregationDerivation.java
index 5b97a6dcee..cc1290f709 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultAggregationDerivation.java
@@ -18,16 +18,12 @@ package org.apache.sis.metadata.iso.quality;
 
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.metadata.quality.Usability;
-import org.apache.sis.internal.xml.LegacyNamespaces;
+import org.opengis.metadata.quality.AggregationDerivation;
 
 
 /**
- * Degree of adherence of a dataset to a specific set of user requirements.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
- *
- * <div class="preformat">{@code QE_Usability}
- * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
+ * Aggregation or derivation method.
+ * See the {@link AggregationDerivation} GeoAPI interface for more details.
  *
  * <h2>Limitations</h2>
  * <ul>
@@ -38,27 +34,24 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
  *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
  * </ul>
  *
- * @author  Cédric Briançon (Geomatys)
+ * @author  Alexis Gaillard (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
- * @since   0.3
+ * @version 1.3
+ * @since   1.3
  * @module
- *
- * @deprecated Not found in ISO 19115-3:2016 schemas.
  */
-@Deprecated
-@XmlType(name = "QE_Usability_Type", namespace = LegacyNamespaces.GMI)
-@XmlRootElement(name = "QE_Usability", namespace = LegacyNamespaces.GMI)
-public class DefaultUsability extends AbstractElement implements Usability {
+@XmlType(name = "DQ_AggregationDerivation_Type")
+@XmlRootElement(name = "DQ_AggregationDerivation")
+public class DefaultAggregationDerivation extends DefaultEvaluationMethod implements AggregationDerivation {
     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = -7316059750787640719L;
+    private static final long serialVersionUID = -4384680754006555546L;
 
     /**
-     * Constructs an initially empty usability.
+     * Constructs an initially empty aggregation derivation.
      */
-    public DefaultUsability() {
+    public DefaultAggregationDerivation() {
     }
 
     /**
@@ -68,9 +61,9 @@ public class DefaultUsability extends AbstractElement implements Usability {
      *
      * @param  object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(Usability)
+     * @see #castOrCopy(DefaultAggregationDerivation)
      */
-    public DefaultUsability(final Usability object) {
+    public DefaultAggregationDerivation(final AggregationDerivation object) {
         super(object);
     }
 
@@ -81,9 +74,9 @@ public class DefaultUsability extends AbstractElement implements Usability {
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code DefaultUsability}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code DefaultUsability} instance is created using the
-     *       {@linkplain #DefaultUsability(Usability) copy constructor}
+     *       {@code DefaultAggregationDerivation}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultAggregationDerivation} instance is created using the
+     *       {@linkplain #DefaultAggregationDerivation(AggregationDerivation) copy constructor}
      *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
@@ -92,10 +85,10 @@ public class DefaultUsability extends AbstractElement implements Usability {
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static DefaultUsability castOrCopy(final Usability object) {
-        if (object == null || object instanceof DefaultUsability) {
-            return (DefaultUsability) object;
+    public static DefaultAggregationDerivation castOrCopy(final AggregationDerivation object) {
+        if (object == null || object instanceof DefaultAggregationDerivation) {
+            return (DefaultAggregationDerivation) object;
         }
-        return new DefaultUsability(object);
+        return new DefaultAggregationDerivation(object);
     }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultBasicMeasure.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultBasicMeasure.java
new file mode 100644
index 0000000000..df1ea55daf
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultBasicMeasure.java
@@ -0,0 +1,225 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.metadata.iso.quality;
+
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import org.opengis.util.TypeName;
+import org.opengis.util.InternationalString;
+import org.opengis.metadata.quality.Description;
+import org.opengis.metadata.quality.BasicMeasure;
+import org.apache.sis.xml.Namespaces;
+
+
+/**
+ * Data quality basic measure.
+ * See the {@link BasicMeasure} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
+ *
+ * <div class="preformat">{@code DQM_BasicMeasure}
+ * {@code   ├─name……………………} Name of the data quality basic measure applied to the data.
+ * {@code   ├─definition……} Definition of the data quality basic measure.
+ * {@code   ├─example……………} Illustration of the use of a data quality measure.
+ * {@code   └─valueType………} Value type for the result of the basic measure (shall be one of the data types defined in ISO/TS 19103:2005).</div>
+ *
+ * <h2>Limitations</h2>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+@XmlType(name = "DQM_BasicMeasure_Type", namespace = Namespaces.DQM, propOrder = {
+    "name",
+    "definition",
+    "example",
+    "valueType"
+})
+@XmlRootElement(name = "DQM_BasicMeasure", namespace = Namespaces.DQM)
+public class DefaultBasicMeasure extends ISOMetadata implements BasicMeasure {
+    /**
+     * Serial number for inter-operability with different versions.
+     */
+    private static final long serialVersionUID = -1665043206717367320L;
+
+    /**
+     * Name of the data quality basic measure applied to the data.
+     */
+    @SuppressWarnings("serial")
+    private InternationalString name;
+
+    /**
+     * Definition of the data quality basic measure.
+     */
+    @SuppressWarnings("serial")
+    private InternationalString definition;
+
+    /**
+     * Illustration of the use of a data quality measure.
+     */
+    @SuppressWarnings("serial")
+    private Description example;
+
+    /**
+     * Value type for the result of the basic measure.
+     */
+    @SuppressWarnings("serial")
+    private TypeName valueType;
+
+    /**
+     * Constructs an initially empty basic measure.
+     */
+    public DefaultBasicMeasure() {
+    }
+
+    /**
+     * Constructs a new instance initialized with the values from the specified metadata object.
+     * This is a <cite>shallow</cite> copy constructor, since the other metadata contained in the
+     * given object are not recursively copied.
+     *
+     * @param object  the metadata to copy values from, or {@code null} if none.
+     *
+     * @see #castOrCopy(BasicMeasure)
+     */
+    public DefaultBasicMeasure(final BasicMeasure object) {
+        super(object);
+        if (object != null) {
+            name       = object.getName();
+            definition = object.getDefinition();
+            example    = object.getExample();
+            valueType  = object.getValueType();
+        }
+    }
+
+    /**
+     * Returns a SIS metadata implementation with the values of the given arbitrary implementation.
+     * This method performs the first applicable action in the following choices:
+     *
+     * <ul>
+     *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
+     *   <li>Otherwise if the given object is already an instance of
+     *       {@code BasicMeasure}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code BasicMeasure} instance is created using the
+     *       {@linkplain #BasicMeasure(Measure) copy constructor} and returned.
+     *       Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       metadata contained in the given object are not recursively copied.</li>
+     * </ul>
+     *
+     * @param  object  the object to get as a SIS implementation, or {@code null} if none.
+     * @return a SIS implementation containing the values of the given object (may be the
+     *         given object itself), or {@code null} if the argument was null.
+     */
+    public static DefaultBasicMeasure castOrCopy(final BasicMeasure object) {
+        if (object == null || object instanceof DefaultBasicMeasure) {
+            return (DefaultBasicMeasure) object;
+        }
+        return new DefaultBasicMeasure(object);
+    }
+
+    /**
+     * Returns the name of the data quality basic measure.
+     *
+     * @return name of the data quality basic measure.
+     */
+    @Override
+    @XmlElement(name = "name", required = true)
+    public InternationalString getName() {
+        return name;
+    }
+
+    /**
+     * Sets the name of the data quality basic measure.
+     *
+     * @param  newValue  the new basic measure name.
+     */
+    public void setName(final InternationalString newValue)  {
+        checkWritePermission(name);
+        name = newValue;
+    }
+
+    /**
+     * Returns the definition of the data quality basic measure.
+     *
+     * @return definition of the data quality basic measure.
+     */
+    @Override
+    @XmlElement(name = "definition", required = true)
+    public InternationalString getDefinition() {
+        return definition;
+    }
+
+    /**
+     * Sets the definition of the data quality basic measure.
+     *
+     * @param  newValue  the new basic measure definition.
+     */
+    public void setDefinition(final InternationalString newValue)  {
+        checkWritePermission(definition);
+        definition = newValue;
+    }
+
+    /**
+     * Returns the illustration of the use of a data quality measure.
+     *
+     * @return usage example, or {@code null} if none.
+     */
+    @Override
+    @XmlElement(name = "example")
+    public Description getExample() {
+        return example;
+    }
+
+    /**
+     * Sets the illustration of the use of a data quality measure.
+     *
+     * @param  newValues  the new basic measure example.
+     */
+    public void setExample(final Description newValues) {
+        checkWritePermission(example);
+        example = newValues;
+    }
+
+    /**
+     * Returns the value type for the result of the basic measure.
+     *
+     * @return value type of the result for the basic measure.
+     */
+    @Override
+    @XmlElement(name = "valueType", required = true)
+    public TypeName getValueType() {
+        return valueType;
+    }
+
+    /**
+     * Sets the value type for the result of the basic measure.
+     *
+     * @param  newValue  the new basic measure value type.
+     */
+    public void setValueType(final TypeName newValue)  {
+        checkWritePermission(valueType);
+        valueType = newValue;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCompletenessCommission.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCompletenessCommission.java
index ba4d3fa3b7..8ba8bf6299 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCompletenessCommission.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCompletenessCommission.java
@@ -23,7 +23,8 @@ import org.opengis.metadata.quality.CompletenessCommission;
 
 /**
  * Excess data present in the dataset, as described by the scope.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * See the {@link CompletenessCommission} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_CompletenessCommission}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCompletenessOmission.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCompletenessOmission.java
index bcebfe32d0..e26db3f839 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCompletenessOmission.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCompletenessOmission.java
@@ -23,7 +23,8 @@ import org.opengis.metadata.quality.CompletenessOmission;
 
 /**
  * Data absent from the dataset, as described by the scope.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * See the {@link CompletenessOmission} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_CompletenessOmission}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConceptualConsistency.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConceptualConsistency.java
index a366d77693..4682f2b916 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConceptualConsistency.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConceptualConsistency.java
@@ -23,7 +23,8 @@ import org.opengis.metadata.quality.ConceptualConsistency;
 
 /**
  * Adherence to rules of the conceptual schema.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * See the {@link ConceptualConsistency} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_ConceptualConsistency}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
@@ -45,9 +46,7 @@ import org.opengis.metadata.quality.ConceptualConsistency;
  */
 @XmlType(name = "DQ_ConceptualConsistency_Type")
 @XmlRootElement(name = "DQ_ConceptualConsistency")
-public class DefaultConceptualConsistency extends AbstractLogicalConsistency
-        implements ConceptualConsistency
-{
+public class DefaultConceptualConsistency extends AbstractLogicalConsistency implements ConceptualConsistency {
     /**
      * Serial number for inter-operability with different versions.
      */
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConfidence.java
similarity index 66%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConfidence.java
index 5b97a6dcee..959f34e61c 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConfidence.java
@@ -18,16 +18,17 @@ package org.apache.sis.metadata.iso.quality;
 
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.metadata.quality.Usability;
-import org.apache.sis.internal.xml.LegacyNamespaces;
+import org.opengis.metadata.quality.Confidence;
 
 
 /**
- * Degree of adherence of a dataset to a specific set of user requirements.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * Trustworthiness of a data quality result.
+ * See the {@link Confidence} GeoAPI interface for more details.
+ * The following properties are mandatory in a well-formed metadata according ISO 19157:
  *
- * <div class="preformat">{@code QE_Usability}
- * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
+ * <div class="preformat">{@code DQ_Confidence}
+ * {@code   ├─result…………………………} Value obtained from applying a data quality measure.
+ * {@code   └─derivedElement……} Derived element.</div>
  *
  * <h2>Limitations</h2>
  * <ul>
@@ -38,27 +39,23 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
  *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
  * </ul>
  *
- * @author  Cédric Briançon (Geomatys)
+ * @author  Alexis Gaillard (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
- * @since   0.3
+ * @version 1.3
+ * @since   1.3
  * @module
- *
- * @deprecated Not found in ISO 19115-3:2016 schemas.
  */
-@Deprecated
-@XmlType(name = "QE_Usability_Type", namespace = LegacyNamespaces.GMI)
-@XmlRootElement(name = "QE_Usability", namespace = LegacyNamespaces.GMI)
-public class DefaultUsability extends AbstractElement implements Usability {
+@XmlType(name = "DQ_Confidence_Type")
+@XmlRootElement(name = "DQ_Confidence")
+public class DefaultConfidence extends AbstractMetaquality implements Confidence {
     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = -7316059750787640719L;
-
+    private static final long serialVersionUID = -6402647913250621833L;
     /**
-     * Constructs an initially empty usability.
+     * Constructs an initially empty aggregation derivation.
      */
-    public DefaultUsability() {
+    public DefaultConfidence() {
     }
 
     /**
@@ -68,9 +65,9 @@ public class DefaultUsability extends AbstractElement implements Usability {
      *
      * @param  object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(Usability)
+     * @see #castOrCopy(Confidence)
      */
-    public DefaultUsability(final Usability object) {
+    public DefaultConfidence(final Confidence object) {
         super(object);
     }
 
@@ -81,9 +78,9 @@ public class DefaultUsability extends AbstractElement implements Usability {
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code DefaultUsability}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code DefaultUsability} instance is created using the
-     *       {@linkplain #DefaultUsability(Usability) copy constructor}
+     *       {@code DefaultConfidence}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultConfidence} instance is created using the
+     *       {@linkplain #DefaultConfidence(Confidence) copy constructor}
      *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
@@ -92,10 +89,10 @@ public class DefaultUsability extends AbstractElement implements Usability {
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static DefaultUsability castOrCopy(final Usability object) {
-        if (object == null || object instanceof DefaultUsability) {
-            return (DefaultUsability) object;
+    public static DefaultConfidence castOrCopy(final Confidence object) {
+        if (object == null || object instanceof DefaultConfidence) {
+            return (DefaultConfidence) object;
         }
-        return new DefaultUsability(object);
+        return new DefaultConfidence(object);
     }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConformanceResult.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConformanceResult.java
index 8dce57bca1..4853bded29 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConformanceResult.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConformanceResult.java
@@ -26,15 +26,14 @@ import org.apache.sis.util.iso.Types;
 
 
 /**
- * Information about the outcome of evaluating the obtained value (or set of values) against
- * a specified acceptable conformance quality level.
- * The following properties are mandatory in a well-formed metadata according ISO 19115:
+ * Information about the outcome of evaluating the value(s) against a specified acceptable conformance quality level.
+ * See the {@link ConformanceResult} GeoAPI interface for more details.
+ * The following properties are mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_ConformanceResult}
  * {@code   ├─specification……………} Citation of product specification or user requirement against which data is being evaluated.
  * {@code   │   ├─title………………………} Name by which the cited resource is known.
  * {@code   │   └─date…………………………} Reference date for the cited resource.
- * {@code   ├─explanation…………………} Explanation of the meaning of conformance for this result.
  * {@code   └─pass……………………………………} Indication of the conformance result.</div>
  *
  * <h2>Limitations</h2>
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCoverageResult.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCoverageResult.java
index c5ff4a8eda..ef87d901d4 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCoverageResult.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCoverageResult.java
@@ -16,26 +16,28 @@
  */
 package org.apache.sis.metadata.iso.quality;
 
+import java.util.Collection;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
+import org.opengis.metadata.quality.CoverageResult;
 import org.opengis.metadata.content.CoverageDescription;
+import org.opengis.metadata.content.RangeDimension;
 import org.opengis.metadata.distribution.Format;
-import org.opengis.metadata.quality.CoverageResult;
 import org.opengis.metadata.distribution.DataFile;
 import org.opengis.metadata.spatial.SpatialRepresentation;
 import org.opengis.metadata.spatial.SpatialRepresentationType;
+import org.apache.sis.internal.xml.LegacyNamespaces;
 
 
 /**
  * Result of a data quality measure organising the measured values as a coverage.
- * The following properties are mandatory in a well-formed metadata according ISO 19115:
+ * The following properties are mandatory or conditional in a well-formed metadata according ISO 19157:
  *
- * <div class="preformat">{@code QE_CoverageResult}
+ * <div class="preformat">{@code DQ_CoverageResult}
  * {@code   ├─spatialRepresentationType……………………} Method used to spatially represent the coverage result.
  * {@code   ├─resultSpatialRepresentation………………} Digital representation of data quality measures composing the coverage result.
- * {@code   ├─resultContentDescription………………………} Description of the content of the result coverage, i.e. semantic definition of the data quality measures.
- * {@code   │   └─attributeDescription………………………} Description of the attribute described by the measurement value.
+ * {@code   ├─resultContent……………………………………………………} Description of the content of the result coverage, i.e. semantic definition of the data quality measures.
  * {@code   ├─resultFormat………………………………………………………} Information about the format of the result coverage data.
  * {@code   │   └─formatSpecificationCitation……} Citation/URL of the specification format.
  * {@code   │       ├─title……………………………………………………} Name by which the cited resource is known.
@@ -54,7 +56,7 @@ import org.opengis.metadata.spatial.SpatialRepresentationType;
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
+ * @version 1.3
  * @since   0.3
  * @module
  */
@@ -65,7 +67,7 @@ import org.opengis.metadata.spatial.SpatialRepresentationType;
     "resultFormat",
     "resultFile"
 })
-@XmlRootElement(name = "QE_CoverageResult")
+@XmlRootElement(name = "QE_CoverageResult")     // "DQ_" in abstract model but "QE_" in XML.
 public class DefaultCoverageResult extends AbstractResult implements CoverageResult {
     /**
      * Serial number for inter-operability with different versions.
@@ -84,9 +86,17 @@ public class DefaultCoverageResult extends AbstractResult implements CoverageRes
     private SpatialRepresentation resultSpatialRepresentation;
 
     /**
-     * Provides the description of the content of the result coverage, i.e. semantic definition
-     * of the data quality measures.
+     * Provides the description of the content of the result coverage.
+     */
+    @SuppressWarnings("serial")
+    private Collection<RangeDimension> resultContent;
+
+    /**
+     * Provides the description of the content of the result coverage.
+     *
+     * @deprecated Replaced by {@link #resultContent}.
      */
+    @Deprecated
     @SuppressWarnings("serial")
     private CoverageDescription resultContentDescription;
 
@@ -117,12 +127,14 @@ public class DefaultCoverageResult extends AbstractResult implements CoverageRes
      *
      * @see #castOrCopy(CoverageResult)
      */
+    @SuppressWarnings("deprecation")
     public DefaultCoverageResult(final CoverageResult object) {
         super(object);
         if (object != null) {
             spatialRepresentationType   = object.getSpatialRepresentationType();
             resultSpatialRepresentation = object.getResultSpatialRepresentation();
             resultContentDescription    = object.getResultContentDescription();
+            resultContent               = copyCollection(object.getResultContent(), RangeDimension.class);
             resultFormat                = object.getResultFormat();
             resultFile                  = object.getResultFile();
         }
@@ -156,7 +168,7 @@ public class DefaultCoverageResult extends AbstractResult implements CoverageRes
     /**
      * Returns the method used to spatially represent the coverage result.
      *
-     * @return spatial representation of the coverage result, or {@code null}.
+     * @return spatial representation of the coverage result.
      */
     @Override
     @XmlElement(name = "spatialRepresentationType", required = true)
@@ -177,7 +189,7 @@ public class DefaultCoverageResult extends AbstractResult implements CoverageRes
     /**
      * Returns the digital representation of data quality measures composing the coverage result.
      *
-     * @return digital representation of data quality measures composing the coverage result, or {@code null}.
+     * @return digital representation of data quality measures composing the coverage result.
      */
     @Override
     @XmlElement(name = "resultSpatialRepresentation", required = true)
@@ -195,14 +207,42 @@ public class DefaultCoverageResult extends AbstractResult implements CoverageRes
         resultSpatialRepresentation = newValue;
     }
 
+    /**
+     * Provides the description of the content of the result coverage.
+     * This is the semantic definition of the data quality measures.
+     *
+     * @return description of the content of the result coverage.
+     *
+     * @since 1.3
+     */
+    @Override
+//  @XmlElement(name = "resultContent")     // Pending new ISO 19157 version.
+    public Collection<RangeDimension> getResultContent() {
+        return resultContent = nonNullCollection(resultContent, RangeDimension.class);
+    }
+
+    /**
+     * Sets the description of the content of the result coverage.
+     *
+     * @param  newValues  the new descriptions.
+     *
+     * @since 1.3
+     */
+    public void setResultContent(final Collection<RangeDimension> newValues) {
+        resultContent = writeCollection(newValues, resultContent, RangeDimension.class);
+    }
+
     /**
      * Returns the description of the content of the result coverage, i.e. semantic definition
      * of the data quality measures.
      *
      * @return description of the content of the result coverage, or {@code null}.
+     *
+     * @deprecated Replaced by {@link #getResultContent()}.
      */
     @Override
-    @XmlElement(name = "resultContentDescription", required = true)
+    @Deprecated
+    @XmlElement(name = "resultContentDescription", namespace = LegacyNamespaces.GMI)
     public CoverageDescription getResultContentDescription() {
         return resultContentDescription;
     }
@@ -212,7 +252,10 @@ public class DefaultCoverageResult extends AbstractResult implements CoverageRes
      * of the data quality measures.
      *
      * @param  newValue  the new content description value.
+     *
+     * @deprecated Replaced by {@link #setResultContent(Collection)}.
      */
+    @Deprecated
     public void setResultContentDescription(final CoverageDescription newValue) {
         checkWritePermission(resultContentDescription);
         resultContentDescription = newValue;
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java
index 40ad04e689..6389f6eb7a 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java
@@ -23,9 +23,9 @@ import javax.xml.bind.annotation.XmlRootElement;
 import org.opengis.metadata.lineage.Lineage;
 import org.opengis.metadata.quality.DataQuality;
 import org.opengis.metadata.quality.Element;
+import org.opengis.metadata.quality.StandaloneQualityReportInformation;
 import org.opengis.metadata.maintenance.Scope;
 import org.opengis.metadata.maintenance.ScopeCode;
-import org.apache.sis.metadata.iso.ISOMetadata;
 import org.apache.sis.metadata.iso.maintenance.DefaultScope;
 import org.apache.sis.internal.jaxb.FilterByVersion;
 import org.apache.sis.internal.xml.LegacyNamespaces;
@@ -33,15 +33,12 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
 
 /**
  * Quality information for the data specified by a data quality scope.
- * The following properties are mandatory in a well-formed metadata according ISO 19115:
+ * The following properties are mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_DataQuality}
- * {@code   └─scope………………} The specific data to which the data quality information applies.
- * {@code       └─level……} Hierarchical level of the data specified by the scope.</div>
- *
- * In addition, ISO requires that at least one of {@linkplain #getLineage() lineage}
- * and {@linkplain #getReports() reports} is provided. Those properties are declared
- * {@linkplain org.opengis.annotation.Obligation#CONDITIONAL conditional}.
+ * {@code   ├─scope………………} The specific data to which the data quality information applies.
+ * {@code   │   └─level……} Hierarchical level of the data specified by the scope.
+ * {@code   └─report……………} Quantitative quality information for the data specified by the scope.</div>
  *
  * <h2>Limitations</h2>
  * <ul>
@@ -54,13 +51,15 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
- * @version 1.0
+ * @author  Alexis Gaillard (Geomatys)
+ * @version 1.3
  * @since   0.3
  * @module
  */
 @XmlType(name = "DQ_DataQuality_Type", propOrder = {
     "scope",
     "reports",
+    "standaloneQualityReport",
     "lineage"
 })
 @XmlRootElement(name = "DQ_DataQuality")
@@ -77,21 +76,27 @@ public class DefaultDataQuality extends ISOMetadata implements DataQuality {
     private Scope scope;
 
     /**
-     * Quantitative quality information for the data specified by the scope.
-     * Should be provided only if {@linkplain Scope#getLevel scope level} is
-     * {@linkplain org.opengis.metadata.maintenance.ScopeCode#DATASET dataset}.
+     * Quality information for the data specified by the scope.
      */
     @SuppressWarnings("serial")
     private Collection<Element> reports;
 
     /**
      * Non-quantitative quality information about the lineage of the data specified by the scope.
-     * Should be provided only if {@linkplain Scope#getLevel scope level} is
-     * {@linkplain org.opengis.metadata.maintenance.ScopeCode#DATASET dataset}.
+     *
+     * @deprecated Removed from ISO 19157:2013.
      */
+    @Deprecated
     @SuppressWarnings("serial")
     private Lineage lineage;
 
+    /**
+     * Reference to an external standalone quality report.
+     * Can be used for providing more details than reported as standard metadata.
+     */
+    @SuppressWarnings("serial")
+    private StandaloneQualityReportInformation standaloneQualityReport;
+
     /**
      * Constructs an initially empty data quality.
      */
@@ -133,9 +138,10 @@ public class DefaultDataQuality extends ISOMetadata implements DataQuality {
     public DefaultDataQuality(final DataQuality object) {
         super(object);
         if (object != null) {
-            scope   = object.getScope();
-            reports = copyCollection(object.getReports(), Element.class);
-            lineage = object.getLineage();
+            scope                   = object.getScope();
+            reports                 = copyCollection(object.getReports(), Element.class);
+            standaloneQualityReport = object.getStandaloneQualityReport();
+            lineage                 = object.getLineage();
         }
     }
 
@@ -167,7 +173,7 @@ public class DefaultDataQuality extends ISOMetadata implements DataQuality {
     /**
      * Returns the specific data to which the data quality information applies.
      *
-     * @return the specific data to which the data quality information applies, or {@code null}.
+     * @return the specific data to which the data quality information applies.
      */
     @Override
     @XmlElement(name = "scope", required = true)
@@ -186,9 +192,9 @@ public class DefaultDataQuality extends ISOMetadata implements DataQuality {
     }
 
     /**
-     * Returns the quantitative quality information for the data specified by the scope.
+     * Returns the quality information for the data specified by the scope.
      *
-     * @return quantitative quality information for the data.
+     * @return quality information for the data specified by the scope.
      */
     @Override
     @XmlElement(name = "report", required = true)
@@ -197,7 +203,7 @@ public class DefaultDataQuality extends ISOMetadata implements DataQuality {
     }
 
     /**
-     * Sets the quantitative quality information for the data specified by the scope.
+     * Sets the quality information for the data specified by the scope.
      *
      * @param  newValues  the new reports.
      */
@@ -205,14 +211,41 @@ public class DefaultDataQuality extends ISOMetadata implements DataQuality {
         reports = writeCollection(newValues, reports, Element.class);
     }
 
+    /**
+     * Returns the reference to an external standalone quality report.
+     * Can be used for providing more details than reported as standard metadata.
+     *
+     * @return reference to an external standalone quality report, or {@code null} if none.
+     *
+     * @since 1.3
+     */
+    @Override
+    @XmlElement(name = "standaloneQualityReport")
+    public StandaloneQualityReportInformation getStandaloneQualityReport() {
+        return FilterByVersion.CURRENT_METADATA.accept() ? standaloneQualityReport : null;
+    }
+
+    /**
+     * Sets the quality of the reported information.
+     *
+     * @param  newValue  the new quality information.
+     *
+     * @since 1.3
+     */
+    public void setStandaloneQualityReport(final StandaloneQualityReportInformation newValue) {
+        checkWritePermission(standaloneQualityReport);
+        standaloneQualityReport = newValue;
+    }
+
     /**
      * Returns non-quantitative quality information about the lineage of the data specified by the scope.
      *
      * @return non-quantitative quality information about the lineage of the data specified, or {@code null}.
      *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
+     * @deprecated Removed from ISO 19157:2013.
      */
     @Override
+    @Deprecated
     @XmlElement(name = "lineage", namespace = LegacyNamespaces.GMD)
     public Lineage getLineage() {
         return FilterByVersion.LEGACY_METADATA.accept() ? lineage : null;
@@ -222,7 +255,10 @@ public class DefaultDataQuality extends ISOMetadata implements DataQuality {
      * Sets the non-quantitative quality information about the lineage of the data specified by the scope.
      *
      * @param  newValue  the new lineage.
+     *
+     * @deprecated Removed from ISO 19157:2013.
      */
+    @Deprecated
     public void setLineage(final Lineage newValue) {
         checkWritePermission(lineage);
         lineage = newValue;
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDescription.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDescription.java
new file mode 100644
index 0000000000..5e55eaf6e0
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDescription.java
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.metadata.iso.quality;
+
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import org.opengis.util.InternationalString;
+import org.opengis.metadata.quality.Description;
+import org.opengis.metadata.identification.BrowseGraphic;
+import org.apache.sis.xml.Namespaces;
+
+
+/**
+ * Data quality measure description.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
+ *
+ * <div class="preformat">{@code DQM_Description}
+ * {@code   └─textDescription……………} Text description.</div>
+ *
+ * <h2>Limitations</h2>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+@XmlType(name = "DQM_Description_Type", namespace = Namespaces.DQM, propOrder = {
+    "textDescription",
+    "extendedDescription"
+})
+@XmlRootElement(name = "DQM_Description", namespace = Namespaces.DQM)
+public class DefaultDescription extends ISOMetadata implements Description {
+    /**
+     * Serial number for inter-operability with different versions.
+     */
+    private static final long serialVersionUID = 4878784271547209576L;
+
+    /**
+     * Text description.
+     */
+    @SuppressWarnings("serial")
+    private InternationalString textDescription;
+
+    /**
+     * Illustration.
+     */
+    @SuppressWarnings("serial")
+    private BrowseGraphic extendedDescription;
+
+    /**
+     * Constructs an initially empty description.
+     */
+    public DefaultDescription() {
+    }
+
+    /**
+     * Constructs a new instance initialized with the values from the specified metadata object.
+     * This is a <cite>shallow</cite> copy constructor, since the other metadata contained in the
+     * given object are not recursively copied.
+     *
+     * @param object  the metadata to copy values from, or {@code null} if none.
+     *
+     * @see #castOrCopy(Description)
+     */
+    public DefaultDescription(final Description object) {
+        super(object);
+        if (object != null) {
+            textDescription     = object.getTextDescription();
+            extendedDescription = object.getExtendedDescription();
+        }
+    }
+
+    /**
+     * Returns a SIS metadata implementation with the values of the given arbitrary implementation.
+     * This method performs the first applicable action in the following choices:
+     *
+     * <ul>
+     *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
+     *   <li>Otherwise if the given object is already an instance of
+     *       {@code DefaultDescription}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultDescription} instance is created using the
+     *       {@linkplain #DefaultDescription(Description) copy constructor} and returned.
+     *       Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       metadata contained in the given object are not recursively copied.</li>
+     * </ul>
+     *
+     * @param  object  the object to get as a SIS implementation, or {@code null} if none.
+     * @return a SIS implementation containing the values of the given object (may be the
+     *         given object itself), or {@code null} if the argument was null.
+     */
+    public static DefaultDescription castOrCopy(final Description object) {
+        if (object == null || object instanceof DefaultDescription) {
+            return (DefaultDescription) object;
+        }
+        return new DefaultDescription(object);
+    }
+
+    /**
+     * Returns the text description.
+     *
+     * @return text description.
+     */
+    @Override
+    @XmlElement(name = "textDescription", required = true)
+    public InternationalString getTextDescription() {
+        return textDescription;
+    }
+
+    /**
+     * Sets the text description.
+     *
+     * @param  newValue  the new description text.
+     */
+    public void setTextDescription(final InternationalString newValue)  {
+        checkWritePermission(textDescription);
+        textDescription = newValue;
+    }
+
+    /**
+     * Returns the illustration.
+     *
+     * @return description illustration, or {@code null} if none.
+     */
+    @Override
+    @XmlElement(name = "extendedDescription")
+    public BrowseGraphic getExtendedDescription() {
+        return extendedDescription;
+    }
+
+    /**
+     * Sets the illustration.
+     *
+     * @param  newValue  the new description illustration.
+     */
+    public void setExtendedDescription(final BrowseGraphic newValue)  {
+        checkWritePermission(extendedDescription);
+        extendedDescription = newValue;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultFormatConsistency.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDescriptiveResult.java
similarity index 50%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultFormatConsistency.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDescriptiveResult.java
index 33b0b84fed..d7b7868f33 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultFormatConsistency.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDescriptiveResult.java
@@ -17,16 +17,19 @@
 package org.apache.sis.metadata.iso.quality;
 
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.metadata.quality.FormatConsistency;
+import org.opengis.util.InternationalString;
+import org.opengis.metadata.quality.DescriptiveResult;
 
 
 /**
- * Degree to which data is stored in accordance with the physical structure of the dataset, as described by the scope.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * Data quality descriptive result.
+ * See the {@link DescriptiveResult} GeoAPI interface for more details.
+ * The following properties are mandatory in a well-formed metadata according ISO 19157:
  *
- * <div class="preformat">{@code DQ_FormatConsistency}
- * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
+ * <div class="preformat">{@code DQ_DescriptiveResult}
+ * {@code   └─statement……………} textual expression of the descriptive result.</div>
  *
  * <h2>Limitations</h2>
  * <ul>
@@ -37,24 +40,41 @@ import org.opengis.metadata.quality.FormatConsistency;
  *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
  * </ul>
  *
- * @author  Martin Desruisseaux (IRD, Geomatys)
- * @author  Touraïvane (IRD)
- * @version 1.0
- * @since   0.3
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
  * @module
  */
-@XmlType(name = "DQ_FormatConsistency_Type")
-@XmlRootElement(name = "DQ_FormatConsistency")
-public class DefaultFormatConsistency extends AbstractLogicalConsistency implements FormatConsistency {
+@XmlType(name = "DQ_DescriptiveResult_Type", propOrder = {
+    "statement"
+})
+@XmlRootElement(name = "DQ_DescriptiveResult")
+public class DefaultDescriptiveResult extends AbstractResult implements DescriptiveResult {
     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = -1891952351079148415L;
+    private static final long serialVersionUID = 5786649528259918304L;
 
     /**
-     * Constructs an initially empty formal consistency.
+     * Textual expression of the descriptive result.
      */
-    public DefaultFormatConsistency() {
+    @SuppressWarnings("serial")
+    private InternationalString statement;
+
+    /**
+     * Constructs an initially empty descriptive result.
+     */
+    public DefaultDescriptiveResult() {
+    }
+
+    /**
+     * Creates a conformance result initialized to the given values.
+     *
+     * @param statement  statement against which data is being evaluated, or {@code null}.
+     */
+    public DefaultDescriptiveResult(final InternationalString statement) {
+        this.statement = statement;
     }
 
     /**
@@ -64,10 +84,13 @@ public class DefaultFormatConsistency extends AbstractLogicalConsistency impleme
      *
      * @param  object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(FormatConsistency)
+     * @see #castOrCopy(DescriptiveResult)
      */
-    public DefaultFormatConsistency(final FormatConsistency object) {
+    public DefaultDescriptiveResult(final DescriptiveResult object) {
         super(object);
+        if (object != null) {
+            statement = object.getStatement();
+        }
     }
 
     /**
@@ -77,10 +100,10 @@ public class DefaultFormatConsistency extends AbstractLogicalConsistency impleme
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code DefaultFormatConsistency}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code DefaultFormatConsistency} instance is created using the
-     *       {@linkplain #DefaultFormatConsistency(FormatConsistency) copy constructor}
-     *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       {@code DefaultDescriptiveResult}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultDescriptiveResult} instance is created using the
+     *       {@linkplain #DefaultDescriptiveResult(DescriptiveResult) copy constructor} and returned.
+     *       Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
      *
@@ -88,10 +111,31 @@ public class DefaultFormatConsistency extends AbstractLogicalConsistency impleme
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static DefaultFormatConsistency castOrCopy(final FormatConsistency object) {
-        if (object == null || object instanceof DefaultFormatConsistency) {
-            return (DefaultFormatConsistency) object;
+    public static DefaultDescriptiveResult castOrCopy(final DescriptiveResult object) {
+        if (object == null || object instanceof DefaultDescriptiveResult) {
+            return (DefaultDescriptiveResult) object;
         }
-        return new DefaultFormatConsistency(object);
+        return new DefaultDescriptiveResult(object);
+    }
+
+    /**
+     * Returns the textual expression of the descriptive result.
+     *
+     * @return textual expression of the result.
+     */
+    @Override
+    @XmlElement(name = "statement", required = true)
+    public InternationalString getStatement() {
+        return statement;
+    }
+
+    /**
+     * Sets the textual expression of the descriptive result.
+     *
+     * @param  newValue  the new expression.
+     */
+    public void setStatement(final InternationalString newValue) {
+        checkWritePermission(statement);
+        statement = newValue;
     }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDomainConsistency.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDomainConsistency.java
index 1a92e185a6..aa77d854f1 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDomainConsistency.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDomainConsistency.java
@@ -23,7 +23,8 @@ import org.opengis.metadata.quality.DomainConsistency;
 
 /**
  * Adherence of values to the value domains.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * See the {@link DomainConsistency} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_DomainConsistency}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultEvaluationMethod.java
similarity index 57%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultEvaluationMethod.java
index 5febb30461..dc9013c527 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultEvaluationMethod.java
@@ -25,22 +25,13 @@ import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlSeeAlso;
-import org.opengis.metadata.Identifier;
+import org.opengis.util.InternationalString;
 import org.opengis.metadata.citation.Citation;
-import org.opengis.metadata.quality.Result;
-import org.opengis.metadata.quality.Element;
-import org.opengis.metadata.quality.Usability;
-import org.opengis.metadata.quality.Completeness;
-import org.opengis.metadata.quality.TemporalAccuracy;
-import org.opengis.metadata.quality.ThematicAccuracy;
-import org.opengis.metadata.quality.PositionalAccuracy;
-import org.opengis.metadata.quality.LogicalConsistency;
+import org.opengis.metadata.quality.EvaluationMethod;
 import org.opengis.metadata.quality.EvaluationMethodType;
-import org.opengis.util.InternationalString;
-import org.apache.sis.metadata.iso.ISOMetadata;
+import org.opengis.metadata.quality.DataEvaluation;
+import org.opengis.metadata.quality.AggregationDerivation;
 import org.apache.sis.internal.system.Semaphores;
-import org.apache.sis.internal.jaxb.FilterByVersion;
-import org.apache.sis.internal.xml.LegacyNamespaces;
 import org.apache.sis.util.collection.CheckedContainer;
 import org.apache.sis.util.resources.Errors;
 
@@ -49,11 +40,8 @@ import static org.apache.sis.internal.metadata.ImplementationHelper.valueIfDefin
 
 
 /**
- * Type of test applied to the data specified by a data quality scope.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
- *
- * <div class="preformat">{@code DQ_Element}
- * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
+ * Description of the evaluation method and procedure applied.
+ * See the {@link EvaluationMethod} GeoAPI interface for more details.
  *
  * <h2>Limitations</h2>
  * <ul>
@@ -64,60 +52,33 @@ import static org.apache.sis.internal.metadata.ImplementationHelper.valueIfDefin
  *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
  * </ul>
  *
- * @author  Martin Desruisseaux (IRD, Geomatys)
- * @author  Touraïvane (IRD)
- * @author  Guilhem Legal (Geomatys)
- * @version 1.0
- * @since   0.3
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
  * @module
  */
-@XmlType(name = "AbstractDQ_Element_Type", propOrder = {
-    "namesOfMeasure",
-    "measureIdentification",
-    "measureDescription",
+@XmlType(name = "DQ_EvaluationMethod_Type", propOrder = {
     "evaluationMethodType",
     "evaluationMethodDescription",
     "evaluationProcedure",
-    "dates",
-    "results"
+    "referenceDocuments",
+    "dates"
 })
-@XmlRootElement(name = "AbstractDQ_Element")
+@XmlRootElement(name = "DQ_EvaluationMethod")
 @XmlSeeAlso({
-    AbstractCompleteness.class,
-    AbstractLogicalConsistency.class,
-    AbstractPositionalAccuracy.class,
-    AbstractThematicAccuracy.class,
-    AbstractTemporalAccuracy.class,
-    DefaultUsability.class
+    AbstractDataEvaluation.class,
+    DefaultAggregationDerivation.class
 })
-public class AbstractElement extends ISOMetadata implements Element {
+public class DefaultEvaluationMethod extends ISOMetadata implements EvaluationMethod {
     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = 3963454452767190970L;
-
-    /**
-     * Name of the test applied to the data.
-     */
-    @SuppressWarnings("serial")
-    private Collection<InternationalString> namesOfMeasure;
+    private static final long serialVersionUID = 5196994626251088685L;
 
     /**
-     * Code identifying a registered standard procedure, or {@code null} if none.
+     * Type of method used to evaluate quality of the data.
      */
-    @SuppressWarnings("serial")
-    private Identifier measureIdentification;
-
-    /**
-     * Description of the measure being determined.
-     */
-    @SuppressWarnings("serial")
-    private InternationalString measureDescription;
-
-    /**
-     * Type of method used to evaluate quality of the dataset, or {@code null} if unspecified.
-     */
-    @SuppressWarnings("serial")
     private EvaluationMethodType evaluationMethodType;
 
     /**
@@ -127,15 +88,19 @@ public class AbstractElement extends ISOMetadata implements Element {
     private InternationalString evaluationMethodDescription;
 
     /**
-     * Reference to the procedure information, or {@code null} if none.
+     * Reference to the procedure information.
      */
     @SuppressWarnings("serial")
     private Citation evaluationProcedure;
 
     /**
-     * Start time ({@code date1}) and end time ({@code date2}) on which a data quality measure was applied.
-     *
-     * @todo Needs to be made unmodifiable after transition to {@link State#FINAL}.
+     * Information on documents which are referenced in developing and applying a data quality evaluation method.
+     */
+    @SuppressWarnings("serial")
+    private Collection<Citation> referenceDocuments;
+
+    /**
+     * Date or range of dates on which a data quality measure was applied.
      */
     private Dates dates;
 
@@ -251,9 +216,7 @@ public class AbstractElement extends ISOMetadata implements Element {
                         return;
                     }
                     case 1: {
-                        if (date1 == Long.MIN_VALUE) {
-                            break; // Exception will be thrown below.
-                        }
+                        if (date1 == Long.MIN_VALUE) break;     // Exception will be thrown below.
                         date2 = date;
                         modCount++;
                         return;
@@ -301,27 +264,9 @@ public class AbstractElement extends ISOMetadata implements Element {
     }
 
     /**
-     * Value (or set of values) obtained from applying a data quality measure or the out
-     * come of evaluating the obtained value (or set of values) against a specified
-     * acceptable conformance quality level.
-     */
-    @SuppressWarnings("serial")
-    private Collection<Result> results;
-
-    /**
-     * Constructs an initially empty element.
+     * Constructs an initially empty evaluation method.
      */
-    public AbstractElement() {
-    }
-
-    /**
-     * Creates an element initialized to the given result.
-     *
-     * @param result  the value obtained from applying a data quality measure against a specified
-     *                acceptable conformance quality level.
-     */
-    public AbstractElement(final Result result) {
-        results = singleton(result, Result.class);
+    public DefaultEvaluationMethod() {
     }
 
     /**
@@ -329,20 +274,17 @@ public class AbstractElement extends ISOMetadata implements Element {
      * This is a <cite>shallow</cite> copy constructor, since the other metadata contained in the
      * given object are not recursively copied.
      *
-     * @param object  the metadata to copy values from, or {@code null} if none.
+     * @param  object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(Element)
+     * @see #castOrCopy(EvaluationMethod)
      */
-    public AbstractElement(final Element object) {
+    public DefaultEvaluationMethod(final EvaluationMethod object) {
         super(object);
         if (object != null) {
-            namesOfMeasure              = copyCollection(object.getNamesOfMeasure(), InternationalString.class);
-            measureIdentification       = object.getMeasureIdentification();
-            measureDescription          = object.getMeasureDescription();
             evaluationMethodType        = object.getEvaluationMethodType();
             evaluationMethodDescription = object.getEvaluationMethodDescription();
             evaluationProcedure         = object.getEvaluationProcedure();
-            results                     = copyCollection(object.getResults(), Result.class);
+            referenceDocuments          = copyCollection(object.getReferenceDocuments(), Citation.class);
             writeDates(object.getDates());
         }
     }
@@ -353,16 +295,14 @@ public class AbstractElement extends ISOMetadata implements Element {
      *
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
-     *   <li>Otherwise if the given object is an instance of {@link PositionalAccuracy},
-     *       {@link TemporalAccuracy}, {@link ThematicAccuracy}, {@link LogicalConsistency},
-     *       {@link Completeness} or {@link Usability}, then this method delegates to the
-     *       {@code castOrCopy(…)} method of the corresponding SIS subclass.
+     *   <li>Otherwise if the given object is an instance of {@link DataEvaluation} or {@link AggregationDerivation},
+     *       then this method delegates to the {@code castOrCopy(…)} method of the corresponding SIS subclass.
      *       Note that if the given object implements more than one of the above-cited interfaces,
      *       then the {@code castOrCopy(…)} method to be used is unspecified.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code AbstractElement}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code AbstractElement} instance is created using the
-     *       {@linkplain #AbstractElement(Element) copy constructor}
+     *       {@code DefaultEvaluationMethod}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultEvaluationMethod} instance is created using the
+     *       {@linkplain #DefaultEvaluationMethod(EvaluationMethod) copy constructor}
      *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
@@ -371,116 +311,33 @@ public class AbstractElement extends ISOMetadata implements Element {
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static AbstractElement castOrCopy(final Element object) {
-        if (object instanceof PositionalAccuracy) {
-            return AbstractPositionalAccuracy.castOrCopy((PositionalAccuracy) object);
-        }
-        if (object instanceof TemporalAccuracy) {
-            return AbstractTemporalAccuracy.castOrCopy((TemporalAccuracy) object);
+    public static DefaultEvaluationMethod castOrCopy(final EvaluationMethod object) {
+        if (object instanceof DataEvaluation) {
+            return AbstractDataEvaluation.castOrCopy((DataEvaluation) object);
         }
-        if (object instanceof ThematicAccuracy) {
-            return AbstractThematicAccuracy.castOrCopy((ThematicAccuracy) object);
-        }
-        if (object instanceof LogicalConsistency) {
-            return AbstractLogicalConsistency.castOrCopy((LogicalConsistency) object);
-        }
-        if (object instanceof Completeness) {
-            return AbstractCompleteness.castOrCopy((Completeness) object);
-        }
-        if (object instanceof Usability) {
-            return DefaultUsability.castOrCopy((Usability) object);
+        if (object instanceof AggregationDerivation) {
+            return DefaultAggregationDerivation.castOrCopy((AggregationDerivation) object);
         }
         // Intentionally tested after the sub-interfaces.
-        if (object == null || object instanceof AbstractElement) {
-            return (AbstractElement) object;
+        if (object == null || object instanceof DefaultEvaluationMethod) {
+            return (DefaultEvaluationMethod) object;
         }
-        return new AbstractElement(object);
-    }
-
-    /**
-     * Returns the name of the test applied to the data.
-     *
-     * @return name of the test applied to the data.
-     *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
-     */
-    @Override
-    @XmlElement(name = "nameOfMeasure", namespace = LegacyNamespaces.GMD)
-    public Collection<InternationalString> getNamesOfMeasure() {
-        if (!FilterByVersion.LEGACY_METADATA.accept()) return null;
-        return namesOfMeasure = nonNullCollection(namesOfMeasure, InternationalString.class);
-    }
-
-    /**
-     * Sets the name of the test applied to the data.
-     *
-     * @param  newValues  the new name of measures.
-     */
-    public void setNamesOfMeasure(final Collection<? extends InternationalString> newValues) {
-        namesOfMeasure = writeCollection(newValues, namesOfMeasure, InternationalString.class);
+        return new DefaultEvaluationMethod(object);
     }
 
     /**
-     * Returns the code identifying a registered standard procedure, or {@code null} if none.
-     *
-     * @return code identifying a registered standard procedure, or {@code null}.
+     * Returns the type of method used to evaluate quality of the data.
      *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
+     * @return type of method used to evaluate quality, or {@code null} if none.
      */
     @Override
-    @XmlElement(name = "measureIdentification", namespace = LegacyNamespaces.GMD)
-    public Identifier getMeasureIdentification() {
-        return FilterByVersion.LEGACY_METADATA.accept() ? measureIdentification : null;
-    }
-
-    /**
-     * Sets the code identifying a registered standard procedure.
-     *
-     * @param  newValue  the new measure identification.
-     */
-    public void setMeasureIdentification(final Identifier newValue)  {
-        checkWritePermission(measureIdentification);
-        measureIdentification = newValue;
-    }
-
-    /**
-     * Returns the description of the measure being determined.
-     *
-     * @return description of the measure being determined, or {@code null}.
-     *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
-     */
-    @Override
-    @XmlElement(name = "measureDescription", namespace = LegacyNamespaces.GMD)
-    public InternationalString getMeasureDescription() {
-        return FilterByVersion.LEGACY_METADATA.accept() ? measureDescription : null;
-    }
-
-    /**
-     * Sets the description of the measure being determined.
-     *
-     * @param  newValue  the new measure description.
-     */
-    public void setMeasureDescription(final InternationalString newValue)  {
-        checkWritePermission(measureDescription);
-        measureDescription = newValue;
-    }
-
-    /**
-     * Returns the type of method used to evaluate quality of the dataset.
-     *
-     * @return type of method used to evaluate quality, or {@code null}.
-     *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
-     */
-    @Override
-    @XmlElement(name = "evaluationMethodType", namespace = LegacyNamespaces.GMD)
+    @XmlElement(name = "evaluationMethodType")
     public EvaluationMethodType getEvaluationMethodType() {
-        return FilterByVersion.LEGACY_METADATA.accept() ? evaluationMethodType : null;
+        return evaluationMethodType;
     }
 
     /**
-     * Sets the type of method used to evaluate quality of the dataset.
+     * Sets the type of method used to evaluate quality of the data.
      *
      * @param  newValue  the new evaluation method type.
      */
@@ -492,14 +349,12 @@ public class AbstractElement extends ISOMetadata implements Element {
     /**
      * Returns the description of the evaluation method.
      *
-     * @return description of the evaluation method, or {@code null}.
-     *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
+     * @return description of the evaluation method, or {@code null} if none.
      */
     @Override
-    @XmlElement(name = "evaluationMethodDescription", namespace = LegacyNamespaces.GMD)
+    @XmlElement(name = "evaluationMethodDescription")
     public InternationalString getEvaluationMethodDescription() {
-        return FilterByVersion.LEGACY_METADATA.accept() ? evaluationMethodDescription : null;
+        return evaluationMethodDescription;
     }
 
     /**
@@ -513,16 +368,14 @@ public class AbstractElement extends ISOMetadata implements Element {
     }
 
     /**
-     * Returns the reference to the procedure information, or {@code null} if none.
+     * Returns the reference to the procedure information.
      *
-     * @return reference to the procedure information, or {@code null}.
-     *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
+     * @return reference to the procedure information, or {@code null} if none.
      */
     @Override
-    @XmlElement(name = "evaluationProcedure", namespace = LegacyNamespaces.GMD)
+    @XmlElement(name = "evaluationProcedure")
     public Citation getEvaluationProcedure() {
-        return FilterByVersion.LEGACY_METADATA.accept() ? evaluationProcedure : null;
+        return evaluationProcedure;
     }
 
     /**
@@ -535,6 +388,26 @@ public class AbstractElement extends ISOMetadata implements Element {
         evaluationProcedure = newValue;
     }
 
+    /**
+     * Returns information on documents which are referenced in developing and applying a data quality evaluation method.
+     *
+     * @return documents referenced in data quality evaluation method.
+     */
+    @Override
+    @XmlElement(name = "referenceDoc")
+    public Collection<Citation> getReferenceDocuments() {
+        return referenceDocuments = nonNullCollection(referenceDocuments, Citation.class);
+    }
+
+    /**
+     * Sets the information on documents referenced in data quality evaluation method.
+     *
+     * @param  newValues  the new name of measures.
+     */
+    public void setReferenceDocuments(final Collection<? extends Citation> newValues) {
+        referenceDocuments = writeCollection(newValues, referenceDocuments, Citation.class);
+    }
+
     /**
      * Returns the date or range of dates on which a data quality measure was applied.
      * The collection size is 1 for a single date, or 2 for a range.
@@ -543,7 +416,7 @@ public class AbstractElement extends ISOMetadata implements Element {
      * @return date or range of dates on which a data quality measure was applied.
      */
     @Override
-    @XmlElement(name = "dateTime", namespace = LegacyNamespaces.GMD)
+    @XmlElement(name = "dateTime")
     @SuppressWarnings("ReturnOfCollectionOrArrayField")
     public Collection<Date> getDates() {
         if (Semaphores.query(Semaphores.NULL_COLLECTION)) {
@@ -582,28 +455,4 @@ public class AbstractElement extends ISOMetadata implements Element {
             dates.addAll(newValues);
         }
     }
-
-    /**
-     * Returns the value (or set of values) obtained from applying a data quality measure or
-     * the out come of evaluating the obtained value (or set of values) against a specified
-     * acceptable conformance quality level.
-     *
-     * @return set of values obtained from applying a data quality measure.
-     */
-    @Override
-    @XmlElement(name = "result", required = true)
-    public Collection<Result> getResults() {
-        return results = nonNullCollection(results, Result.class);
-    }
-
-    /**
-     * Sets the value (or set of values) obtained from applying a data quality measure or
-     * the out come of evaluating the obtained value (or set of values) against a specified
-     * acceptable conformance quality level.
-     *
-     * @param  newValues  the new results.
-     */
-    public void setResults(final Collection<? extends Result> newValues) {
-        results = writeCollection(newValues, results, Result.class);
-    }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultFormatConsistency.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultFormatConsistency.java
index 33b0b84fed..7710887235 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultFormatConsistency.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultFormatConsistency.java
@@ -22,8 +22,9 @@ import org.opengis.metadata.quality.FormatConsistency;
 
 
 /**
- * Degree to which data is stored in accordance with the physical structure of the dataset, as described by the scope.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * Degree to which data are stored in accordance with the physical structure of the data set.
+ * See the {@link FormatConsistency} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_FormatConsistency}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultFullInspection.java
similarity index 65%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultFullInspection.java
index 5b97a6dcee..a2c82991a5 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultFullInspection.java
@@ -18,16 +18,12 @@ package org.apache.sis.metadata.iso.quality;
 
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.metadata.quality.Usability;
-import org.apache.sis.internal.xml.LegacyNamespaces;
+import org.opengis.metadata.quality.FullInspection;
 
 
 /**
- * Degree of adherence of a dataset to a specific set of user requirements.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
- *
- * <div class="preformat">{@code QE_Usability}
- * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
+ * Full inspection.
+ * See the {@link FullInspection} GeoAPI interface for more details.
  *
  * <h2>Limitations</h2>
  * <ul>
@@ -38,27 +34,24 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
  *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
  * </ul>
  *
- * @author  Cédric Briançon (Geomatys)
+ * @author  Alexis Gaillard (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
- * @since   0.3
+ * @version 1.3
+ * @since   1.3
  * @module
- *
- * @deprecated Not found in ISO 19115-3:2016 schemas.
  */
-@Deprecated
-@XmlType(name = "QE_Usability_Type", namespace = LegacyNamespaces.GMI)
-@XmlRootElement(name = "QE_Usability", namespace = LegacyNamespaces.GMI)
-public class DefaultUsability extends AbstractElement implements Usability {
-    /**
+@XmlType(name = "DQ_FullInspection_Type")
+@XmlRootElement(name = "DQ_FullInspection")
+public class DefaultFullInspection extends AbstractDataEvaluation implements FullInspection {
+     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = -7316059750787640719L;
+    private static final long serialVersionUID = 4610611512901660745L;
 
     /**
-     * Constructs an initially empty usability.
+     * Constructs an initially empty Full Inspection.
      */
-    public DefaultUsability() {
+    public DefaultFullInspection() {
     }
 
     /**
@@ -68,9 +61,9 @@ public class DefaultUsability extends AbstractElement implements Usability {
      *
      * @param  object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(Usability)
+     * @see #castOrCopy(FullInspection)
      */
-    public DefaultUsability(final Usability object) {
+    public DefaultFullInspection(final FullInspection object) {
         super(object);
     }
 
@@ -81,9 +74,9 @@ public class DefaultUsability extends AbstractElement implements Usability {
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code DefaultUsability}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code DefaultUsability} instance is created using the
-     *       {@linkplain #DefaultUsability(Usability) copy constructor}
+     *       {@code DefaultFullInspection}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultFullInspection} instance is created using the
+     *       {@linkplain #DefaultFullInspection(FullInspection) copy constructor}
      *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
@@ -92,10 +85,10 @@ public class DefaultUsability extends AbstractElement implements Usability {
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static DefaultUsability castOrCopy(final Usability object) {
-        if (object == null || object instanceof DefaultUsability) {
-            return (DefaultUsability) object;
+    public static DefaultFullInspection castOrCopy(final FullInspection object) {
+        if (object == null || object instanceof DefaultFullInspection) {
+            return (DefaultFullInspection) object;
         }
-        return new DefaultUsability(object);
+        return new DefaultFullInspection(object);
     }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultGriddedDataPositionalAccuracy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultGriddedDataPositionalAccuracy.java
index 732ca7860a..38d49c7ec6 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultGriddedDataPositionalAccuracy.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultGriddedDataPositionalAccuracy.java
@@ -23,7 +23,8 @@ import org.opengis.metadata.quality.GriddedDataPositionalAccuracy;
 
 /**
  * Closeness of gridded data position values to values accepted as or being true.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * See the {@link GriddedDataPositionalAccuracy} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_GriddedDataPositionalAccuracy}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultHomogeneity.java
similarity index 65%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultHomogeneity.java
index 5b97a6dcee..79b30a6fd3 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultHomogeneity.java
@@ -18,16 +18,17 @@ package org.apache.sis.metadata.iso.quality;
 
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.metadata.quality.Usability;
-import org.apache.sis.internal.xml.LegacyNamespaces;
+import org.opengis.metadata.quality.Homogeneity;
 
 
 /**
- * Degree of adherence of a dataset to a specific set of user requirements.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * Expected or tested uniformity of the results obtained for a data quality evaluation.
+ * See the {@link Homogeneity} GeoAPI interface for more details.
+ * The following properties are mandatory in a well-formed metadata according ISO 19157:
  *
- * <div class="preformat">{@code QE_Usability}
- * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
+ * <div class="preformat">{@code DQ_Homogeneity}
+ * {@code   ├─result…………………………} Value obtained from applying a data quality measure.
+ * {@code   └─derivedElement……} Derived element.</div>
  *
  * <h2>Limitations</h2>
  * <ul>
@@ -38,27 +39,23 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
  *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
  * </ul>
  *
- * @author  Cédric Briançon (Geomatys)
+ * @author  Alexis Gaillard (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
- * @since   0.3
+ * @version 1.3
+ * @since   1.3
  * @module
- *
- * @deprecated Not found in ISO 19115-3:2016 schemas.
  */
-@Deprecated
-@XmlType(name = "QE_Usability_Type", namespace = LegacyNamespaces.GMI)
-@XmlRootElement(name = "QE_Usability", namespace = LegacyNamespaces.GMI)
-public class DefaultUsability extends AbstractElement implements Usability {
+@XmlType(name = "DQ_Homogeneity_Type")
+@XmlRootElement(name = "DQ_Homogeneity")
+public class DefaultHomogeneity extends AbstractMetaquality implements Homogeneity {
     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = -7316059750787640719L;
-
+    private static final long serialVersionUID = -8440822895642971849L;
     /**
-     * Constructs an initially empty usability.
+     * Constructs an initially empty aggregation derivation.
      */
-    public DefaultUsability() {
+    public DefaultHomogeneity() {
     }
 
     /**
@@ -68,9 +65,9 @@ public class DefaultUsability extends AbstractElement implements Usability {
      *
      * @param  object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(Usability)
+     * @see #castOrCopy(Homogeneity)
      */
-    public DefaultUsability(final Usability object) {
+    public DefaultHomogeneity(final Homogeneity object) {
         super(object);
     }
 
@@ -81,9 +78,9 @@ public class DefaultUsability extends AbstractElement implements Usability {
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code DefaultUsability}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code DefaultUsability} instance is created using the
-     *       {@linkplain #DefaultUsability(Usability) copy constructor}
+     *       {@code DefaultHomogeneity}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultHomogeneity} instance is created using the
+     *       {@linkplain #DefaultHomogeneity(Homogeneity) copy constructor}
      *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
@@ -92,10 +89,10 @@ public class DefaultUsability extends AbstractElement implements Usability {
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static DefaultUsability castOrCopy(final Usability object) {
-        if (object == null || object instanceof DefaultUsability) {
-            return (DefaultUsability) object;
+    public static DefaultHomogeneity castOrCopy(final Homogeneity object) {
+        if (object == null || object instanceof DefaultHomogeneity) {
+            return (DefaultHomogeneity) object;
         }
-        return new DefaultUsability(object);
+        return new DefaultHomogeneity(object);
     }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultIndirectEvaluation.java
similarity index 50%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultIndirectEvaluation.java
index 5b97a6dcee..05fa85596b 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultIndirectEvaluation.java
@@ -17,17 +17,19 @@
 package org.apache.sis.metadata.iso.quality;
 
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.metadata.quality.Usability;
-import org.apache.sis.internal.xml.LegacyNamespaces;
+import org.opengis.util.InternationalString;
+import org.opengis.metadata.quality.IndirectEvaluation;
 
 
 /**
- * Degree of adherence of a dataset to a specific set of user requirements.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * Indirect evaluation.
+ * See the {@link IndirectEvaluation} GeoAPI interface for more details.
+ * The following properties are mandatory in a well-formed metadata according ISO 19157:
  *
- * <div class="preformat">{@code QE_Usability}
- * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
+ * <div class="preformat">{@code DQ_IndirectEvaluation}
+ * {@code   └─deductiveSource……………} Information on which data are used as sources in deductive evaluation method.</div>
  *
  * <h2>Limitations</h2>
  * <ul>
@@ -38,27 +40,41 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
  *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
  * </ul>
  *
- * @author  Cédric Briançon (Geomatys)
+ * @author  Alexis Gaillard (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
- * @since   0.3
+ * @version 1.3
+ * @since   1.3
  * @module
- *
- * @deprecated Not found in ISO 19115-3:2016 schemas.
  */
-@Deprecated
-@XmlType(name = "QE_Usability_Type", namespace = LegacyNamespaces.GMI)
-@XmlRootElement(name = "QE_Usability", namespace = LegacyNamespaces.GMI)
-public class DefaultUsability extends AbstractElement implements Usability {
+@XmlType(name = "DQ_IndirectEvaluation_Type", propOrder = {
+    "deductiveSource"
+})
+@XmlRootElement(name = "DQ_IndirectEvaluation")
+public class DefaultIndirectEvaluation extends AbstractDataEvaluation implements IndirectEvaluation {
     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = -7316059750787640719L;
+    private static final long serialVersionUID = 5634950981839012526L;
+
+    /**
+     * Information on which data are used as sources in deductive evaluation method.
+     */
+    @SuppressWarnings("serial")
+    private InternationalString deductiveSource;
+
+    /**
+     * Constructs an initially empty descriptive result.
+     */
+    public DefaultIndirectEvaluation() {
+    }
 
     /**
-     * Constructs an initially empty usability.
+     * Creates a conformance result initialized to the given values.
+     *
+     * @param  source  information on which data are used as sources, or {@code null}.
      */
-    public DefaultUsability() {
+    public DefaultIndirectEvaluation(final InternationalString source) {
+        deductiveSource = source;
     }
 
     /**
@@ -68,10 +84,13 @@ public class DefaultUsability extends AbstractElement implements Usability {
      *
      * @param  object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(Usability)
+     * @see #castOrCopy(IndirectEvaluation)
      */
-    public DefaultUsability(final Usability object) {
+    public DefaultIndirectEvaluation(final IndirectEvaluation object) {
         super(object);
+        if (object != null) {
+            deductiveSource = object.getDeductiveSource();
+        }
     }
 
     /**
@@ -81,9 +100,9 @@ public class DefaultUsability extends AbstractElement implements Usability {
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code DefaultUsability}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code DefaultUsability} instance is created using the
-     *       {@linkplain #DefaultUsability(Usability) copy constructor}
+     *       {@code DefaultIndirectEvaluation}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultIndirectEvaluation} instance is created using the
+     *       {@linkplain #DefaultIndirectEvaluation(IndirectEvaluation) copy constructor}
      *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
@@ -92,10 +111,31 @@ public class DefaultUsability extends AbstractElement implements Usability {
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static DefaultUsability castOrCopy(final Usability object) {
-        if (object == null || object instanceof DefaultUsability) {
-            return (DefaultUsability) object;
+    public static DefaultIndirectEvaluation castOrCopy(final IndirectEvaluation object) {
+        if (object == null || object instanceof DefaultIndirectEvaluation) {
+            return (DefaultIndirectEvaluation) object;
         }
-        return new DefaultUsability(object);
+        return new DefaultIndirectEvaluation(object);
+    }
+
+    /**
+     * Returns the information on which data are used as sources in deductive evaluation method.
+     *
+     * @return information on which data are used.
+     */
+    @Override
+    @XmlElement(name = "deductiveSource", required = true)
+    public InternationalString getDeductiveSource() {
+        return deductiveSource;
+    }
+
+    /**
+     * Sets the information on which data are used as sources in deductive evaluation method.
+     *
+     * @param  newValue  the new information.
+     */
+    public void setDeductiveSource(final InternationalString newValue) {
+        checkWritePermission(deductiveSource);
+        deductiveSource = newValue;
     }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultMeasure.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultMeasure.java
new file mode 100644
index 0000000000..374afc1e82
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultMeasure.java
@@ -0,0 +1,467 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.metadata.iso.quality;
+
+import java.util.Collection;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import org.opengis.util.TypeName;
+import org.opengis.util.InternationalString;
+import org.opengis.metadata.Identifier;
+import org.opengis.metadata.quality.Measure;
+import org.opengis.metadata.quality.BasicMeasure;
+import org.opengis.metadata.quality.Description;
+import org.opengis.metadata.quality.Parameter;
+import org.opengis.metadata.quality.SourceReference;
+import org.opengis.metadata.quality.ValueStructure;
+import org.apache.sis.xml.Namespaces;
+
+
+/**
+ * Data quality measure.
+ * See the {@link Measure} GeoAPI interface for more details.
+ * The following properties are mandatory in a well-formed metadata according ISO 19157:
+ *
+ * <div class="preformat">{@code DQM_Measure}
+ * {@code   ├─measureIdentifier……} Value uniquely identifying the measure within a namespace.
+ * {@code   ├─name………………………………………} Name of the data quality measure applied to the data.
+ * {@code   ├─elementName……………………} Name of the data quality element for which quality is reported.
+ * {@code   ├─definition………………………} Definition of the fundamental concept for the data quality measure.
+ * {@code   └─valueType…………………………} Value type for reporting a data quality result (shall be one of the data types defined in ISO/19103:2005).</div>
+ *
+ * <h2>Limitations</h2>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+@XmlType(name = "DQM_Measure_Type", namespace = Namespaces.DQM, propOrder = {
+    "measureIdentifier",
+    "name",
+    "aliases",
+    "elementNames",
+    "definition",
+    "description",
+    "valueType",
+    "valueStructure",
+    "examples",
+    "basicMeasure",
+    "sourceReferences",
+    "parameters"
+})
+@XmlRootElement(name = "DQM_Measure", namespace = Namespaces.DQM)
+public class DefaultMeasure extends ISOMetadata implements Measure {
+    /**
+     * Serial number for inter-operability with different versions.
+     */
+    private static final long serialVersionUID = -2004468907779670827L;
+
+    /**
+     * Value uniquely identifying the measure within a namespace.
+     */
+    @SuppressWarnings("serial")
+    private Identifier measureIdentifier;
+
+    /**
+     * Name of the data quality measure applied to the data.
+     */
+    @SuppressWarnings("serial")
+    private InternationalString name;
+
+    /**
+     * Another recognized name, an abbreviation or a short name for the same data quality measure.
+     */
+    @SuppressWarnings("serial")
+    private Collection<InternationalString> aliases;
+
+    /**
+     * Name of the data quality element for which quality is reported.
+     */
+    @SuppressWarnings("serial")
+    private Collection<TypeName> elementNames;
+
+    /**
+     * Definition of the fundamental concept for the data quality measure.
+     */
+    @SuppressWarnings("serial")
+    private BasicMeasure basicMeasure;
+
+    /**
+     * Definition of the fundamental concept for the data quality measure.
+     */
+    @SuppressWarnings("serial")
+    private InternationalString definition;
+
+    /**
+     * Description of the data quality measure.
+     * Includes methods of calculation, with all formulae and/or illustrations
+     * needed to establish the result of applying the measure.
+     */
+    @SuppressWarnings("serial")
+    private Description description;
+
+    /**
+     * Reference to the source of an item that has been adopted from an external source.
+     */
+    @SuppressWarnings("serial")
+    private Collection<SourceReference> sourceReferences;
+
+    /**
+     * Value type for reporting a data quality result.
+     */
+    @SuppressWarnings("serial")
+    private TypeName valueType;
+
+    /**
+     * Structure for reporting a complex data quality result.
+     */
+    private ValueStructure valueStructure;
+
+    /**
+     * Auxiliary variable used by the data quality measure, including its name, definition and optionally its description.
+     */
+    @SuppressWarnings("serial")
+    private Collection<Parameter> parameters;
+
+    /**
+     * Illustration of the use of a data quality measure.
+     */
+    @SuppressWarnings("serial")
+    private Collection<Description> examples;
+
+    /**
+     * Constructs an initially empty element.
+     */
+    public DefaultMeasure() {
+    }
+
+    /**
+     * Constructs a new instance initialized with the values from the specified metadata object.
+     * This is a <cite>shallow</cite> copy constructor, since the other metadata contained in the
+     * given object are not recursively copied.
+     *
+     * @param object  the metadata to copy values from, or {@code null} if none.
+     *
+     * @see #castOrCopy(Measure)
+     */
+    @SuppressWarnings("unchecked")
+    public DefaultMeasure(final Measure object) {
+        super(object);
+        if (object != null) {
+            measureIdentifier = object.getMeasureIdentifier();
+            name              = object.getName();
+            aliases           = copyCollection(object.getAliases(), InternationalString.class);
+            elementNames      = copyCollection(object.getElementNames(), TypeName.class);
+            definition        = object.getDefinition();
+            description       = object.getDescription();
+            valueType         = object.getValueType();
+            valueStructure    = object.getValueStructure();
+            examples          = copyCollection(object.getExamples(), Description.class);
+            basicMeasure      = object.getBasicMeasure();
+            sourceReferences  = copyCollection(object.getSourceReferences(), SourceReference.class);
+            parameters        = copyCollection(object.getParameters(), Parameter.class);
+        }
+    }
+
+    /**
+     * Returns a SIS metadata implementation with the values of the given arbitrary implementation.
+     * This method performs the first applicable action in the following choices:
+     *
+     * <ul>
+     *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
+     *   <li>Otherwise if the given object is already an instance of
+     *       {@code DefaultMeasure}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultMeasure} instance is created using the
+     *       {@linkplain #DefaultMeasure(Measure) copy constructor} and returned.
+     *       Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       metadata contained in the given object are not recursively copied.</li>
+     * </ul>
+     *
+     * @param  object  the object to get as a SIS implementation, or {@code null} if none.
+     * @return a SIS implementation containing the values of the given object (may be the
+     *         given object itself), or {@code null} if the argument was null.
+     */
+    public static DefaultMeasure castOrCopy(final Measure object) {
+        if (object instanceof DefaultMeasure) {
+            return (DefaultMeasure) object;
+        }
+        return new DefaultMeasure(object);
+    }
+
+    /**
+     * Returns the value uniquely identifying the measure within a namespace.
+     *
+     * @return value uniquely identifying the measure within a namespace.
+     */
+    @Override
+    @XmlElement(name = "measureIdentifier", required = true)
+    public Identifier getMeasureIdentifier() {
+        return measureIdentifier;
+    }
+
+    /**
+     * Sets the value uniquely identifying the measure within a namespace.
+     *
+     * @param  newValue  the new measure identification.
+     */
+    public void setMeasureIdentifier(final Identifier newValue)  {
+        checkWritePermission(measureIdentifier);
+        measureIdentifier = newValue;
+    }
+
+    /**
+     * Returns the name of the data quality measure applied to the data.
+     *
+     * @return name of the data quality measure applied to the data.
+     */
+    @Override
+    @XmlElement(name = "name", required = true)
+    public InternationalString getName() {
+        return name;
+    }
+
+    /**
+     * Sets the name of the data quality measure applied to the data.
+     *
+     * @param  newValue  the new quality measure name.
+     */
+    public void setName(final InternationalString newValue)  {
+        checkWritePermission(name);
+        name = newValue;
+    }
+
+    /**
+     * Returns other recognized names, abbreviations or short names for the same data quality measure.
+     * It may be a different commonly used name, or an abbreviation, or a short name.
+     *
+     * @return others recognized names, abbreviations or short names.
+     */
+    @Override
+    @XmlElement(name = "alias")
+    public Collection<InternationalString> getAliases() {
+        return aliases = nonNullCollection(aliases, InternationalString.class);
+    }
+
+    /**
+     * Sets other recognized names or abbreviations for the same data quality measure.
+     *
+     * @param  newValues  the new measure aliases.
+     */
+    public void setAliases(final Collection<? extends InternationalString> newValues)  {
+        aliases = writeCollection(newValues, aliases, InternationalString.class);
+    }
+
+    /**
+     * Returns the names of the data quality element to which a measure applies.
+     *
+     * @return names of the data quality element for which quality is reported.
+     */
+    @Override
+    @XmlElement(name = "elementName", required = true)
+    public Collection<TypeName> getElementNames() {
+        return elementNames = nonNullCollection(elementNames, TypeName.class);
+    }
+
+    /**
+     * Sets the name of the data quality element for which quality is reported.
+     *
+     * @param  newValues  the new measure element names.
+     */
+    public void setElementNames(final Collection<? extends TypeName> newValues)  {
+        elementNames = writeCollection(newValues, elementNames, TypeName.class);
+    }
+
+    /**
+     * Returns predefined basic measure on which this measure is based.
+     *
+     * @return predefined basic measure on which this measure is based, or {@code null} if none.
+     */
+    @Override
+    @XmlElement(name = "basicMeasure")
+    public BasicMeasure getBasicMeasure() {
+        return basicMeasure;
+    }
+
+    /**
+     * Sets the predefined basic measure on which this measure is based.
+     *
+     * @param  newValue  the new basic measure.
+     */
+    public void setBasicMeasure(final BasicMeasure newValue)  {
+        checkWritePermission(basicMeasure);
+        basicMeasure = newValue;
+    }
+
+    /**
+     * Returns the definition of the fundamental concept for the data quality measure.
+     * If the measure is derived from a {@linkplain #getBasicMeasure() basic measure},
+     * the definition is based on the basic measure definition and specialized for this measure.
+     *
+     * @return definition of the fundamental concept for the data quality measure.
+     */
+    @Override
+    @XmlElement(name = "definition", required = true)
+    public InternationalString getDefinition() {
+        return definition;
+    }
+
+    /**
+     * Sets the definition of the fundamental concept for the data quality measure.
+     *
+     * @param  newValue  the new measure definition.
+     */
+    public void setDefinition(final InternationalString newValue)  {
+        checkWritePermission(definition);
+        definition = newValue;
+    }
+
+    /**
+     * Description of the data quality measure.
+     * Includes methods of calculation, with all formulae and/or illustrations
+     * needed to establish the result of applying the measure.
+     *
+     * @return description of data quality measure, or {@code null} if none.
+     */
+    @Override
+    @XmlElement(name = "description")
+    public Description getDescription() {
+       return description;
+    }
+
+    /**
+     * Sets the description of the data quality measure.
+     *
+     * @param  newValue  the new measure description.
+     */
+    public void setDescription(final Description newValue)  {
+        checkWritePermission(description);
+        description = newValue;
+    }
+
+    /**
+     * Returns references to the source of an item that has been adopted from an external source.
+     *
+     * @return references to the source.
+     */
+    @Override
+    @XmlElement(name = "sourceReference")
+    public Collection<SourceReference> getSourceReferences() {
+        return sourceReferences = nonNullCollection(sourceReferences, SourceReference.class);
+    }
+
+    /**
+     * Sets the reference to the source of an item that has been adopted from an external source.
+     *
+     * @param  newValues  the new source references.
+     */
+    public void setSourceReferences(final Collection<? extends SourceReference> newValues) {
+        sourceReferences = writeCollection(newValues, sourceReferences, SourceReference.class);
+    }
+
+    /**
+     * Returns the value type for reporting a data quality result.
+     *
+     * @return value type for reporting a data quality result.
+     */
+    @Override
+    @XmlElement(name = "valueType", required = true)
+    public TypeName getValueType() {
+        return valueType;
+    }
+
+    /**
+     * Sets the value type for reporting a data quality result.
+     *
+     * @param  newValue  the new measure value type.
+     */
+    public void setValueType(final TypeName newValue)  {
+        checkWritePermission(valueType);
+        valueType = newValue;
+    }
+
+    /**
+     * Returns the structure for reporting a complex data quality result.
+     *
+     * @return structure for reporting a complex data quality result, or {@code null} if none.
+     */
+    @Override
+    @XmlElement(name = "valueStructure")
+    public ValueStructure getValueStructure() {
+        return valueStructure;
+    }
+
+    /**
+     * Sets the structure for reporting a complex data quality result.
+     *
+     * @param  newValue  the new measure value structure.
+     */
+    public void setValueStructure(final ValueStructure newValue)  {
+        checkWritePermission(valueStructure);
+        valueStructure = newValue;
+    }
+
+    /**
+     * Returns auxiliary variable(s) used by the data quality measure.
+     * It shall include its name, definition and value type.
+     *
+     * @return auxiliary variable(s) used by data quality measure.
+     */
+    @Override
+    @XmlElement(name = "parameter")
+    public Collection<Parameter> getParameters() {
+        return parameters = nonNullCollection(parameters, Parameter.class);
+    }
+
+    /**
+     * Sets the auxiliary variable used by the data quality measure.
+     *
+     * @param  newValues  the new measure parameters.
+     */
+    public void setParameters(final Collection<? extends Parameter> newValues) {
+        parameters = writeCollection(newValues, parameters, Parameter.class);
+    }
+
+    /**
+     * Returns illustrations of the use of a data quality measure.
+     *
+     * @return examples of applying the measure or the result obtained for the measure.
+     */
+    @Override
+    @XmlElement(name = "example")
+    public Collection<Description> getExamples() {
+        return examples = nonNullCollection(examples, Description.class);
+    }
+
+    /**
+     * Sets the illustrations of the use of a data quality measure.
+     *
+     * @param  newValues  the new examples.
+     */
+    public void setExamples(final Collection<? extends Description> newValues) {
+        examples = writeCollection(newValues, examples, Description.class);
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultMeasureReference.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultMeasureReference.java
new file mode 100644
index 0000000000..60283f4a61
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultMeasureReference.java
@@ -0,0 +1,201 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.metadata.iso.quality;
+
+
+import java.util.Collection;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import org.opengis.util.InternationalString;
+import org.opengis.metadata.Identifier;
+import org.opengis.metadata.quality.Element;
+import org.opengis.metadata.quality.MeasureReference;
+import org.apache.sis.internal.util.CollectionsExt;
+
+
+/**
+ * Reference to the measure used.
+ * See the {@link MeasureReference} GeoAPI interface for more details.
+ *
+ * <h2>Limitations</h2>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+@XmlType(name = "DQ_MeasureReference_Type", propOrder = {
+    "measureIdentification",
+    "namesOfMeasure",
+    "measureDescription"
+})
+@XmlRootElement(name = "DQ_MeasureReference")
+public class DefaultMeasureReference extends ISOMetadata implements MeasureReference {
+    /**
+     * Serial number for inter-operability with different versions.
+     */
+    private static final long serialVersionUID = -1841855681786546466L;
+
+    /**
+     * Value uniquely identifying the measure within a namespace.
+     */
+    @SuppressWarnings("serial")
+    private Identifier measureIdentification;
+
+    /**
+     * Name of the test applied to the data.
+     */
+    @SuppressWarnings("serial")
+    private Collection<InternationalString> namesOfMeasure;
+
+    /**
+     * Description of the measure.
+     */
+    @SuppressWarnings("serial")
+    private InternationalString measureDescription;
+
+    /**
+     * Constructs an initially empty measure reference.
+     */
+    public DefaultMeasureReference() {
+    }
+
+    /**
+     * Constructs a new instance initialized with the values from the specified metadata object.
+     * This is a <cite>shallow</cite> copy constructor, since the other metadata contained in the
+     * given object are not recursively copied.
+     *
+     * @param  object  the metadata to copy values from, or {@code null} if none.
+     *
+     * @see #castOrCopy(MeasureReference)
+     */
+    public DefaultMeasureReference(final MeasureReference object) {
+        super(object);
+        if (object != null) {
+            measureIdentification = object.getMeasureIdentification();
+            measureDescription    = object.getMeasureDescription();
+            namesOfMeasure        = copyCollection(object.getNamesOfMeasure(), InternationalString.class);
+        }
+    }
+
+    /**
+     * Returns a SIS metadata implementation with the values of the given arbitrary implementation.
+     * This method performs the first applicable action in the following choices:
+     *
+     * <ul>
+     *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
+     *   <li>Otherwise if the given object is already an instance of
+     *       {@code DefaultMeasureReference}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultMeasureReference} instance is created using the
+     *       {@linkplain #DefaultMeasureReference(MeasureReference) copy constructor}
+     *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       metadata contained in the given object are not recursively copied.</li>
+     * </ul>
+     *
+     * @param  object  the object to get as a SIS implementation, or {@code null} if none.
+     * @return a SIS implementation containing the values of the given object (may be the
+     *         given object itself), or {@code null} if the argument was null.
+     */
+    public static DefaultMeasureReference castOrCopy(final MeasureReference object) {
+        if (object == null || object instanceof DefaultMeasureReference) {
+            return (DefaultMeasureReference) object;
+        }
+        return new DefaultMeasureReference(object);
+    }
+
+    /**
+     * Initializes a measure reference from the deprecated properties of the given element.
+     * This is used for transition from legacy ISO 19115 to newer ISO 19157 model.
+     */
+    @SuppressWarnings("deprecation")
+    final boolean setLegacy(final Element element) {
+        return (null != (measureIdentification = element.getMeasureIdentification()))
+             | (null != (namesOfMeasure        = copyCollection(element.getNamesOfMeasure(), InternationalString.class)))
+             | (null != (measureDescription    = CollectionsExt.first(element.getNamesOfMeasure())));
+    }
+
+    /**
+     * Returns a value uniquely identifying the measure within a namespace.
+     *
+     * @return code identifying a registered measure, or {@code null} if none.
+     */
+    @Override
+    @XmlElement(name = "measureIdentification")
+    public Identifier getMeasureIdentification() {
+        return measureIdentification;
+    }
+
+    /**
+     * Sets the identifier of the measure.
+     *
+     * @param  newValue  the new measure identification.
+     */
+    public void setMeasureIdentification(final Identifier newValue)  {
+        checkWritePermission(measureIdentification);
+        measureIdentification = newValue;
+    }
+
+    /**
+     * Returns the names of the test applied to the data.
+     *
+     * @return names of the test applied to the data.
+     */
+    @Override
+    @XmlElement(name = "nameOfMeasure")
+    public Collection<InternationalString> getNamesOfMeasure() {
+        return namesOfMeasure = nonNullCollection(namesOfMeasure, InternationalString.class);
+    }
+
+    /**
+     * Sets the names of the test applied to the data.
+     *
+     * @param  newValues  the new name of measures.
+     */
+    public void setNamesOfMeasure(final Collection<? extends InternationalString> newValues) {
+        namesOfMeasure = writeCollection(newValues, namesOfMeasure, InternationalString.class);
+    }
+
+    /**
+     * Returns the description of the measure.
+     *
+     * @return description of the measure, or {@code null}.
+     */
+    @Override
+    @XmlElement(name = "measureDescription")
+    public InternationalString getMeasureDescription() {
+        return measureDescription;
+    }
+
+    /**
+     * Sets the description of the measure.
+     *
+     * @param  newValue  the new measure description.
+     */
+    public void setMeasureDescription(final InternationalString newValue)  {
+        checkWritePermission(measureDescription);
+        measureDescription = newValue;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeAccuracy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeAccuracy.java
index 98d462774e..b36105a72b 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeAccuracy.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeAccuracy.java
@@ -24,28 +24,18 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
 
 /**
  * Accuracy of non-quantitative attributes.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
- *
- * <div class="preformat">{@code DQ_NonQuantitativeAttributeAccuracy}
- * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
- *
- * <h2>Limitations</h2>
- * <ul>
- *   <li>Instances of this class are not synchronized for multi-threading.
- *       Synchronization, if needed, is caller's responsibility.</li>
- *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
- *       Serialization support is appropriate for short term storage or RMI between applications running the
- *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
- * </ul>
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
- * @version 1.0
+ * @version 1.3
  * @since   0.3
  * @module
+ *
+ * @deprecated Renamed {@link DefaultNonQuantitativeAttributeCorrectness} for following a renaming in ISO 19157:2013.
  */
-@XmlType(name = "DQ_NonQuantitativeAttributeAccuracy_Type", namespace = LegacyNamespaces.GMD)     // TODO: renamed NonQuantitativeAttributeCorrectness
+@Deprecated
+@XmlType(name = "DQ_NonQuantitativeAttributeAccuracy_Type", namespace = LegacyNamespaces.GMD)
 @XmlRootElement(name = "DQ_NonQuantitativeAttributeAccuracy", namespace = LegacyNamespaces.GMD)
-public class DefaultNonQuantitativeAttributeAccuracy extends AbstractThematicAccuracy
+public class DefaultNonQuantitativeAttributeAccuracy extends DefaultNonQuantitativeAttributeCorrectness
         implements NonQuantitativeAttributeAccuracy
 {
     /**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeAccuracy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeCorrectness.java
similarity index 62%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeAccuracy.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeCorrectness.java
index 98d462774e..c5f707fa2f 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeAccuracy.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeCorrectness.java
@@ -17,16 +17,18 @@
 package org.apache.sis.metadata.iso.quality;
 
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlRootElement;
 import org.opengis.metadata.quality.NonQuantitativeAttributeAccuracy;
-import org.apache.sis.internal.xml.LegacyNamespaces;
+import org.opengis.metadata.quality.NonQuantitativeAttributeCorrectness;
 
 
 /**
- * Accuracy of non-quantitative attributes.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * Correctness of non-quantitative attributes.
+ * See the {@link NonQuantitativeAttributeCorrectness} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
- * <div class="preformat">{@code DQ_NonQuantitativeAttributeAccuracy}
+ * <div class="preformat">{@code DQ_CompletenessOmission}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
  *
  * <h2>Limitations</h2>
@@ -38,25 +40,29 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
  *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
  * </ul>
  *
- * @author  Martin Desruisseaux (IRD, Geomatys)
- * @version 1.0
- * @since   0.3
+ * @author  Martin Desruisseaux (Geomatys)
+ * @author  Alexis Gaillard (Geomatys)
+ * @version 1.3
+ * @since   1.3
  * @module
  */
-@XmlType(name = "DQ_NonQuantitativeAttributeAccuracy_Type", namespace = LegacyNamespaces.GMD)     // TODO: renamed NonQuantitativeAttributeCorrectness
-@XmlRootElement(name = "DQ_NonQuantitativeAttributeAccuracy", namespace = LegacyNamespaces.GMD)
-public class DefaultNonQuantitativeAttributeAccuracy extends AbstractThematicAccuracy
-        implements NonQuantitativeAttributeAccuracy
+@XmlType(name = "DQ_NonQuantitativeAttributeCorrectness_Type")
+@XmlRootElement(name = "DQ_NonQuantitativeAttributeCorrectness")
+@XmlSeeAlso({
+    DefaultNonQuantitativeAttributeAccuracy.class
+})
+public class DefaultNonQuantitativeAttributeCorrectness extends AbstractThematicAccuracy
+        implements NonQuantitativeAttributeCorrectness
 {
     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = -8777909940058192886L;
+    private static final long serialVersionUID = 6782225824097039360L;
 
     /**
-     * Constructs an initially empty non quantitative attribute accuracy.
+     * Constructs an initially empty completeness omission.
      */
-    public DefaultNonQuantitativeAttributeAccuracy() {
+    public DefaultNonQuantitativeAttributeCorrectness() {
     }
 
     /**
@@ -66,9 +72,9 @@ public class DefaultNonQuantitativeAttributeAccuracy extends AbstractThematicAcc
      *
      * @param  object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(NonQuantitativeAttributeAccuracy)
+     * @see #castOrCopy(NonQuantitativeAttributeCorrectness)
      */
-    public DefaultNonQuantitativeAttributeAccuracy(final NonQuantitativeAttributeAccuracy object) {
+    public DefaultNonQuantitativeAttributeCorrectness(final NonQuantitativeAttributeCorrectness object) {
         super(object);
     }
 
@@ -79,9 +85,9 @@ public class DefaultNonQuantitativeAttributeAccuracy extends AbstractThematicAcc
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code DefaultNonQuantitativeAttributeAccuracy}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code DefaultNonQuantitativeAttributeAccuracy} instance is created using the
-     *       {@linkplain #DefaultNonQuantitativeAttributeAccuracy(NonQuantitativeAttributeAccuracy) copy constructor}
+     *       {@code DefaultNonQuantitativeAttributeCorrectness}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultNonQuantitativeAttributeCorrectness} instance is created using the
+     *       {@linkplain #DefaultNonQuantitativeAttributeCorrectness(NonQuantitativeAttributeCorrectness) copy constructor}
      *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
@@ -90,10 +96,14 @@ public class DefaultNonQuantitativeAttributeAccuracy extends AbstractThematicAcc
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static DefaultNonQuantitativeAttributeAccuracy castOrCopy(final NonQuantitativeAttributeAccuracy object) {
-        if (object == null || object instanceof DefaultNonQuantitativeAttributeAccuracy) {
-            return (DefaultNonQuantitativeAttributeAccuracy) object;
+    @SuppressWarnings("deprecation")
+    public static DefaultNonQuantitativeAttributeCorrectness castOrCopy(final NonQuantitativeAttributeCorrectness object) {
+        if (object instanceof NonQuantitativeAttributeAccuracy) {
+            return DefaultNonQuantitativeAttributeAccuracy.castOrCopy((NonQuantitativeAttributeAccuracy) object);
         }
-        return new DefaultNonQuantitativeAttributeAccuracy(object);
+        if (object == null || object instanceof DefaultNonQuantitativeAttributeCorrectness) {
+            return (DefaultNonQuantitativeAttributeCorrectness) object;
+        }
+        return new DefaultNonQuantitativeAttributeCorrectness(object);
     }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultParameter.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultParameter.java
new file mode 100644
index 0000000000..0c6f649cba
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultParameter.java
@@ -0,0 +1,252 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.metadata.iso.quality;
+
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import org.opengis.util.TypeName;
+import org.opengis.util.InternationalString;
+import org.opengis.metadata.quality.Parameter;
+import org.opengis.metadata.quality.Description;
+import org.opengis.metadata.quality.ValueStructure;
+import org.apache.sis.xml.Namespaces;
+
+
+/**
+ * Data quality parameter.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
+ *
+ * <div class="preformat">{@code DQM_Parameter}
+ * {@code   ├─name……………………} Name of the data quality parameter.
+ * {@code   ├─definition……} Definition of the data quality parameter.
+ * {@code   └─valueType………} Value type of the data quality parameter (shall be one of the data types defined in ISO/TS 19103:2005).</div>
+ *
+ * <h2>Limitations</h2>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+@XmlType(name = "DQM_Parameter_Type", namespace = Namespaces.DQM, propOrder = {
+    "name",
+    "definition",
+    "description",
+    "valueType",
+    "valueStructure"
+})
+@XmlRootElement(name = "DQM_Parameter", namespace = Namespaces.DQM)
+public class DefaultParameter extends ISOMetadata implements Parameter {
+    /**
+     * Serial number for inter-operability with different versions.
+     */
+    private static final long serialVersionUID = -5063371334668144677L;
+
+    /**
+     * Name of the data quality parameter.
+     */
+    @SuppressWarnings("serial")
+    private InternationalString name;
+
+    /**
+     * Definition of the data quality parameter.
+     */
+    @SuppressWarnings("serial")
+    private InternationalString definition;
+
+     /**
+     * Description of the data quality parameter.
+     */
+    @SuppressWarnings("serial")
+    private Description description;
+
+     /**
+     * Value type of the data quality parameter (shall be one of the data types defined in ISO/TS 19103:2005).
+     */
+    @SuppressWarnings("serial")
+    private TypeName valueType;
+
+    /**
+     * Structure of the data quality parameter.
+     */
+    private ValueStructure valueStructure;
+
+    /**
+     * Constructs an initially empty element.
+     */
+    public DefaultParameter() {
+    }
+
+    /**
+     * Constructs a new instance initialized with the values from the specified metadata object.
+     * This is a <cite>shallow</cite> copy constructor, since the other metadata contained in the
+     * given object are not recursively copied.
+     *
+     * @param object  the metadata to copy values from, or {@code null} if none.
+     *
+     * @see #castOrCopy(Parameter)
+     */
+    public DefaultParameter(final Parameter object) {
+        super(object);
+        if (object != null) {
+            name           = object.getName();
+            definition     = object.getDefinition();
+            description    = object.getDescription();
+            valueType      = object.getValueType();
+            valueStructure = object.getValueStructure();
+        }
+    }
+
+    /**
+     * Returns a SIS metadata implementation with the values of the given arbitrary implementation.
+     * This method performs the first applicable action in the following choices:
+     *
+     * <ul>
+     *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
+     *   <li>Otherwise if the given object is already an instance of
+     *       {@code DefaultParameter}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultParameter} instance is created using the
+     *       {@linkplain #DefaultParameter(Parameter) copy constructor} and returned.
+     *       Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       metadata contained in the given object are not recursively copied.</li>
+     * </ul>
+     *
+     * @param  object  the object to get as a SIS implementation, or {@code null} if none.
+     * @return a SIS implementation containing the values of the given object (may be the
+     *         given object itself), or {@code null} if the argument was null.
+     */
+    public static DefaultParameter castOrCopy(final Parameter object) {
+        if (object == null || object instanceof DefaultParameter) {
+            return (DefaultParameter) object;
+        }
+        return new DefaultParameter(object);
+    }
+
+    /**
+     * Returns the name of the data quality parameter.
+     *
+     * @return name of the data quality parameter.
+     */
+    @Override
+    @XmlElement(name = "name", required = true)
+    public InternationalString getName() {
+        return name;
+    }
+
+    /**
+     * Sets the name of the data quality parameter.
+     *
+     * @param  newValue  the new parameter name.
+     */
+    public void setName(final InternationalString newValue)  {
+        checkWritePermission(name);
+        name = newValue;
+    }
+
+    /**
+     * Returns the definition of the data quality parameter.
+     *
+     * @return definition of the data quality parameter.
+     */
+    @Override
+    @XmlElement(name = "definition", required = true)
+    public InternationalString getDefinition() {
+        return definition;
+    }
+
+    /**
+     * Sets the definition of the data quality parameter.
+     *
+     * @param  newValue  the new parameter definition.
+     */
+    public void setDefinition(final InternationalString newValue)  {
+        checkWritePermission(definition);
+        definition = newValue;
+    }
+
+    /**
+     * Returns the description of the data quality parameter.
+     *
+     * @return description of the data quality parameter, or {@code null} if none.
+     */
+    @Override
+    @XmlElement(name = "description")
+    public Description getDescription() {
+       return description;
+    }
+
+    /**
+     * Sets the description of the data quality parameter.
+     *
+     * @param  newValue  the new parameter description.
+     */
+    public void setDescription(final Description newValue)  {
+        checkWritePermission(description);
+        description = newValue;
+    }
+
+    /**
+     * Returns the value type of the data quality parameter.
+     *
+     * @return value type of the data quality parameter.
+     */
+    @Override
+    @XmlElement(name = "valueType", required = true)
+    public TypeName getValueType() {
+        return valueType;
+    }
+
+    /**
+     * Sets the value type of the data quality parameter.
+     *
+     * @param  newValue  the new parameter value type.
+     */
+    public void setValueType(final TypeName newValue)  {
+        checkWritePermission(valueType);
+        valueType = newValue;
+    }
+
+    /**
+     * Returns the structure of the data quality parameter.
+     *
+     * @return structure of the data quality parameter, or {@code null} if none.
+     */
+    @Override
+    @XmlElement(name = "valueStructure")
+    public ValueStructure getValueStructure() {
+        return valueStructure;
+    }
+
+    /**
+     * Sets the structure of the data quality parameter.
+     *
+     * @param  newValue  the new parameter value structure.
+     */
+    public void setValueStructure(final ValueStructure newValue)  {
+        checkWritePermission(valueStructure);
+        valueStructure = newValue;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeAttributeAccuracy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeAttributeAccuracy.java
index b08a743f23..5ca3d7ba28 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeAttributeAccuracy.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeAttributeAccuracy.java
@@ -23,7 +23,8 @@ import org.opengis.metadata.quality.QuantitativeAttributeAccuracy;
 
 /**
  * Accuracy of quantitative attributes.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * See the {@link QuantitativeAttributeAccuracy} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_QuantitativeAttributeAccuracy}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java
index 7e66020722..d92e2565c0 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java
@@ -31,7 +31,8 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
 
 /**
  * Information about the value (or set of values) obtained from applying a data quality measure.
- * The following properties are mandatory in a well-formed metadata according ISO 19115:
+ * See the {@link QuantitativeResult} GeoAPI interface for more details.
+ * The following properties are mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_QuantitativeResult}
  * {@code   ├─valueUnit……………………} Value unit for reporting a data quality result.
@@ -49,7 +50,8 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cullen Rombach (Image Matters)
- * @version 1.0
+ * @author  Alexis Gaillard (Geomatys)
+ * @version 1.3
  * @since   0.3
  * @module
  */
@@ -86,7 +88,10 @@ public class DefaultQuantitativeResult extends AbstractResult implements Quantit
 
     /**
      * Statistical method used to determine the value, or {@code null} if none.
+     *
+     * @deprecated Removed from ISO 19157:2013.
      */
+    @Deprecated
     @SuppressWarnings("serial")
     private InternationalString errorStatistic;
 
@@ -161,7 +166,7 @@ public class DefaultQuantitativeResult extends AbstractResult implements Quantit
     }
 
     /**
-     * Return the value type for reporting a data quality result.
+     * Returns the value type for reporting a data quality result.
      *
      * <h4>Default value</h4>
      * If no type has been set but all {@linkplain #getValues() values} are of the same type,
@@ -227,9 +232,10 @@ public class DefaultQuantitativeResult extends AbstractResult implements Quantit
      *
      * @return statistical method used to determine the value, or {@code null}.
      *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
+     * @deprecated Removed from ISO_19157:2013.
      */
     @Override
+    @Deprecated
     @XmlElement(name = "errorStatistic", namespace = LegacyNamespaces.GMD)
     public InternationalString getErrorStatistic()  {
         return FilterByVersion.LEGACY_METADATA.accept() ? errorStatistic : null;
@@ -239,7 +245,10 @@ public class DefaultQuantitativeResult extends AbstractResult implements Quantit
      * Sets the statistical method used to determine the value, or {@code null} if none.
      *
      * @param  newValue  the new error statistic.
+     *
+     * @deprecated Removed from ISO_19157:2013.
      */
+    @Deprecated
     public void setErrorStatistic(final InternationalString newValue) {
         checkWritePermission(errorStatistic);
         errorStatistic = newValue;
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultRelativeInternalPositionalAccuracy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultRelativeInternalPositionalAccuracy.java
index b7bffe8d96..07ee7bdabc 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultRelativeInternalPositionalAccuracy.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultRelativeInternalPositionalAccuracy.java
@@ -24,7 +24,8 @@ import org.opengis.metadata.quality.RelativeInternalPositionalAccuracy;
 /**
  * Closeness of the relative positions of features in the scope to their respective
  * relative positions accepted as or being true.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * See the {@link RelativeInternalPositionalAccuracy} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_RelativeInternalPositionalAccuracy}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTemporalValidity.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultRepresentativity.java
similarity index 64%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTemporalValidity.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultRepresentativity.java
index eea7029a01..b5a09faada 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTemporalValidity.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultRepresentativity.java
@@ -18,15 +18,17 @@ package org.apache.sis.metadata.iso.quality;
 
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.metadata.quality.TemporalValidity;
+import org.opengis.metadata.quality.Representativity;
 
 
 /**
- * Validity of data specified by the scope with respect to time.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * Degree to which the sample used has produced a result which is representation of the data.
+ * See the {@link Representativity} GeoAPI interface for more details.
+ * The following properties are mandatory in a well-formed metadata according ISO 19157:
  *
- * <div class="preformat">{@code DQ_TemporalValidity}
- * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
+ * <div class="preformat">{@code DQ_Representativity}
+ * {@code   ├─result…………………………} Value obtained from applying a data quality measure.
+ * {@code   └─derivedElement……} Derived element.</div>
  *
  * <h2>Limitations</h2>
  * <ul>
@@ -37,24 +39,23 @@ import org.opengis.metadata.quality.TemporalValidity;
  *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
  * </ul>
  *
- * @author  Martin Desruisseaux (IRD, Geomatys)
- * @author  Touraïvane (IRD)
- * @version 1.0
- * @since   0.3
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
  * @module
  */
-@XmlType(name = "DQ_TemporalValidity_Type")
-@XmlRootElement(name = "DQ_TemporalValidity")
-public class DefaultTemporalValidity extends AbstractTemporalAccuracy implements TemporalValidity {
+@XmlType(name = "DQ_Representativity_Type")
+@XmlRootElement(name = "DQ_Representativity")
+public class DefaultRepresentativity extends AbstractMetaquality implements Representativity {
     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = 7271555924670981058L;
-
+    private static final long serialVersionUID = 5570834596540938580L;
     /**
-     * Constructs an initially empty temporal validity.
+     * Constructs an initially empty aggregation derivation.
      */
-    public DefaultTemporalValidity() {
+    public DefaultRepresentativity() {
     }
 
     /**
@@ -64,9 +65,9 @@ public class DefaultTemporalValidity extends AbstractTemporalAccuracy implements
      *
      * @param  object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(TemporalValidity)
+     * @see #castOrCopy(Representativity)
      */
-    public DefaultTemporalValidity(final TemporalValidity object) {
+    public DefaultRepresentativity(final Representativity object) {
         super(object);
     }
 
@@ -77,9 +78,9 @@ public class DefaultTemporalValidity extends AbstractTemporalAccuracy implements
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code DefaultTemporalValidity}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code DefaultTemporalValidity} instance is created using the
-     *       {@linkplain #DefaultTemporalValidity(TemporalValidity) copy constructor}
+     *       {@code DefaultRepresentativity}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultRepresentativity} instance is created using the
+     *       {@linkplain #DefaultRepresentativity(Representativity) copy constructor}
      *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
@@ -88,10 +89,10 @@ public class DefaultTemporalValidity extends AbstractTemporalAccuracy implements
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static DefaultTemporalValidity castOrCopy(final TemporalValidity object) {
-        if (object == null || object instanceof DefaultTemporalValidity) {
-            return (DefaultTemporalValidity) object;
+    public static DefaultRepresentativity castOrCopy(final Representativity object) {
+        if (object == null || object instanceof DefaultRepresentativity) {
+            return (DefaultRepresentativity) object;
         }
-        return new DefaultTemporalValidity(object);
+        return new DefaultRepresentativity(object);
     }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultSampleBasedInspection.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultSampleBasedInspection.java
new file mode 100644
index 0000000000..b26cba5ff6
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultSampleBasedInspection.java
@@ -0,0 +1,191 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.metadata.iso.quality;
+
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import org.opengis.util.InternationalString;
+import org.opengis.metadata.quality.SampleBasedInspection;
+
+
+/**
+ * Sample based inspection.
+ * The following properties are mandatory in a well-formed metadata according ISO 19157:
+ *
+ * <div class="preformat">{@code DQ_SampleBasedInspection}
+ * {@code   ├─samplingScheme……………} Type of sampling scheme and description of the sampling procedure.
+ * {@code   ├─lotDescription……………} How lots are defined.
+ * {@code   └─samplingRatio………………} How many samples on average are extracted for inspection from each lot of population.</div>
+ *
+ * <h2>Limitations</h2>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+@XmlType(name = "DQ_SampleBasedInspection_Type", propOrder = {
+    "samplingScheme",
+    "lotDescription",
+    "samplingRatio"
+})
+@XmlRootElement(name = "DQ_SampleBasedInspection")
+public class DefaultSampleBasedInspection extends AbstractDataEvaluation implements SampleBasedInspection {
+    /**
+     * Serial number for inter-operability with different versions.
+     */
+    private static final long serialVersionUID = -811881513591264926L;
+
+    /**
+     * Information of the type of sampling scheme and description of the sampling procedure.
+     */
+    @SuppressWarnings("serial")
+    private InternationalString samplingScheme;
+
+    /**
+     * Information of how lots are defined.
+     */
+    @SuppressWarnings("serial")
+    private InternationalString lotDescription;
+
+    /**
+     * Information on how many samples on average are extracted for inspection from each lot of population.
+     */
+    @SuppressWarnings("serial")
+    private InternationalString samplingRatio;
+
+    /**
+     * Constructs an initially empty sample based description.
+     */
+    public DefaultSampleBasedInspection() {
+    }
+
+   /**
+     * Constructs a new instance initialized with the values from the specified metadata object.
+     * This is a <cite>shallow</cite> copy constructor, since the other metadata contained in the
+     * given object are not recursively copied.
+     *
+     * @param  object  the metadata to copy values from, or {@code null} if none.
+     *
+     * @see #castOrCopy(SampleBasedInspection)
+     */
+    public DefaultSampleBasedInspection(final SampleBasedInspection object) {
+        super(object);
+        if (object != null) {
+            samplingScheme = object.getSamplingScheme();
+            lotDescription = object.getLotDescription();
+            samplingRatio  = object.getSamplingRatio();
+        }
+    }
+
+    /**
+     * Returns a SIS metadata implementation with the values of the given arbitrary implementation.
+     * This method performs the first applicable action in the following choices:
+     *
+     * <ul>
+     *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
+     *   <li>Otherwise if the given object is already an instance of
+     *       {@code DefaultSampleBasedInspection}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultSampleBasedInspection} instance is created using the
+     *       {@linkplain #DefaultSampleBasedInspection(SampleBasedInspection) copy constructor}
+     *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       metadata contained in the given object are not recursively copied.</li>
+     * </ul>
+     *
+     * @param  object  the object to get as a SIS implementation, or {@code null} if none.
+     * @return a SIS implementation containing the values of the given object (may be the
+     *         given object itself), or {@code null} if the argument was null.
+     */
+    public static DefaultSampleBasedInspection castOrCopy(final SampleBasedInspection object) {
+        if (object == null || object instanceof DefaultSampleBasedInspection) {
+            return (DefaultSampleBasedInspection) object;
+        }
+        return new DefaultSampleBasedInspection(object);
+    }
+
+     /**
+     * Returns the information of the type of sampling scheme and description of the sampling procedure.
+     *
+     * @return sampling scheme and sampling procedure.
+     */
+    @Override
+    @XmlElement(name = "samplingScheme", required = true)
+    public InternationalString getSamplingScheme() {
+        return samplingScheme;
+    }
+
+    /**
+     * Sets the information of the type of sampling scheme and description of the sampling procedure.
+     *
+     * @param  newValue  the new sampling scheme.
+     */
+    public void setSamplingScheme(final InternationalString newValue) {
+        checkWritePermission(samplingScheme);
+        samplingScheme = newValue;
+    }
+
+     /**
+     * Returns the information of how lots are defined.
+     *
+     * @return information on lots.
+     */
+    @Override
+    @XmlElement(name = "lotDescription", required = true)
+    public InternationalString getLotDescription() {
+        return lotDescription;
+    }
+
+    /**
+     * Sets the information of how lots are defined.
+     *
+     * @param  newValue  the new information.
+     */
+    public void setLotDescription(final InternationalString newValue) {
+        checkWritePermission(lotDescription);
+        lotDescription = newValue;
+    }
+
+     /**
+     * Returns the information on how many samples on average are extracted for inspection from each lot of population.
+     *
+     * @return average number of samples extracted for inspection.
+     */
+    @Override
+    @XmlElement(name = "samplingRatio", required = true)
+    public InternationalString getSamplingRatio() {
+        return samplingRatio;
+    }
+
+    /**
+     * Sets the information on how many samples on average are extracted for inspection from each lot of population.
+     *
+     * @param  newValue  the new information.
+     */
+    public void setSamplingRatio(final InternationalString newValue) {
+        checkWritePermission(samplingRatio);
+        samplingRatio = newValue;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultRelativeInternalPositionalAccuracy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultSourceReference.java
similarity index 54%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultRelativeInternalPositionalAccuracy.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultSourceReference.java
index b7bffe8d96..bc3c51a452 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultRelativeInternalPositionalAccuracy.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultSourceReference.java
@@ -17,17 +17,19 @@
 package org.apache.sis.metadata.iso.quality;
 
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.metadata.quality.RelativeInternalPositionalAccuracy;
+import org.opengis.metadata.citation.Citation;
+import org.opengis.metadata.quality.SourceReference;
+import org.apache.sis.xml.Namespaces;
 
 
 /**
- * Closeness of the relative positions of features in the scope to their respective
- * relative positions accepted as or being true.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * Reference to the source of the data quality measure.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
- * <div class="preformat">{@code DQ_RelativeInternalPositionalAccuracy}
- * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
+ * <div class="preformat">{@code DQM_SourceReference}
+ * {@code   └─citation……………} References to the source.</div>
  *
  * <h2>Limitations</h2>
  * <ul>
@@ -38,26 +40,30 @@ import org.opengis.metadata.quality.RelativeInternalPositionalAccuracy;
  *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
  * </ul>
  *
- * @author  Martin Desruisseaux (IRD, Geomatys)
- * @author  Touraïvane (IRD)
- * @version 1.0
- * @since   0.3
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
  * @module
  */
-@XmlType(name = "DQ_RelativeInternalPositionalAccuracy_Type")
-@XmlRootElement(name = "DQ_RelativeInternalPositionalAccuracy")
-public class DefaultRelativeInternalPositionalAccuracy extends AbstractPositionalAccuracy
-        implements RelativeInternalPositionalAccuracy
-{
+@XmlType(name = "DQM_SourceReference_Type", namespace = Namespaces.DQM)
+@XmlRootElement(name = "DQM_SourceReference", namespace = Namespaces.DQM)
+public class DefaultSourceReference extends ISOMetadata implements SourceReference {
     /**
      * Serial number for inter-operability with different versions.
      */
-    private static final long serialVersionUID = 8385667875833802576L;
+    private static final long serialVersionUID = 2923526577209702000L;
 
     /**
-     * Constructs an initially empty relative internal positional accuracy.
+     * References to the source.
      */
-    public DefaultRelativeInternalPositionalAccuracy() {
+    @SuppressWarnings("serial")
+    private Citation citation;
+
+    /**
+     * Constructs an initially empty source reference.
+     */
+    public DefaultSourceReference() {
     }
 
     /**
@@ -67,10 +73,13 @@ public class DefaultRelativeInternalPositionalAccuracy extends AbstractPositiona
      *
      * @param object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(RelativeInternalPositionalAccuracy)
+     * @see #castOrCopy(SourceReference)
      */
-    public DefaultRelativeInternalPositionalAccuracy(final RelativeInternalPositionalAccuracy object) {
+    public DefaultSourceReference(final SourceReference object) {
         super(object);
+        if (object != null) {
+            citation = object.getCitation();
+        }
     }
 
     /**
@@ -80,10 +89,10 @@ public class DefaultRelativeInternalPositionalAccuracy extends AbstractPositiona
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code DefaultRelativeInternalPositionalAccuracy}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code DefaultRelativeInternalPositionalAccuracy} instance is created using the
-     *       {@linkplain #DefaultRelativeInternalPositionalAccuracy(RelativeInternalPositionalAccuracy) copy constructor}
-     *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       {@code DefaultSourceReference}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultSourceReference} instance is created using the
+     *       {@linkplain #DefaultSourceReference(SourceReference) copy constructor} and returned.
+     *       Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
      *
@@ -91,10 +100,31 @@ public class DefaultRelativeInternalPositionalAccuracy extends AbstractPositiona
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static DefaultRelativeInternalPositionalAccuracy castOrCopy(final RelativeInternalPositionalAccuracy object) {
-        if (object == null || object instanceof DefaultRelativeInternalPositionalAccuracy) {
-            return (DefaultRelativeInternalPositionalAccuracy) object;
+    public static DefaultSourceReference castOrCopy(final SourceReference object) {
+        if (object == null || object instanceof DefaultSourceReference) {
+            return (DefaultSourceReference) object;
         }
-        return new DefaultRelativeInternalPositionalAccuracy(object);
+        return new DefaultSourceReference(object);
+    }
+
+    /**
+     * Returns the references to the source.
+     *
+     * @return reference to the source.
+     */
+    @Override
+    @XmlElement(name = "citation", required = true)
+    public Citation getCitation() {
+        return citation;
+    }
+
+    /**
+     * Sets the references to the source.
+     *
+     * @param  newValue  the new source references.
+     */
+    public void setCitation(final Citation newValue)  {
+        checkWritePermission(citation);
+        citation = newValue;
     }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultStandaloneQualityReportInformation.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultStandaloneQualityReportInformation.java
new file mode 100644
index 0000000000..84e0aca75e
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultStandaloneQualityReportInformation.java
@@ -0,0 +1,163 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.metadata.iso.quality;
+
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import org.opengis.util.InternationalString;
+import org.opengis.metadata.citation.Citation;
+import org.opengis.metadata.quality.StandaloneQualityReportInformation;
+
+
+/**
+ * Reference to an external standalone quality report.
+ * See the {@link StandaloneQualityReportInformation} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
+ *
+ * <div class="preformat">{@code DQ_Element}
+ * {@code   ├─reportReference……} Reference to the procedure information.
+ * {@code   └─abstract………………………} Description of the evaluation method.</div>
+ *
+ * <h2>Limitations</h2>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
+ * @author  Alexis Gaillard (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+@XmlType(name = "DQ_StandaloneQualityReportInformation_Type", propOrder = {
+    "reportReference",
+    "abstract"
+})
+@XmlRootElement(name = "DQ_StandaloneQualityReportInformation")
+public class DefaultStandaloneQualityReportInformation extends ISOMetadata implements StandaloneQualityReportInformation {
+    /**
+     * Serial number for inter-operability with different versions.
+     */
+    private static final long serialVersionUID = -6646482698986737797L;
+
+    /**
+     * Reference to the associated standalone quality report.
+     */
+    @SuppressWarnings("serial")
+    private Citation reportReference;
+
+    /**
+     * Abstract for the associated standalone quality report.
+     */
+    @SuppressWarnings("serial")
+    private InternationalString summary;
+
+    /**
+     * Constructs an initially empty standalone quality report information.
+     */
+    public DefaultStandaloneQualityReportInformation() {
+    }
+
+    /**
+     * Constructs a new instance initialized with the values from the specified metadata object.
+     * This is a <cite>shallow</cite> copy constructor, since the other metadata contained in the
+     * given object are not recursively copied.
+     *
+     * @param object  the metadata to copy values from, or {@code null} if none.
+     *
+     * @see #castOrCopy(StandaloneQualityReportInformation)
+     */
+    public DefaultStandaloneQualityReportInformation(final StandaloneQualityReportInformation object) {
+        super(object);
+        if (object != null) {
+            reportReference  = object.getReportReference();
+            summary          = object.getAbstract();
+        }
+    }
+
+    /**
+     * Returns a SIS metadata implementation with the values of the given arbitrary implementation.
+     * This method performs the first applicable action in the following choices:
+     *
+     * <ul>
+     *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
+     *   <li>Otherwise if the given object is already an instance of
+     *       {@code DefaultStandaloneQualityReportInformation}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultStandaloneQualityReportInformation} instance is created using the
+     *       {@linkplain #DefaultStandaloneQualityReportInformation(StandaloneQualityReportInformation) copy constructor}
+     *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       metadata contained in the given object are not recursively copied.</li>
+     * </ul>
+     *
+     * @param  object  the object to get as a SIS implementation, or {@code null} if none.
+     * @return a SIS implementation containing the values of the given object (may be the
+     *         given object itself), or {@code null} if the argument was null.
+     */
+    public static DefaultStandaloneQualityReportInformation castOrCopy(final StandaloneQualityReportInformation object) {
+        if (object instanceof StandaloneQualityReportInformation) {
+            return DefaultStandaloneQualityReportInformation.castOrCopy((DefaultStandaloneQualityReportInformation) object);
+        }
+        return new DefaultStandaloneQualityReportInformation(object);
+    }
+
+    /**
+     * Returns the reference to the associated standalone quality report.
+     *
+     * @return reference of the standalone quality report.
+     */
+    @Override
+    @XmlElement(name = "reportReference", required = true)
+    public Citation getReportReference() {
+        return reportReference;
+    }
+
+    /**
+     * Sets the reference to the associated standalone quality report.
+     *
+     * @param  newValue  the new reference.
+     */
+    public void setReportReference(final Citation newValue) {
+        checkWritePermission(reportReference);
+        reportReference = newValue;
+    }
+
+    /**
+     * Returns the abstract for the standalone quality report.
+     *
+     * @return abstract of the standalone quality report.
+     */
+    @Override
+    @XmlElement(name = "abstract", required = true)
+    public InternationalString getAbstract() {
+        return summary;
+    }
+
+    /**
+     * Sets the abstract for the associated standalone quality report.
+     *
+     * @param  newValue  the new abstract.
+     */
+    public void setAbstract(final InternationalString newValue)  {
+        checkWritePermission(summary);
+        summary = newValue;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTemporalConsistency.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTemporalConsistency.java
index 5b1ce5c2c8..7da44c94cf 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTemporalConsistency.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTemporalConsistency.java
@@ -23,7 +23,8 @@ import org.opengis.metadata.quality.TemporalConsistency;
 
 /**
  * Correctness of ordered events or sequences, if reported.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * See the {@link TemporalConsistency} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_TemporalConsistency}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
@@ -39,13 +40,14 @@ import org.opengis.metadata.quality.TemporalConsistency;
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
- * @version 1.0
+ * @author  Alexis Gaillard (Geomatys)
+ * @version 1.3
  * @since   0.3
  * @module
  */
 @XmlType(name = "DQ_TemporalConsistency_Type")
 @XmlRootElement(name = "DQ_TemporalConsistency")
-public class DefaultTemporalConsistency extends AbstractTemporalAccuracy implements TemporalConsistency {
+public class DefaultTemporalConsistency extends AbstractTemporalQuality implements TemporalConsistency {
     /**
      * Serial number for inter-operability with different versions.
      */
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTemporalValidity.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTemporalValidity.java
index eea7029a01..c9658506d4 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTemporalValidity.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTemporalValidity.java
@@ -23,7 +23,8 @@ import org.opengis.metadata.quality.TemporalValidity;
 
 /**
  * Validity of data specified by the scope with respect to time.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * See the {@link TemporalValidity} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_TemporalValidity}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
@@ -39,13 +40,14 @@ import org.opengis.metadata.quality.TemporalValidity;
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
- * @version 1.0
+ * @author  Alexis Gaillard (Geomatys)
+ * @version 1.3
  * @since   0.3
  * @module
  */
 @XmlType(name = "DQ_TemporalValidity_Type")
 @XmlRootElement(name = "DQ_TemporalValidity")
-public class DefaultTemporalValidity extends AbstractTemporalAccuracy implements TemporalValidity {
+public class DefaultTemporalValidity extends AbstractTemporalQuality implements TemporalValidity {
     /**
      * Serial number for inter-operability with different versions.
      */
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultThematicClassificationCorrectness.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultThematicClassificationCorrectness.java
index 1213c70946..8d56c86842 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultThematicClassificationCorrectness.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultThematicClassificationCorrectness.java
@@ -23,7 +23,8 @@ import org.opengis.metadata.quality.ThematicClassificationCorrectness;
 
 /**
  * Comparison of the classes assigned to features or their attributes to a universe of discourse.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * See the {@link ThematicClassificationCorrectness} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_ThematicClassificationCorrectness}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTopologicalConsistency.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTopologicalConsistency.java
index 05ec8f8b67..8467adc834 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTopologicalConsistency.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultTopologicalConsistency.java
@@ -22,8 +22,9 @@ import org.opengis.metadata.quality.TopologicalConsistency;
 
 
 /**
- * Correctness of the explicitly encoded topological characteristics of the dataset as described by the scope.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * Correctness of the explicitly encoded topological characteristics of the data set.
+ * See the {@link TopologicalConsistency} GeoAPI interface for more details.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
  * <div class="preformat">{@code DQ_TopologicalConsistency}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
@@ -45,9 +46,7 @@ import org.opengis.metadata.quality.TopologicalConsistency;
  */
 @XmlType(name = "DQ_TopologicalConsistency_Type")
 @XmlRootElement(name = "DQ_TopologicalConsistency")
-public class DefaultTopologicalConsistency extends AbstractLogicalConsistency
-        implements TopologicalConsistency
-{
+public class DefaultTopologicalConsistency extends AbstractLogicalConsistency implements TopologicalConsistency {
     /**
      * Serial number for inter-operability with different versions.
      */
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java
index 5b97a6dcee..ccd7782240 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsability.java
@@ -24,32 +24,19 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
 
 /**
  * Degree of adherence of a dataset to a specific set of user requirements.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
- *
- * <div class="preformat">{@code QE_Usability}
- * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
- *
- * <h2>Limitations</h2>
- * <ul>
- *   <li>Instances of this class are not synchronized for multi-threading.
- *       Synchronization, if needed, is caller's responsibility.</li>
- *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
- *       Serialization support is appropriate for short term storage or RMI between applications running the
- *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
- * </ul>
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
+ * @version 1.3
  * @since   0.3
  * @module
  *
- * @deprecated Not found in ISO 19115-3:2016 schemas.
+ * @deprecated Renamed {@link DefaultUsabilityElement} for following a renaming in ISO 19157:2013.
  */
 @Deprecated
 @XmlType(name = "QE_Usability_Type", namespace = LegacyNamespaces.GMI)
 @XmlRootElement(name = "QE_Usability", namespace = LegacyNamespaces.GMI)
-public class DefaultUsability extends AbstractElement implements Usability {
+public class DefaultUsability extends DefaultUsabilityElement implements Usability {
     /**
      * Serial number for inter-operability with different versions.
      */
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultRelativeInternalPositionalAccuracy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsabilityElement.java
similarity index 65%
copy from core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultRelativeInternalPositionalAccuracy.java
copy to core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsabilityElement.java
index b7bffe8d96..83ef926889 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultRelativeInternalPositionalAccuracy.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultUsabilityElement.java
@@ -17,16 +17,17 @@
 package org.apache.sis.metadata.iso.quality;
 
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.metadata.quality.RelativeInternalPositionalAccuracy;
+import org.opengis.metadata.quality.Usability;
+import org.opengis.metadata.quality.UsabilityElement;
 
 
 /**
- * Closeness of the relative positions of features in the scope to their respective
- * relative positions accepted as or being true.
- * The following property is mandatory in a well-formed metadata according ISO 19115:
+ * Degree of adherence of a dataset to a specific set of requirements.
+ * The following property is mandatory in a well-formed metadata according ISO 19157:
  *
- * <div class="preformat">{@code DQ_RelativeInternalPositionalAccuracy}
+ * <div class="preformat">{@code DQ_UsabilityElement}
  * {@code   └─result……………} Value obtained from applying a data quality measure.</div>
  *
  * <h2>Limitations</h2>
@@ -39,16 +40,17 @@ import org.opengis.metadata.quality.RelativeInternalPositionalAccuracy;
  * </ul>
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
- * @author  Touraïvane (IRD)
- * @version 1.0
- * @since   0.3
+ * @author  Alexis Gaillard (Geomatys)
+ * @version 1.3
+ * @since   1.3
  * @module
  */
-@XmlType(name = "DQ_RelativeInternalPositionalAccuracy_Type")
-@XmlRootElement(name = "DQ_RelativeInternalPositionalAccuracy")
-public class DefaultRelativeInternalPositionalAccuracy extends AbstractPositionalAccuracy
-        implements RelativeInternalPositionalAccuracy
-{
+@XmlType(name = "DQ_UsabilityElement_Type")
+@XmlRootElement(name = "DQ_UsabilityElement")
+@XmlSeeAlso({
+    DefaultUsability.class
+})
+public class DefaultUsabilityElement extends AbstractElement implements UsabilityElement {
     /**
      * Serial number for inter-operability with different versions.
      */
@@ -57,7 +59,7 @@ public class DefaultRelativeInternalPositionalAccuracy extends AbstractPositiona
     /**
      * Constructs an initially empty relative internal positional accuracy.
      */
-    public DefaultRelativeInternalPositionalAccuracy() {
+    public DefaultUsabilityElement() {
     }
 
     /**
@@ -67,9 +69,9 @@ public class DefaultRelativeInternalPositionalAccuracy extends AbstractPositiona
      *
      * @param object  the metadata to copy values from, or {@code null} if none.
      *
-     * @see #castOrCopy(RelativeInternalPositionalAccuracy)
+     * @see #castOrCopy(UsabilityElement)
      */
-    public DefaultRelativeInternalPositionalAccuracy(final RelativeInternalPositionalAccuracy object) {
+    public DefaultUsabilityElement(final UsabilityElement object) {
         super(object);
     }
 
@@ -80,10 +82,10 @@ public class DefaultRelativeInternalPositionalAccuracy extends AbstractPositiona
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
      *   <li>Otherwise if the given object is already an instance of
-     *       {@code DefaultRelativeInternalPositionalAccuracy}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code DefaultRelativeInternalPositionalAccuracy} instance is created using the
-     *       {@linkplain #DefaultRelativeInternalPositionalAccuracy(RelativeInternalPositionalAccuracy) copy constructor}
-     *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
+     *       {@code DefaultUsabilityElement}, then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultUsabilityElement} instance is created using the
+     *       {@linkplain #DefaultUsabilityElement(UsabilityElement) copy constructor} and returned.
+     *       Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
      *
@@ -91,10 +93,14 @@ public class DefaultRelativeInternalPositionalAccuracy extends AbstractPositiona
      * @return a SIS implementation containing the values of the given object (may be the
      *         given object itself), or {@code null} if the argument was null.
      */
-    public static DefaultRelativeInternalPositionalAccuracy castOrCopy(final RelativeInternalPositionalAccuracy object) {
-        if (object == null || object instanceof DefaultRelativeInternalPositionalAccuracy) {
-            return (DefaultRelativeInternalPositionalAccuracy) object;
+    @SuppressWarnings("deprecation")
+    public static DefaultUsabilityElement castOrCopy(final UsabilityElement object) {
+        if (object instanceof Usability) {
+            return DefaultUsability.castOrCopy((Usability) object);
         }
-        return new DefaultRelativeInternalPositionalAccuracy(object);
+        if (object == null || object instanceof DefaultUsabilityElement) {
+            return (DefaultUsabilityElement) object;
+        }
+        return new DefaultUsabilityElement(object);
     }
 }
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/ISOMetadata.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/ISOMetadata.java
new file mode 100644
index 0000000000..dae1584d8b
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/ISOMetadata.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.metadata.iso.quality;
+
+import org.apache.sis.metadata.MetadataStandard;
+
+
+/**
+ * The base class of ISO 19157 implementation classes.
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.3
+ * @since   1.3
+ * @module
+ */
+abstract class ISOMetadata extends org.apache.sis.metadata.iso.ISOMetadata {
+    /**
+     * Serial number for inter-operability with different versions.
+     */
+    private static final long serialVersionUID = 8310882201886331960L;
+
+    /**
+     * Constructs an initially empty metadata.
+     */
+    protected ISOMetadata() {
+    }
+
+    /**
+     * Constructs a new metadata initialized with the values from the specified object.
+     *
+     * @param  object  the metadata to copy values from, or {@code null} if none.
+     */
+    protected ISOMetadata(final Object object) {
+        super(object);
+    }
+
+    /**
+     * Returns the metadata standard, which is {@linkplain MetadataStandard#ISO_19157 ISO 19157}.
+     *
+     * @return the metadata standard, which is {@linkplain MetadataStandard#ISO_19115 ISO 19157}.
+     */
+    @Override
+    public MetadataStandard getStandard() {
+        return MetadataStandard.ISO_19157;
+    }
+}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/package-info.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/package-info.java
index 8fb66e9f93..4e287027e8 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/package-info.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/package-info.java
@@ -20,77 +20,6 @@
  * An explanation for this package is provided in the {@linkplain org.opengis.metadata.quality OpenGIS® javadoc}.
  * The remaining discussion on this page is specific to the SIS implementation.
  *
- * <h2>Overview</h2>
- * For a global overview of metadata in SIS, see the {@link org.apache.sis.metadata} package javadoc.
- *
- * <table class="sis">
- * <caption>Package overview</caption>
- * <tr>
- *   <th>Class hierarchy</th>
- *   <th class="sep">Aggregation hierarchy</th>
- * </tr><tr><td style="width: 50%; white-space: nowrap">
- * {@linkplain org.apache.sis.metadata.iso.ISOMetadata ISO 19115 metadata}<br>
- * {@code  ├─}         {@linkplain org.apache.sis.metadata.iso.quality.DefaultDataQuality                        Data quality}<br>
- * {@code  ├─}         {@linkplain org.apache.sis.metadata.iso.quality.AbstractElement                           Element} «abstract»<br>
- * {@code  │   ├─}     {@linkplain org.apache.sis.metadata.iso.quality.AbstractCompleteness                      Completeness} «abstract»<br>
- * {@code  │   │   ├─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultCompletenessCommission             Completeness commission}<br>
- * {@code  │   │   └─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultCompletenessOmission               Completeness omission}<br>
- * {@code  │   ├─}     {@linkplain org.apache.sis.metadata.iso.quality.AbstractLogicalConsistency                Logical consistency} «abstract»<br>
- * {@code  │   │   ├─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultConceptualConsistency              Conceptual consistency}<br>
- * {@code  │   │   ├─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultDomainConsistency                  Domain consistency}<br>
- * {@code  │   │   ├─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultFormatConsistency                  Format consistency}<br>
- * {@code  │   │   └─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultTopologicalConsistency             Topological consistency}<br>
- * {@code  │   ├─}     {@linkplain org.apache.sis.metadata.iso.quality.AbstractPositionalAccuracy                Positional accuracy} «abstract»<br>
- * {@code  │   │   ├─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultAbsoluteExternalPositionalAccuracy Absolute external positional accuracy}<br>
- * {@code  │   │   ├─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultRelativeInternalPositionalAccuracy Relative internal positional accuracy}<br>
- * {@code  │   │   └─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultGriddedDataPositionalAccuracy      Gridded data positional accuracy}<br>
- * {@code  │   ├─}     {@linkplain org.apache.sis.metadata.iso.quality.AbstractTemporalAccuracy                  Temporal accuracy} «abstract»<br>
- * {@code  │   │   ├─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultAccuracyOfATimeMeasurement         Accuracy of a time measurement}<br>
- * {@code  │   │   ├─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultTemporalConsistency                Temporal consistency}<br>
- * {@code  │   │   └─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultTemporalValidity                   Temporal validity}<br>
- * {@code  │   ├─}     {@linkplain org.apache.sis.metadata.iso.quality.AbstractThematicAccuracy                  Thematic accuracy} «abstract»<br>
- * {@code  │   │   ├─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultQuantitativeAttributeAccuracy      Quantitative attribute accuracy}<br>
- * {@code  │   │   ├─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultNonQuantitativeAttributeAccuracy   Non quantitative attribute accuracy}<br>
- * {@code  │   │   └─} {@linkplain org.apache.sis.metadata.iso.quality.DefaultThematicClassificationCorrectness  Thematic classification correctness}<br>
- * {@code  │   └─}     {@linkplain org.apache.sis.metadata.iso.quality.DefaultUsability                          Usability}<br>
- * {@code  └─}         {@linkplain org.apache.sis.metadata.iso.quality.AbstractResult                            Result} «abstract»<br>
- * {@code      ├─}     {@linkplain org.apache.sis.metadata.iso.quality.DefaultConformanceResult                  Conformance result}<br>
- * {@code      ├─}     {@linkplain org.apache.sis.metadata.iso.quality.DefaultQuantitativeResult                 Quantitative result}<br>
- * {@code      └─}     {@linkplain org.apache.sis.metadata.iso.quality.DefaultCoverageResult                     Coverage result}<br>
- * {@linkplain org.opengis.util.CodeList Code list}<br>
- * {@code  └─} {@linkplain org.opengis.metadata.quality.EvaluationMethodType Evaluation method type}<br>
- * </td><td class="sep" style="width: 50%; white-space: nowrap">
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultDataQuality                        Data quality}<br>
- * {@code  ├─}         {@linkplain org.apache.sis.metadata.iso.maintenance.DefaultScope                          Scope}<br>
- * {@code  └─}         {@linkplain org.apache.sis.metadata.iso.quality.AbstractElement                           Element} «abstract»<br>
- * {@code      ├─}     {@linkplain org.opengis.metadata.quality.EvaluationMethodType                             Evaluation method type} «code list»<br>
- * {@code      └─}     {@linkplain org.apache.sis.metadata.iso.quality.AbstractResult                            Result} «abstract»<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.AbstractCompleteness                      Completeness} «abstract»<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultCompletenessCommission             Completeness commission}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultCompletenessOmission               Completeness omission}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.AbstractLogicalConsistency                Logical consistency} «abstract»<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultConceptualConsistency              Conceptual consistency}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultDomainConsistency                  Domain consistency}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultFormatConsistency                  Format consistency}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultTopologicalConsistency             Topological consistency}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.AbstractPositionalAccuracy                Positional accuracy} «abstract»<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultAbsoluteExternalPositionalAccuracy Absolute external positional accuracy}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultRelativeInternalPositionalAccuracy Relative internal positional accuracy}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultGriddedDataPositionalAccuracy      Gridded data positional accuracy}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.AbstractTemporalAccuracy                  Temporal accuracy} «abstract»<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultAccuracyOfATimeMeasurement         Accuracy of a time measurement}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultTemporalConsistency                Temporal consistency}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultTemporalValidity                   Temporal validity}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.AbstractThematicAccuracy                  Thematic accuracy} «abstract»<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultQuantitativeAttributeAccuracy      Quantitative attribute accuracy}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultNonQuantitativeAttributeAccuracy   Non quantitative attribute accuracy}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultThematicClassificationCorrectness  Thematic classification correctness}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultUsability                          Usability}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultConformanceResult                  Conformance result}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultQuantitativeResult                 Quantitative result}<br>
- *                     {@linkplain org.apache.sis.metadata.iso.quality.DefaultCoverageResult                     Coverage result}<br>
- * </td></tr></table>
- *
  * <h2>Null values, nil objects and collections</h2>
  * All constructors and setter methods accept {@code null} arguments.
  * A null argument value means that the metadata element can not be provided, and the reason for that is unspecified.
@@ -110,11 +39,9 @@
  * @author  Cédric Briançon (Geomatys)
  * @author  Guilhem Legal (Geomatys)
  * @author  Cullen Rombach (Image Matters)
- * @version 1.0
- *
- * @see <a href="https://issues.apache.org/jira/browse/SIS-394">SIS-394</a>
- *
- * @since 0.3
+ * @author  Alexis Gaillard (Geomatys)
+ * @version 1.3
+ * @since   0.3
  * @module
  */
 @XmlSchema(location="https://standards.iso.org/iso/19157/-2/mdq/1.0/mdq.xsd",
@@ -122,7 +49,7 @@
            xmlns = {
                 @XmlNs(prefix = "mdq", namespaceURI = Namespaces.MDQ),      // Metadata for Data Quality
                 @XmlNs(prefix = "mrd", namespaceURI = Namespaces.MRD),      // Metadata for Resource Distribution
-           //   @XmlNs(prefix = "dqc", namespaceURI = Namespaces.DQC),      // Data Quality Common Classes
+                @XmlNs(prefix = "dqm", namespaceURI = Namespaces.DQM),      // Data Quality Measures
                 @XmlNs(prefix = "mcc", namespaceURI = Namespaces.MCC),      // Metadata Common Classes
                 @XmlNs(prefix = "gmd", namespaceURI = LegacyNamespaces.GMD),
                 @XmlNs(prefix = "gmi", namespaceURI = LegacyNamespaces.GMI)
@@ -131,16 +58,28 @@
 @XmlJavaTypeAdapters({
     @XmlJavaTypeAdapter(CI_Citation.class),
     @XmlJavaTypeAdapter(DQ_Element.class),
+    @XmlJavaTypeAdapter(DQ_EvaluationMethod.class),
     @XmlJavaTypeAdapter(DQ_EvaluationMethodTypeCode.class),
+    @XmlJavaTypeAdapter(DQ_MeasureReference.class),
     @XmlJavaTypeAdapter(DQ_Result.class),
+    @XmlJavaTypeAdapter(DQ_StandaloneQualityReportInformation.class),
+    @XmlJavaTypeAdapter(DQM_BasicMeasure.class),
+    @XmlJavaTypeAdapter(DQM_Description.class),
+//  @XmlJavaTypeAdapter(DQM_Measure.class),             // Not directly referenced, but a "weak" association exists.
+    @XmlJavaTypeAdapter(DQM_Parameter.class),
+    @XmlJavaTypeAdapter(DQM_SourceReference.class),
+    @XmlJavaTypeAdapter(DQM_ValueStructure.class),
     @XmlJavaTypeAdapter(GO_Boolean.class),
     @XmlJavaTypeAdapter(GO_DateTime.class),
+    @XmlJavaTypeAdapter(GO_GenericName.class),
     @XmlJavaTypeAdapter(GO_Record.class),
     @XmlJavaTypeAdapter(GO_RecordType.class),
     @XmlJavaTypeAdapter(LI_Lineage.class),
+    @XmlJavaTypeAdapter(MD_BrowseGraphic.class),
     @XmlJavaTypeAdapter(MD_ContentInformation.class),
     @XmlJavaTypeAdapter(MD_Format.class),
     @XmlJavaTypeAdapter(MD_Identifier.class),
+//  @XmlJavaTypeAdapter(MD_RangeDimension.class),       // Pending new ISO 19157 revision.
     @XmlJavaTypeAdapter(MD_Scope.class),
     @XmlJavaTypeAdapter(MD_SpatialRepresentation.class),
     @XmlJavaTypeAdapter(MD_SpatialRepresentationTypeCode.class),
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/package-info.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/package-info.java
index 036790afa5..eae0077bc2 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/package-info.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/package-info.java
@@ -119,7 +119,7 @@
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Adrian Custer (Geomatys)
- * @version 1.2
+ * @version 1.3
  * @since   0.3
  * @module
  */
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/xml/Namespaces.java b/core/sis-metadata/src/main/java/org/apache/sis/xml/Namespaces.java
index fcb6af9123..46c7417140 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/xml/Namespaces.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/xml/Namespaces.java
@@ -60,6 +60,7 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
  *   <tr><td>mmi</td>    <td>Metadata for Maintenance Information</td>       <td>{@value #MMI}</td>   <td></td></tr>
  *   <tr><td>dqc</td>    <td>Data Quality Common Classes</td>                <td>{@value #DQC}</td>   <td></td></tr>
  *   <tr><td>mdq</td>    <td>Metadata for Data Quality</td>                  <td>{@value #MDQ}</td>   <td></td></tr>
+ *   <tr><td>dqm</td>    <td>Data Quality Measures</td>                      <td>{@value #DQM}</td>   <td></td></tr>
  *   <tr><td>mds</td>    <td>Metadata for Data and Services</td>             <td>{@value #MDS}</td>   <td></td></tr>
  *   <tr><td>srv</td>    <td>Metadata for Services</td>                      <td>{@value #SRV}</td>   <td>SIS 1.0</td></tr>
  *   <tr><td>mpc</td>    <td>Metadata for Portrayal Catalog</td>             <td>{@value #MPC}</td>   <td></td></tr>
@@ -87,7 +88,8 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
  * @author  Quentin Boileau (Geomatys)
  * @author  Guilhem Legal   (Geomatys)
  * @author  Cullen Rombach  (Image Matters)
- * @version 1.2
+ * @author  Alexis Gaillard (Geomatys)
+ * @version 1.3
  * @since   0.3
  * @module
  */
@@ -332,6 +334,16 @@ public final class Namespaces extends Static {
      */
     public static final String MDQ = "http://standards.iso.org/iso/19157/-2/mdq/1.0";
 
+    /**
+     * The <code>{@value}</code> URL. This is the namespace of
+     * <a href="http://standards.iso.org/iso/19157/-2/dqm/1.0/index.html">Data Quality Measures (DQM) version 1.0</a>.
+     * The usual prefix for this namespace is {@code "dqm"}.
+     *
+     * @category ISO
+     * @since 1.3
+     */
+    public static final String DQM = "http://standards.iso.org/iso/19157/-2/dqm/1.0";
+
     /**
      * The <code>{@value}</code> URL. This is the namespace of
      * <a href="http://standards.iso.org/iso/19115/-3/mds/1.0/index.html">Metadata for Data and Services (MDS) version 1.0</a>.
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/PropertyConsistencyCheck.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/PropertyConsistencyCheck.java
index 12ecac141a..d7e84f067c 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/PropertyConsistencyCheck.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/PropertyConsistencyCheck.java
@@ -49,7 +49,7 @@ import org.junit.Test;
  * package-private classes.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.2
+ * @version 1.3
  * @since   0.3
  * @module
  */
@@ -209,6 +209,7 @@ public abstract strictfp class PropertyConsistencyCheck extends AnnotationConsis
          * Try to instantiate the implementation. Every implementation should
          * have a no-args constructor, and their instantiation should never fail.
          */
+        testingMethod = null;
         testingClass = accessor.implementation.getCanonicalName();
         final Object instance;
         try {
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/AllMetadataTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/AllMetadataTest.java
index b8ea6f0ad0..6d0022a27c 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/AllMetadataTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/AllMetadataTest.java
@@ -18,6 +18,7 @@ package org.apache.sis.metadata.iso;
 
 import java.lang.reflect.Modifier;
 import org.opengis.annotation.UML;
+import org.opengis.annotation.Stereotype;
 import org.opengis.util.ControlledVocabulary;
 import org.apache.sis.internal.jaxb.Context;
 import org.apache.sis.metadata.MetadataStandard;
@@ -32,7 +33,7 @@ import org.junit.Test;
  * Tests all known {@link ISOMetadata} subclasses for JAXB annotations and getter/setter methods.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
+ * @version 1.3
  * @since   0.3
  * @module
  */
@@ -162,32 +163,54 @@ public final strictfp class AllMetadataTest extends PropertyConsistencyCheck {
             org.opengis.metadata.maintenance.ScopeDescription.class,
             org.opengis.metadata.quality.AbsoluteExternalPositionalAccuracy.class,
             org.opengis.metadata.quality.AccuracyOfATimeMeasurement.class,
+            org.opengis.metadata.quality.AggregationDerivation.class,
+            org.opengis.metadata.quality.BasicMeasure.class,
             org.opengis.metadata.quality.Completeness.class,
             org.opengis.metadata.quality.CompletenessCommission.class,
             org.opengis.metadata.quality.CompletenessOmission.class,
             org.opengis.metadata.quality.ConceptualConsistency.class,
+            org.opengis.metadata.quality.Confidence.class,
             org.opengis.metadata.quality.ConformanceResult.class,
             org.opengis.metadata.quality.CoverageResult.class,
+            org.opengis.metadata.quality.DataEvaluation.class,
             org.opengis.metadata.quality.DataQuality.class,
+            org.opengis.metadata.quality.Description.class,
+            org.opengis.metadata.quality.DescriptiveResult.class,
             org.opengis.metadata.quality.DomainConsistency.class,
             org.opengis.metadata.quality.Element.class,
+            org.opengis.metadata.quality.EvaluationMethod.class,
             org.opengis.metadata.quality.EvaluationMethodType.class,
             org.opengis.metadata.quality.FormatConsistency.class,
+            org.opengis.metadata.quality.FullInspection.class,
             org.opengis.metadata.quality.GriddedDataPositionalAccuracy.class,
+            org.opengis.metadata.quality.Homogeneity.class,
+            org.opengis.metadata.quality.IndirectEvaluation.class,
             org.opengis.metadata.quality.LogicalConsistency.class,
+            org.opengis.metadata.quality.Measure.class,
+            org.opengis.metadata.quality.MeasureReference.class,
+            org.opengis.metadata.quality.Metaquality.class,
             org.opengis.metadata.quality.NonQuantitativeAttributeAccuracy.class,
+            org.opengis.metadata.quality.NonQuantitativeAttributeCorrectness.class,
+            org.opengis.metadata.quality.Parameter.class,
             org.opengis.metadata.quality.PositionalAccuracy.class,
             org.opengis.metadata.quality.QuantitativeAttributeAccuracy.class,
             org.opengis.metadata.quality.QuantitativeResult.class,
             org.opengis.metadata.quality.RelativeInternalPositionalAccuracy.class,
+            org.opengis.metadata.quality.Representativity.class,
             org.opengis.metadata.quality.Result.class,
+            org.opengis.metadata.quality.SampleBasedInspection.class,
+            org.opengis.metadata.quality.SourceReference.class,
+            org.opengis.metadata.quality.StandaloneQualityReportInformation.class,
             org.opengis.metadata.quality.TemporalAccuracy.class,
             org.opengis.metadata.quality.TemporalConsistency.class,
+            org.opengis.metadata.quality.TemporalQuality.class,
             org.opengis.metadata.quality.TemporalValidity.class,
             org.opengis.metadata.quality.ThematicAccuracy.class,
             org.opengis.metadata.quality.ThematicClassificationCorrectness.class,
             org.opengis.metadata.quality.TopologicalConsistency.class,
             org.opengis.metadata.quality.Usability.class,
+            org.opengis.metadata.quality.UsabilityElement.class,
+            org.opengis.metadata.quality.ValueStructure.class,
             org.opengis.metadata.spatial.CellGeometry.class,
             org.opengis.metadata.spatial.Dimension.class,
             org.opengis.metadata.spatial.DimensionNameType.class,
@@ -207,7 +230,8 @@ public final strictfp class AllMetadataTest extends PropertyConsistencyCheck {
     }
 
     /**
-     * {@inheritDoc}
+     * For every properties in every non-{@code Codelist} types listed in the constructor,
+     * tests the property values. This method verifies initial conditions, then sets random values.
      * Once the test is completed, this method verifies that the expected warnings have been logged,
      * and no unexpected logging occurred.
      */
@@ -222,6 +246,30 @@ public final strictfp class AllMetadataTest extends PropertyConsistencyCheck {
         loggings.assertNoUnexpectedLog();
     }
 
+    /**
+     * Returns the name of the XML root element for an interface described by the given UML.
+     * This method does the generic work described in super-class, then applies special rules
+     * specific to the metadata package.
+     */
+    @Override
+    protected String getExpectedXmlRootElementName(final Stereotype stereotype, final UML uml) {
+        String name = super.getExpectedXmlRootElementName(stereotype, uml);
+        if (name.equals("DQ_CoverageResult")) name = "QE_CoverageResult";
+        return name;
+    }
+
+    /**
+     * Returns the name of the XML type for an interface described by the given UML.
+     * This method does the generic work described in super-class, then applies special rules
+     * specific to the metadata package.
+     */
+    @Override
+    protected String getExpectedXmlTypeName(final Stereotype stereotype, final UML uml) {
+        String name = super.getExpectedXmlTypeName(stereotype, uml);
+        if (name.equals("DQ_CoverageResult_Type")) name = "QE_CoverageResult_Type";
+        return name;
+    }
+
     /**
      * Returns the ISO 19115-3 wrapper for the given GeoAPI type,
      * or {@code null} if no adapter is expected for the given type.
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/quality/AbstractPositionalAccuracyTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/quality/AbstractPositionalAccuracyTest.java
index 75e58417ed..5341831c4b 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/quality/AbstractPositionalAccuracyTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/quality/AbstractPositionalAccuracyTest.java
@@ -24,7 +24,6 @@ import org.apache.sis.internal.jaxb.lan.FreeTextMarshallingTest;
 import org.apache.sis.util.Version;
 import org.apache.sis.metadata.xml.TestUsingFile;
 import org.apache.sis.test.DependsOn;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import static org.opengis.test.Assert.*;
@@ -37,7 +36,7 @@ import static org.apache.sis.test.TestUtilities.getSingleton;
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
  * @author  Cullen Rombach (Image Matters)
- * @version 1.0
+ * @version 1.3
  * @since   0.3
  * @module
  */
@@ -55,11 +54,9 @@ public final strictfp class AbstractPositionalAccuracyTest extends TestUsingFile
      *
      * @throws JAXBException if an error occurred during the during marshalling / unmarshalling processes.
      *
-     * @see <a href="https://issues.apache.org/jira/browse/SIS-394">Issue SIS-394</a>
      * @see FreeTextMarshallingTest
      */
     @Test
-    @Ignore("Depends on SIS-394")
     public void testXML() throws JAXBException {
         roundtrip(XML2016+FILENAME, VERSION_2014);
     }
@@ -78,16 +75,16 @@ public final strictfp class AbstractPositionalAccuracyTest extends TestUsingFile
      * Unmarshals the given file and verify the content.
      * Then marshals the object and verify that we get equivalent XML.
      */
+    @SuppressWarnings("deprecation")
     private void roundtrip(final String filename, final Version version) throws JAXBException {
         final AbstractElement metadata = unmarshalFile(AbstractElement.class, filename);
         final InternationalString nameOfMeasure = getSingleton(metadata.getNamesOfMeasure());
         /*
          * Programmatic verification of the text group.
          */
-        assertEquals("Quantitative quality measure focusing on the effective class percent "
-                + "regarded to the total surface size", nameOfMeasure.toString(Locale.ENGLISH));
-        assertEquals("Mesure qualité quantitative de type pourcentage de représentation de la "
-                + "classe par rapport à la surface totale", nameOfMeasure.toString(Locale.FRENCH));
+        assertEquals("Name of a measure used for testing accuracy", nameOfMeasure.toString(Locale.ENGLISH));
+        assertEquals("Nom d'une mesure utilisée pour tester la précision", nameOfMeasure.toString(Locale.FRENCH));
+        assertEquals("An identifier", metadata.getMeasureIdentification().getCode());
         /*
          * Opportunist test. While it was not the purpose of this test, the above metadata
          * needs to contain a "result" element in order to pass XML validation test.
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/AnnotationConsistencyCheck.java b/core/sis-metadata/src/test/java/org/apache/sis/test/xml/AnnotationConsistencyCheck.java
index 0b8b75578f..47e1399d0c 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/AnnotationConsistencyCheck.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/test/xml/AnnotationConsistencyCheck.java
@@ -72,7 +72,7 @@ import junit.framework.AssertionFailedError;
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.1
+ * @version 1.3
  * @since   0.3
  * @module
  */
@@ -270,13 +270,13 @@ public abstract strictfp class AnnotationConsistencyCheck extends TestCase {
             }
             case "lineage": {
                 if (org.opengis.metadata.quality.DataQuality.class.isAssignableFrom(impl)) {
-                    return LegacyNamespaces.GMD;            // Deprecated property in a type not yet upgraded.
+                    return LegacyNamespaces.GMD;            // Deprecated property after upgrade to ISO 19157.
                 }
                 break;
             }
             case "errorStatistic": {
                 if (org.opengis.metadata.quality.QuantitativeResult.class.isAssignableFrom(impl)) {
-                    return LegacyNamespaces.GMD;            // Deprecated property in a type not yet upgraded.
+                    return LegacyNamespaces.GMD;            // Deprecated property after upgrade to ISO 19157.
                 }
                 break;
             }
@@ -287,7 +287,7 @@ public abstract strictfp class AnnotationConsistencyCheck extends TestCase {
             case "evaluationMethodDescription":
             case "evaluationProcedure": {
                 if (org.opengis.metadata.quality.Element.class.isAssignableFrom(impl)) {
-                    return LegacyNamespaces.GMD;            // Deprecated property in a type not yet upgraded.
+                    return LegacyNamespaces.GMD;            // Deprecated properties after upgrade to ISO 19157.
                 }
                 break;
             }
@@ -304,29 +304,20 @@ public abstract strictfp class AnnotationConsistencyCheck extends TestCase {
                 break;
             }
         }
-        /*
-         * GeoAPI has not yet been upgraded to ISO 19157. Interfaces in the "org.opengis.metadata.quality"
-         * package are still defined according the old specification. Those types have the "DQ_" or "QE_"
-         * prefix. This issue applies also to properties (starting with a lower case).
-         */
         if (identifier.startsWith("DQ_")) {
-            assertEquals("Unexpected @Specification value.", Specification.ISO_19115, uml.specification());
-            assertEquals("Specification version should be legacy ISO 19115.", (short) 2003, uml.version());
+            assertEquals("Unexpected @Specification value.", Specification.ISO_19157, uml.specification());
+            assertEquals("Specification version should be ISO 19157.", (short) 0, uml.version());
             return Namespaces.MDQ;
         }
+        if (identifier.startsWith("DQM_")) {
+            assertEquals("Unexpected @Specification value.", Specification.ISO_19157, uml.specification());
+            assertEquals("Specification version should be ISO 19157.", (short) 0, uml.version());
+            return Namespaces.DQM;
+        }
         if (identifier.startsWith("QE_")) {
             assertEquals("Unexpected @Specification value.", Specification.ISO_19115_2, uml.specification());
-            switch (uml.version()) {
-                case 0:    return Namespaces.MDQ;
-                case 2009: return LegacyNamespaces.GMI;
-                default: fail("Unexpected version number in " + uml);
-            }
-        }
-        if (org.opengis.metadata.quality.DataQuality.class.isAssignableFrom(impl) ||    // For properties in those types.
-            org.opengis.metadata.quality.Element.class.isAssignableFrom(impl) ||
-            org.opengis.metadata.quality.Result.class.isAssignableFrom(impl))
-        {
-            return Namespaces.MDQ;
+            assertEquals("Specification version should be legacy ISO 19115-2.", (short) 2009, uml.version());
+            return LegacyNamespaces.GMI;
         }
         /*
          * General cases (after we processed all the special cases)
@@ -344,6 +335,11 @@ public abstract strictfp class AnnotationConsistencyCheck extends TestCase {
             case ISO_19115_3: return CodeListUID.METADATA_ROOT;
             case ISO_19139:   return LegacyNamespaces.GMX;
             case ISO_19108:   return LegacyNamespaces.GMD;
+            case ISO_19157: {
+                // Case for a method. By contrast, above `identifier.startsWith(…)` checks were for types.
+                final UML parent = TestUtilities.getSingleton(impl.getInterfaces()).getAnnotation(UML.class);
+                return parent.identifier().startsWith("DQM_") ? Namespaces.DQM : Namespaces.MDQ;
+            }
             default: throw new IllegalArgumentException(uml.toString());
         }
     }
@@ -582,6 +578,28 @@ public abstract strictfp class AnnotationConsistencyCheck extends TestCase {
                 return org.opengis.metadata.content.SampleDimension.class.isAssignableFrom(dc)
                         && !org.opengis.metadata.content.Band.class.isAssignableFrom(dc);
             }
+            /*
+             * `Metaquality` override `Element` with only a change of obligation.
+             * We do not duplicate the Java methods only for that.
+             */
+            case "getDerivedElements": {
+                return org.opengis.metadata.quality.Metaquality.class.isAssignableFrom(method.getDeclaringClass());
+            }
+            /*
+             * - "resultContent" is a property in the ISO 10157 model but not yet in the XML schema.
+             * - "resultFormat" and "resultFile" differ in XML schema compared to abstract model (different obligation).
+             */
+            case "getResultContent":
+            case "getResultFormat":
+            case "getResultFile": {
+                return org.opengis.metadata.quality.CoverageResult.class.isAssignableFrom(method.getDeclaringClass());
+            }
+            /*
+             * GeoAPI addition, not in standard model.
+             */
+            case "getMeasure": {
+                return org.opengis.metadata.quality.Element.class.isAssignableFrom(method.getDeclaringClass());
+            }
             /*
              * Standard Java methods overridden in some GeoAPI interfaces for Javadoc purposes.
              */
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaCompliance.java b/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaCompliance.java
index 0389c970e4..2372c71526 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaCompliance.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaCompliance.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.test.xml;
 
+import java.io.File;
 import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Files;
@@ -52,7 +53,7 @@ import org.apache.sis.util.StringBuilders;
  * implementation easier, by reducing the amount of {@link Map}s that we need to manage.</p>
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
+ * @version 1.3
  * @since   1.0
  * @module
  */
@@ -132,7 +133,7 @@ public final strictfp class SchemaCompliance extends SchemaInformation {
                         path = classRootDirectory.relativize(path);
                         buffer.setLength(0);
                         buffer.append(path.toString()).setLength(buffer.length() - 6);      // Remove ".class" suffix.
-                        StringBuilders.replace(buffer, '/', '.');
+                        StringBuilders.replace(buffer, File.separatorChar, '.');
                         final Class<?> c = Class.forName(buffer.toString());
                         if (verifier == null) {
                             verifier = new PackageVerifier(this, c.getPackage());
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/util/iso/TypesTest.java b/core/sis-metadata/src/test/java/org/apache/sis/util/iso/TypesTest.java
index 17161db33c..107ef0978f 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/util/iso/TypesTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/util/iso/TypesTest.java
@@ -202,7 +202,7 @@ public final strictfp class TypesTest extends TestCase {
                 description.toString(Locale.ROOT));
         assertEquals("Online instructions for transferring data from one storage device or system to another.",
                 description.toString(Locale.ENGLISH));
-        assertEquals("Transfert de la ressource d'un système à un autre.",
+        assertEquals("Transfert de la ressource d’un système à un autre.",
                 description.toString(Locale.FRENCH));
     }
 
diff --git a/core/sis-metadata/src/test/resources/org/apache/sis/metadata/xml/2007/PositionalAccuracy.xml b/core/sis-metadata/src/test/resources/org/apache/sis/metadata/xml/2007/PositionalAccuracy.xml
index 8173de223d..ed79e668c5 100644
--- a/core/sis-metadata/src/test/resources/org/apache/sis/metadata/xml/2007/PositionalAccuracy.xml
+++ b/core/sis-metadata/src/test/resources/org/apache/sis/metadata/xml/2007/PositionalAccuracy.xml
@@ -30,13 +30,20 @@
     opportunist check of xsi:type declaration.
   -->
   <gmd:nameOfMeasure xsi:type="gmd:PT_FreeText_PropertyType">
-    <gco:CharacterString>Quantitative quality measure focusing on the effective class percent regarded to the total surface size</gco:CharacterString>
+    <gco:CharacterString>Name of a measure used for testing accuracy</gco:CharacterString>
     <gmd:PT_FreeText>
       <gmd:textGroup>
-        <gmd:LocalisedCharacterString locale="#locale-fra">Mesure qualité quantitative de type pourcentage de représentation de la classe par rapport à la surface totale</gmd:LocalisedCharacterString>
+        <gmd:LocalisedCharacterString locale="#locale-fra">Nom d'une mesure utilisée pour tester la précision</gmd:LocalisedCharacterString>
       </gmd:textGroup>
     </gmd:PT_FreeText>
   </gmd:nameOfMeasure>
+  <gmd:measureIdentification>
+    <gmd:MD_Identifier>
+      <gmd:code>
+        <gco:CharacterString>An identifier</gco:CharacterString>
+      </gmd:code>
+    </gmd:MD_Identifier>
+  </gmd:measureIdentification>
   <gmd:result>
     <!--
       The xsi:type declaration below is useless, but we put it
diff --git a/core/sis-metadata/src/test/resources/org/apache/sis/metadata/xml/2016/PositionalAccuracy.xml b/core/sis-metadata/src/test/resources/org/apache/sis/metadata/xml/2016/PositionalAccuracy.xml
index ec8d6b7a23..fb1491b8b7 100644
--- a/core/sis-metadata/src/test/resources/org/apache/sis/metadata/xml/2016/PositionalAccuracy.xml
+++ b/core/sis-metadata/src/test/resources/org/apache/sis/metadata/xml/2016/PositionalAccuracy.xml
@@ -25,8 +25,8 @@
     xmlns:lan="http://standards.iso.org/iso/19115/-3/lan/1.0"
     xmlns:gco="http://standards.iso.org/iso/19115/-3/gco/1.0"
     xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation = "http://standards.iso.org/iso/19157/-2/mdq/1.0 https://standards.iso.org/iso/19157/-2/mdq/1.0/mdq.xsd
-                          http://standards.iso.org/iso/19115/-3/lan/1.0 https://standards.iso.org/iso/19115/-3/lan/1.0/lan.xsd">
+    xsi:schemaLocation = "http://standards.iso.org/iso/19157/-2/mdq/1.0 https://schemas.isotc211.org/19157/-2/mdq/1.0/mdq.xsd
+                          http://standards.iso.org/iso/19115/-3/lan/1.0 https://schemas.isotc211.org/19115/-3/lan/1.0/lan.xsd">
 
   <!--
     The <measure> element below is the main purpose of MetadataMarshallingTest.testPositionalAccuracy().
@@ -34,20 +34,23 @@
     of an opportunist check of xsi:type declaration.
   -->
   <mdq:measure>
-   <mdq:DQ_MeasureReference>
+    <mdq:DQ_MeasureReference>
       <mdq:measureIdentification>
-         <mcc:MD_Identifier>
-            <mcc:code xsi:type="lan:PT_FreeText_PropertyType">
-              <gco:CharacterString>Quantitative quality measure focusing on the effective class percent regarded to the total surface size</gco:CharacterString>
-              <lan:PT_FreeText>
-                <lan:textGroup>
-                  <lan:LocalisedCharacterString locale="#locale-fra">Mesure qualité quantitative de type pourcentage de représentation de la classe par rapport à la surface totale</lan:LocalisedCharacterString>
-                </lan:textGroup>
-              </lan:PT_FreeText>
-            </mcc:code>
-         </mcc:MD_Identifier>
+        <mcc:MD_Identifier>
+          <mcc:code>
+            <gco:CharacterString>An identifier</gco:CharacterString>
+          </mcc:code>
+        </mcc:MD_Identifier>
       </mdq:measureIdentification>
-   </mdq:DQ_MeasureReference>
+      <mdq:nameOfMeasure xsi:type="lan:PT_FreeText_PropertyType">
+        <gco:CharacterString>Name of a measure used for testing accuracy</gco:CharacterString>
+        <lan:PT_FreeText>
+          <lan:textGroup>
+            <lan:LocalisedCharacterString locale="#locale-fra">Nom d'une mesure utilisée pour tester la précision</lan:LocalisedCharacterString>
+          </lan:textGroup>
+        </lan:PT_FreeText>
+      </mdq:nameOfMeasure>
+    </mdq:DQ_MeasureReference>
   </mdq:measure>
   <mdq:result>
     <!--
@@ -67,7 +70,7 @@
                 <gco:DateTime>2009-08-12T19:40:17.653+02:00</gco:DateTime>
               </cit:date>
               <cit:dateType>
-                <cit:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode" codeListValue="creation">Creation</cit:CI_DateTypeCode>
+                <cit:CI_DateTypeCode codeList="http://standards.iso.org/iso/19115/resources/Codelist/cat/codelists.xml#CI_DateTypeCode" codeListValue="creation">Creation</cit:CI_DateTypeCode>
               </cit:dateType>
             </cit:CI_Date>
           </cit:date>