diff --git a/cps-ncmp-rest-stub/cps-ncmp-rest-stub-service/src/main/java/org/onap/cps/ncmp/rest/stub/controller/NetworkCmProxyStubController.java b/cps-ncmp-rest-stub/cps-ncmp-rest-stub-service/src/main/java/org/onap/cps/ncmp/rest/stub/controller/NetworkCmProxyStubController.java
index 37980ed..ee035bf 100644
--- a/cps-ncmp-rest-stub/cps-ncmp-rest-stub-service/src/main/java/org/onap/cps/ncmp/rest/stub/controller/NetworkCmProxyStubController.java
+++ b/cps-ncmp-rest-stub/cps-ncmp-rest-stub-service/src/main/java/org/onap/cps/ncmp/rest/stub/controller/NetworkCmProxyStubController.java
@@ -36,7 +36,7 @@
 import org.onap.cps.ncmp.api.impl.operations.DatastoreType;
 import org.onap.cps.ncmp.rest.api.NetworkCmProxyApi;
 import org.onap.cps.ncmp.rest.model.CmHandleQueryParameters;
-import org.onap.cps.ncmp.rest.model.ResourceDataBatchRequest;
+import org.onap.cps.ncmp.rest.model.DataOperationRequest;
 import org.onap.cps.ncmp.rest.model.RestModuleDefinition;
 import org.onap.cps.ncmp.rest.model.RestModuleReference;
 import org.onap.cps.ncmp.rest.model.RestOutputCmHandle;
@@ -159,8 +159,8 @@
     }
 
     @Override
-    public ResponseEntity<Object> getResourceDataForCmHandleBatch(@NotNull @Valid final String topic,
-                                                                  @Valid final ResourceDataBatchRequest body) {
+    public ResponseEntity<Object> executeDataOperationForCmHandles(final String topicParamInQuery,
+                                                                   final DataOperationRequest dataOperationRequest) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
     }
 
diff --git a/cps-ncmp-rest/docs/openapi/components.yaml b/cps-ncmp-rest/docs/openapi/components.yaml
index 2781f57..d45b8da 100644
--- a/cps-ncmp-rest/docs/openapi/components.yaml
+++ b/cps-ncmp-rest/docs/openapi/components.yaml
@@ -285,18 +285,18 @@
       properties:
         state:
           $ref: '#/components/schemas/CmHandleCompositeState'
-    # Batch Request Schemas
-    ResourceDataBatchRequest:
+    # Data Operation Request Schemas
+    DataOperationRequest:
       type: object
-      title: get resource data for given array of operations
+      title: execute data operation for given array of operations
       properties:
         operations:
           type: array
           items:
             type: object
-            $ref: '#/components/schemas/BatchOperationDefinition'
-          description: contains batch request details
-    BatchOperationDefinition:
+            $ref: '#/components/schemas/DataOperationDefinition'
+          description: contains group of data operation requests
+    DataOperationDefinition:
       required:
         - operation
         - datastore
diff --git a/cps-ncmp-rest/docs/openapi/ncmp.yml b/cps-ncmp-rest/docs/openapi/ncmp.yml
index 957a3b8..95ca6cc 100755
--- a/cps-ncmp-rest/docs/openapi/ncmp.yml
+++ b/cps-ncmp-rest/docs/openapi/ncmp.yml
@@ -194,13 +194,13 @@
       502:
         $ref: 'components.yaml#/components/responses/BadGateway'
 
-getResourceDataForCmHandleBatch:
+dataOperationForCmHandle:
   post:
     tags:
       - network-cm-proxy
-    summary: Get resource data for batch of cm handle ids
+    summary: Execute a data operation for group of cm handle ids
     description: This request will be handled asynchronously using messaging to the supplied topic. The rest response will be an acknowledge with a requestId to identify the relevant messages.
-    operationId: getResourceDataForCmHandleBatch
+    operationId: executeDataOperationForCmHandles
     parameters:
       - $ref: 'components.yaml#/components/parameters/requiredTopicParamInQuery'
     requestBody:
@@ -208,7 +208,7 @@
       content:
         application/json:
           schema:
-            $ref: 'components.yaml#/components/schemas/ResourceDataBatchRequest'
+            $ref: 'components.yaml#/components/schemas/DataOperationRequest'
     responses:
       200:
         description: OK
diff --git a/cps-ncmp-rest/docs/openapi/openapi.yml b/cps-ncmp-rest/docs/openapi/openapi.yml
index b63b568..84d86ff 100755
--- a/cps-ncmp-rest/docs/openapi/openapi.yml
+++ b/cps-ncmp-rest/docs/openapi/openapi.yml
@@ -35,7 +35,7 @@
     $ref: 'ncmp.yml#/resourceDataForCmHandle'
 
   /v1/data:
-    $ref: 'ncmp.yml#/getResourceDataForCmHandleBatch'
+    $ref: 'ncmp.yml#/dataOperationForCmHandle'
 
   /v1/ch/{cm-handle}/data/ds/{datastore-name}/query:
     $ref: 'ncmp.yml#/queryResourceDataForCmHandle'
diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java
index 1b78fa0..3c22b81 100755
--- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java
+++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java
@@ -46,10 +46,10 @@
 import org.onap.cps.ncmp.rest.controller.handlers.NcmpDatastoreRequestHandler;
 import org.onap.cps.ncmp.rest.controller.handlers.NcmpPassthroughResourceRequestHandler;
 import org.onap.cps.ncmp.rest.mapper.CmHandleStateMapper;
-import org.onap.cps.ncmp.rest.mapper.ResourceDataBatchRequestMapper;
+import org.onap.cps.ncmp.rest.mapper.DataOperationRequestMapper;
 import org.onap.cps.ncmp.rest.model.CmHandlePublicProperties;
 import org.onap.cps.ncmp.rest.model.CmHandleQueryParameters;
-import org.onap.cps.ncmp.rest.model.ResourceDataBatchRequest;
+import org.onap.cps.ncmp.rest.model.DataOperationRequest;
 import org.onap.cps.ncmp.rest.model.RestModuleDefinition;
 import org.onap.cps.ncmp.rest.model.RestModuleReference;
 import org.onap.cps.ncmp.rest.model.RestOutputCmHandle;
@@ -76,7 +76,7 @@
     private final CmHandleStateMapper cmHandleStateMapper;
     private final NcmpCachedResourceRequestHandler ncmpCachedResourceRequestHandler;
     private final NcmpPassthroughResourceRequestHandler ncmpPassthroughResourceRequestHandler;
