diff --git a/cps-ri/src/main/java/org/onap/cps/spi/entities/YangResourceEntity.java b/cps-ri/src/main/java/org/onap/cps/spi/entities/YangResourceEntity.java
index 4763d68..032745b 100644
--- a/cps-ri/src/main/java/org/onap/cps/spi/entities/YangResourceEntity.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/entities/YangResourceEntity.java
@@ -1,6 +1,7 @@
 /*
  *  ============LICENSE_START=======================================================
  *  Copyright (C) 2020 Pantheon.tech
+ *  Modifications Copyright (C) 2021 Nordix Foundation
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -61,6 +62,14 @@
     @Column
     private String content;
 
+    @NotNull
+    @Column
+    private String moduleName;
+
+    @NotNull
+    @Column
+    private String revision;
+
     @ManyToMany(mappedBy = "yangResources")
     private Set<SchemaSetEntity> schemaSets;
 
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/entities/YangResourceModuleReference.java b/cps-ri/src/main/java/org/onap/cps/spi/entities/YangResourceModuleReference.java
new file mode 100644
index 0000000..3c39c6b
--- /dev/null
+++ b/cps-ri/src/main/java/org/onap/cps/spi/entities/YangResourceModuleReference.java
@@ -0,0 +1,31 @@
+/*
+ *  ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation
+ *  ================================================================================
+ *  Licensed 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.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+
+package org.onap.cps.spi.entities;
+
+import org.springframework.beans.factory.annotation.Value;
+
+public interface YangResourceModuleReference {
+
+    @Value("#{target.module_name}")
+    String getModuleName();
+
+    String getRevision();
+}
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java
index 1b3dc24..535cbe2 100755
--- a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java
@@ -22,9 +22,16 @@
 
 package org.onap.cps.spi.impl;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableSet;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -42,14 +49,22 @@
 import org.onap.cps.spi.entities.AnchorEntity;
 import org.onap.cps.spi.entities.SchemaSetEntity;
 import org.onap.cps.spi.entities.YangResourceEntity;
+import org.onap.cps.spi.entities.YangResourceModuleReference;
 import org.onap.cps.spi.exceptions.AlreadyDefinedException;
 import org.onap.cps.spi.exceptions.DuplicatedYangResourceException;
+import org.onap.cps.spi.exceptions.ModelValidationException;
 import org.onap.cps.spi.exceptions.SchemaSetInUseException;
+import org.onap.cps.spi.model.ModuleReference;
 import org.onap.cps.spi.repository.AnchorRepository;
 import org.onap.cps.spi.repository.DataspaceRepository;
 import org.onap.cps.spi.repository.FragmentRepository;
 import org.onap.cps.spi.repository.SchemaSetRepository;
 import org.onap.cps.spi.repository.YangResourceRepository;
+import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
+import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
+import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
+import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangModelDependencyInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.retry.annotation.Backoff;
@@ -63,6 +78,8 @@
 
     private static final String YANG_RESOURCE_CHECKSUM_CONSTRAINT_NAME = "yang_resource_checksum_key";
     private static final Pattern CHECKSUM_EXCEPTION_PATTERN = Pattern.compile(".*\\(checksum\\)=\\((\\w+)\\).*");
+    private static final Pattern RFC6020_RECOMMENDED_FILENAME_PATTERN = Pattern
+            .compile("([\\w-]+)@(\\d{4}-\\d{2}-\\d{2})(?:\\.yang)?", Pattern.CASE_INSENSITIVE);
 
     @Autowired
     private YangResourceRepository yangResourceRepository;
@@ -83,6 +100,29 @@
     private CpsAdminPersistenceService cpsAdminPersistenceService;
 
     @Override
+    public Map<String, String> getYangSchemaResources(final String dataspaceName, final String schemaSetName) {
+        final var dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
+        final var schemaSetEntity =
+            schemaSetRepository.getByDataspaceAndName(dataspaceEntity, schemaSetName);
+        return schemaSetEntity.getYangResources().stream().collect(
+            Collectors.toMap(YangResourceEntity::getName, YangResourceEntity::getContent));
+    }
+
+    @Override
+    public Map<String, String> getYangSchemaSetResources(final String dataspaceName, final String anchorName) {
+        final var anchor = cpsAdminPersistenceService.getAnchor(dataspaceName, anchorName);
+        return getYangSchemaResources(dataspaceName, anchor.getSchemaSetName());
+    }
+
+    @Override
+    public List<ModuleReference> getAllYangResourcesModuleReferences() {
+        final List<YangResourceModuleReference> yangResourceModuleReferenceList =
+                yangResourceRepository.findAllModuleNameAndRevision();
+        return yangResourceModuleReferenceList.stream().map(CpsModulePersistenceServiceImpl::toModuleReference)
+                .collect(Collectors.toList());
+    }
+
+    @Override
     @Transactional
     // A retry is made to store the schema set if it fails because of duplicated yang resource exception that
     // can occur in case of specific concurrent requests.
@@ -91,7 +131,7 @@
         final Map<String, String> yangResourcesNameToContentMap) {
 
         final var dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
-        final Set<YangResourceEntity> yangResourceEntities = synchronizeYangResources(yangResourcesNameToContentMap);
+        final var yangResourceEntities = synchronizeYangResources(yangResourcesNameToContentMap);
         final var schemaSetEntity = new SchemaSetEntity();
         schemaSetEntity.setName(schemaSetName);
         schemaSetEntity.setDataspace(dataspaceEntity);
@@ -103,13 +143,37 @@
         }
     }
 
+    @Override
+    @Transactional
+    public void deleteSchemaSet(final String dataspaceName, final String schemaSetName,
+        final CascadeDeleteAllowed cascadeDeleteAllowed) {
+        final var dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
+        final var schemaSetEntity =
+            schemaSetRepository.getByDataspaceAndName(dataspaceEntity, schemaSetName);
+
+        final Collection<AnchorEntity> anchorEntities = anchorRepository.findAllBySchemaSet(schemaSetEntity);
+        if (!anchorEntities.isEmpty()) {
+            if (cascadeDeleteAllowed != CascadeDeleteAllowed.CASCADE_DELETE_ALLOWED) {
+                throw new SchemaSetInUseException(dataspaceName, schemaSetName);
+            }
+            fragmentRepository.deleteByAnchorIn(anchorEntities);
+            anchorRepository.deleteAll(anchorEntities);
+        }
+        schemaSetRepository.delete(schemaSetEntity);
+        yangResourceRepository.deleteOrphans();
+    }
+
     private Set<YangResourceEntity> synchronizeYangResources(final Map<String, String> yangResourcesNameToContentMap) {
         final Map<String, YangResourceEntity> checksumToEntityMap = yangResourcesNameToContentMap.entrySet().stream()
             .map(entry -> {
                 final String checksum = DigestUtils.sha256Hex(entry.getValue().getBytes(StandardCharsets.UTF_8));
+                final Map<String, String> moduleNameAndRevisionMap = createModuleNameAndRevisionMap(entry.getKey(),
+                            entry.getValue());
                 final var yangResourceEntity = new YangResourceEntity();
                 yangResourceEntity.setName(entry.getKey());
                 yangResourceEntity.setContent(entry.getValue());
+                yangResourceEntity.setModuleName(moduleNameAndRevisionMap.get("moduleName"));
+                yangResourceEntity.setRevision(moduleNameAndRevisionMap.get("revision"));
                 yangResourceEntity.setChecksum(checksum);
                 return yangResourceEntity;
             })
@@ -147,6 +211,42 @@
             .build();
     }
 
+    private static Map<String, String> createModuleNameAndRevisionMap(final String sourceName, final String source) {
+        final Map<String, String> metaDataMap = new HashMap<>();
+        final var revisionSourceIdentifier =
+                createIdentifierFromSourceName(checkNotNull(sourceName));
+
+        final var tempYangTextSchemaSource = new YangTextSchemaSource(revisionSourceIdentifier) {
+            @Override
+            protected MoreObjects.ToStringHelper addToStringAttributes(
+                    final MoreObjects.ToStringHelper toStringHelper) {
+                return toStringHelper;
+            }
+
+            @Override
+            public InputStream openStream() {
+                return new ByteArrayInputStream(source.getBytes(StandardCharsets.UTF_8));
+            }
+        };
+        try {
+            final var dependencyInfo = YangModelDependencyInfo.forYangText(tempYangTextSchemaSource);
+            metaDataMap.put("moduleName", dependencyInfo.getName());
+            metaDataMap.put("revision", dependencyInfo.getFormattedRevision());
+        } catch (final YangSyntaxErrorException | IOException e) {
+            throw new ModelValidationException("Yang resource is invalid.",
+                   String.format("Yang syntax validation failed for resource %s:%n%s", sourceName, e.getMessage()), e);
+        }
+        return metaDataMap;
+    }
+
+    private static RevisionSourceIdentifier createIdentifierFromSourceName(final String sourceName) {
+        final var matcher = RFC6020_RECOMMENDED_FILENAME_PATTERN.matcher(sourceName);
+        if (matcher.matches()) {
+            return RevisionSourceIdentifier.create(matcher.group(1), Revision.of(matcher.group(2)));
+        }
+        return RevisionSourceIdentifier.create(sourceName);
+    }
+
     /**
      * Convert the specified data integrity violation exception into a CPS duplicated Yang resource exception
      * if the cause of the error is a yang checksum database constraint violation.
@@ -179,20 +279,6 @@
     }
 
     /**
-     * Get the checksum that caused the constraint violation exception.
-     * @param exception the exception having the checksum in error.
-     * @return the checksum in error or null if not found.
-     */
-    private String getDuplicatedChecksumFromException(final ConstraintViolationException exception) {
-        String checksum = null;
-        final var matcher = CHECKSUM_EXCEPTION_PATTERN.matcher(exception.getSQLException().getMessage());
-        if (matcher.find() && matcher.groupCount() == 1) {
-            checksum = matcher.group(1);
-        }
-        return checksum;
-    }
-
-    /**
      * Get the name of the yang resource having the specified checksum.
      * @param checksum the checksum. Null is supported.
      * @param yangResourceEntities the list of yang resources to search among.
@@ -208,38 +294,24 @@
                         .orElse(null);
     }
 
-    @Override
-    public Map<String, String> getYangSchemaResources(final String dataspaceName, final String schemaSetName) {
-        final var dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
-        final var schemaSetEntity =
-            schemaSetRepository.getByDataspaceAndName(dataspaceEntity, schemaSetName);
-        return schemaSetEntity.getYangResources().stream().collect(
-            Collectors.toMap(YangResourceEntity::getName, YangResourceEntity::getContent));
-    }
-
-    @Override
-    public Map<String, String> getYangSchemaSetResources(final String dataspaceName, final String anchorName) {
-        final var anchor = cpsAdminPersistenceService.getAnchor(dataspaceName, anchorName);
-        return getYangSchemaResources(dataspaceName, anchor.getSchemaSetName());
-    }
-
-    @Override
-    @Transactional
-    public void deleteSchemaSet(final String dataspaceName, final String schemaSetName,
-        final CascadeDeleteAllowed cascadeDeleteAllowed) {
-        final var dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
-        final var schemaSetEntity =
-            schemaSetRepository.getByDataspaceAndName(dataspaceEntity, schemaSetName);
-
-        final Collection<AnchorEntity> anchorEntities = anchorRepository.findAllBySchemaSet(schemaSetEntity);
-        if (!anchorEntities.isEmpty()) {
-            if (cascadeDeleteAllowed != CascadeDeleteAllowed.CASCADE_DELETE_ALLOWED) {
-                throw new SchemaSetInUseException(dataspaceName, schemaSetName);
-            }
-            fragmentRepository.deleteByAnchorIn(anchorEntities);
-            anchorRepository.deleteAll(anchorEntities);
+    /**
+     * Get the checksum that caused the constraint violation exception.
+     * @param exception the exception having the checksum in error.
+     * @return the checksum in error or null if not found.
+     */
+    private String getDuplicatedChecksumFromException(final ConstraintViolationException exception) {
+        String checksum = null;
+        final var matcher = CHECKSUM_EXCEPTION_PATTERN.matcher(exception.getSQLException().getMessage());
+        if (matcher.find() && matcher.groupCount() == 1) {
+            checksum = matcher.group(1);
         }
-        schemaSetRepository.delete(schemaSetEntity);
-        yangResourceRepository.deleteOrphans();
+        return checksum;
+    }
+
+    private static ModuleReference toModuleReference(final YangResourceModuleReference yangResourceModuleReference) {
+        return ModuleReference.builder()
+                .name(yangResourceModuleReference.getModuleName())
+                .revision(yangResourceModuleReference.getRevision())
+                .build();
     }
 }
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/repository/YangResourceRepository.java b/cps-ri/src/main/java/org/onap/cps/spi/repository/YangResourceRepository.java
index 25d7689..fe8787f 100644
--- a/cps-ri/src/main/java/org/onap/cps/spi/repository/YangResourceRepository.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/repository/YangResourceRepository.java
@@ -1,6 +1,7 @@
 /*
  *  ============LICENSE_START=======================================================
  *  Copyright (C) 2020 Pantheon.tech
+ *  Modifications Copyright (C) Nordix Foundation
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 import java.util.Set;
 import javax.validation.constraints.NotNull;
 import org.onap.cps.spi.entities.YangResourceEntity;
+import org.onap.cps.spi.entities.YangResourceModuleReference;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
@@ -33,6 +35,9 @@
 
     List<YangResourceEntity> findAllByChecksumIn(@NotNull Set<String> checksum);
 
+    @Query(value = "SELECT module_name, revision FROM yang_resource", nativeQuery = true)
+    List<YangResourceModuleReference> findAllModuleNameAndRevision();
+
     @Modifying
     @Query(value = "DELETE FROM yang_resource yr WHERE NOT EXISTS "
         + "(SELECT 1 FROM schema_set_yang_resources ssyr WHERE ssyr.yang_resource_id = yr.id)", nativeQuery = true)
diff --git a/cps-ri/src/main/resources/changelog/changelog-master.yaml b/cps-ri/src/main/resources/changelog/changelog-master.yaml
index 6c01583..14f3726 100644
--- a/cps-ri/src/main/resources/changelog/changelog-master.yaml
+++ b/cps-ri/src/main/resources/changelog/changelog-master.yaml
@@ -35,3 +35,5 @@
       file: changelog/db/changes/09-loadData-dmi-registry-schema-set.yaml
   - include:
       file: changelog/db/changes/10-loadData-dmi-registry-fragment.yaml
+  - include:
+      file: changelog/db/changes/11-add-column-to-yang-resources-table.yaml
diff --git a/cps-ri/src/main/resources/changelog/db/changes/11-add-column-to-yang-resources-table.yaml b/cps-ri/src/main/resources/changelog/db/changes/11-add-column-to-yang-resources-table.yaml
new file mode 100644
index 0000000..a2bfb67
--- /dev/null
+++ b/cps-ri/src/main/resources/changelog/db/changes/11-add-column-to-yang-resources-table.yaml
@@ -0,0 +1,40 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2021 Nordix Foundation.
+# ================================================================================
+# Licensed 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+databaseChangeLog:
+  - changeSet:
+      id: 11
+      label: add-module-name-and-revision-column
+      author: cps
+      changes:
+        - addColumn:
+            tableName: yang_resource
+            columns:
+              - column:
+                  name: module_name
+                  type: TEXT
+              - column:
+                  name: revision
+                  type: TEXT
+  - changeSet:
+      id: 11.1
+      label: update-previous-data-module-name-and-revision
+      author: cps
+      changes:
+        - sql:
+            sql: update yang_resource set module_name = 'dummy_module_name', revision = '2021-08-04' where module_name is null and revision is null
diff --git a/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsModulePersistenceServiceIntegrationSpec.groovy b/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsModulePersistenceServiceIntegrationSpec.groovy
index dace82a..f5d5fc6 100644
--- a/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsModulePersistenceServiceIntegrationSpec.groovy
+++ b/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsModulePersistenceServiceIntegrationSpec.groovy
@@ -30,6 +30,7 @@
 import org.onap.cps.spi.exceptions.AlreadyDefinedException
 import org.onap.cps.spi.exceptions.SchemaSetInUseException
 import org.onap.cps.spi.exceptions.SchemaSetNotFoundException
+import org.onap.cps.spi.model.ModuleReference
 import org.onap.cps.spi.repository.AnchorRepository
 import org.onap.cps.spi.repository.SchemaSetRepository
 import org.springframework.beans.factory.annotation.Autowired
@@ -57,10 +58,27 @@
 
     static final Long NEW_RESOURCE_ABSTRACT_ID = 0L
     static final String NEW_RESOURCE_NAME = 'some new resource'
-    static final String NEW_RESOURCE_CONTENT = 'some resource content'
-    static final String NEW_RESOURCE_CHECKSUM = '09002da02ee2683898d2c81c67f9e22cdbf8577d8c2de16c84d724e4ae44a0a6'
+    static final String NEW_RESOURCE_CONTENT = 'module stores {\n' +
+            '    yang-version 1.1;\n' +
+            '    namespace "org:onap:ccsdk:sample";\n' +
+            '\n' +
+            '    prefix book-store;\n' +
+            '\n' +
+            '    revision "2020-09-15" {\n' +
+            '        description\n' +
+            '        "Sample Model";\n' +
+            '    }' +
+            '}'
+    static final String NEW_RESOURCE_CHECKSUM = 'b13faef573ed1374139d02c40d8ce09c80ea1dc70e63e464c1ed61568d48d539'
+    static final String NEW_RESOURCE_MODULE_NAME = 'stores'
+    static final String NEW_RESOURCE_REVISION = '2020-09-15'
+    static final ModuleReference newModuleReference = ModuleReference.builder().name(NEW_RESOURCE_MODULE_NAME)
+            .revision(NEW_RESOURCE_REVISION).build()
 
     def newYangResourcesNameToContentMap = [(NEW_RESOURCE_NAME):NEW_RESOURCE_CONTENT]
+    def allYangResourcesModuleAndRevisionList = [ModuleReference.builder().build(),ModuleReference.builder().build(),
+                                                 ModuleReference.builder().build(),ModuleReference.builder().build(),
+                                                 ModuleReference.builder().build(), newModuleReference]
     def dataspaceEntity
 
     def setup() {
@@ -85,7 +103,7 @@
             objectUnderTest.storeSchemaSet(DATASPACE_NAME, SCHEMA_SET_NAME_NEW, newYangResourcesNameToContentMap)
         then: 'the schema set is persisted correctly'
             assertSchemaSetPersisted(DATASPACE_NAME, SCHEMA_SET_NAME_NEW, NEW_RESOURCE_ABSTRACT_ID, NEW_RESOURCE_NAME,
-                    NEW_RESOURCE_CONTENT, NEW_RESOURCE_CHECKSUM)
+                    NEW_RESOURCE_CONTENT, NEW_RESOURCE_CHECKSUM, NEW_RESOURCE_MODULE_NAME, NEW_RESOURCE_REVISION)
     }
 
     @Sql([CLEAR_DATA, SET_DATA])
@@ -101,18 +119,31 @@
     }
 
     @Sql([CLEAR_DATA, SET_DATA])
+    def 'Retrieving all yang resources module references.'() {
+        given: 'a new schema set is stored'
+            objectUnderTest.storeSchemaSet(DATASPACE_NAME, SCHEMA_SET_NAME_NEW, newYangResourcesNameToContentMap)
+        when: 'all yang resources module references are retrieved'
+            def result = objectUnderTest.getAllYangResourcesModuleReferences()
+        then: 'the correct resources are returned'
+            result.sort() == allYangResourcesModuleAndRevisionList.sort()
+    }
+
+    @Sql([CLEAR_DATA, SET_DATA])
     def 'Storing duplicate schema content.'() {
         given: 'a new schema set with a resource with the same content as an existing resource'
-            def existingResourceContent = 'CONTENT-001'
+            def existingResourceContent = 'module test { yang-version 1.1; revision "2020-09-15"; }'
             def newYangResourcesNameToContentMap = [(NEW_RESOURCE_NAME):existingResourceContent]
         when: 'the schema set with duplicate resource is stored'
             objectUnderTest.storeSchemaSet(DATASPACE_NAME, SCHEMA_SET_NAME_NEW, newYangResourcesNameToContentMap)
         then: 'the schema persisted (re)uses the existing id, name and has the same checksum'
-            def existingResourceId = 3001L
+            def existingResourceId = 9L
             def existingResourceName = 'module1@2020-02-02.yang'
-            def existingResourceChecksum = 'e8bdda931099310de66532e08c3fafec391db29f55c81927b168f6aa8f81b73b'
+            def existingResourceChecksum = 'bea1afcc3d1517e7bf8cae151b3b6bfbd46db77a81754acdcb776a50368efa0a'
+            def existingResourceModelName = 'test'
+            def existingResourceRevision = '2020-09-15'
             assertSchemaSetPersisted(DATASPACE_NAME, SCHEMA_SET_NAME_NEW,
-                    existingResourceId, existingResourceName, existingResourceContent, existingResourceChecksum)
+                    existingResourceId, existingResourceName, existingResourceContent, existingResourceChecksum,
+                    existingResourceModelName, existingResourceRevision)
     }
 
     @Sql([CLEAR_DATA, SET_DATA])
@@ -163,11 +194,13 @@
     }
 
     def assertSchemaSetPersisted(expectedDataspaceName,
-                             expectedSchemaSetName,
-                             expectedYangResourceId,
-                             expectedYangResourceName,
-                             expectedYangResourceContent,
-                             expectedYangResourceChecksum) {
+                                 expectedSchemaSetName,
+                                 expectedYangResourceId,
+                                 expectedYangResourceName,
+                                 expectedYangResourceContent,
+                                 expectedYangResourceChecksum,
+                                 expectedYangResourceModuleName,
+                                 expectedYangResourceRevision) {
         // assert the schema set is persisted
         def schemaSetEntity = schemaSetRepository
                 .findByDataspaceAndName(dataspaceEntity, expectedSchemaSetName).orElseThrow()
@@ -188,6 +221,8 @@
         yangResourceEntity.name == expectedYangResourceName
         yangResourceEntity.content == expectedYangResourceContent
         yangResourceEntity.checksum == expectedYangResourceChecksum
+        yangResourceEntity.moduleName == expectedYangResourceModuleName
+        yangResourceEntity.revision == expectedYangResourceRevision
     }
 
 }
diff --git a/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsModulePersistenceServiceSpec.groovy b/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsModulePersistenceServiceSpec.groovy
index 4455a6f..8bd7f86 100644
--- a/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsModulePersistenceServiceSpec.groovy
+++ b/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsModulePersistenceServiceSpec.groovy
@@ -45,11 +45,21 @@
 
     // Constants
     def yangResourceName = 'my-yang-resource-name'
-    def yangResourceContent = 'my-yang-resource-content'
+    def yangResourceContent = 'module stores {\n' +
+            '    yang-version 1.1;\n' +
+            '    namespace "org:onap:ccsdk:sample";\n' +
+            '\n' +
+            '    prefix book-store;\n' +
+            '\n' +
+            '    revision "2020-09-15" {\n' +
+            '        description\n' +
+            '        "Sample Model";\n' +
+            '    }' +
+            '}'
 
     // Scenario data
     @Shared
-    yangResourceChecksum = 'ac2352cc20c10467528b2390bbf2d72d48b0319152ebaabcda207786b4a641c2'
+    yangResourceChecksum = 'b13faef573ed1374139d02c40d8ce09c80ea1dc70e63e464c1ed61568d48d539'
     @Shared
     yangResourceChecksumDbConstraint = 'yang_resource_checksum_key'
     @Shared
diff --git a/cps-service/src/main/java/org/onap/cps/api/CpsModuleService.java b/cps-service/src/main/java/org/onap/cps/api/CpsModuleService.java
index cd156d6..fee4daa 100644
--- a/cps-service/src/main/java/org/onap/cps/api/CpsModuleService.java
+++ b/cps-service/src/main/java/org/onap/cps/api/CpsModuleService.java
@@ -21,10 +21,12 @@
 
 package org.onap.cps.api;
 
+import java.util.List;
 import java.util.Map;
 import org.checkerframework.checker.nullness.qual.NonNull;
 import org.onap.cps.spi.CascadeDeleteAllowed;
 import org.onap.cps.spi.exceptions.DataInUseException;
+import org.onap.cps.spi.model.ModuleReference;
 import org.onap.cps.spi.model.SchemaSet;
 
 /**
@@ -63,4 +65,11 @@
      */
     void deleteSchemaSet(@NonNull String dataspaceName, @NonNull String schemaSetName,
         @NonNull CascadeDeleteAllowed cascadeDeleteAllowed);
