diff --git a/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/main/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/extclients/AbstractServiceProviderConfiguration.java b/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/main/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/extclients/AbstractServiceProviderConfiguration.java
index 5ac9fe6..1129c40 100644
--- a/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/main/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/extclients/AbstractServiceProviderConfiguration.java
+++ b/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/main/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/extclients/AbstractServiceProviderConfiguration.java
@@ -20,13 +20,16 @@
 
 package org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients;
 
+import java.time.LocalDateTime;
 import java.util.Iterator;
 import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.JSON;
+import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.rest.EtsiSubscriptionNotificationController;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.json.GsonHttpMessageConverter;
 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 import org.springframework.web.client.RestTemplate;
 import com.google.gson.Gson;
+import org.threeten.bp.OffsetDateTime;
 
 /**
  * A base class that can be extended by classes for configuring HttpRestServiceProvider classes. Provides common methods
@@ -35,6 +38,7 @@
  * @author gareth.roper@est.tech
  */
 public abstract class AbstractServiceProviderConfiguration {
+    private final JSON.OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new JSON.OffsetDateTimeTypeAdapter();
 
     public void setGsonMessageConverter(final RestTemplate restTemplate) {
         final Iterator<HttpMessageConverter<?>> iterator = restTemplate.getMessageConverters().iterator();
@@ -43,7 +47,10 @@
                 iterator.remove();
             }
         }
-        final Gson gson = new JSON().getGson();
+        final Gson gson = JSON.createGson().registerTypeAdapter(OffsetDateTime.class, offsetDateTimeTypeAdapter)
+                .registerTypeAdapter(LocalDateTime.class,
+                        new EtsiSubscriptionNotificationController.LocalDateTimeTypeAdapter())
+                .create();
         restTemplate.getMessageConverters().add(new GsonHttpMessageConverter(gson));
     }
 }
diff --git a/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/main/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/rest/EtsiSubscriptionNotificationController.java b/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/main/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/rest/EtsiSubscriptionNotificationController.java
index 0d821fc..71ff4a9 100644
--- a/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/main/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/rest/EtsiSubscriptionNotificationController.java
+++ b/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/main/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/rest/EtsiSubscriptionNotificationController.java
@@ -42,6 +42,12 @@
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
+import com.google.gson.TypeAdapter;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonWriter;
+import java.time.LocalDateTime;
+import java.io.IOException;
+import java.time.format.DateTimeFormatter;
 
 /**
  * This controller handles the ETSI Subscription Notification Endpoints.
@@ -61,7 +67,7 @@
     @Autowired
     public EtsiSubscriptionNotificationController(final NotificationManager notificationManager) {
         this.notificationManager = notificationManager;
-        this.gson = new GsonBuilder().create();
+        this.gson = new GsonBuilder().registerTypeAdapter(LocalDateTime.class, new LocalDateTimeTypeAdapter()).create();
     }
 
     @GetMapping(value = "/notification")
@@ -72,15 +78,16 @@
 
     /**
      * POST notification on to subscriber.
-     * 
+     *
      * @param notification The notification to send.
      * @return Response Code: 204 No Content if Successful, ProblemDetails Object if not.
      */
     @PostMapping(value = "/notification", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON)
-    public ResponseEntity<?> postSubscriptionNotification(@RequestBody final String notification) {
-        logger.info("Posting subscription notification \n{}", notification);
+    public ResponseEntity<?> postSubscriptionNotification(@RequestBody final Object notification) {
+        logger.info("Posting subscription notification class: {} \n{}", notification.getClass(), notification);
+        final String notificationString = gson.toJson(notification);
 
-        final Entry<String, Object> notificationObject = getNotificationObject(notification);
+        final Entry<String, Object> notificationObject = getNotificationObject(notificationString);
         if (notificationManager.processSubscriptionNotification(notificationObject.getValue(),
                 notificationObject.getKey())) {
             logger.info("Notification Delivered Successfully");
@@ -92,6 +99,7 @@
     }
 
     private Entry<String, Object> getNotificationObject(final String notification) {
+        logger.info("getNotificationObject() notification: {}", notification);
         final String notificationType = getNotificationType(notification);
         if (PkgOnboardingNotification.NotificationTypeEnum.VNFPACKAGEONBOARDINGNOTIFICATION.getValue()
                 .equals(notificationType)) {
@@ -118,6 +126,7 @@
 
     private String getNotificationType(final String notification) {
         try {
+            logger.info("getNotificationType() notification: {}", notification);
             final JsonParser parser = new JsonParser();
             final JsonObject element = (JsonObject) parser.parse(notification);
             return element.get("notificationType").getAsString();
@@ -128,4 +137,30 @@
                 "Unable to parse notification type in object \n" + notification);
     }
 
+    public static class LocalDateTimeTypeAdapter extends TypeAdapter<LocalDateTime> {
+
+        private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+        @Override
+        public void write(final JsonWriter out, final LocalDateTime localDateTime) throws IOException {
+            if (localDateTime == null) {
+                out.nullValue();
+            } else {
+                out.value(FORMATTER.format(localDateTime));
+            }
+        }
+
+        @Override
+        public LocalDateTime read(final JsonReader in) throws IOException {
+            switch (in.peek()) {
+                case NULL:
+                    in.nextNull();
+                    return null;
+                default:
+                    final String dateTime = in.nextString();
+                    return LocalDateTime.parse(dateTime, FORMATTER);
+            }
+        }
+    }
+
 }
diff --git a/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/main/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/subscriptionmanagement/OAuthNotificationServiceProvider.java b/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/main/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/subscriptionmanagement/OAuthNotificationServiceProvider.java
index e5bc5bd..213eb11 100644
--- a/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/main/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/subscriptionmanagement/OAuthNotificationServiceProvider.java
+++ b/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/main/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/subscriptionmanagement/OAuthNotificationServiceProvider.java
@@ -45,6 +45,7 @@
     public boolean send(final Object notification, final SubscriptionsAuthentication subscriptionsAuthentication,
             final String callbackUri) {
         logger.info("Sending notification to uri: {}", callbackUri);
+        logger.info("Object: {}", notification);
         final String token = getAccessToken(subscriptionsAuthentication);
 
         if (token == null) {
diff --git a/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/test/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/rest/EtsiSubscriptionNotificationControllerTest.java b/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/test/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/rest/EtsiSubscriptionNotificationControllerTest.java
index 5f2f8f5..02257de 100644
--- a/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/test/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/rest/EtsiSubscriptionNotificationControllerTest.java
+++ b/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-adapter/src/test/java/org/onap/so/adapters/etsi/sol003/adapter/packagemanagement/rest/EtsiSubscriptionNotificationControllerTest.java
@@ -20,6 +20,50 @@
 
 package org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.rest;
 
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.so.adapters.etsi.sol003.adapter.etsicatalog.notification.model.NOTIFICATIONLINKSERIALIZER;
+import org.onap.so.adapters.etsi.sol003.adapter.etsicatalog.notification.model.PkgChangeNotification;
+import org.onap.so.adapters.etsi.sol003.adapter.etsicatalog.notification.model.PkgOnboardingNotification;
+import org.onap.so.adapters.etsi.sol003.adapter.etsicatalog.notification.model.PkgmLinks;
+import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.JSON;
+import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.PackageManagementConstants;
+import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.etsicatalog.model.ProblemDetails;
+import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.vnfm.notification.model.VnfPackageChangeNotification;
+import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.vnfm.notification.model.VnfPackageOnboardingNotification;
+import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.model.PkgmSubscriptionRequest;
+import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.model.SubscriptionsAuthentication;
+import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.model.SubscriptionsAuthenticationParamsBasic;
+import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.model.SubscriptionsAuthenticationParamsOauth2ClientCredentials;
+import org.onap.so.configuration.rest.BasicHttpHeadersProvider;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.web.client.RestTemplateBuilder;
+import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.cache.Cache;
+import org.springframework.cache.CacheManager;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.json.GsonHttpMessageConverter;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.client.MockRestServiceServer;
+import org.springframework.web.client.RestTemplate;
+import java.net.URI;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.onap.so.adapters.etsi.sol003.adapter.common.CommonConstants.ETSI_SUBSCRIPTION_NOTIFICATION_CONTROLLER_BASE_URL;
@@ -31,49 +75,6 @@
 import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
 import static org.springframework.test.web.client.response.MockRestResponseCreators.withStatus;
 import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.onap.so.adapters.etsi.sol003.adapter.etsicatalog.notification.model.NOTIFICATIONLINKSERIALIZER;
-import org.onap.so.adapters.etsi.sol003.adapter.etsicatalog.notification.model.PkgChangeNotification;
-import org.onap.so.adapters.etsi.sol003.adapter.etsicatalog.notification.model.PkgOnboardingNotification;
-import org.onap.so.adapters.etsi.sol003.adapter.etsicatalog.notification.model.PkgmLinks;
-import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.vnfm.notification.model.VnfPackageChangeNotification;
-import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.vnfm.notification.model.VnfPackageOnboardingNotification;
-import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.PackageManagementConstants;
-import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.etsicatalog.model.ProblemDetails;
-import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.model.PkgmSubscriptionRequest;
-import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.model.SubscriptionsAuthentication;
-import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.model.SubscriptionsAuthenticationParamsBasic;
-import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.model.SubscriptionsAuthenticationParamsOauth2ClientCredentials;
-import org.onap.so.configuration.rest.BasicHttpHeadersProvider;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.web.client.TestRestTemplate;
-import org.springframework.boot.web.server.LocalServerPort;
-import org.springframework.cache.Cache;
-import org.springframework.cache.CacheManager;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.test.annotation.DirtiesContext;
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.web.client.MockRestServiceServer;
-import org.springframework.web.client.RestTemplate;
-import org.threeten.bp.LocalDateTime;
-import org.threeten.bp.OffsetDateTime;
-import org.threeten.bp.ZoneOffset;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
 
 /**
  * @author Andrew Lamb (andrew.a.lamb@est.tech)
@@ -101,20 +102,20 @@
     private static final String EXPECTED_OAUTH_AUTHORIZATION = "Bearer " + TOKEN;
     private static final String NOTIFICATION_ID = "NOTIFICATION_ID";
     private static final String SUBSCRIPTION_ID = "SUBSCRIPTION_ID";
-    private static final OffsetDateTime TIMESTAMP =
-            OffsetDateTime.of(LocalDateTime.of(2020, 1, 1, 1, 1, 1, 1), ZoneOffset.ofHours(1));
+    private static final String TIME_STAMP_STRING_EXPECTED_FROM_ETSI_CATALOG = "2020-01-01 01:01:01";
+    private static final java.time.LocalDateTime TIMESTAMP = java.time.LocalDateTime.of(2020, 1, 1, 1, 1, 1, 1);
     private static final String VNFPKG_ID = UUID.randomUUID().toString();
     private static final String VNFD_ID = UUID.randomUUID().toString();
 
     private BasicHttpHeadersProvider basicHttpHeadersProvider;
-    private final Gson gson = new GsonBuilder().create();;
+    private final Gson gson = new GsonBuilder().registerTypeAdapter(LocalDateTime.class,
+            new EtsiSubscriptionNotificationController.LocalDateTimeTypeAdapter()).create();
 
     @Autowired
     @Qualifier(CONFIGURABLE_REST_TEMPLATE)
     private RestTemplate restTemplate;
     private MockRestServiceServer mockRestServiceServer;
 
-    @Autowired
     private TestRestTemplate testRestTemplate;
 
     @Autowired
@@ -127,8 +128,14 @@
         basicHttpHeadersProvider = new BasicHttpHeadersProvider();
         cache = cacheServiceProvider.getCache(PackageManagementConstants.PACKAGE_MANAGEMENT_SUBSCRIPTION_CACHE);
         cache.clear();
+
+        final Gson gson = JSON.createGson().registerTypeAdapter(LocalDateTime.class,
+                new EtsiSubscriptionNotificationController.LocalDateTimeTypeAdapter()).create();
+        testRestTemplate = new TestRestTemplate(
+                new RestTemplateBuilder().additionalMessageConverters(new GsonHttpMessageConverter(gson)));
     }
 
+
     @After
     public void tearDown() {
         mockRestServiceServer.reset();
@@ -147,7 +154,6 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.BASIC);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgOnboardingNotification notification = buildPkgOnboardingNotification();
-        final String notificationString = gson.toJson(notification);
 
         mockRestServiceServer.expect(requestTo(CALLBACK_URI)).andExpect(method(HttpMethod.POST))
                 .andExpect(jsonPath("$.id").value(NOTIFICATION_ID))
@@ -155,13 +161,12 @@
                         .value(VnfPackageOnboardingNotification.NotificationTypeEnum.VNFPACKAGEONBOARDINGNOTIFICATION
                                 .toString()))
                 .andExpect(jsonPath("$.subscriptionId").value(SUBSCRIPTION_ID))
-                .andExpect(jsonPath("$.timeStamp").value(TIMESTAMP.toString()))
-                .andExpect(jsonPath("$.vnfPkgId").value(VNFPKG_ID.toString()))
-                .andExpect(jsonPath("$.vnfdId").value(VNFD_ID.toString()))
+                .andExpect(jsonPath("$.timeStamp").value(TIME_STAMP_STRING_EXPECTED_FROM_ETSI_CATALOG))
+                .andExpect(jsonPath("$.vnfPkgId").value(VNFPKG_ID)).andExpect(jsonPath("$.vnfdId").value(VNFD_ID))
                 .andExpect(jsonPath("$._links").value(buildPkgmLinks()))
                 .andExpect(header("Authorization", EXPECTED_BASIC_AUTHORIZATION)).andRespond(withSuccess());
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.NO_CONTENT, response.getStatusCode());
     }
@@ -169,8 +174,7 @@
     @Test
     public void testOnboardingNotificationNotSentOnToVnfmCallbackUri_SubscriptionRequestNotInCache_Fail() {
         final PkgOnboardingNotification notification = buildPkgOnboardingNotification();
-        final String notificationString = gson.toJson(notification);
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
         assertTrue(response.getBody() instanceof ProblemDetails);
@@ -188,12 +192,11 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.BASIC);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgOnboardingNotification notification = buildPkgOnboardingNotification();
-        final String notificationString = gson.toJson(notification);
 
         mockRestServiceServer.expect(requestTo(CALLBACK_URI)).andExpect(method(HttpMethod.POST))
                 .andRespond(withStatus(HttpStatus.BAD_REQUEST));
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
         assertTrue(response.getBody() instanceof ProblemDetails);
@@ -211,12 +214,11 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.BASIC);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgOnboardingNotification notification = buildPkgOnboardingNotification();
-        final String notificationString = gson.toJson(notification);
 
         mockRestServiceServer.expect(requestTo(CALLBACK_URI)).andExpect(method(HttpMethod.POST))
                 .andRespond(withStatus(HttpStatus.MOVED_PERMANENTLY));
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
         assertTrue(response.getBody() instanceof ProblemDetails);
@@ -233,12 +235,11 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.BASIC);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgOnboardingNotification notification = buildPkgOnboardingNotification();
-        final String notificationString = gson.toJson(notification);
 
         mockRestServiceServer.expect(requestTo(CALLBACK_URI)).andExpect(method(HttpMethod.POST))
                 .andRespond(withStatus(HttpStatus.NOT_FOUND));
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
         assertTrue(response.getBody() instanceof ProblemDetails);
@@ -256,12 +257,11 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.BASIC);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgOnboardingNotification notification = buildPkgOnboardingNotification();
-        final String notificationString = gson.toJson(notification);
 
         mockRestServiceServer.expect(requestTo(CALLBACK_URI)).andExpect(method(HttpMethod.POST))
                 .andRespond(withStatus(HttpStatus.INTERNAL_SERVER_ERROR));
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
         assertTrue(response.getBody() instanceof ProblemDetails);
@@ -280,16 +280,14 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.BASIC);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgChangeNotification notification = buildPkgChangeNotification();
-        final String notificationString = gson.toJson(notification);
 
         mockRestServiceServer.expect(requestTo(CALLBACK_URI)).andExpect(method(HttpMethod.POST))
                 .andExpect(jsonPath("$.id").value(NOTIFICATION_ID))
                 .andExpect(jsonPath("$.notificationType").value(
                         VnfPackageChangeNotification.NotificationTypeEnum.VNFPACKAGECHANGENOTIFICATION.getValue()))
                 .andExpect(jsonPath("$.subscriptionId").value(SUBSCRIPTION_ID))
-                .andExpect(jsonPath("$.timeStamp").value(TIMESTAMP.toString()))
-                .andExpect(jsonPath("$.vnfPkgId").value(VNFPKG_ID.toString()))
-                .andExpect(jsonPath("$.vnfdId").value(VNFD_ID.toString()))
+                .andExpect(jsonPath("$.timeStamp").value(TIME_STAMP_STRING_EXPECTED_FROM_ETSI_CATALOG))
+                .andExpect(jsonPath("$.vnfPkgId").value(VNFPKG_ID)).andExpect(jsonPath("$.vnfdId").value(VNFD_ID))
                 .andExpect(
                         jsonPath("$.changeType").value(PkgChangeNotification.ChangeTypeEnum.OP_STATE_CHANGE.toString()))
                 .andExpect(jsonPath("$.operationalState")
@@ -297,7 +295,7 @@
                 .andExpect(jsonPath("$._links").value(buildPkgmLinks()))
                 .andExpect(header("Authorization", EXPECTED_BASIC_AUTHORIZATION)).andRespond(withSuccess());
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.NO_CONTENT, response.getStatusCode());
     }
@@ -305,8 +303,7 @@
     @Test
     public void testChangeNotificationNotSentOnToVnfmCallbackUri_SubscriptionRequestNotInCache_Fail() {
         final PkgChangeNotification notification = buildPkgChangeNotification();
-        final String notificationString = gson.toJson(notification);
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
         assertTrue(response.getBody() instanceof ProblemDetails);
@@ -324,12 +321,11 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.BASIC);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgChangeNotification notification = buildPkgChangeNotification();
-        final String notificationString = gson.toJson(notification);
 
         mockRestServiceServer.expect(requestTo(CALLBACK_URI)).andExpect(method(HttpMethod.POST))
                 .andRespond(withStatus(HttpStatus.BAD_REQUEST));
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
         assertTrue(response.getBody() instanceof ProblemDetails);
@@ -347,12 +343,11 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.BASIC);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgChangeNotification notification = buildPkgChangeNotification();
-        final String notificationString = gson.toJson(notification);
 
         mockRestServiceServer.expect(requestTo(CALLBACK_URI)).andExpect(method(HttpMethod.POST))
                 .andRespond(withStatus(HttpStatus.NOT_FOUND));
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
         assertTrue(response.getBody() instanceof ProblemDetails);
@@ -370,12 +365,11 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.BASIC);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgChangeNotification notification = buildPkgChangeNotification();
-        final String notificationString = gson.toJson(notification);
 
         mockRestServiceServer.expect(requestTo(CALLBACK_URI)).andExpect(method(HttpMethod.POST))
                 .andRespond(withStatus(HttpStatus.INTERNAL_SERVER_ERROR));
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
         assertTrue(response.getBody() instanceof ProblemDetails);
@@ -394,7 +388,6 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.BASIC);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgOnboardingNotification notification = buildPkgOnboardingNotification();
-        final String notificationString = gson.toJson(notification);
 
         mockRestServiceServer.expect(requestTo(CALLBACK_URI)).andExpect(method(HttpMethod.POST))
                 .andExpect(jsonPath("$.id").value(NOTIFICATION_ID))
@@ -402,13 +395,12 @@
                         .value(VnfPackageOnboardingNotification.NotificationTypeEnum.VNFPACKAGEONBOARDINGNOTIFICATION
                                 .toString()))
                 .andExpect(jsonPath("$.subscriptionId").value(SUBSCRIPTION_ID))
-                .andExpect(jsonPath("$.timeStamp").value(TIMESTAMP.toString()))
-                .andExpect(jsonPath("$.vnfPkgId").value(VNFPKG_ID.toString()))
-                .andExpect(jsonPath("$.vnfdId").value(VNFD_ID.toString()))
+                .andExpect(jsonPath("$.timeStamp").value(TIME_STAMP_STRING_EXPECTED_FROM_ETSI_CATALOG))
+                .andExpect(jsonPath("$.vnfPkgId").value(VNFPKG_ID)).andExpect(jsonPath("$.vnfdId").value(VNFD_ID))
                 .andExpect(jsonPath("$._links").value(buildPkgmLinks()))
                 .andExpect(header("Authorization", EXPECTED_BASIC_AUTHORIZATION)).andRespond(withSuccess());
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.NO_CONTENT, response.getStatusCode());
     }
@@ -419,13 +411,12 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.BASIC);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgChangeNotification notification = buildPkgChangeNotification();
-        final String notificationString = gson.toJson(notification);
 
         mockRestServiceServer.expect(requestTo(CALLBACK_URI)).andExpect(method(HttpMethod.POST))
                 .andExpect(header("Authorization", EXPECTED_BASIC_AUTHORIZATION))
                 .andRespond(withStatus(HttpStatus.UNAUTHORIZED));
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
         assertTrue(response.getBody() instanceof ProblemDetails);
@@ -443,7 +434,6 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.OAUTH2_CLIENT_CREDENTIALS);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgChangeNotification notification = buildPkgChangeNotification();
-        final String notificationString = gson.toJson(notification);
 
         mockRestServiceServer.expect(requestTo(TOKEN_ENDPOINT)).andExpect(method(HttpMethod.POST))
                 .andExpect(header("Authorization", EXPECTED_BASIC_AUTHORIZATION))
@@ -455,16 +445,15 @@
                 .andExpect(jsonPath("$.notificationType").value(
                         VnfPackageChangeNotification.NotificationTypeEnum.VNFPACKAGECHANGENOTIFICATION.toString()))
                 .andExpect(jsonPath("$.subscriptionId").value(SUBSCRIPTION_ID))
-                .andExpect(jsonPath("$.timeStamp").value(TIMESTAMP.toString()))
-                .andExpect(jsonPath("$.vnfPkgId").value(VNFPKG_ID.toString()))
-                .andExpect(jsonPath("$.vnfdId").value(VNFD_ID.toString()))
+                .andExpect(jsonPath("$.timeStamp").value(TIME_STAMP_STRING_EXPECTED_FROM_ETSI_CATALOG))
+                .andExpect(jsonPath("$.vnfPkgId").value(VNFPKG_ID)).andExpect(jsonPath("$.vnfdId").value(VNFD_ID))
                 .andExpect(
                         jsonPath("$.changeType").value(PkgChangeNotification.ChangeTypeEnum.OP_STATE_CHANGE.toString()))
                 .andExpect(jsonPath("$.operationalState")
                         .value(PkgChangeNotification.OperationalStateEnum.ENABLED.toString()))
                 .andExpect(jsonPath("$._links").value(buildPkgmLinks())).andRespond(withSuccess());
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.NO_CONTENT, response.getStatusCode());
     }
@@ -475,12 +464,11 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.OAUTH2_CLIENT_CREDENTIALS);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgChangeNotification notification = buildPkgChangeNotification();
-        final String notificationString = gson.toJson(notification);
 
         mockRestServiceServer.expect(requestTo(TOKEN_ENDPOINT)).andExpect(method(HttpMethod.POST))
                 .andExpect(header("Authorization", EXPECTED_BASIC_AUTHORIZATION)).andRespond(withSuccess());
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
         assertTrue(response.getBody() instanceof ProblemDetails);
@@ -497,9 +485,8 @@
                 buildPkgmSubscriptionRequest(SubscriptionsAuthentication.AuthTypeEnum.TLS_CERT);
         cache.put(SUBSCRIPTION_ID, subscriptionRequest);
         final PkgChangeNotification notification = buildPkgChangeNotification();
-        final String notificationString = gson.toJson(notification);
 
-        final ResponseEntity<?> response = sendHttpPost(notificationString);
+        final ResponseEntity<?> response = sendHttpPost(notification);
 
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
         assertTrue(response.getBody() instanceof ProblemDetails);
diff --git a/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-api/pom.xml b/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-api/pom.xml
index ba7fb65..64c551c 100644
--- a/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-api/pom.xml
+++ b/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-api/pom.xml
@@ -34,6 +34,7 @@
                 <withXml>true</withXml>
                 <useRxJava2>true</useRxJava2>
                 <serializableModel>true</serializableModel>
+                <dateLibrary>java8-localdatetime</dateLibrary>
               </configOptions>
             </configuration>
           </execution>
@@ -192,4 +193,4 @@
       <version>${okhttp-version}</version>
     </dependency>
   </dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-ext-clients/pom.xml b/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-ext-clients/pom.xml
index 5c0963f..9df110b 100644
--- a/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-ext-clients/pom.xml
+++ b/adapters/etsi-sol003-adapter/etsi-sol003-package-management/etsi-sol003-package-management-ext-clients/pom.xml
@@ -56,6 +56,7 @@
                 <withXml>true</withXml>
                 <useRxJava2>true</useRxJava2>
                 <serializableModel>true</serializableModel>
+                <dateLibrary>java8-localdatetime</dateLibrary>
               </configOptions>
             </configuration>
           </execution>
@@ -193,4 +194,4 @@
     </dependency>
   </dependencies>
 
-</project>
\ No newline at end of file
+</project>
