diff --git a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/client/notificationservice.py b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/client/notificationservice.py
index 011c816..f112542 100644
--- a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/client/notificationservice.py
+++ b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/client/notificationservice.py
@@ -14,7 +14,6 @@ from notificationclientsdk.model.dto.rpc_endpoint import RpcEndpointInfo
 
 from notificationclientsdk.client.base import BrokerClientBase
 
-from notificationclientsdk.model.dto.subscription import SubscriptionInfo
 from notificationclientsdk.repository.subscription_repo import SubscriptionRepo
 
 import logging
diff --git a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/common/helpers/subscription_helper.py b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/common/helpers/subscription_helper.py
index 09fe83a..c846c66 100644
--- a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/common/helpers/subscription_helper.py
+++ b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/common/helpers/subscription_helper.py
@@ -7,6 +7,7 @@
 
 import os
 import json
+import re
 
 import requests
 import logging
@@ -52,3 +53,13 @@ def notify(subscriptioninfo, notification, timeout=2, retry=3):
 
     return result
 
+def parse_resource_address(resource_address):
+    # The format of resource address is:
+    # /{clusterName}/{siteName}(/optional/hierarchy/..)/{nodeName}/{resource}
+    # Assume no optional hierarchy for now
+    clusterName = resource_address.split('/')[1]
+    nodeName = resource_address.split('/')[2]
+    resource_path = re.split('[/]', resource_address, 3)[3]
+
+    return clusterName, nodeName, resource_path
+
diff --git a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/model/dto/__init__.py b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/model/dto/__init__.py
index caae807..5d0d1b7 100644
--- a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/model/dto/__init__.py
+++ b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/model/dto/__init__.py
@@ -4,12 +4,13 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
-from notificationclientsdk.model.dto.subscription import SubscriptionInfo
+from notificationclientsdk.model.dto.subscription import SubscriptionInfoV0
+from notificationclientsdk.model.dto.subscription import SubscriptionInfoV1
 from notificationclientsdk.model.dto.subscription import ResourceQualifierPtp
 
 from wsme.rest.json import tojson
 
-@tojson.when_object(SubscriptionInfo)
+@tojson.when_object(SubscriptionInfoV0)
 def subscriptioninfo_tojson(datatype, value):
     if value is None:
         return None
@@ -20,3 +21,9 @@ def resourcequalifierptp_tojson(datatype, value):
     if value is None:
         return None
     return value.to_dict()
+
+@tojson.when_object(SubscriptionInfoV1)
+def subscriptioninfo_tojson(datatype, value):
+    if value is None:
+        return None
+    return value.to_dict()
diff --git a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/model/dto/subscription.py b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/model/dto/subscription.py
index 4fa0b94..0b0a18f 100644
--- a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/model/dto/subscription.py
+++ b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/model/dto/subscription.py
@@ -45,7 +45,7 @@ class ResourceQualifierPtp(ResourceQualifierBase):
 '''
 ViewModel of Subscription
 '''
-class SubscriptionInfo(wtypes.Base):
+class SubscriptionInfoV0(wtypes.Base):
     SubscriptionId = wtypes.text
     UriLocation = wtypes.text
     ResourceType = EnumResourceType
@@ -63,11 +63,12 @@ class SubscriptionInfo(wtypes.Base):
         if not self._ResourceQualifer:
             if self.ResourceType == ResourceType.TypePTP:
                 self._ResourceQualifer = ResourceQualifierPtp(**self._ResourceQualifierJson)
-
+            else:
+                self._ResourceQualifer = None
         return self._ResourceQualifer
 
     ResourceQualifier = wtypes.wsproperty(wtypes.Base,
-    get_resource_qualifier, set_resource_qualifier, mandatory=True)
+    get_resource_qualifier, set_resource_qualifier)
 
 
     def __init__(self, orm_entry=None):
@@ -84,7 +85,7 @@ class SubscriptionInfo(wtypes.Base):
                 'ResourceType': self.ResourceType,
                 'UriLocation': self.UriLocation,
                 'EndpointUri': self.EndpointUri,
-                'ResourceQualifier': self.ResourceQualifier.to_dict()
+                'ResourceQualifier': self.ResourceQualifier.to_dict(),
             }
         return d
 