+
+    /**
+     * Retrieve all modules and revisions known by CPS for all Yang Resources.
+     *
+     * @return a list of ModuleReference objects
+     */
+    List<ModuleReference> getAllYangResourcesModuleReferences();
 }
diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsModuleServiceImpl.java b/cps-service/src/main/java/org/onap/cps/api/impl/CpsModuleServiceImpl.java
index e4e6d1b..34735f8 100644
--- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsModuleServiceImpl.java
+++ b/cps-service/src/main/java/org/onap/cps/api/impl/CpsModuleServiceImpl.java
@@ -21,10 +21,12 @@
 
 package org.onap.cps.api.impl;
 
+import java.util.List;
 import java.util.Map;
 import org.onap.cps.api.CpsModuleService;
 import org.onap.cps.spi.CascadeDeleteAllowed;
 import org.onap.cps.spi.CpsModulePersistenceService;
+import org.onap.cps.spi.model.ModuleReference;
 import org.onap.cps.spi.model.SchemaSet;
 import org.onap.cps.yang.YangTextSchemaSourceSetBuilder;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -61,4 +63,10 @@
         final CascadeDeleteAllowed cascadeDeleteAllowed) {
         cpsModulePersistenceService.deleteSchemaSet(dataspaceName, schemaSetName, cascadeDeleteAllowed);
     }
