diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java
index 8cf51c9..6038ea4 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java
@@ -24,6 +24,7 @@
 
 import java.util.Collection;
 import org.checkerframework.checker.nullness.qual.NonNull;
+import org.onap.cps.ncmp.api.models.DmiPluginRegistration;
 import org.onap.cps.spi.FetchDescendantsOption;
 import org.onap.cps.spi.model.DataNode;
 
@@ -98,4 +99,11 @@
      */
     void replaceNodeTree(@NonNull String cmHandle, @NonNull String parentNodeXpath, @NonNull String jsonData);
 
+    /**
+     * Registration of New CM Handles.
+     *
+     * @param dmiPluginRegistration Dmi Plugin Registration
+     */
+    void updateDmiPluginRegistration(DmiPluginRegistration dmiPluginRegistration);
+
 }
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
index fd85195..f97ea02 100755
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
@@ -22,27 +22,56 @@
 
 package org.onap.cps.ncmp.api.impl;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
+import lombok.extern.slf4j.Slf4j;
 import org.onap.cps.api.CpsDataService;
 import org.onap.cps.api.CpsQueryService;
 import org.onap.cps.ncmp.api.NetworkCmProxyDataService;
+import org.onap.cps.ncmp.api.models.CmHandle;
+import org.onap.cps.ncmp.api.models.DmiPluginRegistration;
+import org.onap.cps.ncmp.api.models.PersistenceCmHandle;
+import org.onap.cps.ncmp.api.models.PersistenceCmHandlesList;
 import org.onap.cps.spi.FetchDescendantsOption;
+import org.onap.cps.spi.exceptions.DataValidationException;
 import org.onap.cps.spi.model.DataNode;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+@Slf4j
 @Service
 public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService {
 
     private static final String NF_PROXY_DATASPACE_NAME = "NFP-Operational";
 
-    @Autowired
+    private static final String NCMP_DATASPACE_NAME = "NCMP-Admin";
+
+    private static final String NCMP_ANCHOR_NAME = "ncmp-dmi-registry";
+
+    private static final String NCMP_DATA_TOP_PATH = "/dmi-registry";
+
     private CpsDataService cpsDataService;
 
-    @Autowired
+    private ObjectMapper objectMapper;
+
     private CpsQueryService cpsQueryService;
 
+    /**
+     * Constructor Injection for Dependencies.
+     * @param cpsDataService Data Service Interface
+     * @param cpsQueryService Query Service Interface
+     * @param objectMapper Object Mapper
+     */
+    public NetworkCmProxyDataServiceImpl(final CpsDataService cpsDataService,
+        final CpsQueryService cpsQueryService, final ObjectMapper objectMapper) {
+        this.cpsDataService = cpsDataService;
+        this.cpsQueryService = cpsQueryService;
+        this.objectMapper = objectMapper;
+    }
+
     private String getDataspaceName() {
         return NF_PROXY_DATASPACE_NAME;
     }
@@ -82,4 +111,28 @@
     public void replaceNodeTree(final String cmHandle, final String parentNodeXpath, final String jsonData) {
         cpsDataService.replaceNodeTree(getDataspaceName(), cmHandle, parentNodeXpath, jsonData);
     }
+
+    @Override
+    public void updateDmiPluginRegistration(final DmiPluginRegistration dmiPluginRegistration) {
+        try {
+            final List<PersistenceCmHandle> persistenceCmHandles =
+                new ArrayList<>();
+            for (final CmHandle cmHandle: dmiPluginRegistration.getCreatedCmHandles()) {
+                final PersistenceCmHandle persistenceCmHandle = new PersistenceCmHandle();
+                persistenceCmHandle.setDmiServiceName(dmiPluginRegistration.getDmiPlugin());
+                persistenceCmHandle.setId(cmHandle.getCmHandle());
+                persistenceCmHandle.setAdditionalProperties(cmHandle.getCmHandleProperties());
+                persistenceCmHandles.add(persistenceCmHandle);
+            }
+            final PersistenceCmHandlesList persistenceCmHandlesList = new PersistenceCmHandlesList();
+            persistenceCmHandlesList.setCmHandles(persistenceCmHandles);
+            final String cmHandleJsonData = objectMapper.writeValueAsString(persistenceCmHandlesList);
+            cpsDataService.saveListNodeData(NCMP_DATASPACE_NAME, NCMP_ANCHOR_NAME, NCMP_DATA_TOP_PATH,
+                cmHandleJsonData);
+        } catch (final JsonProcessingException e) {
+            throw new DataValidationException(
+                "Parsing error occurred while processing DMI Plugin Registration" + dmiPluginRegistration, e
+                .getMessage(), e);
+        }
+    }
 }
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/CmHandle.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/CmHandle.java
new file mode 100644
index 0000000..0d1c769
--- /dev/null
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/CmHandle.java
@@ -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=========================================================
+ */
+
+package org.onap.cps.ncmp.api.models;
+
+import java.util.Map;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.validation.annotation.Validated;
+
+/**
+ * CmHandle.
+ */
+@Validated
+@Getter
+@Setter
+public class CmHandle {
+
+    private String cmHandle;
+
+    private Map<String, String> cmHandleProperties;
+
+}
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DmiPluginRegistration.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DmiPluginRegistration.java
new file mode 100644
index 0000000..4017c4a
--- /dev/null
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DmiPluginRegistration.java
@@ -0,0 +1,39 @@
+/*
+ *  ============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.ncmp.api.models;
+
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * DmiRegistry.
+ */
+@Getter
+@Setter
+public class DmiPluginRegistration {
+
+    private String dmiPlugin;
+
+    private List<CmHandle> createdCmHandles;
+
+}
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/PersistenceCmHandle.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/PersistenceCmHandle.java
new file mode 100644
index 0000000..a3f4704
--- /dev/null
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/PersistenceCmHandle.java
@@ -0,0 +1,70 @@
+/*
+ *  ============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.ncmp.api.models;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * DmiRegistry.
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+public class PersistenceCmHandle {
+
+    private String id;
+
+    @JsonProperty("dmi-service-name")
+    private String dmiServiceName;
+
+    @JsonProperty("additional-properties")
+    private List<AdditionalProperty> additionalProperties;
+
+    /**
+     * Set Additional Properties map, key and value pair.
+     * @param additionalPropertiesAsMap Map of Additional Properties
+     */
+    public void setAdditionalProperties(final Map<String, String> additionalPropertiesAsMap) {
+        additionalProperties = new ArrayList<>(additionalPropertiesAsMap.size());
+        for (final Map.Entry<String, String> entry : additionalPropertiesAsMap.entrySet()) {
+            additionalProperties.add(new AdditionalProperty(entry.getKey(), entry.getValue()));
+        }
+    }
+
+    @AllArgsConstructor
+    private static class AdditionalProperty {
+
+        @JsonProperty()
+        private final String name;
+
+        @JsonProperty()
+        private final String value;
+    }
+
+}
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/PersistenceCmHandlesList.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/PersistenceCmHandlesList.java
new file mode 100644
index 0000000..95e8515
--- /dev/null
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/PersistenceCmHandlesList.java
@@ -0,0 +1,36 @@
+/*
+ *  ============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.ncmp.api.models;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.ArrayList;
+import java.util.List;
+
+public class PersistenceCmHandlesList {
+
+    @JsonProperty("cm-handles")
+    private List<PersistenceCmHandle> cmHandles;
+
+    public void setCmHandles(final List<PersistenceCmHandle> cmHandlesAsList) {
+        cmHandles = new ArrayList<>(cmHandlesAsList);
+    }
+
+}
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
similarity index 69%
rename from cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
rename to cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
index ee435cc..d3c67cd 100644
--- a/cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
+++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
@@ -18,52 +18,46 @@
  *  SPDX-License-Identifier: Apache-2.0
  *  ============LICENSE_END=========================================================
  */