@@ -94,6 +95,37 @@ class SubscriptionInfo(wtypes.Base):
                 'ResourceType': self.ResourceType or '',
                 'UriLocation': self.UriLocation,
                 'EndpointUri': self.EndpointUri or '',
-                'ResourceQualifierJson': json.dumps(self.ResourceQualifier.to_dict())  or ''
+                'ResourceQualifierJson': json.dumps(self.ResourceQualifier.to_dict())  or '',
+            }
+        return d
+
+class SubscriptionInfoV1(wtypes.Base):
+    SubscriptionId = wtypes.text
+    UriLocation = wtypes.text
+    EndpointUri = wtypes.text
+    ResourceAddress = wtypes.text
+
+    def __init__(self, orm_entry=None):
+        if orm_entry:
+            self.SubscriptionId = orm_entry.SubscriptionId
+            self.UriLocation = orm_entry.UriLocation
+            self.EndpointUri = orm_entry.EndpointUri
+            self.ResourceAddress = orm_entry.ResourceAddress
+
+    def to_dict(self):
+        d = {
+                'SubscriptionId': self.SubscriptionId,
+                'UriLocation': self.UriLocation,
+                'EndpointUri': self.EndpointUri,
+                'ResourceAddress': self.ResourceAddress,
+            }
+        return d
+
+    def to_orm(self):
+        d = {
+                'SubscriptionId': self.SubscriptionId,
+                'UriLocation': self.UriLocation,
+                'EndpointUri': self.EndpointUri or '',
+                'ResourceAddress': self.ResourceAddress or ''
             }
         return d
diff --git a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/model/orm/subscription.py b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/model/orm/subscription.py
index d1002e9..80e3775 100644
--- a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/model/orm/subscription.py
+++ b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/model/orm/subscription.py
@@ -19,6 +19,7 @@ class Subscription(OrmBase):
     CreateTime = Column(Float)
     LastUpdateTime = Column(Float)
     ResourceQualifierJson = Column(String)
+    ResourceAddress = Column(String(512))
 
 def create_tables(orm_engine):
     Subscription.metadata.create_all(orm_engine)
diff --git a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/broker_connection_manager.py b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/broker_connection_manager.py
index a3081e9..8b74c5c 100644
--- a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/broker_connection_manager.py
+++ b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/broker_connection_manager.py
@@ -8,8 +8,6 @@ import time
 import oslo_messaging
 import logging
 from notificationclientsdk.model.dto.rpc_endpoint import RpcEndpointInfo
-from notificationclientsdk.model.dto.subscription import SubscriptionInfo
-from notificationclientsdk.model.dto.resourcetype import ResourceType
 from notificationclientsdk.common.helpers.nodeinfo_helper import NodeInfoHelper
 from notificationclientsdk.model.dto.broker_state import  BrokerState
 
diff --git a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/broker_state_manager.py b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/broker_state_manager.py
index d858282..8e980a1 100644
--- a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/broker_state_manager.py
+++ b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/broker_state_manager.py
@@ -6,9 +6,11 @@
 
 import json
 import logging
-from notificationclientsdk.model.dto.subscription import SubscriptionInfo
+from notificationclientsdk.model.dto.subscription import SubscriptionInfoV0
+from notificationclientsdk.model.dto.subscription import SubscriptionInfoV1
 from notificationclientsdk.model.dto.resourcetype import ResourceType
 from notificationclientsdk.common.helpers.nodeinfo_helper import NodeInfoHelper
+from notificationclientsdk.common.helpers import subscription_helper
 
 from notificationclientsdk.model.dto.broker_state import BrokerState
 
@@ -94,29 +96,34 @@ class BrokerStateManager:
         changed = False
         broker_name = None
 
-        subscription = SubscriptionInfo(subscription_orm)
-        resource_type = subscription.ResourceType
-
-        LOG.debug("subscription:{0}, Status:{1}".format(subscription.to_dict(), subscription_orm.Status))
-        if subscription_orm.Status != 1:
-            return False
-
-        # assume PTP and not wildcast
-        if resource_type == ResourceType.TypePTP:
-            broker_name = subscription.ResourceQualifier.NodeName
+        LOG.info("__refresh_by_subscription: subscription_orm={}".format(subscription_orm))
+        if getattr(subscription_orm, 'ResourceType') is not None:
+            subscription = SubscriptionInfoV0(subscription_orm)
+            resource = subscription.ResourceType
+            # assume PTP and not wildcard
+            if resource == ResourceType.TypePTP:
+                broker_name = subscription.ResourceQualifier.NodeName
+            else:
+                # ignore the subscription due to unsupported type
+                LOG.debug("Ignore the subscription for: {0}".format(subscription_orm.SubscriptionId))
+                return False
         else:
-            # ignore the subscription due to unsupported type
-            LOG.debug("Ignore the subscription for: {0}".format(subinfo.SubscriptionId))
+            subscription = SubscriptionInfoV1(subscription_orm)
+            _, nodename, resource = subscription_helper.parse_resource_address(subscription.ResourceAddress)
+            broker_name = nodename
+
+        LOG.info("subscription:{0}, Status:{1}".format(subscription.to_dict(), subscription_orm.Status))
+        if subscription_orm.Status != 1:
             return False
 
         if not broker_name:
             # ignore the subscription due to unsupported type
-            LOG.debug("Ignore the subscription for: {0}".format(subscription.SubscriptionId))
+            LOG.info("Ignore the subscription for: {0}".format(subscription.SubscriptionId))
             return False
 
         enumerated_broker_names = NodeInfoHelper.enumerate_nodes(broker_name)
         if not enumerated_broker_names:
-            LOG.debug("Failed to enumerate broker names for {0}".format(broker_name))
+            LOG.info("Failed to enumerate broker names for {0}".format(broker_name))
             return False
 
         for expanded_broker_name in enumerated_broker_names:
@@ -125,8 +132,8 @@ class BrokerStateManager:
                 brokerstate = self.add_broker(expanded_broker_name)
                 changed = True
 
-            changed = changed or (brokerstate.is_resource_subscribed(resource_type) == False)
-            brokerstate.try_subscribe_resource(resource_type, self.subscription_refresh_iteration)
+            changed = changed or (brokerstate.is_resource_subscribed(resource) == False)
+            brokerstate.try_subscribe_resource(resource, self.subscription_refresh_iteration)
 
         return changed
 
diff --git a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/notification_handler.py b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/notification_handler.py
index 6ed0ad7..7226e4d 100644
--- a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/notification_handler.py
+++ b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/notification_handler.py
@@ -11,7 +11,8 @@ import logging
 import multiprocessing as mp
 import threading
 
-from notificationclientsdk.model.dto.subscription import SubscriptionInfo
+from notificationclientsdk.model.dto.subscription import SubscriptionInfoV0
+from notificationclientsdk.model.dto.subscription import SubscriptionInfoV1
 from notificationclientsdk.model.dto.resourcetype import ResourceType
 
 from notificationclientsdk.repository.subscription_repo import SubscriptionRepo
@@ -47,27 +48,36 @@ class NotificationHandler(NotificationHandlerBase):
             self.notification_lock.acquire()
             subscription_repo = SubscriptionRepo(autocommit=True)
             resource_type = notification_info.get('ResourceType', None)
-            node_name = notification_info.get('ResourceQualifier', {}).get('NodeName', None)
-            if not resource_type:
-                raise Exception("abnormal notification@{0}".format(node_name))
+            resource_address = notification_info.get('ResourceAddress', None)
+            # Get nodename from resource address
+            if resource_address:
+                _,node_name,_ = subscription_helper.parse_resource_address(resource_address)
+            else:
+                node_name = notification_info.get('ResourceQualifier', {}).get('NodeName', None)
+                if not resource_type:
+                    raise Exception("abnormal notification@{0}".format(node_name))
 
-            if not resource_type in self.__supported_resource_types:
-                raise Exception("notification with unsupported resource type:{0}".format(resource_type))
+                if not resource_type in self.__supported_resource_types:
+                    raise Exception("notification with unsupported resource type:{0}".format(resource_type))
 
             this_delivery_time = notification_info['EventTimestamp']
 
             entries = subscription_repo.get(ResourceType=resource_type, Status=1)
             for entry in entries:
                 subscriptionid = entry.SubscriptionId
