diff --git a/models/tapi/src/main/yang/tapi-common@2018-03-07.yang b/models/tapi/src/main/yang/tapi-common@2018-03-07.yang
new file mode 100644
index 0000000..05c668b
--- /dev/null
+++ b/models/tapi/src/main/yang/tapi-common@2018-03-07.yang
@@ -0,0 +1,570 @@
+module tapi-common {
+    namespace "urn:onf:otcc:yang:tapi-common";
+    prefix tapi-common;
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Common Model definitions.
+        Source: TapiCommon.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        ";
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool version .
+        <https://wiki.opennetworking.org/display/OIMT/IISOMI>
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/change-log.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/develop/UML>";
+    }
+
+    /*************************
+    * definitions of refrences
+    *************************/
+    grouping service-interface-point-ref {
+        leaf service-interface-point-id {
+            type leafref {
+                path '/tapi-common:context/tapi-common:service-interface-point/tapi-common:uuid';
+            }
+        }
+    }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping admin-state-pac {
+            leaf administrative-state {
+                type administrative-state;
+                description "none";
+            }
+            leaf operational-state {
+                type operational-state;
+                config false;
+                description "none";
+            }
+            leaf lifecycle-state {
+                type lifecycle-state;
+                config false;
+                description "none";
+            }
+            description "Provides state attributes that are applicable to an entity that can be administered. Such an entity also has operational and lifecycle aspects.";
+        }
+        grouping global-class {
+            leaf uuid {
+                type uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable. An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses name-and-value;
+                description "List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity.";
+            }
+            description "The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique. ";
+        }
+        grouping lifecycle-state-pac {
+            leaf lifecycle-state {
+                type lifecycle-state;
+                config false;
+                description "none";
+            }
+            description "Provides state attributes for an entity that has lifeccycle aspects only.";
+        }
+        grouping local-class {
+            leaf local-id {
+                type string;
+                description "none";
+            }
+            list name {
+                key 'value-name';
+                uses name-and-value;
+                description "List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity.";
+            }
+            description "The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique. ";
+        }
+        grouping operational-state-pac {
+            leaf operational-state {
+                type operational-state;
+                config false;
+                description "none";
+            }
+            leaf lifecycle-state {
+                type lifecycle-state;
+                config false;
+                description "none";
+            }
+            description "Provides state attributes that are applicable to an entity that reflects operational aspects. Such an entity is expected to also have lifecycle aspects.";
+        }
+        container context {
+            uses tapi-context;
+            presence "Root container for all TAPI interaction";
+            description "none";
+        }
+        grouping tapi-context {
+            list service-interface-point {
+                key 'uuid';
+                min-elements 2;
+                uses service-interface-point;
+                description "none";
+            }
+            uses global-class;
+            description "The Network Control Domain (NCD) object class represents the scope of control that a particular SDN controller has with respect to a particular network, (i.e., encompassing a designated set of interconnected (virtual) network elements).";
+        }
+        grouping resource-spec {
+            uses global-class;
+            description "none";
+        }
+        grouping service-spec {
+            uses global-class;
+            description "none";
+        }
+        grouping service-interface-point {
+            leaf-list layer-protocol-name {
+                type layer-protocol-name;
+                config false;
+                min-elements 1;
+                description "Usage of layerProtocolName [>1]  in the ServiceInterfacePoint should be considered experimental";
+            }
+            uses resource-spec;
+            uses admin-state-pac;
+            uses capacity-pac;
+            description "The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. 
+                The structure of LTP supports all transport protocols including circuit and packet forms.";
+        }
+        grouping capacity-pac {
+            container total-potential-capacity {
+                config false;
+                uses capacity;
+                description "An optimistic view of the capacity of the TopologicalEntity assuming that any shared capacity is available to be taken.";
+            }
+            container available-capacity {
+                config false;
+                uses capacity;
+                description "Capacity available to be assigned.";
+            }
+            description "The TopologicalEntity derives capacity from the underlying realization. 
+                A TopologicalEntity may be an abstraction and virtualization of a subset of the underlying capability offered in a view or may be directly reflecting the underlying realization.
+                A TopologicalEntity may be directly used in the view or may be assigned to another view for use.
+                The clients supported by a multi-layer TopologicalEntity may interact such that the resources used by one client may impact those available to another. This is derived from the LTP spec details.
+                Represents the capacity available to user (client) along with client interaction and usage. 
+                A TopologicalEntity may reflect one or more client protocols and one or more members for each profile.";
+        }
+        grouping termination-pac {
+            leaf termination-direction {
+                type termination-direction;
+                config false;
+                description "The overall directionality of the LP. 
+                    - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flowss.
+                    - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows
+                    - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows";
+            }
+            leaf termination-state {
+                type termination-state;
+                config false;
+                description "Indicates whether the layer is terminated and if so how.";
+            }
+            description "Each transport layer is represented by a LayerProtocol (LP) instance. The LayerProtocol instances it can be used for controlling termination and monitoring functionality. 
+                It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection. 
+                Where the client – server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where the is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP. ";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        typedef administrative-state {
+            type enumeration {
+                enum LOCKED {
+                    description "Users are administratively prohibited from making use of the resource.";
+                }
+                enum UNLOCKED {
+                    description "Users are allowed to use the resource";
+                }
+            }
+            description "The possible values of the administrativeState.";
+        }
+        typedef date-and-time {
+            type string;
+            description "This primitive type defines the date and time according to the following structure:
+                yyyyMMddhhmmss.s[Z|{+|-}HHMm] where:
+                yyyy    0000..9999    year
+                MM    01..12            month
+                dd        01..31            day
+                hh        00..23            hour
+                mm    00..59            minute
+                ss        00..59            second
+                s        .0...9            tenth of second (set to .0 if EMS or NE cannot support this granularity)
+                Z        Z                indicates UTC (rather than local time)
+                {+|-}    + or -            delta from UTC
+                HH        00..23            time zone difference in hours
+                Mm    00..59            time zone difference in minutes.";
+        }
+        typedef directive-value {
+            type enumeration {
+                enum MINIMIZE {
+                    description "none";
+                }
+                enum MAXIMIZE {
+                    description "none";
+                }
+                enum ALLOW {
+                    description "none";
+                }
+                enum DISALLOW {
+                    description "none";
+                }
+                enum DONT_CARE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef forwarding-direction {
+            type enumeration {
+                enum BIDIRECTIONAL {
+                    description "The Fowarding entity supports both BIDIRECTIONAL flows at all Ports (i.e. all Ports have both an INPUT flow and an OUTPUT flow defined)";
+                }
+                enum UNIDIRECTIONAL {
+                    description "The Forwarding entity has Ports that are either INPUT or OUTPUT. It has no BIDIRECTIONAL Ports.";
+                }
+                enum UNDEFINED_OR_UNKNOWN {
+                    description "Not a normal state. The system is unable to determine the correct value.";
+                }
+            }
+            description "The directionality of a Forwarding entity.";
+        }
+        typedef layer-protocol-name {
+            type enumeration {
+                enum OTSiA {
+                    description "Models the OTSiA layer as per ITU-T G.872 (2017) version 4";
+                }
+                enum OCH {
+                    description "Models the legacy OCH layer as per ITU-T G.872";
+                }
+                enum OTU {
+                    description "Models the OTU layer as per ITU-T G.872";
+                }
+                enum ODU {
+                    description "Models the ODU layer as per ITU-T G.872";
+                }
+                enum ETH {
+                    description "Models the ETH layer as per ITU-T G.8010";
+                }
+                enum ETY {
+                    description "Models the ETY layer as per ITU-T G.8010";
+                }
+                enum DSR {
+                    description "Models a Digital Signal of an unspecified rate. This value can be used when the intent is to respresent an generic digital layer signal without making any statement on its format or overhead (processing) capabilities.";
+                }
+            }
+            description "Provides a controlled list of layer protocol names and indicates the naming authority.
+                Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference.
+                Layer protocol names include:
+                -    Layer 1 (L1): OTU, ODU
+                -    Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)
+                ";
+        }
+        typedef lifecycle-state {
+            type enumeration {
+                enum PLANNED {
+                    description "The resource is planned but is not present in the network.";
+                }
+                enum POTENTIAL_AVAILABLE {
+                    description "The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both.
+                        o    When a potential resource is configured and allocated to a client it is moved to the “installed” state for that client.
+                        o    If the potential resource has been consumed (e.g. allocated to another client) it is moved to the “planned” state for all other clients.";
+                }
+                enum POTENTIAL_BUSY {
+                    description "The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both.
+                        o    When a potential resource is configured and allocated to a client it is moved to the “installed” state for that client.
+                        o    If the potential resource has been consumed (e.g. allocated to another client) it is moved to the “planned” state for all other clients.";
+                }
+                enum INSTALLED {
+                    description "The resource is present in the network and is capable of providing the service expected.";
+                }
+                enum PENDING_REMOVAL {
+                    description "The resource has been marked for removal";
+                }
+            }
+            description "The possible values of the lifecycleState.";
+        }
+        grouping name-and-value {
+            leaf value-name {
+                type string;
+                description "The name of the value. The value need not have a name.";
+            }
+            leaf value {
+                type string;
+                description "The value";
+            }
+            description "A scoped name-value pair";
+        }
+        typedef operational-state {
+            type enumeration {
+                enum DISABLED {
+                    description "The resource is unable to meet the SLA of the user of the resource. If no (explicit) SLA is defined the resource is disabled if it is totally inoperable and unable to provide service to the user.";
+                }
+                enum ENABLED {
+                    description "The resource is partially or fully operable and available for use";
+                }
+            }
+            description "The possible values of the operationalState.";
+        }
+        typedef port-direction {
+            type enumeration {
+                enum BIDIRECTIONAL {
+                    description "The Port has both an INPUT flow and an OUTPUT flow defined.";
+                }
+                enum INPUT {
+                    description "The Port only has definition for a flow into the Forwarding entity (i.e. an ingress flow).";
+                }
+                enum OUTPUT {
+                    description "The Port only has definition for a flow out of the Forwarding entity (i.e. an egress flow).";
+                }
+                enum UNIDENTIFIED_OR_UNKNOWN {
+                    description "Not a normal state. The system is unable to determine the correct value.";
+                }
+            }
+            description "The orientation of flow at the Port of a Forwarding entity";
+        }
+        typedef port-role {
+            type enumeration {
+                enum SYMMETRIC {
+                    description "none";
+                }
+                enum ROOT {
+                    description "none";
+                }
+                enum LEAF {
+                    description "none";
+                }
+                enum TRUNK {
+                    description "none";
+                }
+                enum UNKNOWN {
+                    description "none";
+                }
+            }
+            description "The role of an end in the context of the function of the forwarding entity that it bounds";
+        }
+        typedef termination-direction {
+            type enumeration {
+                enum BIDIRECTIONAL {
+                    description "A Termination with both SINK and SOURCE flows.";
+                }
+                enum SINK {
+                    description "The flow is up the layer stack from the server side to the client side. 
+                        Considering an example of a Termination function within the termination entity, a SINK flow:
+                        - will arrive at at the base of the termination function (the server side) where it is essentially at an INPUT to the termination component
+                        - then will be decoded and deconstructed 
+                        - then relevant parts of the flow will be sent out of the termination function (the client side) where it is essentially at an OUTPUT from the termination component
+                        A SINK termination is one that only supports a SINK flow.
+                        A SINK termiation can be bound to an OUTPUT Port of a Forwarding entity";
+                }
+                enum SOURCE {
+                    description "The flow is down the layer stack from the server side to the client side. 
+                        Considering an example of a Termination function within the termination entity, a SOURCE flow:
+                        - will arrive at at the top of the termination function (the client side) where it is essentially at an INPUT to the termination component
+                        - then will be assembled with various overheads etc and will be coded 
+                        - then coded form of the assembly of flow will be sent out of the termination function (the server side) where it is essentially at an OUTPUT from the termination component
+                        A SOURCE termination is one that only supports a SOURCE flow.
+                        A SOURCE termiation can be bound to an INPUT Port of a Forwarding entity";
+                }
+                enum UNDEFINED_OR_UNKNOWN {
+                    description "Not a normal state. The system is unable to determine the correct value.";
+                }
+            }
+            description "The directionality of a termination entity";
+        }
+        typedef termination-state {
+            type enumeration {
+                enum LP_CAN_NEVER_TERMINATE {
+                    description "A non-flexible case that can never be terminated.";
+                }
+                enum LT_NOT_TERMINATED {
+                    description "A flexible termination that can terminate but is currently not terminated.";
+                }
+                enum TERMINATED_SERVER_TO_CLIENT_FLOW {
+                    description "A flexible termination that is currently terminated for server to client flow only.";
+                }
+                enum TERMINATED_CLIENT_TO_SERVER_FLOW {
+                    description "A flexible termination that is currently terminated for client to server flow only.";
+                }
+                enum TERMINATED_BIDIRECTIONAL {
+                    description "A flexible termination that is currently terminated in both directions of flow.";
+                }
+                enum LT_PERMENANTLY_TERMINATED {
+                    description "A non-flexible termination that is always terminated (in both directions of flow for a bidirectional case and in the one direction of flow for both unidirectional cases).";
+                }
+                enum TERMINATION_STATE_UNKNOWN {
+                    description "There TerminationState cannot be determined.";
+                }
+            }
+            description "Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal.
+                Indicates to what degree the LayerTermination is terminated.";
+        }
+        typedef uuid {
+            type string;
+            description "The univeral ID value where the mechanism for generation is defned by some authority not directly referenced in the structure.
+                UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+        }
+        grouping capacity {
+            container total-size {
+                uses capacity-value;
+                description "Total capacity of the TopologicalEntity in MB/s. In case of bandwidthProfile, this is expected to same as the committedInformationRate.";
+            }
+            container bandwidth-profile {
+                uses bandwidth-profile;
+                description "none";
+            }
+            description "Information on capacity of a particular TopologicalEntity.";
+        }
+        grouping bandwidth-profile {
+            leaf bw-profile-type {
+                type bandwidth-profile-type;
+                description "none";
+            }
+            container committed-information-rate {
+                uses capacity-value;
+                description "none";
+            }
+            container committed-burst-size {
+                uses capacity-value;
+                description "none";
+            }
+            container peak-information-rate {
+                uses capacity-value;
+                description "none";
+            }
+            container peak-burst-size {
+                uses capacity-value;
+                description "none";
+            }
+            leaf color-aware {
+                type boolean;
+                description "none";
+            }
+            leaf coupling-flag {
+                type boolean;
+                description "none";
+            }
+            description "none";
+        }
+        grouping capacity-value {
+            leaf value {
+                type uint64;
+                description "none";
+            }
+            leaf unit {
+                type capacity-unit;
+                description "none";
+            }
+            description "The Capacity (Bandwidth) values that are applicable for digital layers.";
+        }
+        typedef capacity-unit {
+            type enumeration {
+                enum TB {
+                    description "Indicates that the integer CapacityValue is in TeraBytes";
+                }
+                enum TBPS {
+                    description "Indicates that the integer CapacityValue is in Terabit-per-second";
+                }
+                enum GB {
+                    description "Indicates that the integer CapacityValue is in GigaBytes";
+                }
+                enum GBPS {
+                    description "Indicates that the integer CapacityValue is in Gigabit-per-second";
+                }
+                enum MB {
+                    description "Indicates that the integer CapacityValue is in MegaBytes";
+                }
+                enum MBPS {
+                    description "Indicates that the integer CapacityValue is in Megabit-per-second";
+                }
+                enum KB {
+                    description "Indicates that the integer CapacityValue is in KiloBytes";
+                }
+                enum KBPS {
+                    description "Indicates that the integer CapacityValue is in Kilobit-per-second";
+                }
+            }
+            description "none";
+        }
+        typedef bandwidth-profile-type {
+            type enumeration {
+                enum MEF_10.x {
+                    description "none";
+                }
+                enum RFC_2697 {
+                    description "none";
+                }
+                enum RFC_2698 {
+                    description "none";
+                }
+                enum RFC_4115 {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping time-range {
+            leaf end-time {
+                type date-and-time;
+                description "none";
+            }
+            leaf start-time {
+                type date-and-time;
+                description "none";
+            }
+            description "none";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/ 
+        rpc get-service-interface-point-details {
+            description "none";
+            input {
+                leaf sip-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container sip {
+                    uses service-interface-point;
+                    description "none";
+                }
+            }
+        }
+        rpc get-service-interface-point-list {
+            description "none";
+            output {
+                list sip {
+                    uses service-interface-point;
+                    description "none";
+                }
+            }
+        }
+        rpc update-service-interface-point {
+            description "none";
+            input {
+                leaf sip-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf state {
+                    type administrative-state;
+                    description "none";
+                }
+            }
+        }
+
+}