+
+    @Override
+    public List<ModuleReference> getAllYangResourcesModuleReferences() {
+        return cpsModulePersistenceService.getAllYangResourcesModuleReferences();
+    }
+
 }
diff --git a/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java b/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java
index ec8a53c..bc62a23 100755
--- a/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java
@@ -21,9 +21,11 @@
 
 package org.onap.cps.spi;
 
+import java.util.List;
 import java.util.Map;
 import org.checkerframework.checker.nullness.qual.NonNull;
 import org.onap.cps.spi.exceptions.DataInUseException;
+import org.onap.cps.spi.model.ModuleReference;
 
 /**
  * Service to manage modules.
@@ -73,4 +75,11 @@
     @NonNull
     Map<String, String> getYangSchemaSetResources(@NonNull String dataspaceName,
         @NonNull String anchorName);
+
+    /**
+     * Returns all YANG resources module references.
+     *
+     * @return List of all YANG resources module information in the database
+     */
+    List<ModuleReference> getAllYangResourcesModuleReferences();
 }
diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModuleServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModuleServiceImplSpec.groovy
index 579415f..b8bfd45 100644
--- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModuleServiceImplSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModuleServiceImplSpec.groovy
@@ -103,4 +103,12 @@
             'dataspace-1' | 'schemas-set-1' | CASCADE_DELETE_ALLOWED
             'dataspace-2' | 'schemas-set-2' | CASCADE_DELETE_PROHIBITED
     }
+
+    def 'Get all yang resources module references.'(){
+        given: 'an already present module reference'
+            def moduleReferences = [new ModuleReference()]
+            mockModuleStoreService.getAllYangResourcesModuleReferences() >> moduleReferences
+        expect: 'the list provided by persistence service is returned as result'
+            objectUnderTest.getAllYangResourcesModuleReferences() == moduleReferences
+    }
 }