-                ResourceQualifierJson = entry.ResourceQualifierJson or '{}'
-                ResourceQualifier = json.loads(ResourceQualifierJson)
-                # qualify by NodeName
-                entry_node_name = ResourceQualifier.get('NodeName', None)
+                if entry.ResourceAddress:
+                    _,entry_node_name,_ = subscription_helper.parse_resource_address(entry.ResourceAddress)
+                    subscription_dto2 = SubscriptionInfoV1(entry)
+                else:
+                    ResourceQualifierJson = entry.ResourceQualifierJson or '{}'
+                    ResourceQualifier = json.loads(ResourceQualifierJson)
+                    # qualify by NodeName
+                    entry_node_name = ResourceQualifier.get('NodeName', None)
+                    subscription_dto2 = SubscriptionInfoV0(entry)
                 node_name_matched = NodeInfoHelper.match_node_name(entry_node_name, node_name)
                 if not node_name_matched:
                     continue
 
-                subscription_dto2 = SubscriptionInfo(entry)
                 try:
                     last_delivery_time = self.__get_latest_delivery_timestamp(node_name, subscriptionid)
                     if last_delivery_time and last_delivery_time >= this_delivery_time:
diff --git a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/notification_worker.py b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/notification_worker.py
index 72d06c8..17e1709 100644
--- a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/notification_worker.py
+++ b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/notification_worker.py
@@ -20,7 +20,7 @@ from notificationclientsdk.common.helpers import rpc_helper, hostfile_helper
 from notificationclientsdk.common.helpers.nodeinfo_helper import NodeInfoHelper
 
 from notificationclientsdk.model.dto.rpc_endpoint import RpcEndpointInfo
-from notificationclientsdk.model.dto.subscription import SubscriptionInfo
+from notificationclientsdk.model.dto.subscription import SubscriptionInfoV0
 from notificationclientsdk.model.dto.resourcetype import ResourceType
 from notificationclientsdk.model.dto.location import LocationInfo
 
@@ -241,15 +241,24 @@ class NotificationWorker:
                 self.broker_state_manager.refresh_by_nodeinfos(nodeinfos)
 
             for s in subs:
-                subinfo = SubscriptionInfo(s)
-
-                # assume resource type being PTP and not wildcast
-                resource_type = s.ResourceType
-                if resource_type == ResourceType.TypePTP:
-                    broker_name = subinfo.ResourceQualifier.NodeName
+                if s.ResourceType:
+                    subinfo = SubscriptionInfoV0(s)
+                    # assume resource type being PTP and not wildcard
+                    resource_type = s.ResourceType
+                    if resource_type == ResourceType.TypePTP:
+                        broker_name = subinfo.ResourceQualifier.NodeName
+                    else:
+                        # ignore the subscription due to unsupported type
+                        LOG.debug("Ignore the subscription for: {0}".format(subinfo.SubscriptionId))
+                        continue
+                elif s.ResourceAddress:
+                    # Get nodename from resource address
+                    LOG.info("Parse resource address {}".format(s.ResourceAddress))
+                    _,nodename,_ = subscription_helper.parse_resource_address(s.ResourceAddress)
+                    broker_name = nodename
                 else:
-                    # ignore the subscription due to unsupported type
-                    LOG.debug("Ignore the subscription for: {0}".format(subinfo.SubscriptionId))
+                    LOG.debug("Subscription {} does not have ResourceType or "
+                              "ResourceAddress".format(s.SubscriptionId))
                     continue
 
                 if s.Status == 1:
diff --git a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/ptp.py b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/ptp.py
index 76345b7..64dc23c 100644
--- a/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/ptp.py
+++ b/notificationclient-base/centos/docker/notificationclient-sidecar/notificationclientsdk/services/ptp.py
@@ -12,7 +12,8 @@ import kombu
 from notificationclientsdk.repository.node_repo import NodeRepo
 from notificationclientsdk.repository.subscription_repo import SubscriptionRepo
 from notificationclientsdk.model.dto.resourcetype import ResourceType
-from notificationclientsdk.model.dto.subscription import SubscriptionInfo
+from notificationclientsdk.model.dto.subscription import SubscriptionInfoV0
+from notificationclientsdk.model.dto.subscription import SubscriptionInfoV1
 from notificationclientsdk.common.helpers.nodeinfo_helper import NodeInfoHelper
 from notificationclientsdk.model.orm.subscription import Subscription as SubscriptionOrm
 from notificationclientsdk.client.notificationservice import NotificationServiceClient