+package org.onap.cps.ncmp.api.impl
 
-package org.onap.cps.api.impl
-
+import com.fasterxml.jackson.databind.ObjectMapper
 import org.onap.cps.api.CpsDataService
 import org.onap.cps.api.CpsQueryService
-import org.onap.cps.ncmp.api.impl.NetworkCmProxyDataServiceImpl
+import org.onap.cps.ncmp.api.models.CmHandle
+import org.onap.cps.ncmp.api.models.DmiPluginRegistration
 import org.onap.cps.spi.FetchDescendantsOption
 import spock.lang.Specification
 
 class NetworkCmProxyDataServiceImplSpec extends Specification {
-    def objectUnderTest = new NetworkCmProxyDataServiceImpl()
-    def mockcpsDataService = Mock(CpsDataService)
-    def mockcpsQueryService = Mock(CpsQueryService)
 
-    def setup() {
-        objectUnderTest.cpsDataService = mockcpsDataService
-        objectUnderTest.cpsQueryService = mockcpsQueryService
-    }
+    def mockCpsDataService = Mock(CpsDataService)
+    def mockCpsQueryService = Mock(CpsQueryService)
+    def objectUnderTest = new NetworkCmProxyDataServiceImpl(mockCpsDataService, mockCpsQueryService, new ObjectMapper())
 
     def cmHandle = 'some handle'
     def expectedDataspaceName = 'NFP-Operational'
-
     def 'Query data nodes by cps path with #fetchDescendantsOption.'() {
         given: 'a cm Handle and a cps path'
             def cpsPath = '/cps-path'
         when: 'queryDataNodes is invoked'
             objectUnderTest.queryDataNodes(cmHandle, cpsPath, fetchDescendantsOption)
         then: 'the persistence service is called once with the correct parameters'
-            1 * mockcpsQueryService.queryDataNodes(expectedDataspaceName, cmHandle, cpsPath, fetchDescendantsOption)
+            1 * mockCpsQueryService.queryDataNodes(expectedDataspaceName, cmHandle, cpsPath, fetchDescendantsOption)
         where: 'all fetch descendants options are supported'
             fetchDescendantsOption << FetchDescendantsOption.values()
     }
-
     def 'Create full data node: #scenario.'() {
         given: 'a cm handle and root xpath'
             def jsonData = 'some json'
         when: 'createDataNode is invoked'
             objectUnderTest.createDataNode(cmHandle, xpath, jsonData)
         then: 'the CPS service method is invoked once with the expected parameters'
-            1 * mockcpsDataService.saveData(expectedDataspaceName, cmHandle, jsonData)
+            1 * mockCpsDataService.saveData(expectedDataspaceName, cmHandle, jsonData)
         where: 'following parameters were used'
             scenario           | xpath
             'no xpath'         | ''
             'root level xpath' | '/'
     }
-
     def 'Create child data node.'() {
         given: 'a cm handle and parent node xpath'
             def jsonData = 'some json'
@@ -71,9 +65,8 @@
         when: 'createDataNode is invoked'
             objectUnderTest.createDataNode(cmHandle, xpath, jsonData)
         then: 'the CPS service method is invoked once with the expected parameters'
-            1 * mockcpsDataService.saveData(expectedDataspaceName, cmHandle, xpath, jsonData)
+            1 * mockCpsDataService.saveData(expectedDataspaceName, cmHandle, xpath, jsonData)
     }
-
     def 'Add list-node elements.'() {
         given: 'a cm handle and parent node xpath'
             def jsonData = 'some json'
@@ -81,9 +74,8 @@
         when: 'addListNodeElements is invoked'
             objectUnderTest.addListNodeElements(cmHandle, xpath, jsonData)
         then: 'the CPS service method is invoked once with the expected parameters'
-            1 * mockcpsDataService.saveListNodeData(expectedDataspaceName, cmHandle, xpath, jsonData)
+            1 * mockCpsDataService.saveListNodeData(expectedDataspaceName, cmHandle, xpath, jsonData)
     }
-
     def 'Update data node leaves.'() {
         given: 'a cm Handle and a cps path'
             def xpath = '/xpath'
@@ -91,9 +83,8 @@
         when: 'updateNodeLeaves is invoked'
             objectUnderTest.updateNodeLeaves(cmHandle, xpath, jsonData)
         then: 'the persistence service is called once with the correct parameters'
-            1 * mockcpsDataService.updateNodeLeaves(expectedDataspaceName, cmHandle, xpath, jsonData)
+            1 * mockCpsDataService.updateNodeLeaves(expectedDataspaceName, cmHandle, xpath, jsonData)
     }
-
     def 'Replace data node tree.'() {
         given: 'a cm Handle and a cps path'
             def xpath = '/xpath'
@@ -101,6 +92,20 @@
         when: 'replaceNodeTree is invoked'
             objectUnderTest.replaceNodeTree(cmHandle, xpath, jsonData)
         then: 'the persistence service is called once with the correct parameters'
-            1 * mockcpsDataService.replaceNodeTree(expectedDataspaceName, cmHandle, xpath, jsonData)
+            1 * mockCpsDataService.replaceNodeTree(expectedDataspaceName, cmHandle, xpath, jsonData)
+    }
+    def 'Register CM Handle Event.'() {
+        given: 'a registration '
+            def dmiPluginRegistration = new DmiPluginRegistration()
+            dmiPluginRegistration.dmiPlugin = 'my-server'
+            def cmHandle = new CmHandle()
+            cmHandle.cmHandle = '123'
+            cmHandle.cmHandleProperties = [ name1: 'value1', name2: 'value2']
+            dmiPluginRegistration.createdCmHandles = [ cmHandle ]
+            def expectedJsonData = '{"cm-handles":[{"id":"123","dmi-service-name":"my-server","additional-properties":[{"name":"name1","value":"value1"},{"name":"name2","value":"value2"}]}]}'
+        when: 'registration is updated'
+            objectUnderTest.updateDmiPluginRegistration(dmiPluginRegistration)
+        then: 'the CPS service method is invoked once with the expected parameters'
+            1 * mockCpsDataService.saveListNodeData('NCMP-Admin', 'ncmp-dmi-registry', '/dmi-registry', expectedJsonData)
     }
 }
diff --git a/cps-ncmp-service/src/test/resources/application.yml b/cps-ncmp-service/src/test/resources/application.yml
new file mode 100644
index 0000000..8ffb882
--- /dev/null
+++ b/cps-ncmp-service/src/test/resources/application.yml
@@ -0,0 +1,22 @@
+#  ============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=========================================================
+
+rest:
+    api:
+        ncmp-base-path: /cps-ncmp/api
+spring:
