diff --git a/pom.xml b/pom.xml
index 2f750fc..20d01aa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -583,6 +583,7 @@
     <module>prh-app-server</module>
     <module>prh-aai-client</module>
     <module>prh-dmaap-client</module>
+    <module>prh-commons</module>
   </modules>
 </project>
 
diff --git a/prh-aai-client/pom.xml b/prh-aai-client/pom.xml
index 1b2b199..8d4161f 100644
--- a/prh-aai-client/pom.xml
+++ b/prh-aai-client/pom.xml
@@ -66,6 +66,11 @@
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.onap.dcaegen2.services.commons</groupId>
+      <artifactId>commons</artifactId>
+      <version>1.0-SNAPSHOT</version>
+    </dependency>
 
     <!-- LOGGING DEPENDENCIES-->
     <dependency>
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/config/AAIClientConfiguration.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/config/AAIClientConfiguration.java
index 60a022b..5a3bffc 100644
--- a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/config/AAIClientConfiguration.java
+++ b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/config/AAIClientConfiguration.java
@@ -22,6 +22,8 @@
 
 
 import java.io.Serializable;
+import java.util.Map;
+
 import org.immutables.gson.Gson;
 import org.immutables.value.Value;
 import org.springframework.stereotype.Component;
@@ -53,4 +55,13 @@
     @Value.Parameter
     public abstract Boolean aaiIgnoreSSLCertificateErrors();
 
+    @Value.Parameter
+    public abstract String aaiBasePath();
+
+    @Value.Parameter
+    public abstract String aaiPnfPath();
+
+    @Value.Parameter
+    public abstract Map<String,String> aaiHeaders();
+
 }
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIClientImpl.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIClientImpl.java
index c2b40b9..f58919e 100644
--- a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIClientImpl.java
+++ b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIClientImpl.java
@@ -34,7 +34,6 @@
 import org.onap.dcaegen2.services.config.AAIClientConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 
 import java.security.KeyManagementException;
 import java.security.KeyStoreException;
@@ -46,7 +45,7 @@
 
     private AAIClientConfiguration aaiHttpClientConfig;
 
-    @Autowired
+
     public AAIClientImpl(AAIClientConfiguration aaiHttpClientConfiguration) {
         this.aaiHttpClientConfig = aaiHttpClientConfiguration;
     }
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIConsumerClient.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIConsumerClient.java
index 24790be..ffaf1af 100644
--- a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIConsumerClient.java
+++ b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIConsumerClient.java
@@ -28,7 +28,7 @@
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.util.EntityUtils;
 import org.onap.dcaegen2.services.config.AAIClientConfiguration;