@@ -112,7 +113,11 @@ class PtpService(object):
 
     def add_subscription(self, subscription_dto):
         subscription_orm = SubscriptionOrm(**subscription_dto.to_orm())
-        broker_name = subscription_dto.ResourceQualifier.NodeName
+        if hasattr(subscription_dto, 'ResourceAddress'):
+            _,nodename,_ = subscription_helper.parse_resource_address(subscription_dto.ResourceAddress)
+            broker_name = nodename
+        elif hasattr(subscription_dto, 'ResourceType'):
+            broker_name = subscription_dto.ResourceQualifier.NodeName
         default_node_name = NodeInfoHelper.default_node_name(broker_name)
 
         broker_pod_ip, supported_resource_types = self.__get_node_info(default_node_name)
@@ -138,7 +143,11 @@ class PtpService(object):
             entry = self.subscription_repo.add(subscription_orm)
 
             # Delivery the initial notification of ptp status
-            subscription_dto2 = SubscriptionInfo(entry)
+            if hasattr(subscription_dto, 'ResourceType'):
+                subscription_dto2 = SubscriptionInfoV0(entry)
+            else:
+                subscription_dto2 = SubscriptionInfoV1(entry)
+
             try:
                 subscription_helper.notify(subscription_dto2, ptpstatus)
                 LOG.info("initial ptpstatus is delivered successfully")
diff --git a/notificationclient-base/centos/docker/notificationclient-sidecar/sidecar/controllers/root.py b/notificationclient-base/centos/docker/notificationclient-sidecar/sidecar/controllers/root.py
index 1159120..16e0a34 100644
--- a/notificationclient-base/centos/docker/notificationclient-sidecar/sidecar/controllers/root.py
+++ b/notificationclient-base/centos/docker/notificationclient-sidecar/sidecar/controllers/root.py
@@ -5,7 +5,7 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
-from pecan import expose, rest, abort
+from pecan import expose, rest, abort, request
 from webob.exc import status_map
 import os
 
@@ -14,8 +14,13 @@ from wsmeext.pecan import wsexpose
 
 THIS_NODE_NAME = os.environ.get("THIS_NODE_NAME",'controller-0')
 
-from sidecar.controllers.v1.subscriptions import SubscriptionsController
+from sidecar.controllers.v1.subscriptions import SubscriptionsControllerV0
+from sidecar.controllers.v1.subscriptions import SubscriptionsControllerV1
 from sidecar.controllers.v1.resource.ptp import PtpController
+import logging
+LOG = logging.getLogger(__name__)
+from notificationclientsdk.common.helpers import log_helper
+log_helper.config_logger(LOG)
 
 class HealthController(rest.RestController):
 
@@ -35,11 +40,19 @@ class V1Controller(rest.RestController):
 
     @expose("json")
     def _lookup(self, primary_key, *remainder):
+        LOG.info("_lookup: primary_key={} remainder={}".format(primary_key, remainder))
+        payload = None
+        if request.is_body_readable:
+            payload = request.json_body
+            LOG.info("_lookup: payload={}".format(payload))
         if primary_key:
             if 'ptp' == primary_key.lower():
                 return PtpController(), remainder
             elif 'subscriptions' == primary_key.lower():
-                return SubscriptionsController(), remainder
+                if payload and 'ResourceType' in payload:
+                    return SubscriptionsControllerV0(), remainder
+                else:
+                    return SubscriptionsControllerV1(), remainder
         abort(404)
 
 class ocloudDaemonController(rest.RestController):
diff --git a/notificationclient-base/centos/docker/notificationclient-sidecar/sidecar/controllers/v1/subscriptions.py b/notificationclient-base/centos/docker/notificationclient-sidecar/sidecar/controllers/v1/subscriptions.py
index 2b4be0f..7ffed79 100644
--- a/notificationclient-base/centos/docker/notificationclient-sidecar/sidecar/controllers/v1/subscriptions.py
+++ b/notificationclient-base/centos/docker/notificationclient-sidecar/sidecar/controllers/v1/subscriptions.py
@@ -16,7 +16,8 @@ from wsme import types as wtypes
 from wsmeext.pecan import wsexpose
 
 from notificationclientsdk.model.dto.resourcetype import ResourceType