-    private final ResourceDataBatchRequestMapper resourceDataBatchRequestMapper;
+    private final DataOperationRequestMapper dataOperationRequestMapper;
 
     /**
      * Get resource data from datastore.
@@ -105,11 +105,11 @@
     }
 
     @Override
-    public ResponseEntity<Object> getResourceDataForCmHandleBatch(final String topicParamInQuery,
-                                                                  final ResourceDataBatchRequest
-                                                                          resourceDataBatchRequest) {
+    public ResponseEntity<Object> executeDataOperationForCmHandles(final String topicParamInQuery,
+                                                                  final DataOperationRequest
+                                                                          dataOperationRequest) {
         return ncmpPassthroughResourceRequestHandler.executeRequest(topicParamInQuery,
-                resourceDataBatchRequestMapper.toResourceDataBatchRequest(resourceDataBatchRequest));
+                dataOperationRequestMapper.toDataOperationRequest(dataOperationRequest));
     }
 
     /**
diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandler.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandler.java
index a8ca13a..101be45 100644
--- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandler.java
+++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandler.java
@@ -31,7 +31,7 @@
 import org.onap.cps.ncmp.api.impl.exception.InvalidDatastoreException;
 import org.onap.cps.ncmp.api.impl.operations.DatastoreType;
 import org.onap.cps.ncmp.api.impl.operations.OperationType;
-import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest;
+import org.onap.cps.ncmp.api.models.DataOperationRequest;
 import org.onap.cps.ncmp.rest.exceptions.OperationNotSupportedException;
 import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor;
 import org.onap.cps.ncmp.rest.util.TopicValidator;
@@ -105,21 +105,21 @@
     }
 
     /**
-     * Executes asynchronous request for batch of cm handles to resource data.
+     * Executes asynchronous request for group of cm handles to resource data.
      *
      * @param topicParamInQuery        the topic param in query
-     * @param resourceDataBatchRequest batch request details for resource data
+     * @param dataOperationRequest     data operation request details for resource data
      * @return the response entity
      */
     public ResponseEntity<Object> executeRequest(final String topicParamInQuery,
-                                                 final ResourceDataBatchRequest
-                                                         resourceDataBatchRequest) {
-        validateBatchRequest(topicParamInQuery, resourceDataBatchRequest);
+                                                 final DataOperationRequest
+                                                         dataOperationRequest) {
+        validateDataOperationRequest(topicParamInQuery, dataOperationRequest);
         if (!notificationFeatureEnabled) {
             return ResponseEntity.ok(Map.of("status",
                     "Asynchronous request is unavailable as notification feature is currently disabled."));
         }
-        return getRequestIdAndSendBatchRequestToDmiService(topicParamInQuery, resourceDataBatchRequest);
+        return getRequestIdAndSendDataOperationRequestToDmiService(topicParamInQuery, dataOperationRequest);
     }
 
     protected ResponseEntity<Object> executeTaskAsync(final String topicParamInQuery,
@@ -152,27 +152,27 @@
         return executeTaskAsync(topicParamInQuery, requestId, taskSupplier);
     }
 