-import org.onap.dcaegen2.services.utils.HttpRequestDetails;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
 import org.onap.dcaegen2.services.utils.HttpUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,9 +36,11 @@
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 
-public class AAIConsumerClient implements AAIExtendedHttpClient {
+public class AAIConsumerClient {
 
     Logger logger = LoggerFactory.getLogger(AAIConsumerClient.class);
 
@@ -46,33 +48,30 @@
     private final String aaiHost;
     private final String aaiProtocol;
     private final Integer aaiHostPortNumber;
+    private final String aaiPath;
+    private final Map<String,String> aaiHeaders;
 
 
     public AAIConsumerClient(AAIClientConfiguration aaiHttpClientConfiguration) {
-        final AAIClient aaiClient = new AAIClientImpl(aaiHttpClientConfiguration);
-        closeableHttpClient = aaiClient.getAAIHttpClient();
+        closeableHttpClient = new AAIClientImpl(aaiHttpClientConfiguration).getAAIHttpClient();
         aaiHost = aaiHttpClientConfiguration.aaiHost();
         aaiProtocol = aaiHttpClientConfiguration.aaiProtocol();
         aaiHostPortNumber = aaiHttpClientConfiguration.aaiHostPortNumber();
+        aaiPath = aaiHttpClientConfiguration.aaiBasePath() + aaiHttpClientConfiguration.aaiPnfPath();
+        aaiHeaders = aaiHttpClientConfiguration.aaiHeaders();
     }
 
-    @Override
-    public Optional<String> getHttpResponse(HttpRequestDetails requestDetails) {
-
-        Optional<String> extendedDetails = Optional.empty();
-        Optional<HttpRequestBase> request = createRequest(requestDetails);
-
+    public Optional<String> getHttpResponse(ConsumerDmaapModel consumerDmaapModel) throws IOException {
+        Optional<HttpRequestBase> request = createRequest(consumerDmaapModel);
         try {
-            extendedDetails = closeableHttpClient.execute(request.get(), aaiResponseHandler());
+            return closeableHttpClient.execute(request.get(), aaiResponseHandler());
         } catch (IOException e) {
-            logger.error("Exception while executing HTTP request: {}", e);
+            logger.warn("Exception while executing http client: ", e);
+            throw new IOException();
         }
-
-        return extendedDetails;
     }
 
-
-    private URI createAAIExtendedURI(final String path, String pnfName) {
+    private URI createAAIExtendedURI(String pnfName) {
 
         URI extendedURI = null;
 
@@ -80,13 +79,13 @@
                 .setScheme(aaiProtocol)
                 .setHost(aaiHost)
                 .setPort(aaiHostPortNumber)
-                .setPath(path + "/" + pnfName);
+                .setPath(aaiPath + "/" + pnfName);
 
         try {
             extendedURI = uriBuilder.build();
-            logger.info("Building extended URI: {}", extendedURI);
+            logger.trace("Building extended URI: {}", extendedURI);
         } catch (URISyntaxException e) {
-            logger.error("Exception while building extended URI: {}", e);
+            logger.warn("Exception while building extended URI: {}", e);
         }
 
         return extendedURI;
@@ -95,39 +94,34 @@
     private ResponseHandler<Optional<String>> aaiResponseHandler() {
         return httpResponse ->  {
             final int responseCode = httpResponse.getStatusLine().getStatusCode();
-            logger.info("Status code of operation: {}", responseCode);
+            logger.trace("Status code of operation: {}", responseCode);
             final HttpEntity responseEntity = httpResponse.getEntity();
 
             if (HttpUtils.isSuccessfulResponseCode(responseCode) ) {
-                logger.info("HTTP response successful.");
+                logger.trace("HTTP response successful.");
                 final String aaiResponse = EntityUtils.toString(responseEntity);
                 return Optional.of(aaiResponse);
             } else {
                 String aaiResponse = responseEntity != null ? EntityUtils.toString(responseEntity) : "";
-                logger.error("HTTP response not successful : {}", aaiResponse);
-                return Optional.of("" + responseCode);
+                logger.warn("HTTP response not successful : {}", aaiResponse);
+                return Optional.of(String.valueOf(responseCode));
             }
         };
     }
 
     private HttpRequestBase createHttpRequest(URI extendedURI) {
-
-        if (isExtendedURINotNull(extendedURI)) {
-            return new HttpGet(extendedURI);
-        } else {
-            return null;
-        }
+        return isExtendedURINotNull(extendedURI) ? new HttpGet(extendedURI) : null;
     }
 
     private Boolean isExtendedURINotNull(URI extendedURI) {
         return extendedURI != null;
     }
 
-    private Optional<HttpRequestBase> createRequest(HttpRequestDetails requestDetails) {
-
-        final URI extendedURI = createAAIExtendedURI(requestDetails.aaiAPIPath(), requestDetails.pnfName());
+    private Optional<HttpRequestBase> createRequest(ConsumerDmaapModel consumerDmaapModel) {
+        final URI extendedURI = createAAIExtendedURI(consumerDmaapModel.getPnfName());
         HttpRequestBase request = createHttpRequest(extendedURI);
-        requestDetails.headers().forEach(request::addHeader);
+        aaiHeaders.forEach(Objects.requireNonNull(request)::addHeader);
+        Objects.requireNonNull(request).addHeader("Content-Type", "application/json");
         return Optional.of(request);
     }
 }
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIExtendedHttpClient.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIExtendedHttpClient.java
index 24149e6..71c94b6 100644
--- a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIExtendedHttpClient.java
+++ b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIExtendedHttpClient.java
@@ -19,12 +19,13 @@
  */
 package org.onap.dcaegen2.services.service;
 
-import org.onap.dcaegen2.services.utils.HttpRequestDetails;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
 
+import java.io.IOException;
 import java.util.Optional;
 
 
 @FunctionalInterface
 public interface AAIExtendedHttpClient {
-    Optional<String> getHttpResponse(HttpRequestDetails httpRequestDetails);
+    Optional<Integer> getHttpResponse(ConsumerDmaapModel consumerDmaapModel) throws IOException;
 }
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIProducerClient.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIProducerClient.java
index 0b82578..788d997 100644
--- a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIProducerClient.java
+++ b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIProducerClient.java
@@ -30,7 +30,8 @@
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.util.EntityUtils;
 import org.onap.dcaegen2.services.config.AAIClientConfiguration;
-import org.onap.dcaegen2.services.utils.HttpRequestDetails;
+import org.onap.dcaegen2.services.model.CommonFunctions;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
 import org.onap.dcaegen2.services.utils.HttpUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,6 +40,8 @@
 import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 
 public class AAIProducerClient implements AAIExtendedHttpClient {
@@ -48,71 +51,69 @@
     private final String aaiHost;
     private final String aaiProtocol;
     private final Integer aaiHostPortNumber;
+    private final String aaiPath;
+    private final Map<String,String> aaiHeaders;
 
 
     public AAIProducerClient(AAIClientConfiguration aaiHttpClientConfiguration) {
-        final AAIClient aaiHttpClient = new AAIClientImpl(aaiHttpClientConfiguration);
-        closeableHttpClient = aaiHttpClient.getAAIHttpClient();
+        closeableHttpClient = new AAIClientImpl(aaiHttpClientConfiguration).getAAIHttpClient();
         aaiHost = aaiHttpClientConfiguration.aaiHost();
         aaiProtocol = aaiHttpClientConfiguration.aaiProtocol();
         aaiHostPortNumber = aaiHttpClientConfiguration.aaiHostPortNumber();
+        aaiPath = aaiHttpClientConfiguration.aaiBasePath() + aaiHttpClientConfiguration.aaiPnfPath();
+        aaiHeaders = aaiHttpClientConfiguration.aaiHeaders();
     }
 
+
     @Override
-    public Optional<String> getHttpResponse(HttpRequestDetails requestDetails) {
-
-        Optional<String> extendedDetails = Optional.empty();
-        Optional<HttpRequestBase> request = createRequest(requestDetails);
-
+    public Optional<Integer> getHttpResponse(ConsumerDmaapModel consumerDmaapModel) throws IOException {
+        Optional<HttpRequestBase> request = createRequest(consumerDmaapModel);
         try {
-            extendedDetails = closeableHttpClient.execute(request.get(), aaiResponseHandler());
+            return closeableHttpClient.execute(request.get(), aaiResponseHandler());
         } catch (IOException e) {
-            logger.error("Exception while executing HTTP request: {}", e);
+            logger.warn("Exception while executing http client: ", e);
+            throw new IOException();
         }
-
-        return extendedDetails;
     }
 
-    private URI createAAIExtendedURI(final String path, final String pnfName) {
-
+    private URI createAAIExtendedURI(final String pnfName) {
         URI extendedURI = null;
-
         final URIBuilder uriBuilder = new URIBuilder()
                 .setScheme(aaiProtocol)
                 .setHost(aaiHost)
                 .setPort(aaiHostPortNumber)
-                .setPath(path + "/" + pnfName);
-
+                .setPath(aaiPath + "/" + pnfName);
         try {
             extendedURI = uriBuilder.build();
-            logger.info("Building extended URI: {}", extendedURI);
+            logger.trace("Building extended URI: {}", extendedURI);
         } catch (URISyntaxException e) {
-            logger.error("Exception while building extended URI: {}", e);
+            logger.warn("Exception while building extended URI: ", e);
         }
-
         return extendedURI;
     }
 
-    private ResponseHandler<Optional<String>> aaiResponseHandler() {
+    private ResponseHandler<Optional<Integer>> aaiResponseHandler() {
         return (HttpResponse httpResponse) ->  {
-            final int responseCode = httpResponse.getStatusLine().getStatusCode();
-            logger.info("Status code of operation: {}", responseCode);
+            final Integer responseCode = httpResponse.getStatusLine().getStatusCode();
+            logger.trace("Status code of operation: {}", responseCode);
             final HttpEntity responseEntity = httpResponse.getEntity();
 
             if (HttpUtils.isSuccessfulResponseCode(responseCode)) {
-                logger.info("HTTP response successful.");
-                return Optional.of("" + responseCode);
+                logger.trace("HTTP response successful.");
+                return Optional.of(responseCode);
             } else {
                 String aaiResponse = responseEntity != null ? EntityUtils.toString(responseEntity) : "";
-                logger.error("HTTP response not successful : {}", aaiResponse);
-                return Optional.of("" + responseCode);
+                logger.warn("HTTP response not successful : {}", aaiResponse);
+                return Optional.of(responseCode);
             }
         };
     }
 
-    private HttpRequestBase createHttpRequest(URI extendedURI, HttpRequestDetails httpRequestDetails) {
-        if (isExtendedURINotNull(extendedURI) && httpRequestDetails.jsonBody().isPresent()) {
-            return createHttpPatch(extendedURI, httpRequestDetails.jsonBody());
+    private HttpRequestBase createHttpRequest(URI extendedURI, ConsumerDmaapModel consumerDmaapModel) {
+        String jsonBody = CommonFunctions.createJsonBody(consumerDmaapModel);
+
+        if (isExtendedURINotNull(extendedURI) && jsonBody != null && !"".equals(jsonBody)) {
+            return createHttpPatch(extendedURI, Optional.ofNullable(CommonFunctions.createJsonBody(consumerDmaapModel)));
         } else {
             return null;
         }
@@ -122,6 +123,7 @@
         return extendedURI != null;
     }
 
+
     private Optional<StringEntity> createStringEntity(Optional<String> jsonBody) {
         return Optional.of(parseJson(jsonBody).get());
     }
@@ -135,21 +137,19 @@
 
     private Optional<StringEntity> parseJson(Optional<String> jsonBody) {
         Optional<StringEntity> stringEntity = Optional.empty();
-
         try {
             stringEntity = Optional.of(new StringEntity(jsonBody.get()));
         } catch (UnsupportedEncodingException e) {
-            logger.error("Exception while parsing JSON: {}", e);
+            logger.warn("Exception while parsing JSON: ", e);
         }
-
         return stringEntity;
     }
 
-    private Optional<HttpRequestBase> createRequest(HttpRequestDetails requestDetails) {
-
-        final URI extendedURI = createAAIExtendedURI(requestDetails.aaiAPIPath(), requestDetails.pnfName());
-        HttpRequestBase request = createHttpRequest(extendedURI, requestDetails);
-        requestDetails.headers().forEach(request::addHeader);
+    private Optional<HttpRequestBase> createRequest(ConsumerDmaapModel consumerDmaapModel) {
+        final URI extendedURI = createAAIExtendedURI(consumerDmaapModel.getPnfName());
+        HttpRequestBase request = createHttpRequest(extendedURI, consumerDmaapModel);
+        aaiHeaders.forEach(Objects.requireNonNull(request)::addHeader);
+        Objects.requireNonNull(request).addHeader("Content-Type", "application/merge-patch+json");
         return Optional.of(request);
     }
 }
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/utils/HttpRequestDetails.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/utils/HttpRequestDetails.java
deleted file mode 100644
index 37e6b86..0000000
--- a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/utils/HttpRequestDetails.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * PNF-REGISTRATION-HANDLER
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-package org.onap.dcaegen2.services.utils;
-
-
-import org.immutables.value.Value;
-
-import java.io.Serializable;
-import java.util.Map;
-import java.util.Optional;
-
-@Value.Immutable(prehash = true)
-@Value.Style(stagedBuilder = true)
-public abstract class HttpRequestDetails implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @Value.Parameter
-    public abstract String aaiAPIPath();
-
-    @Value.Parameter
-    public abstract Optional<String> jsonBody();
-
-    @Value.Parameter
-    public abstract String pnfName();
-
-    @Value.Parameter
-    public abstract Map<String,String> headers();
-}
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/utils/HttpUtils.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/utils/HttpUtils.java
index eac7f83..20bc7e0 100644
--- a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/utils/HttpUtils.java
+++ b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/utils/HttpUtils.java
@@ -23,8 +23,6 @@
 
 public final class HttpUtils implements HttpStatus {
 
-    public static final String JSON_APPLICATION_TYPE = "application/json";
-
     private HttpUtils() {}
 
     public static boolean isSuccessfulResponseCode(Integer statusCode) {
diff --git a/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/AAIConsumerClientTest.java b/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/AAIConsumerClientTest.java
index b95cc8d..5e45d84 100644
--- a/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/AAIConsumerClientTest.java
+++ b/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/AAIConsumerClientTest.java
@@ -27,7 +27,7 @@
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.onap.dcaegen2.services.config.AAIClientConfiguration;
-import org.onap.dcaegen2.services.utils.HttpRequestDetails;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
 
 import java.io.IOException;
 import java.lang.reflect.Field;
@@ -44,8 +44,9 @@
     private static AAIConsumerClient testedObject;
     private static AAIClientConfiguration aaiHttpClientConfigurationMock = mock(AAIClientConfiguration.class);
     private static CloseableHttpClient closeableHttpClientMock = mock(CloseableHttpClient.class);
-    private static HttpRequestDetails httpRequestDetailsMock = mock(HttpRequestDetails.class);
     private static final String JSON_MESSAGE = "{ \"pnf-id\": \"example-pnf-id-val-22343\", \"regional-resource-zone\":null, \"ipaddress-v4-oam\": \"11.22.33.44\" }";
+    private static ConsumerDmaapModel consumerDmaapModelMock =  mock(ConsumerDmaapModel.class);
+    private static final String PNF_NAME = "nokia-pnf-nhfsadhff";
 
     @BeforeAll
     public static void setup() throws NoSuchFieldException, IllegalAccessException {
@@ -54,7 +55,7 @@
         aaiHeaders.put("X-FromAppId", "prh");
         aaiHeaders.put("X-TransactionId", "9999");
         aaiHeaders.put("Accept", "application/json");
-        aaiHeaders.put("authentication", "Basic QUFJOkFBSQ==");
+        aaiHeaders.put("Authorization", "Basic QUFJOkFBSQ==");
         aaiHeaders.put("Real-Time", "true");
         aaiHeaders.put("Content-Type", "application/json");
 
@@ -63,11 +64,11 @@
         when(aaiHttpClientConfigurationMock.aaiHostPortNumber()).thenReturn(1234);
         when(aaiHttpClientConfigurationMock.aaiUserName()).thenReturn("PRH");
         when(aaiHttpClientConfigurationMock.aaiUserPassword()).thenReturn("PRH");
+        when(aaiHttpClientConfigurationMock.aaiBasePath()).thenReturn("/aai/v11");
+        when(aaiHttpClientConfigurationMock.aaiPnfPath()).thenReturn("/network/pnfs/pnf");
+        when(aaiHttpClientConfigurationMock.aaiHeaders()).thenReturn(aaiHeaders);
 
-        when(httpRequestDetailsMock.aaiAPIPath()).thenReturn("/aai/v11/network/pnfs/pnf");
-        when(httpRequestDetailsMock.headers()).thenReturn(aaiHeaders);
-        when(httpRequestDetailsMock.pnfName()).thenReturn("pnf-nokia-45fsfcx");
-        when(httpRequestDetailsMock.jsonBody()).thenReturn(Optional.of(JSON_MESSAGE));
+        when(consumerDmaapModelMock.getPnfName()).thenReturn(PNF_NAME);
 
         testedObject = new AAIConsumerClient(aaiHttpClientConfigurationMock);
         setField();
@@ -79,7 +80,7 @@
 
         when(closeableHttpClientMock.execute(any(HttpGet.class), any(ResponseHandler.class))).
                 thenReturn(Optional.of(JSON_MESSAGE));
-        Optional<String>  actualResult = testedObject.getHttpResponse(httpRequestDetailsMock);
+        Optional<String>  actualResult = testedObject.getHttpResponse(consumerDmaapModelMock);
         Assertions.assertEquals(Optional.of(JSON_MESSAGE),actualResult);
     }
 
diff --git a/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/AAIProducerClientTest.java b/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/AAIProducerClientTest.java
index 7f3978b..59c90dc 100644
--- a/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/AAIProducerClientTest.java
+++ b/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/AAIProducerClientTest.java
@@ -27,7 +27,9 @@
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.onap.dcaegen2.services.config.AAIClientConfiguration;
-import org.onap.dcaegen2.services.utils.HttpRequestDetails;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModelForUnitTest;
+
 
 import java.io.IOException;
 import java.lang.reflect.Field;
@@ -41,17 +43,17 @@
 
 public class AAIProducerClientTest {
 
+    private static final Integer SUCCESS = 200;
     private static AAIProducerClient testedObject;
     private static AAIClientConfiguration aaiHttpClientConfigurationMock = mock(AAIClientConfiguration.class);
     private static CloseableHttpClient closeableHttpClientMock = mock(CloseableHttpClient.class);
-    private static HttpRequestDetails httpRequestDetailsMock = mock(HttpRequestDetails.class);
-    private static final String JsonBody = "{\"ipaddress-v4-oam\":\"11.22.33.155\"}";
-    private static final String SUCCESS = "200";
-    private static final String PNF_NAME = "nokia-pnf-nhfsadhff";
+    private static ConsumerDmaapModel consumerDmaapModel = new ConsumerDmaapModelForUnitTest();
+
 
     @BeforeAll
     public static void init() throws NoSuchFieldException, IllegalAccessException {
 
+        //given
         Map<String, String> aaiHeaders = new HashMap<>();
         aaiHeaders.put("X-FromAppId", "prh");
         aaiHeaders.put("X-TransactionId", "vv-temp");
@@ -59,29 +61,28 @@
         aaiHeaders.put("Real-Time", "true");
         aaiHeaders.put("Content-Type", "application/merge-patch+json");
 
+        //when
         when(aaiHttpClientConfigurationMock.aaiHost()).thenReturn("eucalyptus.es-si-eu-dhn-20.eecloud.nsn-net.net");
         when(aaiHttpClientConfigurationMock.aaiProtocol()).thenReturn("https");
         when(aaiHttpClientConfigurationMock.aaiHostPortNumber()).thenReturn(1234);
         when(aaiHttpClientConfigurationMock.aaiUserName()).thenReturn("PRH");
         when(aaiHttpClientConfigurationMock.aaiUserPassword()).thenReturn("PRH");
-
-        when(httpRequestDetailsMock.aaiAPIPath()).thenReturn("/aai/v11/network/pnfs/pnf");
-
-        when(httpRequestDetailsMock.headers()).thenReturn(aaiHeaders);
-        when(httpRequestDetailsMock.pnfName()).thenReturn(PNF_NAME);
-        when(httpRequestDetailsMock.jsonBody()).thenReturn(Optional.of(JsonBody));
+        when(aaiHttpClientConfigurationMock.aaiBasePath()).thenReturn("/aai/v11");
+        when(aaiHttpClientConfigurationMock.aaiPnfPath()).thenReturn("/network/pnfs/pnf");
+        when(aaiHttpClientConfigurationMock.aaiHeaders()).thenReturn(aaiHeaders);
 
         testedObject = new AAIProducerClient(aaiHttpClientConfigurationMock);
         setField();
     }
 
     @Test
-    public void getHttpResponsePatch_success() throws IOException {
-
+    public void getHttpResponsePatch_shouldReturnSuccessStatusCode() throws IOException {
+        //when
         when(closeableHttpClientMock.execute(any(HttpPatch.class), any(ResponseHandler.class)))
                 .thenReturn(Optional.of(SUCCESS));
-        Optional<String> actualResult = testedObject.getHttpResponse(httpRequestDetailsMock);
+        Optional<Integer> actualResult = testedObject.getHttpResponse(consumerDmaapModel);
 
+        //then
         Assertions.assertEquals(SUCCESS, actualResult.get());
     }
 
diff --git a/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/config/AAIHttpClientConfigurationTest.java b/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/config/AAIHttpClientConfigurationTest.java
index 29a0092..447e0ec 100644
--- a/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/config/AAIHttpClientConfigurationTest.java
+++ b/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/config/AAIHttpClientConfigurationTest.java
@@ -33,6 +33,8 @@
     private static final Integer PORT = 1234;
     private static final String PROTOCOL = "https";
     private static final String USER_NAME_PASSWORD = "PRH";
+    private static final String BASE_PATH = "/aai/v11";
+    private static final String PNF_PATH = "/network/pnfs/pnf";
 
     @BeforeAll
     public static void init() {
@@ -43,6 +45,8 @@
             .aaiUserName(USER_NAME_PASSWORD)
             .aaiUserPassword(USER_NAME_PASSWORD)
             .aaiIgnoreSSLCertificateErrors(true)
+            .aaiBasePath(BASE_PATH)
+            .aaiPnfPath(PNF_PATH)
             .build();
     }
 
diff --git a/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/utils/HttpRequestDetailsTest.java b/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/utils/HttpRequestDetailsTest.java
deleted file mode 100644
index 0deb8ad..0000000
--- a/prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/utils/HttpRequestDetailsTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * PNF-REGISTRATION-HANDLER
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.dcaegen2.services.service.utils;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-
-import org.onap.dcaegen2.services.utils.HttpRequestDetails;
-import org.onap.dcaegen2.services.utils.ImmutableHttpRequestDetails;
-import org.onap.dcaegen2.services.utils.RequestVerbs;
-
-import java.util.Optional;
-
-
-public class HttpRequestDetailsTest {
-
-    private static HttpRequestDetails testObject;
-
-    private static final String AAI_PATH = "aaiPathTest";
-    private static final String HEADERS_KEY1 = "headersKey1";
-    private static final String HEADERS_VALUE1 = "headersValue1";
-    private static final String JSON_MESSAGE = "{\"dare_to\": \"dream_big\"}";
-    private static final String PNF_NAME = "pnf-nokia-5454885485";
-
-    @BeforeAll
-    public static void init() {
-        testObject = ImmutableHttpRequestDetails.builder()
-                .aaiAPIPath(AAI_PATH)
-                .pnfName(PNF_NAME)
-                .putHeaders(HEADERS_KEY1,HEADERS_VALUE1)
-                .jsonBody(JSON_MESSAGE)
-                .build();
-    }
-
-    @Test
-    public void testGetters_success() {
-        Assertions.assertEquals(AAI_PATH, testObject.aaiAPIPath());
-        Assertions.assertEquals(HEADERS_VALUE1, testObject.headers().get(HEADERS_KEY1));
-        Assertions.assertEquals(PNF_NAME, testObject.pnfName());
-        Assertions.assertEquals(Optional.of(JSON_MESSAGE), testObject.jsonBody());
-    }
-}
diff --git a/prh-app-server/config/prh_endpoints.json b/prh-app-server/config/prh_endpoints.json
index 2e709e9..1a3ebad 100644
--- a/prh-app-server/config/prh_endpoints.json
+++ b/prh-app-server/config/prh_endpoints.json
@@ -17,7 +17,7 @@
       "dmaapProducerConfiguration": {
         "dmaapHostName": "localhost",
         "dmaapPortNumber": 2223,
-        "dmaapTopicName": "temp",
+        "dmaapTopicName": "/events/pnfReady",
         "dmaapProtocol": "http",
         "dmaapUserName": "admin",
         "dmaapUserPassword": "admin",
@@ -31,7 +31,16 @@
         "aaiProtocol": "https",
         "aaiUserName": "admin",
         "aaiUserPassword": "admin",
-        "aaiIgnoreSSLCertificateErrors": true
+        "aaiIgnoreSSLCertificateErrors": true,
+        "aaiBasePath": "/aai/v11",
+        "aaiPnfPath": "/network/pnfs/pnf",
+        "aaiHeaders": {
+          "X-FromAppId": "prh",
+          "X-TransactionId": "9999",
+          "Accept": "application/json",
+          "Real-Time": "true",
+          "Authorization": "Basic QUFJOkFBSQ=="
+        }
       }
     }
   }
diff --git a/prh-app-server/pom.xml b/prh-app-server/pom.xml
index f9d53c2..d1345c5 100644
--- a/prh-app-server/pom.xml
+++ b/prh-app-server/pom.xml
@@ -182,6 +182,12 @@
       <groupId>org.immutables</groupId>
       <artifactId>gson</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.onap.dcaegen2.services.commons</groupId>
+      <artifactId>commons</artifactId>
+      <version>1.0-SNAPSHOT</version>
+    </dependency>
+
 
     <!-- LOGGING DEPENDENCIES-->
     <dependency>
@@ -268,6 +274,7 @@
       <version>1.0.0-SNAPSHOT</version>
     </dependency>
 
+
   </dependencies>
   <dependencyManagement>
     <dependencies>
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AppConfig.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AppConfig.java
index fba8985..19c8d49 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AppConfig.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AppConfig.java
@@ -106,6 +106,12 @@
     @Value("${aai.aaiHttpClientConfiguration.aaiIgnoreSSLCertificateErrors:}")
     public Boolean aaiIgnoreSSLCertificateErrors;
 
+    @Value("${aai.aaiHttpClientConfiguration.aaiBasePath:}")
+    public String aaiBasePath;
+
+    @Value("${aai.aaiHttpClientConfiguration.aaiPnfPath:}")
+    public String aaiPnfPath;
+
     @Override
     public DmaapConsumerConfiguration getDmaapConsumerConfiguration() {
         return new ImmutableDmaapConsumerConfiguration.Builder()
@@ -134,18 +140,19 @@
     @Override
     public AAIClientConfiguration getAAIClientConfiguration() {
         return new ImmutableAAIClientConfiguration.Builder()
-            .aaiHost(Optional.ofNullable(aaiHost).orElse(aaiClientConfiguration.aaiHost()))
-            .aaiHostPortNumber(
-                Optional.ofNullable(aaiHostPortNumber).orElse(aaiClientConfiguration.aaiHostPortNumber()))
-            .aaiIgnoreSSLCertificateErrors(
-                Optional.ofNullable(aaiIgnoreSSLCertificateErrors)
-                    .orElse(aaiClientConfiguration.aaiIgnoreSSLCertificateErrors()))
-            .aaiProtocol(Optional.ofNullable(aaiProtocol).orElse(aaiClientConfiguration.aaiProtocol()))
-            .aaiUserName(
-                Optional.ofNullable(aaiUserName).orElse(aaiClientConfiguration.aaiUserName()))
-            .aaiUserPassword(Optional.ofNullable(
-                aaiUserPassword).orElse(aaiClientConfiguration.aaiUserPassword()))
-            .build();
+                .aaiHost(Optional.ofNullable(aaiHost).orElse(aaiClientConfiguration.aaiHost()))
+                .aaiHostPortNumber(
+                        Optional.ofNullable(aaiHostPortNumber).orElse(aaiClientConfiguration.aaiHostPortNumber()))
+                .aaiIgnoreSSLCertificateErrors(
+                        Optional.ofNullable(aaiIgnoreSSLCertificateErrors)
+                                .orElse(aaiClientConfiguration.aaiIgnoreSSLCertificateErrors()))
+                .aaiProtocol(Optional.ofNullable(aaiProtocol).orElse(aaiClientConfiguration.aaiProtocol()))
+                .aaiUserName(Optional.ofNullable(aaiUserName).orElse(aaiClientConfiguration.aaiUserName()))
+                .aaiUserPassword(Optional.ofNullable(aaiUserPassword).orElse(aaiClientConfiguration.aaiUserPassword()))
+                .aaiBasePath(Optional.ofNullable(aaiBasePath).orElse(aaiClientConfiguration.aaiBasePath()))
+                .aaiPnfPath(Optional.ofNullable(aaiPnfPath).orElse(aaiClientConfiguration.aaiPnfPath()))
+                .aaiHeaders(aaiClientConfiguration.aaiHeaders())
+                .build();
     }
 
     @Override
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfig.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfig.java
index 3df25d0..c4cb20d 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfig.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfig.java
@@ -32,8 +32,6 @@
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.io.*;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
 import java.util.ServiceLoader;
 
 /**
@@ -47,7 +45,7 @@
     private static final String CONFIG = "configs";
     private static final String AAI = "aai";
     private static final String DMAAP = "dmaap";
-    private static final String AAI_CONFIG = "aaiHttpClientConfiguration";
+    private static final String AAI_CONFIG = "aaiClientConfiguration";
     private static final String DMAAP_PRODUCER = "dmaapProducerConfiguration";
     private static final String DMAAP_CONSUMER = "dmaapConsumerConfiguration";
 
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/HeartbeatController.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/HeartbeatController.java
index 269e7a2..8db4f0b 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/HeartbeatController.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/HeartbeatController.java
@@ -23,7 +23,6 @@
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
-import org.onap.dcaegen2.services.prh.configuration.PrhAppConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.http.HttpStatus;
@@ -40,21 +39,21 @@
 @Api(value = "HeartbeatController", description = "Check liveness of PRH service")
 public class HeartbeatController {
 
-    private static final Logger logger = LoggerFactory.getLogger(PrhAppConfig.class);
+    private static final Logger logger = LoggerFactory.getLogger(HeartbeatController.class);
 
     @RequestMapping(value = "heartbeat", method = RequestMethod.GET)
     @ApiOperation(value = "Returns liveness of PRH service")
     @ApiResponses(value = {
-        @ApiResponse(code = 200, message = "PRH sevice is living"),
-        @ApiResponse(code = 401, message = "You are not authorized to view the resource"),
-        @ApiResponse(code = 403, message = "Accessing the resource you were trying to reach is forbidden"),
-        @ApiResponse(code = 404, message = "The resource you were trying to reach is not found")
+            @ApiResponse(code = 200, message = "PRH sevice is living"),
+            @ApiResponse(code = 401, message = "You are not authorized to view the resource"),
+            @ApiResponse(code = 403, message = "Accessing the resource you were trying to reach is forbidden"),
+            @ApiResponse(code = 404, message = "The resource you were trying to reach is not found")
     }
     )
     public Mono<ResponseEntity<String>> heartbeat() {
         logger.trace("Receiving heartbeat request");
         return Mono.defer(() ->
-            Mono.just(new ResponseEntity<>("I'm living", HttpStatus.OK))
+                Mono.just(new ResponseEntity<>("I'm living", HttpStatus.OK))
         );
     }
-}
+}
\ No newline at end of file
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/ScheduleController.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/ScheduleController.java
index cd3347f..96b69b7 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/ScheduleController.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/ScheduleController.java
@@ -21,10 +21,6 @@
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ScheduledFuture;
-import org.onap.dcaegen2.services.prh.configuration.PrhAppConfig;
 import org.onap.dcaegen2.services.prh.tasks.ScheduledTasks;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,21 +28,23 @@
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.scheduling.TaskScheduler;
-import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 import reactor.core.publisher.Mono;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ScheduledFuture;
+
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/5/18
  */
 @RestController
-@Component
 @Api(value = "ScheduleController", description = "Schedule Controller")
 public class ScheduleController {
 
-    private static final Logger logger = LoggerFactory.getLogger(PrhAppConfig.class);
+    private static final Logger logger = LoggerFactory.getLogger(ScheduleController.class);
     private static final int SCHEDULING_DELAY = 20000;
     private static volatile List<ScheduledFuture> scheduledFutureList = new ArrayList<>();
 
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParser.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParser.java
index 0ef7e4f..ae5d922 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParser.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParser.java
@@ -23,8 +23,8 @@
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
-import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
-import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
+import org.onap.dcaegen2.services.model.ImmutableConsumerDmaapModel;
 
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AAIConsumerTaskImpl.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AAIConsumerTaskImpl.java
index 95352d4..136f5b7 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AAIConsumerTaskImpl.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AAIConsumerTaskImpl.java
@@ -20,21 +20,21 @@
 
 package org.onap.dcaegen2.services.prh.tasks;
 
-import java.util.Optional;
 import org.onap.dcaegen2.services.config.AAIClientConfiguration;
 import org.onap.dcaegen2.services.prh.configuration.AppConfig;
 import org.onap.dcaegen2.services.prh.configuration.Config;
 import org.onap.dcaegen2.services.prh.exceptions.AAINotFoundException;
-import org.onap.dcaegen2.services.service.AAIProducerClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.Optional;
+
 @Component
 public class AAIConsumerTaskImpl extends AAIConsumerTask<AAIClientConfiguration> {
 
-    private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
+    private static final Logger logger = LoggerFactory.getLogger(AAIConsumerTaskImpl.class);
 
     private final Config prhAppConfig;
     private Optional<String> response;
@@ -46,15 +46,11 @@
 
     @Override
     protected void consume() throws AAINotFoundException {
-        //TODO: @Piotr Wielebski
-        AAIProducerClient producerClient = new AAIProducerClient(prhAppConfig.getAAIClientConfiguration());
-
     }
 
     @Override
     public Object execute(Object object) throws AAINotFoundException {
         consume();
-        //TODO: @Piotr Wielebski
         return null;
     }
 
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AAIProducerTaskImpl.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AAIProducerTaskImpl.java
index 4a7d928..505d2a9 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AAIProducerTaskImpl.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AAIProducerTaskImpl.java
@@ -19,25 +19,19 @@
  */
 package org.onap.dcaegen2.services.prh.tasks;
 
-import com.google.gson.Gson;
 import org.onap.dcaegen2.services.config.AAIClientConfiguration;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
 import org.onap.dcaegen2.services.prh.configuration.AppConfig;
 import org.onap.dcaegen2.services.prh.configuration.Config;
 import org.onap.dcaegen2.services.prh.exceptions.AAINotFoundException;
-import org.onap.dcaegen2.services.prh.exceptions.PrhTaskException;
-import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
-import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel;
 import org.onap.dcaegen2.services.service.AAIProducerClient;
-import org.onap.dcaegen2.services.utils.HttpRequestDetails;
+import org.onap.dcaegen2.services.service.HttpUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.Optional;
+import java.io.IOException;
 
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/13/18
@@ -45,11 +39,10 @@
 @Component
 public class AAIProducerTaskImpl extends AAIProducerTask<AAIClientConfiguration, ConsumerDmaapModel, Object> {
 
-    private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
+    private static final Logger logger = LoggerFactory.getLogger(AAIProducerTaskImpl.class);
 
     private final Config prhAppConfig;
-    private AAIProducerClient producerClient;
-    private Optional<String> response;
+
 
     @Autowired
     public AAIProducerTaskImpl(AppConfig prhAppConfig) {
@@ -59,19 +52,24 @@
     @Override
     protected Object publish(ConsumerDmaapModel consumerDmaapModel) throws AAINotFoundException {
         logger.trace("Method %M called with arg {}", consumerDmaapModel);
-        producerClient = new AAIProducerClient(prhAppConfig.getAAIClientConfiguration());
-        //TODO: @Piotr Wielebski
-        response = producerClient.getHttpResponse(null);
-        return response.get();
+        AAIProducerClient producerClient = new AAIProducerClient(resolveConfiguration());
+        try {
+            return  producerClient.getHttpResponse(consumerDmaapModel)
+                    .filter(HttpUtils::isSuccessfulResponseCode);
+        } catch (IOException e) {
+            logger.warn("Patch request not successful", e);
+            throw new AAINotFoundException("Patch request not successful");
+        }
     }
 
     @Override
-    public Object execute(Object object) throws PrhTaskException {
+    public Object execute(Object object) throws AAINotFoundException {
         logger.trace("Method %M called with arg {}", object);
+
         if (object instanceof ConsumerDmaapModel) {
-            //TODO: @Piotr Wielebski
             return publish((ConsumerDmaapModel) object);
         }
+
         throw new AAINotFoundException("Incorrect object type");
     }
 
@@ -84,5 +82,4 @@
     protected AAIClientConfiguration resolveConfiguration() {
         return prhAppConfig.getAAIClientConfiguration();
     }
-
 }
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/DmaapConsumerTaskImpl.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/DmaapConsumerTaskImpl.java
index a2129fc..69911f3 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/DmaapConsumerTaskImpl.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/DmaapConsumerTaskImpl.java
@@ -19,12 +19,13 @@
  */
 package org.onap.dcaegen2.services.prh.tasks;
 
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
 import org.onap.dcaegen2.services.config.DmaapConsumerConfiguration;
 import org.onap.dcaegen2.services.prh.configuration.AppConfig;
 import org.onap.dcaegen2.services.prh.configuration.Config;
 import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
 import org.onap.dcaegen2.services.prh.exceptions.PrhTaskException;
-import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
+
 import org.onap.dcaegen2.services.prh.service.DmaapConsumerJsonParser;
 import org.onap.dcaegen2.services.service.consumer.ExtendedDmaapConsumerHttpClientImpl;
 import org.slf4j.Logger;
@@ -32,9 +33,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 3/23/18
  */
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/DmaapPublisherTaskImpl.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/DmaapPublisherTaskImpl.java
index 60ab64f..4fef035 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/DmaapPublisherTaskImpl.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/DmaapPublisherTaskImpl.java
@@ -21,14 +21,12 @@
 
 import com.google.gson.Gson;
 import org.onap.dcaegen2.services.config.DmaapPublisherConfiguration;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
 import org.onap.dcaegen2.services.prh.configuration.AppConfig;
 import org.onap.dcaegen2.services.prh.configuration.Config;
 import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
 import org.onap.dcaegen2.services.prh.exceptions.PrhTaskException;
-import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
-import org.onap.dcaegen2.services.service.producer.DmaapPublisherRequestDetails;
 import org.onap.dcaegen2.services.service.producer.ExtendedDmaapProducerHttpClientImpl;
-import org.onap.dcaegen2.services.service.producer.ImmutableDmaapPublisherRequestDetails;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,9 +38,9 @@
  */
 @Component
 public class DmaapPublisherTaskImpl extends
-    DmaapPublisherTask<DmaapPublisherConfiguration, ConsumerDmaapModel> {
+        DmaapPublisherTask<DmaapPublisherConfiguration, ConsumerDmaapModel> {
 
-    private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
+    private static final Logger logger = LoggerFactory.getLogger(DmaapPublisherTaskImpl.class);
     private static final Gson gson = new Gson();
     private final Config prhAppConfig;
 
@@ -55,13 +53,11 @@
     protected String publish(ConsumerDmaapModel consumerDmaapModel) throws DmaapNotFoundException {
         logger.trace("Method %M called with arg {}", consumerDmaapModel);
         ExtendedDmaapProducerHttpClientImpl dmaapProducerHttpClient = new ExtendedDmaapProducerHttpClientImpl(
-            resolveConfiguration());
-        DmaapPublisherRequestDetails dmaapPublisherRequestDetails = new ImmutableDmaapPublisherRequestDetails.Builder()
-            .dmaapAPIPath("events").jsonBody(gson.toJson(consumerDmaapModel)).build();
-        return dmaapProducerHttpClient.getHttpProducerResponse(dmaapPublisherRequestDetails)
-            .filter(x -> !x.isEmpty() && x.equals(String.valueOf(HttpStatus.OK.value())))
-            .orElseThrow(() -> new DmaapNotFoundException("Incorrect response from Dmmap"));
+                resolveConfiguration());
 
+        return dmaapProducerHttpClient.getHttpProducerResponse(consumerDmaapModel)
+                .filter(x -> !x.isEmpty() && x.equals(String.valueOf(HttpStatus.OK.value())))
+                .orElseThrow(() -> new DmaapNotFoundException("Incorrect response from Dmaap"));
     }
 
     @Override
@@ -82,4 +78,4 @@
     protected DmaapPublisherConfiguration resolveConfiguration() {
         return prhAppConfig.getDmaapPublisherConfiguration();
     }
-}
+}
\ No newline at end of file
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasks.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasks.java
index 84c75e0..07c0a58 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasks.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasks.java
@@ -25,9 +25,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 3/23/18
  */
@@ -39,15 +36,13 @@
     private final Task dmaapConsumerTask;
     private final Task dmaapProducerTask;
     private final Task aaiProducerTask;
-    private final Task aaiConsumerTask;
 
     @Autowired
     public ScheduledTasks(DmaapConsumerTask dmaapConsumerTask, DmaapPublisherTask dmaapPublisherTask,
-        AAIProducerTask aaiPublisherTask, AAIConsumerTask aaiConsumerTask) {
+        AAIProducerTask aaiPublisherTask) {
         this.dmaapConsumerTask = dmaapConsumerTask;
         this.dmaapProducerTask = dmaapPublisherTask;
         this.aaiProducerTask = aaiPublisherTask;
-        this.aaiConsumerTask = aaiConsumerTask;
     }
 
     public void scheduleMainPrhEventTask() {
@@ -64,8 +59,6 @@
 
     private void setTaskExecutionFlow() {
         dmaapConsumerTask.setNext(aaiProducerTask);
-        aaiProducerTask.setNext(aaiConsumerTask);
-        aaiConsumerTask.setNext(dmaapProducerTask);
+        aaiProducerTask.setNext(dmaapProducerTask);
     }
-
 }
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/Task.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/Task.java
index a9b10d4..9720214 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/Task.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/Task.java
@@ -20,7 +20,6 @@
 package org.onap.dcaegen2.services.prh.tasks;
 
 import org.onap.dcaegen2.services.prh.exceptions.PrhTaskException;
-import org.springframework.http.ResponseEntity;
 
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/13/18
diff --git a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/IT/ScheduledXmlContextITest.java b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/IT/ScheduledXmlContextITest.java
index 8094c99..38a4436 100644
--- a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/IT/ScheduledXmlContextITest.java
+++ b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/IT/ScheduledXmlContextITest.java
@@ -28,10 +28,10 @@
 import java.util.concurrent.TimeUnit;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
 import org.onap.dcaegen2.services.prh.IT.junit5.mockito.MockitoExtension;
 import org.onap.dcaegen2.services.prh.configuration.PrhAppConfig;
 import org.onap.dcaegen2.services.prh.tasks.ScheduledTasks;
-import org.onap.dcaegen2.services.utils.HttpRequestDetails;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
@@ -75,8 +75,8 @@
     }
 
     @Bean
-    public HttpRequestDetails getRequestDetails() {
-        return mock(HttpRequestDetails.class);
+    public ConsumerDmaapModel getRequestDetails() {
+        return mock(ConsumerDmaapModel.class);
     }
 }
 
diff --git a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfigTest.java b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfigTest.java
index e7d5541..2efffd8 100644
--- a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfigTest.java
+++ b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfigTest.java
@@ -44,8 +44,8 @@
 class PrhAppConfigTest {
 
     private static final String PRH_ENDPOINTS = "prh_endpoints.json";
-    private static final String jsonString = "{\"configs\":{\"aai\":{\"aaiHttpClientConfiguration\":{\"aaiHost\":\"\",\"aaiHostPortNumber\":8080,\"aaiIgnoreSSLCertificateErrors\":true,\"aaiProtocol\":\"https\",\"aaiUserName\":\"admin\",\"aaiUserPassword\":\"admin\"}},\"dmaap\":{\"dmaapConsumerConfiguration\":{\"consumerGroup\":\"other\",\"consumerId\":\"1\",\"dmaapContentType\":\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2222,\"dmaapProtocol\":\"http\",\"dmaapTopicName\":\"temp\",\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\",\"messageLimit\":1000,\"timeoutMS\":1000},\"dmaapProducerConfiguration\":{\"dmaapContentType\":\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2223,\"dmaapProtocol\":\"http\",\"dmaapTopicName\":\"temp\",\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\"}}}}";
-    private static final String incorrectJsonString = "{\"configs\":{\"aai\":{\"aaiHttpClientConfiguration\":{\"aaiHost\":\"\",\"aaiHostPortNumber\":8080,\"aaiIgnoreSSLCertificateErrors\":true,\"aaiProtocol\":\"https\",\"aaiUserName\":\"admin\",\"aaiUserPassword\":\"admin\"}},\"dmaap\":{\"dmaapConsumerConfiguration\":{\"consumerGroup\":\"other\",\"consumerId\":\"1\",\"dmaapContentType\":\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2222,\"dmaapProtocol\":\"http\",\"dmaapTopicName\":\"temp\",\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\",\"messageLimit\":1000,\"timeoutMS\":1000},\"dmaapProducerConfiguration\":{\"dmaapContentType\":\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2223,\"dmaapProtocol\":\"http\",\"dmaaptopicName\":\"temp\",\"dmaapuserName\":\"admin\",\"dmaapuserPassword\":\"admin\"}}}}";
+    private static final String jsonString = "{\"configs\":{\"aai\":{\"aaiClientConfiguration\":{\"aaiHost\":\"localhost\",\"aaiHostPortNumber\":8080,\"aaiIgnoreSSLCertificateErrors\":true,\"aaiProtocol\":\"https\",\"aaiUserName\":\"admin\",\"aaiUserPassword\":\"admin\",\"aaiBasePath\":\"/aai/v11\",\"aaiPnfPath\":\"/network/pnfs/pnf\",\"aaiHeaders\":{\"X-FromAppId\":\"prh\",\"X-TransactionId\":\"9999\",\"Accept\":\"application/json\",\"Real-Time\":\"true\",\"Authorization\":\"Basic QUFJOkFBSQ==\"}}},\"dmaap\":{\"dmaapConsumerConfiguration\":{\"consumerGroup\":\"other\",\"consumerId\":\"1\",\"dmaapContentType\":\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2222,\"dmaapProtocol\":\"http\",\"dmaapTopicName\":\"temp\",\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\",\"messageLimit\":1000,\"timeoutMS\":1000},\"dmaapProducerConfiguration\":{\"dmaapContentType\":\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2223,\"dmaapProtocol\":\"http\",\"dmaapTopicName\":\"temp\",\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\"}}}}";
+    private static final String incorrectJsonString = "{\"configs\":{\"aai\":{\"aaiClientConfiguration\":{\"aaiHost\":\"localhost\",\"aaiHostPortNumber\":8080,\"aaiIgnoreSSLCertificateErrors\":true,\"aaiProtocol\":\"https\",\"aaiUserName\":\"admin\",\"aaiUserPassword\":\"admin\",\"aaiBasePath\":\"/aai/v11\",\"aaiPnfPath\":\"/network/pnfs/pnf\",\"aaiHeaders\":{\"X-FromAppId\":\"prh\",\"X-TransactionId\":\"9999\",\"Accept\":\"application/json\",\"Real-Time\":\"true\",\"Authorization\":\"Basic QUFJOkFBSQ==\"}}},\"dmaap\":{\"dmaapConsumerConfiguration\":{\"consumerGroup\":\"other\",\"consumerId\":\"1\",\"dmaapContentType\":\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2222,\"dmaapProtocol\":\"http\",\"dmaapTopicName\":\"temp\",\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\",\"messageLimit\":1000,\"timeoutMS\":1000},\"dmaapProducerConfiguration\":{\"dmaapContentType\":\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2223,\"dmaapProtocol\":\"http\",\"dmaaptopicName\":\"temp\",\"dmaapuserName\":\"admin\",\"dmaapuserPassword\":\"admin\"}}}}";
     private static PrhAppConfig prhAppConfig;
     private static AppConfig appConfig;
 
@@ -107,7 +107,7 @@
     }
 
     @Test
-    public void whenFileIsNotExist_ThrowFileNotFoundExcepton() {
+    public void whenFileIsNotExist_ThrowFileNotFoundException() {
         //
         // Given
         //
diff --git a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParserTest.java b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParserTest.java
index a097037..aad3c2f 100644
--- a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParserTest.java
+++ b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParserTest.java
@@ -22,8 +22,8 @@
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
-import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
-import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
+import org.onap.dcaegen2.services.model.ImmutableConsumerDmaapModel;
 
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
diff --git a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AAIConsumerTaskSpy.java b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AAIConsumerTaskSpy.java
index 929e5a4..288a896 100644
--- a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AAIConsumerTaskSpy.java
+++ b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AAIConsumerTaskSpy.java
@@ -22,7 +22,6 @@
 import org.onap.dcaegen2.services.config.AAIClientConfiguration;
 
 import org.onap.dcaegen2.services.prh.configuration.AppConfig;
-import org.onap.dcaegen2.services.utils.HttpRequestDetails;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Primary;
diff --git a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AAIPublisherTaskSpy.java b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AAIPublisherTaskSpy.java
index 9564bf9..77323ab 100644
--- a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AAIPublisherTaskSpy.java
+++ b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AAIPublisherTaskSpy.java
@@ -21,7 +21,6 @@
 
 import org.onap.dcaegen2.services.config.AAIClientConfiguration;
 import org.onap.dcaegen2.services.prh.configuration.AppConfig;
-import org.onap.dcaegen2.services.utils.HttpRequestDetails;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Primary;
diff --git a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/ScheduleControllerSpy.java b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/ScheduleControllerSpy.java
index 73f21a2..27083c0 100644
--- a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/ScheduleControllerSpy.java
+++ b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/ScheduleControllerSpy.java
@@ -42,13 +42,10 @@
     @Autowired
     private AAIProducerTask aaiPublisherTaskImplSpy;
 
-    @Autowired
-    private AAIConsumerTask aaiConsumerTaskImplSpy;
 
     @Bean
     @Primary
     public ScheduledTasks registerSimpleScheduledTask() {
-        return spy(new ScheduledTasks(dmaapConsumerTaskImplSpy, dmaapPublisherTaskImplSpy, aaiPublisherTaskImplSpy,
-            aaiConsumerTaskImplSpy));
+        return spy(new ScheduledTasks(dmaapConsumerTaskImplSpy, dmaapPublisherTaskImplSpy, aaiPublisherTaskImplSpy));
     }
 }
diff --git a/prh-app-server/src/test/resources/prh_endpoints.json b/prh-app-server/src/test/resources/prh_endpoints.json
index b401b90..a67ee02 100644
--- a/prh-app-server/src/test/resources/prh_endpoints.json
+++ b/prh-app-server/src/test/resources/prh_endpoints.json
@@ -7,7 +7,15 @@
         "aaiIgnoreSSLCertificateErrors": true,
         "aaiProtocol": "https",
         "aaiUserName": "admin",
-        "aaiUserPassword": "admin"
+        "aaiUserPassword": "admin",
+        "aaiBasePath": "/aai/v11",
+        "aaiPnfPath": "/network/pnfs/pnf",
+        "aaiHeaders": {
+          "X-FromAppId": "prh",
+          "X-TransactionId": "9999",
+          "Accept": "application/json",
+          "Real-Time": "true"
+        }
       }
     },
     "dmaap": {
@@ -18,7 +26,7 @@
         "dmaapHostName": "localhost",
         "dmaapPortNumber": 2222,
         "dmaapProtocol": "http",
-        "dmaapTopicName": "temp",
+        "dmaapTopicName": "/events/pnfReady",
         "dmaapUserName": "admin",
         "dmaapUserPassword": "admin",
         "messageLimit": 1000,
@@ -29,7 +37,7 @@
         "dmaapHostName": "localhost",
         "dmaapPortNumber": 2223,
         "dmaapProtocol": "http",
-        "dmaapTopicName": "temp",
+        "dmaapTopicName": "/events/pnfReady",
         "dmaapUserName": "admin",
         "dmaapUserPassword": "admin"
       }
diff --git a/prh-commons/pom.xml b/prh-commons/pom.xml
new file mode 100644
index 0000000..08ce5fd
--- /dev/null
+++ b/prh-commons/pom.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>prh</artifactId>
+        <groupId>org.onap.dcaegen2.services</groupId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.onap.dcaegen2.services.commons</groupId>
+    <artifactId>commons</artifactId>
+
+    <version>1.0-SNAPSHOT</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.immutables</groupId>
+            <artifactId>value</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.immutables</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/service/producer/DmaapPublisherRequestDetails.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/model/CommonFunctions.java
similarity index 72%
rename from prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/service/producer/DmaapPublisherRequestDetails.java
rename to prh-commons/src/main/java/org/onap/dcaegen2/services/model/CommonFunctions.java
index a0877fe..d10ab32 100644
--- a/prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/service/producer/DmaapPublisherRequestDetails.java
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/model/CommonFunctions.java
@@ -1,4 +1,4 @@
-/*-
+/*
  * ============LICENSE_START=======================================================
  * PNF-REGISTRATION-HANDLER
  * ================================================================================
@@ -18,19 +18,19 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.dcaegen2.services.service.producer;
+package org.onap.dcaegen2.services.model;
 
-import org.immutables.value.Value;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
 
-import java.util.Optional;
+public class CommonFunctions {
 
-@Value.Immutable(prehash = true)
-@Value.Style(builder = "new")
-public abstract class DmaapPublisherRequestDetails {
+    private static Gson gson = new GsonBuilder().create();
 
-    @Value.Parameter
-    public abstract String dmaapAPIPath();
 
-    @Value.Parameter
-    public abstract String jsonBody();
+    private CommonFunctions() {}
+
+    public static String createJsonBody(ConsumerDmaapModel consumerDmaapModel) {
+        return gson.toJson(consumerDmaapModel);
+    }
 }
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/model/ConsumerDmaapModel.java
similarity index 96%
rename from prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java
rename to prh-commons/src/main/java/org/onap/dcaegen2/services/model/ConsumerDmaapModel.java
index c687994..3143362 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/model/ConsumerDmaapModel.java
@@ -17,7 +17,7 @@
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-package org.onap.dcaegen2.services.prh.model;
+package org.onap.dcaegen2.services.model;
 
 import com.google.gson.annotations.SerializedName;
 import org.immutables.gson.Gson;
@@ -39,5 +39,4 @@
 
     @SerializedName("ipaddress-v6-oam")
     String getIpv6();
-
 }
diff --git a/prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/service/producer/DmaapPublisherRequestDetails.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/model/ConsumerDmaapModelForUnitTest.java
similarity index 65%
copy from prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/service/producer/DmaapPublisherRequestDetails.java
copy to prh-commons/src/main/java/org/onap/dcaegen2/services/model/ConsumerDmaapModelForUnitTest.java
index a0877fe..df691fc 100644
--- a/prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/service/producer/DmaapPublisherRequestDetails.java
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/model/ConsumerDmaapModelForUnitTest.java
@@ -18,19 +18,27 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.dcaegen2.services.service.producer;
+package org.onap.dcaegen2.services.model;
 
-import org.immutables.value.Value;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
 
-import java.util.Optional;
+public class ConsumerDmaapModelForUnitTest implements ConsumerDmaapModel {
 
-@Value.Immutable(prehash = true)
-@Value.Style(builder = "new")
-public abstract class DmaapPublisherRequestDetails {
+    private String pnfName = "NOKnhfsadhff";
+    private String ipv4 = "11.22.33.155";
+    private String ipv6 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334";
 
-    @Value.Parameter
-    public abstract String dmaapAPIPath();
 
-    @Value.Parameter
-    public abstract String jsonBody();
+    public String getPnfName() {
+        return pnfName;
+    }
+
+    public String getIpv4() {
+        return ipv4;
+    }
+
+    public String getIpv6() {
+        return ipv6;
+    }
+
 }
diff --git a/prh-dmaap-client/pom.xml b/prh-dmaap-client/pom.xml
index ff6a0b3..40d4df9 100644
--- a/prh-dmaap-client/pom.xml
+++ b/prh-dmaap-client/pom.xml
@@ -99,5 +99,10 @@
       <artifactId>mockito-core</artifactId>
       <scope>test</scope>
     </dependency>
+      <dependency>
+          <groupId>org.onap.dcaegen2.services.commons</groupId>
+          <artifactId>commons</artifactId>
+          <version>1.0-SNAPSHOT</version>
+      </dependency>
   </dependencies>
 </project>
\ No newline at end of file
diff --git a/prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/service/producer/ExtendedDmaapProducerHttpClientImpl.java b/prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/service/producer/ExtendedDmaapProducerHttpClientImpl.java
index 98c9a83..def9dd8 100644
--- a/prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/service/producer/ExtendedDmaapProducerHttpClientImpl.java
+++ b/prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/service/producer/ExtendedDmaapProducerHttpClientImpl.java
@@ -29,6 +29,8 @@
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.util.EntityUtils;
 import org.onap.dcaegen2.services.config.DmaapPublisherConfiguration;
+import org.onap.dcaegen2.services.model.CommonFunctions;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
 import org.onap.dcaegen2.services.service.DmaapHttpClientImpl;
 import org.onap.dcaegen2.services.service.HttpUtils;
 import org.slf4j.Logger;
@@ -61,17 +63,14 @@
         this.dmaapContentType = configuration.dmaapContentType();
     }
 
-    public Optional<String> getHttpProducerResponse(DmaapPublisherRequestDetails requestDetails) {
-
+    public Optional<String> getHttpProducerResponse(ConsumerDmaapModel consumerDmaapModel) {
         Optional<String> extendedDetails = Optional.empty();
-        Optional<HttpRequestBase> request = createRequest(requestDetails);
-
+        Optional<HttpRequestBase> request = createRequest(consumerDmaapModel);
         try {
             extendedDetails = closeableHttpClient.execute(request.get(), dmaapProducerResponseHandler());
         } catch (IOException | NullPointerException e) {
             logger.warn("Exception while executing HTTP request: ", e);
         }
-
         return extendedDetails;
     }
     
@@ -81,51 +80,45 @@
 
     private Optional<StringEntity> parseJson(Optional<String> jsonBody) {
         Optional<StringEntity> stringEntity = Optional.empty();
-
         try {
             stringEntity = Optional.of(new StringEntity(jsonBody.get()));
         } catch (UnsupportedEncodingException e) {
             logger.warn("Exception while parsing JSON: ", e);
         }
-
         return stringEntity;
     }
 
-    private Optional<HttpRequestBase> createRequest(DmaapPublisherRequestDetails requestDetails) {
-
+    private Optional<HttpRequestBase> createRequest(ConsumerDmaapModel consumerDmaapModel) {
         Optional<HttpRequestBase> request = Optional.empty();
-        final URI extendedURI = createDmaapPublisherExtendedURI(requestDetails);
+        final URI extendedURI = createDmaapPublisherExtendedURI();
 
         if ("application/json".equals(dmaapContentType)) {
-            request = Optional.ofNullable(createRequest(extendedURI, requestDetails));
+            request = Optional.ofNullable(createRequest(extendedURI, consumerDmaapModel));
             request.get().addHeader("Content-type", dmaapContentType);
         }
 
         return request;
     }
 
-    private URI createDmaapPublisherExtendedURI(DmaapPublisherRequestDetails requestDetails) {
+    private URI createDmaapPublisherExtendedURI() {
         URI extendedURI = null;
-
         final URIBuilder uriBuilder = new URIBuilder()
             .setScheme(dmaapProtocol)
             .setHost(dmaapHostName)
             .setPort(dmaapPortNumber)
-            .setPath(requestDetails.dmaapAPIPath() + "/" + dmaapTopicName);
-
+            .setPath(dmaapTopicName);
         try {
             extendedURI = uriBuilder.build();
             logger.trace("Building extended URI: {}", extendedURI);
         } catch (URISyntaxException e) {
             logger.warn("Exception while building extended URI: ", e);
         }
-
         return extendedURI;
     }
 
-    private HttpRequestBase createRequest(URI extendedURI, DmaapPublisherRequestDetails requestDetails) {
+    private HttpRequestBase createRequest(URI extendedURI, ConsumerDmaapModel consumerDmaapModel) {
         if (extendedURI != null) {
-            return createHttpPost(extendedURI, Optional.ofNullable(requestDetails.jsonBody()));
+            return createHttpPost(extendedURI, Optional.ofNullable(CommonFunctions.createJsonBody(consumerDmaapModel)));
         } else {
             return null;
         }
diff --git a/prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/service/producer/ExtendedDmaapProducerHttpClientImplTest.java b/prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/service/producer/ExtendedDmaapProducerHttpClientImplTest.java
index 3f64fd5..6ca815a 100644
--- a/prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/service/producer/ExtendedDmaapProducerHttpClientImplTest.java
+++ b/prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/service/producer/ExtendedDmaapProducerHttpClientImplTest.java
@@ -27,6 +27,8 @@
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.onap.dcaegen2.services.config.DmaapPublisherConfiguration;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModel;
+import org.onap.dcaegen2.services.model.ConsumerDmaapModelForUnitTest;
 
 import java.io.IOException;
 import java.lang.reflect.Field;
@@ -43,10 +45,9 @@
 
     private static DmaapPublisherConfiguration configurationMock = mock(DmaapPublisherConfiguration.class);
     private static CloseableHttpClient closeableHttpClientMock = mock(CloseableHttpClient.class);
-    private static DmaapPublisherRequestDetails requestDetailsMock = mock(DmaapPublisherRequestDetails.class);
+    private static ConsumerDmaapModel consumerDmaapModel = new ConsumerDmaapModelForUnitTest();
 
     private static Optional<String> expectedResult = Optional.empty();
-    private static final String JSON_MESSAGE = "{ \"ipaddress-v4-oam\": \"11.22.33.44\" }";
     private static final String RESPONSE_SUCCESS = "200";
     private static final String RESPONSE_FAILURE = "404";
 
@@ -61,9 +62,6 @@
         when(configurationMock.dmaapContentType()).thenReturn("application/json");
         when(configurationMock.dmaapTopicName()).thenReturn("pnfReady");
 
-        when(requestDetailsMock.dmaapAPIPath()).thenReturn("events");
-        when(requestDetailsMock.jsonBody()).thenReturn(JSON_MESSAGE);
-
         objectUnderTest = new ExtendedDmaapProducerHttpClientImpl(configurationMock);
 
         setField();
@@ -77,7 +75,7 @@
         when(closeableHttpClientMock.execute(any(HttpPost.class), any(ResponseHandler.class)))
             .thenReturn(expectedResult);
 
-        Optional<String> actualResult = objectUnderTest.getHttpProducerResponse(requestDetailsMock);
+        Optional<String> actualResult = objectUnderTest.getHttpProducerResponse(consumerDmaapModel);
 
         Assertions.assertEquals(expectedResult.get(), actualResult.get());
     }
@@ -87,7 +85,7 @@
         expectedResult = Optional.of(RESPONSE_FAILURE);
         when(closeableHttpClientMock.execute(any(HttpPost.class), any(ResponseHandler.class)))
             .thenReturn(Optional.empty());
-        Optional<String> actualResult = objectUnderTest.getHttpProducerResponse(requestDetailsMock);
+        Optional<String> actualResult = objectUnderTest.getHttpProducerResponse(consumerDmaapModel);
         Assertions.assertEquals(Optional.empty(), actualResult);
     }
 