-from notificationclientsdk.model.dto.subscription import SubscriptionInfo
+from notificationclientsdk.model.dto.subscription import SubscriptionInfoV0
+from notificationclientsdk.model.dto.subscription import SubscriptionInfoV1
 
 from notificationclientsdk.repository.subscription_repo import SubscriptionRepo
 from notificationclientsdk.services.ptp import PtpService
@@ -32,8 +33,9 @@ log_helper.config_logger(LOG)
 
 THIS_NODE_NAME = os.environ.get("THIS_NODE_NAME",'controller-0')
 
-class SubscriptionsController(rest.RestController):
-    @wsexpose(SubscriptionInfo, body=SubscriptionInfo, status_code=201)
+class SubscriptionsControllerV0(rest.RestController):
+
+    @wsexpose(SubscriptionInfoV0, body=SubscriptionInfoV0, status_code=201)
     def post(self, subscription):
         # decode the request body
         try:
@@ -47,13 +49,13 @@ class SubscriptionsController(rest.RestController):
                     subscription.ResourceType))
                 abort(404)
 
-            if not self._validate(subscription):
+            if not self._validateV0(subscription):
                 LOG.warning(' Invalid Request data:{0}'.format(subscription.to_dict()))
                 abort(400)
 
             subscription.UriLocation = "{0}://{1}:{2}/ocloudNotifications/v1/subscriptions".format(
                 conf.server.get('protocol','http'),
-                conf.server.get('host', '127.0.01'),
+                conf.server.get('host', '127.0.0.1'),
                 conf.server.get('port', '8080')
             )
             if subscription.ResourceType == ResourceType.TypePTP:
@@ -93,7 +95,7 @@ class SubscriptionsController(rest.RestController):
             entries = repo.get(Status=1)
 
             response.status = 200
-            return [SubscriptionInfo(x).to_dict() for x in entries if x.Status == 1]
+            return [SubscriptionInfoV0(x).to_dict() for x in entries if x.Status == 1]
         except HTTPException as ex:
             LOG.warning("Client side error:{0},{1}".format(type(ex), str(ex)))
             raise ex
@@ -108,7 +110,7 @@ class SubscriptionsController(rest.RestController):
     def _lookup(self, subscription_id, *remainder):
         return SubscriptionController(subscription_id), remainder
 
-    def _validate(self, subscription_request):
+    def _validateV0(self, subscription_request):
         try:
             assert subscription_request.ResourceType == 'PTP'
             assert subscription_request.EndpointUri
@@ -117,6 +119,93 @@ class SubscriptionsController(rest.RestController):
         except:
             return False
 