-    private ResponseEntity<Object> getRequestIdAndSendBatchRequestToDmiService(final String topicParamInQuery,
-                                                                               final ResourceDataBatchRequest
-                                                                                       resourceDataBatchRequest) {
+    private ResponseEntity<Object> getRequestIdAndSendDataOperationRequestToDmiService(final String topicParamInQuery,
+                                                                                       final DataOperationRequest
+                                                                                       dataOperationRequest) {
         final String requestId = UUID.randomUUID().toString();
-        sendResourceDataBatchRequestAsynchronously(topicParamInQuery, resourceDataBatchRequest, requestId);
+        sendDataOperationRequestAsynchronously(topicParamInQuery, dataOperationRequest, requestId);
         return ResponseEntity.ok(Map.of("requestId", requestId));
     }
 
-    private void validateBatchRequest(final String topicParamInQuery,
-                                      final ResourceDataBatchRequest
-                                              resourceDataBatchRequest) {
+    private void validateDataOperationRequest(final String topicParamInQuery,
+                                              final DataOperationRequest
+                                              dataOperationRequest) {
         TopicValidator.validateTopicName(topicParamInQuery);
-        resourceDataBatchRequest.getBatchOperationDefinitions().forEach(batchOperationDetail -> {
-            if (OperationType.fromOperationName(batchOperationDetail.getOperation()) != READ) {
+        dataOperationRequest.getDataOperationDefinitions().forEach(dataOperationDetail -> {
+            if (OperationType.fromOperationName(dataOperationDetail.getOperation()) != READ) {
                 throw new OperationNotSupportedException(
-                        batchOperationDetail.getOperation() + " operation not yet supported for target ids :"
-                                + batchOperationDetail.getCmHandleIds());
-            } else if (DatastoreType.fromDatastoreName(batchOperationDetail.getDatastore()) == OPERATIONAL) {
-                throw new InvalidDatastoreException(batchOperationDetail.getDatastore()
+                        dataOperationDetail.getOperation() + " operation not yet supported for target ids :"
+                                + dataOperationDetail.getCmHandleIds());
+            } else if (DatastoreType.fromDatastoreName(dataOperationDetail.getDatastore()) == OPERATIONAL) {
+                throw new InvalidDatastoreException(dataOperationDetail.getDatastore()
                         + " datastore is not supported for target ids : "
-                        + batchOperationDetail.getCmHandleIds());
+                        + dataOperationDetail.getCmHandleIds());
             }
         });
     }
diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java
index 5c35818..0e49c6d 100644
--- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java
+++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java
@@ -22,7 +22,7 @@
 
 import java.util.function.Supplier;
 import org.onap.cps.ncmp.api.NetworkCmProxyDataService;
-import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest;
+import org.onap.cps.ncmp.api.models.DataOperationRequest;
 import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
@@ -59,11 +59,11 @@
 
     @Async
     @Override
-    public void sendResourceDataBatchRequestAsynchronously(final String topicParamInQuery,
-                                                           final ResourceDataBatchRequest
-                                                                  resourceDataBatchRequest,
-                                                           final String requestId) {
-        networkCmProxyDataService.requestResourceDataForCmHandleBatch(topicParamInQuery, resourceDataBatchRequest,
+    public void sendDataOperationRequestAsynchronously(final String topicParamInQuery,
+                                                       final DataOperationRequest
+                                                                   dataOperationRequest,
+                                                       final String requestId) {
+        networkCmProxyDataService.executeDataOperationForCmHandles(topicParamInQuery, dataOperationRequest,
                 requestId);
 
     }
diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/TaskManagementDefaultHandler.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/TaskManagementDefaultHandler.java
index 937935b..b2520b1 100644
--- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/TaskManagementDefaultHandler.java
+++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/TaskManagementDefaultHandler.java
@@ -21,7 +21,7 @@
 package org.onap.cps.ncmp.rest.controller.handlers;
 
 import java.util.function.Supplier;
-import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest;
+import org.onap.cps.ncmp.api.models.DataOperationRequest;
 import org.onap.cps.spi.FetchDescendantsOption;
 
 public interface TaskManagementDefaultHandler {
@@ -46,10 +46,10 @@
         return NO_OBJECT_SUPPLIER;
     }
 
-    default void sendResourceDataBatchRequestAsynchronously(final String topicParamInQuery,
-                                                            final ResourceDataBatchRequest
-                                                                    resourceDataBatchRequest,
-                                                            final String requestId) {
+    default void sendDataOperationRequestAsynchronously(final String topicParamInQuery,
+                                                        final DataOperationRequest
+                                                                    dataOperationRequest,
+                                                        final String requestId) {
     }
 
     static FetchDescendantsOption getFetchDescendantsOption(final boolean includeDescendants) {
diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/ResourceDataBatchRequestMapper.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/DataOperationRequestMapper.java
similarity index 71%
rename from cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/ResourceDataBatchRequestMapper.java
rename to cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/DataOperationRequestMapper.java
index d045e31..51ee8ca 100644
--- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/ResourceDataBatchRequestMapper.java
+++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/DataOperationRequestMapper.java
@@ -24,18 +24,18 @@
 import org.mapstruct.Mapping;
 import org.mapstruct.NullValueCheckStrategy;
 import org.mapstruct.NullValuePropertyMappingStrategy;
-import org.onap.cps.ncmp.api.models.BatchOperationDefinition;
-import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest;
+import org.onap.cps.ncmp.api.models.DataOperationDefinition;
+import org.onap.cps.ncmp.api.models.DataOperationRequest;
 
 @Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
         nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT)
-public interface ResourceDataBatchRequestMapper {
+public interface DataOperationRequestMapper {
 
-    @Mapping(source = "operations", target = "batchOperationDefinitions")
-    ResourceDataBatchRequest toResourceDataBatchRequest(
-            org.onap.cps.ncmp.rest.model.ResourceDataBatchRequest resourceDataBatchRequest);
+    @Mapping(source = "operations", target = "dataOperationDefinitions")
+    DataOperationRequest toDataOperationRequest(
+            org.onap.cps.ncmp.rest.model.DataOperationRequest dataOperationRequest);
 
     @Mapping(source = "targetIds", target = "cmHandleIds")
-    BatchOperationDefinition toBatchOperationDefinition(
-            org.onap.cps.ncmp.rest.model.BatchOperationDefinition batchOperationDefinition);
+    DataOperationDefinition toDataOperationDefinition(
+            org.onap.cps.ncmp.rest.model.DataOperationDefinition dataOperationDefinition);
 }
diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy
index 31e83aa..4ee31e1 100644
--- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy
+++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy
@@ -32,14 +32,14 @@
 import org.onap.cps.ncmp.api.inventory.CompositeState
 import org.onap.cps.ncmp.api.inventory.DataStoreSyncState
 import org.onap.cps.ncmp.api.inventory.LockReasonCategory
-import org.onap.cps.ncmp.rest.model.BatchOperationDefinition
+import org.onap.cps.ncmp.rest.model.DataOperationRequest
+import org.onap.cps.ncmp.rest.model.DataOperationDefinition
 import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle
 import org.onap.cps.ncmp.rest.controller.handlers.NcmpCachedResourceRequestHandler
 import org.onap.cps.ncmp.rest.controller.handlers.NcmpPassthroughResourceRequestHandler
 import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor
 import org.onap.cps.ncmp.rest.mapper.CmHandleStateMapper
-import org.onap.cps.ncmp.rest.mapper.ResourceDataBatchRequestMapper
-import org.onap.cps.ncmp.rest.model.ResourceDataBatchRequest
+import org.onap.cps.ncmp.rest.mapper.DataOperationRequestMapper
 import org.onap.cps.ncmp.rest.util.DeprecationHelper
 import org.onap.cps.spi.FetchDescendantsOption
 import org.onap.cps.spi.model.ModuleDefinition
@@ -101,7 +101,7 @@
     CmHandleStateMapper cmHandleStateMapper = Mappers.getMapper(CmHandleStateMapper)
 
     @SpringBean
-    ResourceDataBatchRequestMapper resourceDataBatchRequestMapper = Mappers.getMapper(ResourceDataBatchRequestMapper)
+    DataOperationRequestMapper dataOperationRequestMapper = Mappers.getMapper(DataOperationRequestMapper)
 
     @SpringBean
     CpsNcmpTaskExecutor spiedCpsTaskExecutor = Spy()
@@ -205,18 +205,18 @@
             'invalid non-empty topic value in url' | 'passthrough-operational' | '&topic=1_5_*_#'
     }
 
-    def 'Get (async) batch resource data from dmi service.'() {
-        given: 'batch resource data url'
+    def 'Execute (async) data operation to read data from dmi service.'() {
+        given: 'data operation url'
             def getUrl = "$ncmpBasePathV1/data?topic=my-topic-name"
-            def resourceDataBatchRequestJsonData = jsonObjectMapper.asJsonString(
-                    getResourceDataBatchRequest("read", datastore.datastoreName))
-            def expectedDmiResourceDataBatchRequest
-                    = jsonObjectMapper.convertJsonString(resourceDataBatchRequestJsonData, org.onap.cps.ncmp.api.models.ResourceDataBatchRequest.class)
-        when: 'post data resource request is performed'
+            def dataOperationRequestJsonData = jsonObjectMapper.asJsonString(
+                    getDataOperationRequest("read", datastore.datastoreName))
+            def expectedDmiDataOperationRequest
+                    = jsonObjectMapper.convertJsonString(dataOperationRequestJsonData, org.onap.cps.ncmp.api.models.DataOperationRequest.class)
+        when: 'post data operation request is performed'
             def response = mvc.perform(
                     post(getUrl)
                             .contentType(MediaType.APPLICATION_JSON)
-                            .content(resourceDataBatchRequestJsonData)
+                            .content(dataOperationRequestJsonData)
             ).andReturn().response
         then: 'response status is Ok'
             response.status == HttpStatus.OK.value()
@@ -225,21 +225,21 @@
         then: 'wait a little to allow execution of service method by task executor (on separate thread)'
             Thread.sleep(100)
         then: 'the service has been invoked with the correct parameters '
-            1 * mockNetworkCmProxyDataService.requestResourceDataForCmHandleBatch('my-topic-name', expectedDmiResourceDataBatchRequest, _)
+            1 * mockNetworkCmProxyDataService.executeDataOperationForCmHandles('my-topic-name', expectedDmiDataOperationRequest, _)
         where: 'the following data stores are used'
             datastore << [PASSTHROUGH_RUNNING, PASSTHROUGH_OPERATIONAL]
     }
 
-    def 'Get batch resource data for #scenario from dmi service.'() {
-        given: 'batch resource data url'
+    def 'Execute (async) data operation for #scenario from dmi service.'() {
+        given: 'data operation url'
             def getUrl = "$ncmpBasePathV1/data?topic=my-topic-name"
-            def resourceDataBatchRequestJsonData = jsonObjectMapper.asJsonString(
-                    getResourceDataBatchRequest(operation, datastore))
+            def dataOperationRequestJsonData = jsonObjectMapper.asJsonString(
+                    getDataOperationRequest(operation, datastore))
         when: 'post data resource request is performed'
             def response = mvc.perform(
                     post(getUrl)
                             .contentType(MediaType.APPLICATION_JSON)
-                            .content(resourceDataBatchRequestJsonData)
+                            .content(dataOperationRequestJsonData)
             ).andReturn().response
         then: 'response status is BAD_REQUEST'
             response.status == HttpStatus.BAD_REQUEST.value()
@@ -250,17 +250,17 @@
             'non-supported operation (passthrough-operational)' | PASSTHROUGH_OPERATIONAL.datastoreName | 'create'
     }
 
-    def 'Get batch resource data when notification feature is disabled for datastore: #datastore.'() {
-        given: 'batch resource data url'
+    def 'Get data operation resource data when notification feature is disabled for datastore: #datastore.'() {
+        given: 'data operation url'
             def getUrl = "$ncmpBasePathV1/data?topic=my-topic-name"
-            def resourceDataBatchRequestJsonData = jsonObjectMapper.asJsonString(
-                    getResourceDataBatchRequest("read", datastore.datastoreName))
+            def dataOperationRequestJsonData = jsonObjectMapper.asJsonString(
+                    getDataOperationRequest("read", datastore.datastoreName))
             ncmpPassthroughResourceRequestHandler.notificationFeatureEnabled = false
         when: 'post data resource request is performed'
             def response = mvc.perform(
                     post(getUrl)
                             .contentType(MediaType.APPLICATION_JSON)
-                            .content(resourceDataBatchRequestJsonData)
+                            .content(dataOperationRequestJsonData)
             ).andReturn().response
         then: 'response status is Ok'
             response.status == HttpStatus.OK.value()
@@ -686,22 +686,23 @@
         return assertContainsAll(response, expectedContent)
     }
 
-    def getResourceDataBatchRequest(operation, datastore) {
-        def resourceDataBatchRequest = new ResourceDataBatchRequest()
-        def batchOperationDefinitions = new ArrayList()
-        batchOperationDefinitions.add(getBatchOperationDefinition(operation, datastore))
-        resourceDataBatchRequest.addOperationsItem(batchOperationDefinitions)
+    def getDataOperationRequest(operation, datastore) {
+        def dataOperationRequest = new DataOperationRequest()
+        def dataOperationDefinitions = new ArrayList()
+        dataOperationDefinitions.add(getDataOperationDefinition(operation, datastore))
+        dataOperationRequest.addOperationsItem(dataOperationDefinitions)
+        return dataOperationRequest
     }
 
-    def getBatchOperationDefinition(operation, datastore) {
-        def batchOperationDefinition = new BatchOperationDefinition()
-        batchOperationDefinition.setOperation(operation)
-        batchOperationDefinition.setOperationId("operational-12")
-        batchOperationDefinition.setDatastore(datastore)
-        batchOperationDefinition.setOptions("some option")
-        batchOperationDefinition.setResourceIdentifier("some resource identifier")
-        batchOperationDefinition.addTargetIdsItem("some-cm-handle")
-        return batchOperationDefinition
+    def getDataOperationDefinition(operation, datastore) {
+        def dataOperationDefinition = new DataOperationDefinition()
+        dataOperationDefinition.setOperation(operation)
+        dataOperationDefinition.setOperationId("operational-12")
+        dataOperationDefinition.setDatastore(datastore)
+        dataOperationDefinition.setOptions("some option")
+        dataOperationDefinition.setResourceIdentifier("some resource identifier")
+        dataOperationDefinition.addTargetIdsItem("some-cm-handle")
+        return dataOperationDefinition
     }
 
 }
diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy
index a3afc55..6dc537c 100644
--- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy
+++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy
@@ -1,7 +1,7 @@
 /*
  *  ============LICENSE_START=======================================================
  *  Copyright (C) 2021 highstreet technologies GmbH
- *  Modifications Copyright (C) 2021-2022 Nordix Foundation
+ *  Modifications Copyright (C) 2021-2023 Nordix Foundation
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -33,7 +33,7 @@
 import org.onap.cps.ncmp.rest.controller.handlers.NcmpPassthroughResourceRequestHandler
 import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor
 import org.onap.cps.ncmp.rest.mapper.CmHandleStateMapper
-import org.onap.cps.ncmp.rest.mapper.ResourceDataBatchRequestMapper
+import org.onap.cps.ncmp.rest.mapper.DataOperationRequestMapper
 import org.onap.cps.ncmp.rest.util.DeprecationHelper
 import org.onap.cps.spi.exceptions.AlreadyDefinedException
 import org.onap.cps.spi.exceptions.AlreadyDefinedExceptionBatch
@@ -76,7 +76,7 @@
     CmHandleStateMapper cmHandleStateMapper = Mappers.getMapper(CmHandleStateMapper)
 
     @SpringBean
-    ResourceDataBatchRequestMapper resourceDataBatchRequestMapper = Mappers.getMapper(ResourceDataBatchRequestMapper)
+    DataOperationRequestMapper dataOperationRequestMapper = Mappers.getMapper(DataOperationRequestMapper)
 
     @SpringBean
     CpsNcmpTaskExecutor stubbedCpsTaskExecutor = Stub()
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 046c788..e20780b 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
@@ -29,10 +29,10 @@
 import org.onap.cps.ncmp.api.inventory.CompositeState;
 import org.onap.cps.ncmp.api.models.CmHandleQueryApiParameters;
 import org.onap.cps.ncmp.api.models.CmHandleQueryServiceParameters;
+import org.onap.cps.ncmp.api.models.DataOperationRequest;
 import org.onap.cps.ncmp.api.models.DmiPluginRegistration;
 import org.onap.cps.ncmp.api.models.DmiPluginRegistrationResponse;
 import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle;
-import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest;
 import org.onap.cps.spi.FetchDescendantsOption;
 import org.onap.cps.spi.model.ModuleDefinition;
 import org.onap.cps.spi.model.ModuleReference;
@@ -83,15 +83,15 @@
                                       FetchDescendantsOption fetchDescendantsOption);
 
     /**
-     * Get resource data for batch of cm handles using dmi.
+     * Execute (async) data operation for group of cm handles using dmi.
      *
      * @param topicParamInQuery        topic name for (triggering) async responses
-     * @param resourceDataBatchRequest cm handle identifiers
+     * @param dataOperationRequest     cm handle identifiers
      */
-    void requestResourceDataForCmHandleBatch(String topicParamInQuery,
-                                         ResourceDataBatchRequest
-                                                 resourceDataBatchRequest,
-                                         String requestId);
+    void executeDataOperationForCmHandles(String topicParamInQuery,
+                                          DataOperationRequest
+                                                            dataOperationRequest,
+                                          String requestId);
 
 
     /**
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 536775e..2e9d7c2 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
@@ -60,10 +60,10 @@
 import org.onap.cps.ncmp.api.models.CmHandleQueryServiceParameters;
 import org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse;
 import org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse.RegistrationError;
+import org.onap.cps.ncmp.api.models.DataOperationRequest;
 import org.onap.cps.ncmp.api.models.DmiPluginRegistration;
 import org.onap.cps.ncmp.api.models.DmiPluginRegistrationResponse;
 import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle;
-import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest;
 import org.onap.cps.spi.FetchDescendantsOption;
 import org.onap.cps.spi.exceptions.AlreadyDefinedExceptionBatch;
 import org.onap.cps.spi.exceptions.CpsException;
@@ -139,11 +139,11 @@
     }
 
     @Override
-    public void requestResourceDataForCmHandleBatch(final String topicParamInQuery,
-                                                final ResourceDataBatchRequest
-                                                        resourceDataBatchRequest,
-                                                final String requestId) {
-        dmiDataOperations.requestResourceDataFromDmi(topicParamInQuery, resourceDataBatchRequest, requestId);
+    public void executeDataOperationForCmHandles(final String topicParamInQuery,
+                                                 final DataOperationRequest
+                                                         dataOperationRequest,
+                                                 final String requestId) {
+        dmiDataOperations.requestResourceDataFromDmi(topicParamInQuery, dataOperationRequest, requestId);
     }
 
     @Override
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiBatchOperation.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiBatchOperation.java
index 76ad0f7..512c3bc 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiBatchOperation.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiBatchOperation.java
@@ -27,7 +27,7 @@
 import java.util.List;
 import lombok.Builder;
 import lombok.Getter;
-import org.onap.cps.ncmp.api.models.BatchOperationDefinition;
+import org.onap.cps.ncmp.api.models.DataOperationDefinition;
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Getter
@@ -45,20 +45,20 @@
     private final List<CmHandle> cmHandles = new ArrayList<>();
 
     /**
-     * Create and initialise a (outgoing) DMI batch operation.
+     * Create and initialise a (outgoing) DMI data operation.
      *
-     * @param batchOperationDefinition batchOperationDefinition definition of incoming of batch request
+     * @param dataOperationDefinition  definition of incoming of dataOperation request
      * @return mapped dmi operation details
      */
     public static DmiBatchOperation buildDmiBatchRequestBodyWithoutCmHandles(
-            final BatchOperationDefinition batchOperationDefinition) {
+            final DataOperationDefinition dataOperationDefinition) {
 
         return DmiBatchOperation.builder()
-                .operationType(OperationType.fromOperationName(batchOperationDefinition.getOperation()))
-                .operationId(batchOperationDefinition.getOperationId())
-                .datastore(DatastoreType.fromDatastoreName(batchOperationDefinition.getDatastore()).getDatastoreName())
-                .options(batchOperationDefinition.getOptions())
-                .resourceIdentifier(batchOperationDefinition.getResourceIdentifier())
+                .operationType(OperationType.fromOperationName(dataOperationDefinition.getOperation()))
+                .operationId(dataOperationDefinition.getOperationId())
+                .datastore(DatastoreType.fromDatastoreName(dataOperationDefinition.getDatastore()).getDatastoreName())
+                .options(dataOperationDefinition.getOptions())
+                .resourceIdentifier(dataOperationDefinition.getResourceIdentifier())
                 .build();
     }
 }
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java
index 3e8d40a..adf634d 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java
@@ -38,7 +38,7 @@
 import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle;
 import org.onap.cps.ncmp.api.inventory.CmHandleState;
 import org.onap.cps.ncmp.api.inventory.InventoryPersistence;
-import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest;
+import org.onap.cps.ncmp.api.models.DataOperationRequest;
 import org.onap.cps.spi.exceptions.CpsException;
 import org.onap.cps.utils.JsonObjectMapper;
 import org.springframework.http.ResponseEntity;
@@ -118,21 +118,21 @@
      * The data wil be returned as message on the topic specified.
      *
      * @param topicParamInQuery        topic name for (triggering) async responses
-     * @param resourceDataBatchRequest batch request for resource data
+     * @param dataOperationRequest     data operation request to execute operations
      * @param requestId                requestId for as a response
      */
     public void requestResourceDataFromDmi(final String topicParamInQuery,
-                                           final ResourceDataBatchRequest resourceDataBatchRequest,
+                                           final DataOperationRequest dataOperationRequest,
                                            final String requestId)  {
 
         final Set<String> cmHandlesIds
-                = getDistinctCmHandleIdsFromBatchRequest(resourceDataBatchRequest);
+                = getDistinctCmHandleIdsFromDataOperationRequest(dataOperationRequest);
 
         final Collection<YangModelCmHandle> yangModelCmHandles
                 = getYangModelCmHandlesInReadyState(cmHandlesIds);
 
         final Map<String, List<DmiBatchOperation>> operationsOutPerDmiServiceName
-                = ResourceDataBatchRequestUtils.processPerOperationInBatchRequest(resourceDataBatchRequest,
+                = ResourceDataBatchRequestUtils.processPerOperationInBatchRequest(dataOperationRequest,
                 yangModelCmHandles);
 
         buildBatchRequestUrlAndSendToDmiService(topicParamInQuery, requestId, operationsOutPerDmiServiceName);
@@ -214,11 +214,11 @@
         }
     }
 
-    private static Set<String> getDistinctCmHandleIdsFromBatchRequest(final ResourceDataBatchRequest
-                                                                              resourceDataBatchRequest) {
-        return resourceDataBatchRequest.getBatchOperationDefinitions().stream()
-                .flatMap(batchOperationDefinition ->
-                        batchOperationDefinition.getCmHandleIds().stream()).collect(Collectors.toSet());
+    private static Set<String> getDistinctCmHandleIdsFromDataOperationRequest(final DataOperationRequest
+                                                                              dataOperationRequest) {
+        return dataOperationRequest.getDataOperationDefinitions().stream()
+                .flatMap(dataOperationDefinition ->
+                        dataOperationDefinition.getCmHandleIds().stream()).collect(Collectors.toSet());
     }
 
     private Collection<YangModelCmHandle> getYangModelCmHandlesInReadyState(final Set<String> requestedCmHandleIds) {
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtils.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtils.java
index e4c9bfb..f0d0255 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtils.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtils.java
@@ -33,8 +33,8 @@
 import org.onap.cps.ncmp.api.impl.operations.CmHandle;
 import org.onap.cps.ncmp.api.impl.operations.DmiBatchOperation;
 import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle;
-import org.onap.cps.ncmp.api.models.BatchOperationDefinition;
-import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest;
+import org.onap.cps.ncmp.api.models.DataOperationDefinition;
+import org.onap.cps.ncmp.api.models.DataOperationRequest;
 
 @Slf4j
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
@@ -45,13 +45,13 @@
     /**
      * Create a list of DMI batch operation per DMI service (name).
      *
-     * @param resourceDataBatchRequestIn incoming batch request details for resource data
-     * @param yangModelCmHandles involved cm handles represented as YangModelCmHandle (incl. metadata)
+     * @param dataOperationRequestIn incoming data operation request details
+     * @param yangModelCmHandles     involved cm handles represented as YangModelCmHandle (incl. metadata)
      *
      * @return {@code Map<String, List<DmiBatchOperation>>} Create a list of DMI batch operation per DMI service (name).
      */
     public static Map<String, List<DmiBatchOperation>> processPerOperationInBatchRequest(
-            final ResourceDataBatchRequest resourceDataBatchRequestIn,
+            final DataOperationRequest dataOperationRequestIn,
             final Collection<YangModelCmHandle> yangModelCmHandles) {
 
         final Map<String, Map<String, Map<String, String>>> dmiPropertiesPerCmHandleIdPerServiceName =
@@ -62,9 +62,9 @@
 
         final Map<String, List<DmiBatchOperation>> dmiBatchOperationsOutPerDmiServiceName = new HashMap<>();
 
-        for (final BatchOperationDefinition batchOperationDefinitionIn :
-            resourceDataBatchRequestIn.getBatchOperationDefinitions()) {
-            for (final String cmHandleId : batchOperationDefinitionIn.getCmHandleIds()) {
+        for (final DataOperationDefinition dataOperationDefinitionIn :
+            dataOperationRequestIn.getDataOperationDefinitions()) {
+            for (final String cmHandleId : dataOperationDefinitionIn.getCmHandleIds()) {
                 final String dmiServiceName = dmiServiceNamesPerCmHandleId.get(cmHandleId);
                 final Map<String, String> cmHandleIdProperties
                         = dmiPropertiesPerCmHandleIdPerServiceName.get(dmiServiceName).get(cmHandleId);
@@ -72,7 +72,7 @@
                     publishErrorMessageToClientTopic(cmHandleId);
                 } else {
                     final DmiBatchOperation dmiBatchOperationOut = getOrAddDmiBatchOperation(dmiServiceName,
-                        batchOperationDefinitionIn, dmiBatchOperationsOutPerDmiServiceName);
+                            dataOperationDefinitionIn, dmiBatchOperationsOutPerDmiServiceName);
                     final CmHandle cmHandle = CmHandle.buildCmHandleWithProperties(cmHandleId, cmHandleIdProperties);
                     dmiBatchOperationOut.getCmHandles().add(cmHandle);
                 }
@@ -104,8 +104,8 @@
     }
 
     private static DmiBatchOperation getOrAddDmiBatchOperation(final String dmiServiceName,
-                                                               final BatchOperationDefinition
-                                                                       batchOperationDefinitionIn,
+                                                               final DataOperationDefinition
+                                                                       dataOperationDefinitionIn,
                                                                final Map<String, List<DmiBatchOperation>>
                                                                        dmiBatchOperationsOutPerDmiServiceName) {
         dmiBatchOperationsOutPerDmiServiceName
@@ -114,10 +114,10 @@
                 = dmiBatchOperationsOutPerDmiServiceName.get(dmiServiceName);
         final boolean isNewOperation = dmiBatchOperationsOut.isEmpty()
                 || !dmiBatchOperationsOut.get(dmiBatchOperationsOut.size() - 1).getOperationId()
-                .equals(batchOperationDefinitionIn.getOperationId());
+                .equals(dataOperationDefinitionIn.getOperationId());
         if (isNewOperation) {
             final DmiBatchOperation newDmiBatchOperationOut =
-                    DmiBatchOperation.buildDmiBatchRequestBodyWithoutCmHandles(batchOperationDefinitionIn);
+                    DmiBatchOperation.buildDmiBatchRequestBodyWithoutCmHandles(dataOperationDefinitionIn);
             dmiBatchOperationsOut.add(newDmiBatchOperationOut);
             return newDmiBatchOperationOut;
         }
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/BatchOperationDefinition.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationDefinition.java
similarity index 94%
rename from cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/BatchOperationDefinition.java
rename to cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationDefinition.java
index 04075b3..8182fbf 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/BatchOperationDefinition.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationDefinition.java
@@ -35,7 +35,7 @@
 @EqualsAndHashCode
 @JsonInclude(JsonInclude.Include.NON_EMPTY)
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class BatchOperationDefinition {
+public class DataOperationDefinition {
 
     private String operation;
     private String operationId;
@@ -45,5 +45,5 @@
 
     @JsonProperty("targetIds")
     @Valid
-    private List<String> cmHandleIds = new ArrayList();
+    private List<String> cmHandleIds = new ArrayList<>();
 }
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/ResourceDataBatchRequest.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationRequest.java
similarity index 91%
rename from cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/ResourceDataBatchRequest.java
rename to cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationRequest.java
index 7af107c..6fa7d5c 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/ResourceDataBatchRequest.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationRequest.java
@@ -35,9 +35,9 @@
 @EqualsAndHashCode
 @JsonInclude(JsonInclude.Include.NON_EMPTY)
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class ResourceDataBatchRequest {
+public class DataOperationRequest {
 
     @JsonProperty("operations")
     @Valid
-    private List<BatchOperationDefinition> batchOperationDefinitions = Collections.emptyList();
+    private List<DataOperationDefinition> dataOperationDefinitions = Collections.emptyList();
 }
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
index 79f7e50..af2b80f 100644
--- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
+++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
@@ -33,13 +33,13 @@
 import org.onap.cps.ncmp.api.inventory.InventoryPersistence
 import org.onap.cps.ncmp.api.inventory.LockReasonCategory
 import org.onap.cps.ncmp.api.inventory.DataStoreSyncState
-import org.onap.cps.ncmp.api.models.BatchOperationDefinition
+import org.onap.cps.ncmp.api.models.DataOperationDefinition
 import org.onap.cps.ncmp.api.models.CmHandleQueryApiParameters
 import org.onap.cps.ncmp.api.models.CmHandleQueryServiceParameters
 import org.onap.cps.ncmp.api.models.ConditionApiProperties
 import org.onap.cps.ncmp.api.models.DmiPluginRegistration
 import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle
-import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest
+import org.onap.cps.ncmp.api.models.DataOperationRequest
 import org.onap.cps.spi.exceptions.CpsException
 import org.onap.cps.spi.model.ConditionProperties
 import spock.lang.Shared
@@ -135,13 +135,13 @@
             response == '{dmi-response}'
     }
 
-    def 'Get batch resource data for #datastoreName from DMI.'() {
+    def 'Execute (async) data operation for #datastoreName from DMI.'() {
         given: 'cpsDataService returns valid data node'
-            def resourceDataBatchRequest = getResourceDataBatchRequest(datastoreName)
-        when: 'get batch resource data is called'
-            objectUnderTest.requestResourceDataForCmHandleBatch('some topic', resourceDataBatchRequest, 'requestId')
-        then: 'get batch resource data returns expected response'
-            1 * mockDmiDataOperations.requestResourceDataFromDmi('some topic', resourceDataBatchRequest, 'requestId')
+            def dataOperationRequest = getDataOperationRequest(datastoreName)
+        when: 'request resource data for data operation is called'
+            objectUnderTest.executeDataOperationForCmHandles('some topic', dataOperationRequest, 'requestId')
+        then: 'request resource data for data operation returns expected response'
+            1 * mockDmiDataOperations.requestResourceDataFromDmi('some topic', dataOperationRequest, 'requestId')
         where: 'the following data stores are used'
             datastoreName << [PASSTHROUGH_RUNNING.datastoreName, PASSTHROUGH_OPERATIONAL.datastoreName]
     }
@@ -368,21 +368,22 @@
                 cmHandleXPath, FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS) >> dataNode
     }
 
-    def getResourceDataBatchRequest(datastore) {
-        def resourceDataBatchRequest = new ResourceDataBatchRequest()
-        def batchOperationDefinitions = new ArrayList()
-        batchOperationDefinitions.add(getBatchOperationDefinition(datastore))
-        resourceDataBatchRequest.setBatchOperationDefinitions(batchOperationDefinitions)
+    def getDataOperationRequest(datastore) {
+        def dataOperationRequest = new DataOperationRequest()
+        def dataOperationDefinitions = new ArrayList()
+        dataOperationDefinitions.add(getDataOperationDefinition(datastore))
+        dataOperationRequest.setDataOperationDefinitions(dataOperationDefinitions)
+        return dataOperationRequest
     }
 
-    def getBatchOperationDefinition(datastore) {
-        def batchOperationDefinition = new BatchOperationDefinition()
-        batchOperationDefinition.setOperation("read")
-        batchOperationDefinition.setOperationId("operational-12")
-        batchOperationDefinition.setDatastore(datastore)
+    def getDataOperationDefinition(datastore) {
+        def dataOperationDefinition = new DataOperationDefinition()
+        dataOperationDefinition.setOperation("read")
+        dataOperationDefinition.setOperationId("operational-12")
+        dataOperationDefinition.setDatastore(datastore)
         def targetIds = new ArrayList()
         targetIds.add("some-cm-handle")
-        batchOperationDefinition.setCmHandleIds(targetIds)
-        return batchOperationDefinition
+        dataOperationDefinition.setCmHandleIds(targetIds)
+        return dataOperationDefinition
     }
 }
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiDataOperationsSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiDataOperationsSpec.groovy
index 9343666..be178e1 100644
--- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiDataOperationsSpec.groovy
+++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiDataOperationsSpec.groovy
@@ -24,7 +24,7 @@
 import com.fasterxml.jackson.databind.ObjectMapper
 import org.onap.cps.ncmp.api.impl.config.NcmpConfiguration
 import org.onap.cps.ncmp.api.impl.utils.DmiServiceUrlBuilder
-import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest
+import org.onap.cps.ncmp.api.models.DataOperationRequest
 import org.onap.cps.ncmp.utils.TestUtils
 import org.onap.cps.utils.JsonObjectMapper
 import org.spockframework.spring.SpringBean
@@ -82,12 +82,12 @@
             'datastore running with properties'    | [yangModelCmHandleProperty] | PASSTHROUGH_RUNNING     | OPTIONS_PARAM || '{"operation":"read","cmHandleProperties":{"prop1":"val1"}}' | 'passthrough-running'     | '&options=(a=1,b=2)'
     }
 
-    def 'call get batch resource data from DMI service #scenario.'() {
-        given: 'collection of yang model cm Handles and resource data batch request'
+    def 'Execute (async) data operation from DMI service.'() {
+        given: 'collection of yang model cm Handles and data operation request'
             mockYangModelCmHandleCollectionRetrieval([yangModelCmHandleProperty])
-            def resourceDataBatchRequestJsonData = TestUtils.getResourceFileContent('resourceDataBatchRequest.json')
-            def resourceDataBatchRequest = spiedJsonObjectMapper.convertJsonString(resourceDataBatchRequestJsonData, ResourceDataBatchRequest.class)
-            resourceDataBatchRequest.batchOperationDefinitions[0].cmHandleIds = [cmHandleId]
+            def dataOperationBatchRequestJsonData = TestUtils.getResourceFileContent('dataOperationRequest.json')
+            def dataOperationRequest = spiedJsonObjectMapper.convertJsonString(dataOperationBatchRequestJsonData, DataOperationRequest.class)
+            dataOperationRequest.dataOperationDefinitions[0].cmHandleIds = [cmHandleId]
             def requestBodyAsJsonStringArg = null
         and: 'a positive response from DMI service when it is called with valid request parameters'
             def responseFromDmi = new ResponseEntity<Object>(HttpStatus.ACCEPTED)
@@ -95,8 +95,8 @@
             def expectedBatchRequestAsJson = '[{"operation":"read","operationId":"operational-14","datastore":"ncmp-datastore:passthrough-operational","options":"some option","resourceIdentifier":"some resource identifier","cmHandles":[{"id":"some-cm-handle","cmHandleProperties":{"prop1":"val1"}}]}]'
             mockDmiRestClient.postOperationWithJsonData(expectedDmiBatchResourceDataUrl, _, READ.operationName) >> responseFromDmi
             dmiServiceUrlBuilder.getBatchRequestUrl(_, _) >> expectedDmiBatchResourceDataUrl
-        when: 'get resource data for batch of cm handles are invoked'
-            objectUnderTest.requestResourceDataFromDmi('my-topic-name', resourceDataBatchRequest, 'requestId')
+        when: 'get resource data for group of cm handles are invoked'
+            objectUnderTest.requestResourceDataFromDmi('my-topic-name', dataOperationRequest, 'requestId')
         then: 'wait a little to allow execution of service method by task executor (on separate thread)'
             Thread.sleep(100)
         then: 'validate ncmp generated dmi request body json args'
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtilsSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/DataOperationRequestUtilsSpec.groovy
similarity index 74%
rename from cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtilsSpec.groovy
rename to cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/DataOperationRequestUtilsSpec.groovy
index e658749..af3841a 100644
--- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtilsSpec.groovy
+++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/DataOperationRequestUtilsSpec.groovy
@@ -24,36 +24,36 @@
 import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle
 import org.onap.cps.ncmp.api.inventory.CmHandleState
 import org.onap.cps.ncmp.api.inventory.CompositeStateBuilder
-import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest
+import org.onap.cps.ncmp.api.models.DataOperationRequest
 import org.onap.cps.ncmp.utils.TestUtils
 import org.onap.cps.utils.JsonObjectMapper
 import org.spockframework.spring.SpringBean
 import spock.lang.Specification
 
-class ResourceDataBatchRequestUtilsSpec extends Specification {
+class DataOperationRequestUtilsSpec extends Specification {
 
     @SpringBean
     JsonObjectMapper jsonObjectMapper = new JsonObjectMapper(new ObjectMapper())
 
-    def 'Process per operation in batch request with #serviceName.'() {
-        given: 'batch request with 3 operations'
-            def resourceDataBatchRequestJsonData = TestUtils.getResourceFileContent('resourceDataBatchRequest.json')
-            def resourceDataBatchRequest = jsonObjectMapper.convertJsonString(resourceDataBatchRequestJsonData, ResourceDataBatchRequest.class)
+    def 'Process per data operation request with #serviceName.'() {
+        given: 'data operation request with 3 operations'
+            def dataOperationRequestJsonData = TestUtils.getResourceFileContent('dataOperationRequest.json')
+            def dataOperationRequest = jsonObjectMapper.convertJsonString(dataOperationRequestJsonData, DataOperationRequest.class)
         and: '4 known cm handles: ch1-dmi1, ch2-dmi1, ch3-dmi2, ch4-dmi2'
             def yangModelCmHandles = getYangModelCmHandles()
-        when: 'Operation in batch request is processed'
-            def operationsOutPerDmiServiceName = ResourceDataBatchRequestUtils.processPerOperationInBatchRequest(resourceDataBatchRequest, yangModelCmHandles)
+        when: 'data operation request is processed'
+            def operationsOutPerDmiServiceName = ResourceDataBatchRequestUtils.processPerOperationInBatchRequest(dataOperationRequest, yangModelCmHandles)
         and: 'converted to a json node'
-            def dmiBatchRequestBody = jsonObjectMapper.asJsonString(operationsOutPerDmiServiceName.get(serviceName))
-            def dmiBatchRequestBodyAsJsonNode = jsonObjectMapper.convertToJsonNode(dmiBatchRequestBody).get(operationIndex)
+            def dmiDataOperationRequestBody = jsonObjectMapper.asJsonString(operationsOutPerDmiServiceName.get(serviceName))
+            def dmiDataOperationRequestBodyAsJsonNode = jsonObjectMapper.convertToJsonNode(dmiDataOperationRequestBody).get(operationIndex)
         then: 'it contains the correct operation details'
-            assert dmiBatchRequestBodyAsJsonNode.get('operation').asText() == 'read'
-            assert dmiBatchRequestBodyAsJsonNode.get('operationId').asText() == expectedOperationId
-            assert dmiBatchRequestBodyAsJsonNode.get('datastore').asText() == expectedDatastore
+            assert dmiDataOperationRequestBodyAsJsonNode.get('operation').asText() == 'read'
+            assert dmiDataOperationRequestBodyAsJsonNode.get('operationId').asText() == expectedOperationId
+            assert dmiDataOperationRequestBodyAsJsonNode.get('datastore').asText() == expectedDatastore
         and: 'the correct cm handles (just for #serviceName)'
-            assert dmiBatchRequestBodyAsJsonNode.get('cmHandles').size() == expectedCmHandleIds.size()
+            assert dmiDataOperationRequestBodyAsJsonNode.get('cmHandles').size() == expectedCmHandleIds.size()
             expectedCmHandleIds.each {
-                dmiBatchRequestBodyAsJsonNode.get('cmHandles').toString().contains(it)
+                dmiDataOperationRequestBodyAsJsonNode.get('cmHandles').toString().contains(it)
             }
         where: 'the following dmi service and operations are checked'
             serviceName | operationIndex || expectedOperationId | expectedDatastore                        | expectedCmHandleIds
diff --git a/cps-ncmp-service/src/test/resources/resourceDataBatchRequest.json b/cps-ncmp-service/src/test/resources/dataOperationRequest.json
similarity index 100%
rename from cps-ncmp-service/src/test/resources/resourceDataBatchRequest.json
rename to cps-ncmp-service/src/test/resources/dataOperationRequest.json
