diff --git a/report_coverage_slice.sh b/report_coverage_slice.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f783ec069329a9efe100154a2702a72a93e0ad8a
--- /dev/null
+++ b/report_coverage_slice.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+./report_coverage_all.sh | grep --color -E -i "^slice/.*$|$"
diff --git a/src/common/tools/service/ConstraintsChecker.py b/src/common/tools/service/ConstraintsChecker.py
new file mode 100644
index 0000000000000000000000000000000000000000..864cf3ed1b45c68a4628c1196b86de6e9df0edfd
--- /dev/null
+++ b/src/common/tools/service/ConstraintsChecker.py
@@ -0,0 +1,38 @@
+import grpc, logging
+from typing import Dict, List, Set, Tuple
+from common.Checkers import chk_string
+from common.exceptions.ServiceException import ServiceException
+from service.proto.context_pb2 import Constraint
+
+def check_constraint(
+    logger : logging.Logger, constraint_number : int, parent_name : str, constraint : Constraint,
+    add_constraints : Dict[str, Dict[str, Set[str]]]) -> Tuple[str, str]:
+
+    try:
+        constraint_type  = chk_string('constraint[#{}].constraint_type'.format(constraint_number),
+                                      constraint.constraint_type,
+                                      allow_empty=False)
+        constraint_value = chk_string('constraint[#{}].constraint_value'.format(constraint_number),
+                                      constraint.constraint_value,
+                                      allow_empty=False)
+    except Exception as e:
+        logger.exception('Invalid arguments:')
+        raise ServiceException(grpc.StatusCode.INVALID_ARGUMENT, str(e))
+
+    if constraint_type in add_constraints:
+        msg = 'Duplicated ConstraintType({}) in {}.'
+        msg = msg.format(constraint_type, parent_name)
+        raise ServiceException(grpc.StatusCode.INVALID_ARGUMENT, msg)
+
+    add_constraints[constraint_type] = constraint_value
+    return constraint_type, constraint_value
+
+def check_constraints(logger : logging.Logger, parent_name : str, constraints):
+    add_constraints : Dict[str, str] = {}
+    constraint_tuples : List[Tuple[str, str]] = []
+    for constraint_number,constraint in enumerate(constraints):
+        _parent_name = 'Constraint(#{}) of {}'.format(constraint_number, parent_name)
+        constraint_type, constraint_value = check_constraint(
+            logger, constraint_number, _parent_name, constraint, add_constraints)
+        constraint_tuples.append((constraint_type, constraint_value))
+    return constraint_tuples
diff --git a/src/common/tools/service/SliceCheckers.py b/src/common/tools/service/SliceCheckers.py
new file mode 100644
index 0000000000000000000000000000000000000000..bac9766b8595c64f9f8d68954707cc5f1efc68e0
--- /dev/null
+++ b/src/common/tools/service/SliceCheckers.py
@@ -0,0 +1,18 @@
+import grpc
+from common.database.api.Database import Database
+from common.database.api.context.slice.Slice import Slice
+from common.exceptions.ServiceException import ServiceException
+
+def check_slice_exists(database : Database, context_id : str, slice_id : str) -> Slice:
+    db_context = database.context(context_id).create()
+    if db_context.slices.contains(slice_id): return db_context.slice(slice_id)
+    msg = 'Context({})/Slice({}) does not exist in the database.'
+    msg = msg.format(context_id, slice_id)
+    raise ServiceException(grpc.StatusCode.NOT_FOUND, msg)
+
+def check_slice_not_exists(database : Database, context_id : str, slice_id : str):
+    db_context = database.context(context_id).create()
+    if not db_context.slices.contains(slice_id): return
+    msg = 'Context({})/Slice({}) already exists in the database.'
+    msg = msg.format(context_id, slice_id)
+    raise ServiceException(grpc.StatusCode.ALREADY_EXISTS, msg)
diff --git a/src/slice/_docs/ietf-network-slice-service_2022-07-11.yang b/src/slice/_docs/ietf-network-slice-service_2022-07-11.yang
new file mode 100644
index 0000000000000000000000000000000000000000..bff228d78f5277fe113d813414c5fd78bf54d98f
--- /dev/null
+++ b/src/slice/_docs/ietf-network-slice-service_2022-07-11.yang
@@ -0,0 +1,1180 @@
+module ietf-network-slice-service {
+  yang-version 1.1;
+  namespace
+    "urn:ietf:params:xml:ns:yang:ietf-network-slice-service";
+  prefix ietf-nss;
+
+  import ietf-inet-types {
+    prefix inet;
+    reference
+      "RFC 6991: Common YANG Types.";
+  }
+  import ietf-vpn-common {
+    prefix vpn-common;
+    reference
+      "RFC 9181: A Common YANG Data Model for Layer 2 and Layer 3
+                    VPNs.";
+  }
+  import ietf-te-types {
+    prefix te-types;
+    reference
+      "RFC 8776: Common YANG Data Types for Traffic Engineering.";
+  }
+  import ietf-te-packet-types {
+    prefix te-packet-types;
+    reference
+      "RFC 8776: Common YANG Data Types for Traffic Engineering.";
+  }
+
+  organization
+    "IETF Traffic Engineering Architecture and Signaling (TEAS)
+     Working Group";
+  contact
+    "WG Web:  <https://tools.ietf.org/wg/teas/>
+     WG List:  <mailto:teas@ietf.org>
+
+     Editor: Bo Wu
+          <lana.wubo@huawei.com>
+     Editor: Dhruv Dhody
+          <dhruv.ietf@gmail.com>
+     Editor: Reza Rokui
+          <reza.rokui@nokia.com>
+     Editor: Tarek Saad
+          <tsaad@juniper.net>
+     Author: Liuyan Han
+          <hanliuyan@chinamobile.com>";
+  description
+    "This module defines a model for the IETF Network Slice service.
+
+        Copyright (c) 2022 IETF Trust and the persons identified as
+        authors of the code.  All rights reserved.
+
+        Redistribution and use in source and binary forms, with or
+        without modification, is permitted pursuant to, and subject
+        to the license terms contained in, the Revised BSD License
+        set forth in Section 4.c of the IETF Trust's Legal Provisions
+        Relating to IETF Documents
+        (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC XXXX; see the
+     RFC itself for full legal notices.";
+
+  revision 2022-07-11 {
+    description
+      "initial version.";
+    reference
+      "RFC XXXX: A Yang Data Model for IETF Network Slice service
+       operation";
+  }
+  /* Features */
+  /* Identities */
+
+  identity service-tag-type {
+    description
+      "Base identity for IETF Network Slice service tag type.";
+  }
+
+  identity service-tag-customer {
+    base service-tag-type;
+    description
+      "The IETF Network Slice service customer ID tag type.";
+  }
+
+  identity service-tag-service {
+    base service-tag-type;
+    description
+      "The IETF Network Slice service tag type.";
+  }
+
+  identity service-tag-opaque {
+    base service-tag-type;
+    description
+      "The IETF Network Slice service opaque tag type.";
+  }
+
+  identity attachment-circuit-tag-type {
+    description
+      "Base identity for the attachment circuit tag type.";
+  }
+
+  identity attachment-circuit-tag-vlan-id {
+    base attachment-circuit-tag-type;
+    description
+      "The attachment circuit VLAN ID tag type.";
+  }
+
+  identity attachment-circuit-tag-ip-mask {
+    base attachment-circuit-tag-type;
+    description
+      "The attachment circuit tag IP mask.";
+  }
+
+  identity service-isolation-type {
+    description
+      "Base identity for IETF Network slice service isolation level.";
+  }
+
+  identity service-isolation-shared {
+    base service-isolation-type;
+    description
+      "Shared resources (e.g. queues) are associated with the
+       slice service traffic. Hence, the traffic can be impacted
+       by effects of other services traffic
+       sharing the same resources.";
+  }
+
+  identity service-isolation-dedicated {
+    base service-isolation-type;
+    description
+      "Dedicated resources (e.g. queues) are associated with the
+       Network Slice service traffic. Hence, the service traffic
+       is isolated from other servceis traffic
+       sharing the same resources.";
+  }
+
+  identity service-security-type {
+    description
+      "Base identity for for slice service security level.";
+  }
+
+  identity service-security-authenticate {
+    base service-security-type;
+    description
+      "Indicates the slice service requires authentication.";
+  }
+
+  identity service-security-integrity {
+    base service-security-type;
+    description
+      "Indicates the slice service requires data integrity.";
+  }
+
+  identity service-security-encryption {
+    base service-security-type;
+    description
+      "Indicates the slice service requires data encryption.";
+  }
+
+  identity point-to-point {
+    base vpn-common:vpn-topology;
+    description
+      "Identity for point-to-point IETF Network Slice
+       service connectivity.";
+  }
+
+  identity point-to-multipoint {
+    base vpn-common:vpn-topology;
+    description
+      "Identity for point-to-point IETF Network Slice
+       service connectivity.";
+  }
+
+  identity multipoint-to-multipoint {
+    base vpn-common:vpn-topology;
+    description
+      "Identity for point-to-point IETF Network Slice
+       service connectivity.";
+  }
+
+  identity multipoint-to-point {
+    base vpn-common:vpn-topology;
+    description
+      "Identity for point-to-point IETF Network Slice
+       service connectivity.";
+  }
+
+  identity sender-role {
+    base vpn-common:role;
+    description
+      "A SDP is acting as a sender.";
+  }
+
+  identity receiver-role {
+    base vpn-common:role;
+    description
+      "A SDP is acting as a receiver.";
+  }
+
+  identity service-slo-metric-type {
+    description
+      "Base identity for IETF Network Slice service SLO metric type.";
+  }
+
+  identity service-slo-one-way-bandwidth {
+    base service-slo-metric-type;
+    description
+      "SLO bandwidth metric. Minimum guaranteed bandwidth between
+       two SDPs at any time and is measured unidirectionally.";
+  }
+
+  identity service-slo-two-way-bandwidth {
+    base service-slo-metric-type;
+    description
+      "SLO bandwidth metric. Minimum guaranteed bandwidth between
+       two SDPs at any time.";
+  }
+
+  identity service-slo-shared-bandwidth {
+    base service-slo-metric-type;
+    description
+      "The shared SLO bandwidth bound. It is the limit on the
+       bandwidth that can be shared amongst a group of
+       connectivity constructs of a slice service.";
+  }
+
+  identity service-slo-one-way-delay {
+    base service-slo-metric-type;
+    description
+      "SLO one-way-delay is the upper bound of network delay when
+       transmitting between two SDPs. The metric is defined in
+       RFC7679.";
+  }
+
+  identity service-slo-two-way-delay {
+    base service-slo-metric-type;
+    description
+      "SLO two-way delay is the upper bound of network delay when
+       transmitting between two SDPs. The metric is defined in
+       RFC2681.";
+  }
+
+  identity service-slo-one-way-delay-variation {
+    base service-slo-metric-type;
+    description
+      "SLO one-way delay variation is defined by RFC3393, is the
+       difference in the one-way delay between sequential packets
+       between two SDPs.";
+  }
+
+  identity service-slo-two-way-delay-variation {
+    base service-slo-metric-type;
+    description
+      "SLO two-way delay variation is defined by RFC5481, is the
+       difference in the round-trip delay between sequential packets
+       between two SDPs.";
+  }
+
+  identity service-slo-one-way-packet-loss {
+    base service-slo-metric-type;
+    description
+      "SLO loss metric. The ratio of packets dropped to packets
+       transmitted between two SDPs in one-way
+       over a period of time as specified in RFC7680.";
+  }
+
+  identity service-slo-two-way-packet-loss {
+    base service-slo-metric-type;
+    description
+      "SLO loss metric. The ratio of packets dropped to packets
+       transmitted between two SDPs in two-way
+       over a period of time as specified in RFC7680.";
+  }
+
+  identity service-slo-availability {
+    base service-slo-metric-type;
+    description
+      "SLO availability level.";
+  }
+
+  identity service-match-type {
+    description
+      "Base identity for IETF Network Slice service traffic
+       match type.";
+  }
+
+  identity service-phy-interface-match {
+    base service-match-type;
+    description
+      "Use the physical interface as match criteria for
+       slice service traffic.";
+  }
+
+  identity service-vlan-match {
+    base service-match-type;
+    description
+      "Use the VLAN ID as match criteria for the slice service
+       traffic.";
+  }
+
+  identity service-label-match {
+    base service-match-type;
+    description
+      "Use the MPLS label as match criteria for the slice service
+       traffic.";
+  }
+
+  identity service-source-ip-match {
+    base service-match-type;
+    description
+      "Use source ip-address in the packet header as match criteria
+       for the slice service traffic.";
+  }
+
+  identity service-destination-ip-match {
+    base service-match-type;
+    description
+      "Use destination ip-address in the packet header as
+       match criteria for the slice service traffic.";
+  }
+
+  identity service-dscp-match {
+    base service-match-type;
+    description
+      "Use DSCP in the IP packet header as match criteria
+       for the slice service traffic.";
+  }
+
+  identity service-any-match {
+    base service-match-type;
+    description
+      "Match all slice service traffic.";
+  }
+
+  identity peering-protocol-type {
+    description
+      "Base identity for SDP peering protocol type.";
+  }
+
+  identity peering-protocol-bgp {
+    base peering-protocol-type;
+    description
+      "Use BGP as protocol for SDP peering with customer device.";
+  }
+
+  identity peering-static-routing {
+    base peering-protocol-type;
+    description
+      "Use static routing for SDP peering with customer device.";
+  }
+
+  identity peering-attribute-type {
+    description
+      "Base identity for BGP peering";
+  }
+
+  identity remote-as {
+    base peering-attribute-type;
+    description
+      "Identity for remote-as attribute of BGP peering.";
+  }
+
+  identity neighbor {
+    base peering-attribute-type;
+    description
+      "Identity for neighbor attribute of BGP peering.";
+  }
+
+  identity local-as {
+    base peering-attribute-type;
+    description
+      "Identity for local-as attribute of BGP peering.";
+  }
+
+  /*
+   * Identity for availability-type
+   */
+
+  identity availability-type {
+    description
+      "Base identity from which specific availability types are
+       derived.";
+  }
+
+  identity level-1 {
+    base availability-type;
+    description
+      "level 1: 99.9999%";
+  }
+
+  identity level-2 {
+    base availability-type;
+    description
+      "level 2: 99.999%";
+  }
+
+  identity level-3 {
+    base availability-type;
+    description
+      "level 3: 99.99%";
+  }
+
+  identity level-4 {
+    base availability-type;
+    description
+      "level 4: 99.9%";
+  }
+
+  identity level-5 {
+    base availability-type;
+    description
+      "level 5: 99%";
+  }
+
+  /* grouping */
+
+  grouping service-match-criteria {
+    description
+      "A grouping for the slice service match definition.";
+    container service-match-criteria {
+      description
+        "Describes the slice service match criteria.";
+      list match-criterion {
+        key "index";
+        description
+          "List of the slice service traffic match criteria.";
+        leaf index {
+          type uint32;
+          description
+            "The entry index.";
+        }
+        leaf match-type {
+          type identityref {
+            base service-match-type;
+          }
+          mandatory true;
+          description
+            "Identifies an entry in the list of the slice service
+             match criteria.";
+        }
+        leaf-list value {
+          type string;
+          description
+            "Describes the slice service match criteria, e.g.
+             IP address, VLAN, etc.";
+        }
+        leaf target-connection-group-id {
+          type leafref {
+            path
+              "/ietf-nss:network-slice-services"
+            + "/ietf-nss:slice-service"
+            + "/ietf-nss:connection-groups/ietf-nss:connection-group"
+            + "/ietf-nss:connection-group-id";
+          }
+          mandatory true;
+          description
+            "Reference to the slice service connection group.";
+        }
+        leaf connection-group-sdp-role {
+          type identityref {
+            base vpn-common:role;
+          }
+          default "vpn-common:any-to-any-role";
+          description
+            "Indicates the role in the connection group when
+             a slice service has multiple multipoint-to-multipoint
+             connection groups, e.g., hub-spoke.";
+        }
+        leaf target-connectivity-construct-id {
+          type leafref {
+            path
+              "/ietf-nss:network-slice-services/slice-service"
+            + "/ietf-nss:connection-groups"
+            + "/ietf-nss:connection-group[connection-group-id"
+            + "=current()/../target-connection-group-id]"
+            + "/ietf-nss:connectivity-construct/ietf-nss:cc-id";
+          }
+          description
+            "Reference to a Network Slice connection construct.";
+        }
+      }
+    }
+  }
+
+  grouping service-sles {
+    description
+      "Indirectly Measurable Objectives of a slice service.";
+    leaf-list security {
+      type identityref {
+        base service-security-type;
+      }
+      description
+        "The slice service security SLE(s)";
+    }
+    leaf isolation {
+      type identityref {
+        base service-isolation-type;
+      }
+      default "service-isolation-shared";
+      description
+        "The slice service isolation SLE requirement.";
+    }
+    leaf max-occupancy-level {
+      type uint8 {
+        range "1..100";
+      }
+      description
+        "The maximal occupancy level specifies the number of flows to
+         be admitted.";
+    }
+    leaf mtu {
+      type uint16;
+      units "bytes";
+      description
+        "The MTU specifies the maximum length in octets of data
+         packets that can be transmitted by the slice service.
+         The value needs to be less than or equal to the
+         minimum MTU value of all 'attachment-circuits' in the SDPs.";
+    }
+    container steering-constraints {
+      description
+        "Container for the policy of steering constraints
+         applicable to the slice service.";
+      container path-constraints {
+        description
+          "Container for the policy of path constraints
+           applicable to the slice service.";
+      }
+      container service-function {
+        description
+          "Container for the policy of service function
+           applicable to the slice service.";
+      }
+    }
+  }
+
+  grouping service-metric-bounds {
+    description
+      "Slice service metric bounds grouping.";
+    container metric-bounds {
+      description
+        "Slice service metric bounds container.";
+      list metric-bound {
+        key "metric-type";
+        description
+          "List of slice service metric bounds.";
+        leaf metric-type {
+          type identityref {
+            base service-slo-metric-type;
+          }
+          description
+            "Identifies an entry in the list of metric type
+             bounds for the slice service.";
+        }
+        leaf metric-unit {
+          type string;
+          mandatory true;
+          description
+            "The metric unit of the parameter. For example,
+             s, ms, ns, and so on.";
+        }
+        leaf value-description {
+          type string;
+          description
+            "The description of previous value.";
+        }
+        leaf bound {
+          type uint64;
+          default "0";
+          description
+            "The Bound on the slice service connection metric.
+             A zero indicate an unbounded upper limit for the
+             specific metric-type.";
+        }
+      }
+    }
+  }
+
+  grouping sdp-peering {
+    description
+      "A grouping for the slice service SDP peering.";
+    container sdp-peering {
+      description
+        "Describes SDP peering attributes.";
+      list protocol {
+        key "protocol-type";
+        description
+          "List of the SDP peering protocol.";
+        leaf protocol-type {
+          type identityref {
+            base peering-protocol-type;
+          }
+          description
+            "Identifies an entry in the list of SDP peering
+             protocol type.";
+        }
+        list attribute {
+          key "attribute-type";
+          description
+            "list of protocol attributes";
+          leaf attribute-type {
+            type identityref {
+              base peering-attribute-type;
+            }
+            description
+              "identifies the attribute type";
+          }
+          leaf-list value {
+            type string;
+            description
+              "Describes the value of protocol attribute, e.g.
+               nexthop address, peer address, etc.";
+          }
+        }
+      }
+      list opaque {
+        key "attribute-name";
+        description
+          "List of protocol attributes.";
+        leaf attribute-name {
+          type string;
+          description
+            "The name of the attribute.";
+        }
+        leaf-list value {
+          type string;
+          description
+            "The value(s) of the attribute";
+        }
+      }
+    }
+  }
+
+  grouping sdp-attachment-circuits {
+    description
+      "Grouping for the SDP attachment circuit definition.";
+    container attachment-circuits {
+      description
+        "List of attachment circuit.";
+      list attachment-circuit {
+        key "ac-id";
+        description
+          "The IETF Network Slice service SDP attachment circuit
+           related parameters.";
+        leaf ac-id {
+          type string;
+          description
+            "Uniquely identifier a attachment circuit.";
+        }
+        leaf ac-description {
+          type string;
+          description
+            "The attachment circuit description.";
+        }
+        leaf ac-node-id {
+          type string;
+          description
+            "The attachment circuit node ID in the case of
+             multi-homing.";
+        }
+        leaf ac-tp-id {
+          type string;
+          description
+            "The termination port ID of the attachment circuit.";
+        }
+        leaf ac-ip-address {
+          type inet:ip-address;
+          description
+            "The IP address of the attachment circuit.";
+        }
+        leaf ac-ip-prefix-length {
+          type uint8;
+          description
+            "The subnet prefix length expressed in bits.";
+        }
+        leaf ac-qos-policy-name {
+          type string;
+          description
+            "The name of the QoS policy that is applied to the
+             attachment circuit. The name can reference a QoS
+             profile that is pre-provisioned on the device.";
+        }
+        leaf mtu {
+          type uint16;
+          units "bytes";
+          description
+            "Maximum size in octets of the slice service data packet
+             that can traverse a SDP.";
+        }
+        container ac-tags {
+          description
+            "Container for the attachment circuit tags.";
+          list ac-tags {
+            key "ac-tag-type";
+            description
+              "The attachment circuit tags list.";
+            leaf ac-tag-type {
+              type identityref {
+                base attachment-circuit-tag-type;
+              }
+              description
+                "The attachment circuit tag type.";
+            }
+            leaf-list value {
+              type string;
+              description
+                "The attachment circuit tag value.";
+            }
+          }
+          list ac-tag-opaque {
+            key "tag-name";
+            description
+              "The attachment circuit tag opaque list.";
+            leaf tag-name {
+              type string;
+              description
+                "The opaque tags name";
+            }
+            leaf-list value {
+              type string;
+              description
+                "The opaque tags value";
+            }
+          }
+        }
+        /* Per ac rate limits */
+        uses service-match-criteria;
+        uses sdp-peering;
+        uses service-rate-limit;
+      }
+    }
+  }
+
+  grouping sdp-monitoring-metrics {
+    description
+      "Grouping for the SDP monitoring metrics.";
+    container sdp-monitoring {
+      config false;
+      description
+        "Container for SDP monitoring metrics.";
+      leaf incoming-utilized-bandwidth {
+        type te-types:te-bandwidth;
+        description
+          "Incoming bandwidth utilization at a SDP.";
+      }
+      leaf incoming-bw-utilization {
+        type decimal64 {
+          fraction-digits 5;
+          range "0..100";
+        }
+        units "percent";
+        mandatory true;
+        description
+          "To be used to define the bandwidth utilization
+           as a percentage of the available bandwidth.";
+      }
+      leaf outgoing-utilized-bandwidth {
+        type te-types:te-bandwidth;
+        description
+          "Outoing service bandwidth utilization at a SDP.";
+      }
+      leaf outgoing-bw-utilization {
+        type decimal64 {
+          fraction-digits 5;
+          range "0..100";
+        }
+        units "percent";
+        mandatory true;
+        description
+          "To be used to define the service bandwidth utilization
+           as a percentage of the available bandwidth.";
+      }
+    }
+  }
+
+  grouping connectivity-construct-monitoring-metrics {
+    description
+      "Grouping for connectivity construct monitoring metrics.";
+    uses te-packet-types:one-way-performance-metrics-packet;
+    uses te-packet-types:two-way-performance-metrics-packet;
+  }
+
+  grouping geolocation-container {
+    description
+      "A grouping containing a GPS location.";
+    container location {
+      description
+        "A container containing a GPS location.";
+      leaf altitude {
+        type int64;
+        units "millimeter";
+        description
+          "Distance above the sea level.";
+      }
+      leaf latitude {
+        type decimal64 {
+          fraction-digits 8;
+          range "-90..90";
+        }
+        description
+          "Relative position north or south on the Earth's surface.";
+      }
+      leaf longitude {
+        type decimal64 {
+          fraction-digits 8;
+          range "-180..180";
+        }
+        description
+          "Angular distance east or west on the Earth's surface.";
+      }
+    }
+    // gps-location
+  }
+
+  // geolocation-container
+
+  grouping bw-rate-limits {
+    description
+      "Bandwidth rate limits grouping.";
+    reference
+      "RFC 7640: Traffic Management Benchmarking";
+    leaf cir {
+      type uint64;
+      units "bps";
+      description
+        "Committed Information Rate. The maximum number of bits
+         that a port can receive or send during one-second over an
+         interface.";
+    }
+    leaf cbs {
+      type uint64;
+      units "bytes";
+      description
+        "Committed Burst Size. CBS controls the bursty nature
+         of the traffic. Traffic that does not use the configured
+         CIR accumulates credits until the credits reach the
+         configured CBS.";
+    }
+    leaf eir {
+      type uint64;
+      units "bps";
+      description
+        "Excess Information Rate, i.e., excess frame delivery
+         allowed not subject to SLA. The traffic rate can be
+         limited by EIR.";
+    }
+    leaf ebs {
+      type uint64;
+      units "bytes";
+      description
+        "Excess Burst Size. The bandwidth available for burst
+         traffic from the EBS is subject to the amount of
+         bandwidth that is accumulated during periods when
+         traffic allocated by the EIR policy is not used.";
+    }
+    leaf pir {
+      type uint64;
+      units "bps";
+      description
+        "Peak Information Rate, i.e., maximum frame delivery
+         allowed. It is equal to or less than sum of CIR and EIR.";
+    }
+    leaf pbs {
+      type uint64;
+      units "bytes";
+      description
+        "Peak Burst Size.";
+    }
+  }
+
+  grouping service-rate-limit {
+    description
+      "The rate limits grouping.";
+    container incoming-rate-limits {
+      description
+        "Container for the asymmetric traffic control.";
+      uses bw-rate-limits;
+    }
+    container outgoing-rate-limits {
+      description
+        "The rate-limit imposed on outgoing traffic.";
+      uses bw-rate-limits;
+    }
+  }
+
+  grouping sdp {
+    description
+      "Slice service SDP related information";
+    leaf sdp-id {
+      type string;
+      description
+        "Unique identifier for the referred slice service SDP.";
+    }
+    leaf sdp-description {
+      type string;
+      description
+        "Give more description of the SDP.";
+    }
+    uses geolocation-container;
+    leaf node-id {
+      type string;
+      description
+        "Uniquely identifies an edge node of the SDP.";
+    }
+    leaf sdp-ip {
+      type inet:ip-address;
+      description
+        "The IP address of the SDP.";
+    }
+    uses service-match-criteria;
+    uses sdp-peering;
+    uses sdp-attachment-circuits;
+    uses service-rate-limit;
+    /* Per SDP rate limits */
+    uses vpn-common:service-status;
+    uses sdp-monitoring-metrics;
+  }
+
+  //service-sdp
+
+  grouping connectivity-construct {
+    description
+      "Grouping for slice service connectivity construct.";
+    list connectivity-construct {
+      key "cc-id";
+      description
+        "List of connectivity constructs.";
+      leaf cc-id {
+        type uint32;
+        description
+          "The connectivity construct identifier.";
+      }
+      choice connectivity-construct-type {
+        default "p2p";
+        description
+          "Choice for connectivity construct type.";
+        case p2p {
+          description
+            "P2P connectivity construct.";
+          leaf p2p-sender-sdp {
+            type leafref {
+              path "../../../../sdps/sdp/sdp-id";
+            }
+            description
+              "Reference to a sender SDP.";
+          }
+          leaf p2p-receiver-sdp {
+            type leafref {
+              path "../../../../sdps/sdp/sdp-id";
+            }
+            description
+              "Reference to a receiver SDP.";
+          }
+        }
+        case p2mp {
+          description
+            "P2MP connectivity construct.";
+          leaf p2mp-sender-sdp {
+            type leafref {
+              path "../../../../sdps/sdp/sdp-id";
+            }
+            description
+              "Reference to a sender SDP.";
+          }
+          leaf-list p2mp-receiver-sdp {
+            type leafref {
+              path "../../../../sdps/sdp/sdp-id";
+            }
+            description
+              "Reference to a receiver SDP.";
+          }
+        }
+        case a2a {
+          description
+            "A2A connectivity construct.";
+          list a2a-sdp {
+            key "sdp-id";
+            description
+              "List of included A2A SDPs.";
+            leaf sdp-id {
+              type leafref {
+                path "../../../../../sdps/sdp/sdp-id";
+              }
+              description
+                "Reference to a SDP.";
+            }
+            uses service-slo-sle-policy;
+          }
+        }
+      }
+      uses service-slo-sle-policy;
+      /* Per connectivity construct service-slo-sle-policy
+       * overrides the per slice service-slo-sle-policy.
+       */
+      container connectivity-construct-monitoring {
+        config false;
+        description
+          "SLO status per connectivity construct.";
+        uses connectivity-construct-monitoring-metrics;
+      }
+    }
+  }
+
+  //connectivity-construct
+
+  grouping connection-group {
+    description
+      "Grouping for slice service connection group.";
+    leaf connection-group-id {
+      type string;
+      description
+        "The connection group identifier.";
+    }
+    leaf connectivity-type {
+      type identityref {
+        base vpn-common:vpn-topology;
+      }
+      default "vpn-common:any-to-any";
+      description
+        "Connection group connectivity type.";
+    }
+    uses service-slo-sle-policy;
+    uses connectivity-construct;
+    /* Per connection group service-slo-sle-policy overrides
+     * the per slice service-slo-sle-policy.
+     */
+    container connection-group-monitoring {
+      config false;
+      description
+        "SLO status per connection group.";
+      uses connectivity-construct-monitoring-metrics;
+    }
+  }
+
+  //connection-group
+
+  grouping slice-service-template {
+    description
+      "Grouping for slice service templates.";
+    container slo-sle-templates {
+      description
+        "Contains a set of slice service templates.";
+      list slo-sle-template {
+        key "id";
+        leaf id {
+          type string;
+          description
+            "Identification of the Service Level Objective (SLO)
+             and Service Level Expectation (SLE) template to be used.
+             Local administration meaning.";
+        }
+        leaf template-description {
+          type string;
+          description
+            "Description of the SLO and SLE policy template.";
+        }
+        description
+          "List for SLO and SLE template identifiers.";
+      }
+    }
+  }
+
+  /* Configuration data nodes */
+
+  grouping service-slo-sle-policy {
+    description
+      "Slice service policy grouping.";
+    choice slo-sle-policy {
+      description
+        "Choice for SLO and SLE policy template.
+         Can be standard template or customized template.";
+      case standard {
+        description
+          "Standard SLO template.";
+        leaf slo-sle-template {
+          type leafref {
+            path "/ietf-nss:network-slice-services"
+               + "/ietf-nss:slo-sle-templates"
+               + "/ietf-nss:slo-sle-template/id";
+          }
+          description
+            "Standard SLO and SLE template to be used.";
+        }
+      }
+      case custom {
+        description
+          "Customized SLO and SLE template.";
+        container service-slo-sle-policy {
+          description
+            "Contains the SLO and SLE policy.";
+          leaf policy-description {
+            type string;
+            description
+              "Description of the SLO and SLE policy.";
+          }
+          uses service-metric-bounds;
+          uses service-sles;
+        }
+      }
+    }
+  }
+
+  container network-slice-services {
+    description
+      "Containes a list of IETF network slice services";
+    uses slice-service-template;
+    list slice-service {
+      key "service-id";
+      description
+        "A slice service is identified by a service-id.";
+      leaf service-id {
+        type string;
+        description
+          "A unique slice service identifier.";
+      }
+      leaf service-description {
+        type string;
+        description
+          "Textual description of the slice service.";
+      }
+      container service-tags {
+        description
+          "Container for the list of service tags.";
+        list tag-type {
+          key "tag-type";
+          description
+            "The service tag list.";
+          leaf tag-type {
+            type identityref {
+              base service-tag-type;
+            }
+            description
+              "Slice service tag type.";
+          }
+          leaf-list value {
+            type string;
+            description
+              "The tag value";
+          }
+        }
+        list tag-opaque {
+          key "tag-name";
+          description
+            "The service tag opaquelist.";
+          leaf tag-name {
+            type string;
+            description
+              "The opaque tag name";
+          }
+          leaf-list value {
+            type string;
+            description
+              "The opaque tag value";
+          }
+        }
+      }
+      uses service-slo-sle-policy;
+      uses vpn-common:service-status;
+      container sdps {
+        description
+          "Slice service SDPs.";
+        list sdp {
+          key "sdp-id";
+          uses sdp;
+          description
+            "List of SDPs in this slice service.";
+        }
+      }
+      container connection-groups {
+        description
+          "Contains connections group.";
+        list connection-group {
+          key "connection-group-id";
+          description
+            "List of connection groups.";
+          uses connection-group;
+        }
+      }
+    }
+    //ietf-network-slice-service list
+  }
+}
diff --git a/src/slice/requirements.in b/src/slice/requirements.in
index cbf07ecb7c314acfe9fa03410ed3436ab1298581..0a2c39895c9a1f642470bcc26cb67bd8dfb169b1 100644
--- a/src/slice/requirements.in
+++ b/src/slice/requirements.in
@@ -1 +1 @@
-deepdiff==5.8.*
+#deepdiff==5.8.*
diff --git a/src/slice/service/SliceServiceServicerImpl.py b/src/slice/service/SliceServiceServicerImpl.py
index aaa076b7b0a347df36471558b57310465463b4cf..30c2310b0136674ce3fa23c26b3c0812bbf3448a 100644
--- a/src/slice/service/SliceServiceServicerImpl.py
+++ b/src/slice/service/SliceServiceServicerImpl.py
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import grpc, logging, deepdiff
+import grpc, logging #, deepdiff
 from common.proto.context_pb2 import (
     Empty, Service, ServiceId, ServiceStatusEnum, ServiceTypeEnum, Slice, SliceId, SliceStatusEnum)
 from common.proto.slice_pb2_grpc import SliceServiceServicer
@@ -52,11 +52,11 @@ class SliceServiceServicerImpl(SliceServiceServicer):
         slice_request = Slice()
         slice_request.CopyFrom(_slice)
 
-        LOGGER.info('json_current_slice = {:s}'.format(str(json_current_slice)))
-        json_updated_slice = grpc_message_to_json(request)
-        LOGGER.info('json_updated_slice = {:s}'.format(str(json_updated_slice)))
-        changes = deepdiff.DeepDiff(json_current_slice, json_updated_slice)
-        LOGGER.info('changes = {:s}'.format(str(changes)))
+        #LOGGER.info('json_current_slice = {:s}'.format(str(json_current_slice)))
+        #json_updated_slice = grpc_message_to_json(request)
+        #LOGGER.info('json_updated_slice = {:s}'.format(str(json_updated_slice)))
+        #changes = deepdiff.DeepDiff(json_current_slice, json_updated_slice)
+        #LOGGER.info('changes = {:s}'.format(str(changes)))
 
         domains = set()
         for slice_endpoint_id in request.slice_endpoint_ids:
@@ -146,7 +146,7 @@ class SliceServiceServicerImpl(SliceServiceServicer):
     def DeleteSlice(self, request : SliceId, context : grpc.ServicerContext) -> Empty:
         context_client = ContextClient()
         try:
-            _slice = context_client.GetSlice(request.slice_id)
+            _slice = context_client.GetSlice(request)
         except:
             return Empty()
 
@@ -172,10 +172,13 @@ class SliceServiceServicerImpl(SliceServiceServicer):
 
             service_client = ServiceClient()
             for service_id in _slice.slice_service_ids:
-                try:
-                    service_client.DeleteService(service_id)
-                except:
-                    pass
+                current_slice = Slice()
+                current_slice.slice_id.CopyFrom(_slice.slice_id)
+                slice_service_id = current_slice.slice_service_ids.add()
+                slice_service_id.CopyFrom(service_id)
+                context_client.UnsetSlice(current_slice)
+
+                service_client.DeleteService(service_id)
 
-        context_client.RemoveSlice(request.slice_id)
+        context_client.RemoveSlice(request)
         return Empty()
diff --git a/src/slice/service/__main__.py b/src/slice/service/__main__.py
index f77d86bffe9b722f414be4f85adcaf0ef2cc4a8e..a59c54b4b1b56865871d331409c1a7f60629aec6 100644
--- a/src/slice/service/__main__.py
+++ b/src/slice/service/__main__.py
@@ -29,7 +29,7 @@ def main():
     global LOGGER # pylint: disable=global-statement
 
     log_level = get_log_level()
-    logging.basicConfig(level=log_level)
+    logging.basicConfig(level=log_level, format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s")
     LOGGER = logging.getLogger(__name__)
 
     wait_for_environment_variables([