+
+class SubscriptionsControllerV1(rest.RestController):
+
+    @wsexpose(SubscriptionInfoV1, body=SubscriptionInfoV1, status_code=201)
+    def post(self, subscription):
+        # decode the request body
+        try:
+            if subscription.ResourceAddress:
+                LOG.info(' subscribe: ResourceAddress {0} with callback uri {1}'.format(
+                    subscription.ResourceAddress,
+                    subscription.EndpointUri))
+
+            if not self._validateV1(subscription):
+                LOG.warning(' Invalid Request data:{0}'.format(subscription.to_dict()))
+                abort(400)
+
+            subscription.UriLocation = "{0}://{1}:{2}/ocloudNotifications/v1/subscriptions".format(
+                conf.server.get('protocol','http'),
+                conf.server.get('host', '127.0.0.1'),
+                conf.server.get('port', '8080')
+            )
+            if subscription.ResourceAddress:
+                ptpservice = PtpService(notification_control)
+                entry = ptpservice.add_subscription(subscription)
+                del ptpservice
+                if not entry:
+                    abort(404)
+            subscription.SubscriptionId = entry.SubscriptionId
+            subscription.UriLocation = entry.UriLocation
+            LOG.info('created subscription: {0}'.format(subscription.to_dict()))
+
+            return subscription
+        except client_exception.InvalidSubscription as ex:
+            abort(400)
+        except client_exception.InvalidEndpoint as ex:
+            abort(400)
+        except client_exception.NodeNotAvailable as ex:
+            abort(404)
+        except client_exception.ResourceNotAvailable as ex:
+            abort(404)
+        except HTTPException as ex:
+            LOG.warning("Client side error:{0},{1}".format(type(ex), str(ex)))
+            abort(400)
+        except HTTPServerError as ex:
+            LOG.error("Server side error:{0},{1}".format(type(ex), str(ex)))
+            abort(500)
+        except Exception as ex:
+            LOG.error("Exception:{0}@{1}".format(type(ex),str(ex)))
+            abort(500)
+
+    @expose('json')
+    def get(self):
+        try:
+            repo = SubscriptionRepo(defaults['dbcontext'].get_session(), autocommit = False)
+            entries = repo.get(Status=1)
+            response.status = 200
+            subs = []
+            for x in entries:
+                if x.Status == 1:
+                    if getattr(x, 'ResourceType', None):
+                        subs.append(SubscriptionInfoV0(x).to_dict())
+                    else:
+                        subs.append(SubscriptionInfoV1(x).to_dict())
+            return subs
+        except HTTPException as ex:
+            LOG.warning("Client side error:{0},{1}".format(type(ex), str(ex)))
+            raise ex
+        except HTTPServerError as ex:
+            LOG.error("Server side error:{0},{1}".format(type(ex), str(ex)))
+            raise ex
+        except Exception as ex:
+            LOG.error("Exception:{0}@{1}".format(type(ex),str(ex)))
+            abort(500)
+
+    @expose()
+    def _lookup(self, subscription_id, *remainder):
+        return SubscriptionController(subscription_id), remainder
+
+    def _validateV1(self, subscription_request):
+        try:
+            assert subscription_request.ResourceAddress
+            assert subscription_request.EndpointUri
+
+            return True
+        except:
+            return False
+
 class SubscriptionController(rest.RestController):
     def __init__(self, subscription_id):
         self.subscription_id = subscription_id
@@ -131,7 +220,10 @@ class SubscriptionController(rest.RestController):
                 abort(404)
             else:
                 response.status = 200
-                return SubscriptionInfo(entry).to_dict()
+                if getattr(entry, 'ResourceType', None):
+                    return SubscriptionInfoV0(entry).to_dict()
+                else:
+                    return SubscriptionInfoV1(entry).to_dict()
         except HTTPException as ex:
             LOG.warning("Client side error:{0},{1}".format(type(ex), str(ex)))
             raise ex
@@ -148,7 +240,7 @@ class SubscriptionController(rest.RestController):
             repo = SubscriptionRepo(defaults['dbcontext'].get_session(), autocommit = False)
             entry = repo.get_one(SubscriptionId=self.subscription_id)
             if entry:
-                if entry.ResourceType == ResourceType.TypePTP:
+                if entry.SubscriptionId:
                     ptpservice = PtpService(notification_control)
                     ptpservice.remove_subscription(entry.SubscriptionId)
                     del ptpservice
diff --git a/notificationclient-base/centos/docker/notificationclient-sidecar/sidecar/model/jsonify.py b/notificationclient-base/centos/docker/notificationclient-sidecar/sidecar/model/jsonify.py
index 3987369..19762c5 100644
--- a/notificationclient-base/centos/docker/notificationclient-sidecar/sidecar/model/jsonify.py
+++ b/notificationclient-base/centos/docker/notificationclient-sidecar/sidecar/model/jsonify.py
@@ -4,12 +4,13 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
-from notificationclientsdk.model.dto.subscription import SubscriptionInfo
+from notificationclientsdk.model.dto.subscription import SubscriptionInfoV0
+from notificationclientsdk.model.dto.subscription import SubscriptionInfoV1
 from notificationclientsdk.model.dto.subscription import ResourceQualifierPtp
 
 from pecan.jsonify import jsonify
 
-@jsonify.register(SubscriptionInfo)
+@jsonify.register(SubscriptionInfoV0)
 def jsonify_subscriptioninfo(subscriptionInfo):
     return subscriptionInfo.to_dict()
 
@@ -17,5 +18,9 @@ def jsonify_subscriptioninfo(subscriptionInfo):
 def jsonify_resourcequalifierptp(resourceQualifierPtp):
     return resourceQualifierPtp.to_dict()
 
+@jsonify.register(SubscriptionInfoV1)
+def jsonify_subscriptioninfo(subscriptionInfo):
+    return subscriptionInfo.to_dict()
+
 def __init__():
   pass