diff --git a/.gitignore b/.gitignore
index 6c320fe..17e4d81 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,3 +43,20 @@
 *.log
 
 .cache
+
+models/plugins/yang/ietf-l2-topology.yang
+models/plugins/yang/ietf-network-topology.yang
+models/plugins/yang/ietf-network.yang
+models/plugins/yang/mano-rift-groupings.yang
+models/plugins/yang/mano-types.yang
+models/plugins/yang/nsd-base.yang
+models/plugins/yang/nsd.yang
+models/plugins/yang/nsr.yang
+models/plugins/yang/odl-network-topology.yang
+models/plugins/yang/project-nsd.yang
+models/plugins/yang/project-vnfd.yang
+models/plugins/yang/vlr.yang
+models/plugins/yang/vnfd-base.yang
+models/plugins/yang/vnfd.yang
+models/plugins/yang/vnffgd.yang
+models/plugins/yang/vnfr.yang
diff --git a/BUILD.sh b/BUILD.sh
index 7ccdeba..a2cbff2 100755
--- a/BUILD.sh
+++ b/BUILD.sh
@@ -112,7 +112,36 @@
     sudo mkdir -p /usr/rift/etc/default
     sudo chmod 777 /usr/rift/etc/default
     echo LAUNCHPAD_OPTIONS="--use-xml-mode" >> /usr/rift/etc/default/launchpad
-    sudo systemctl daemon-reload
+    sudo systemctl daemon-reload || true
+
+    IM_FILES="
+ietf-l2-topology.yang
+ietf-network-topology.yang
+ietf-network.yang
+mano-rift-groupings.yang
+mano-types.yang
+nsd-base.yang
+nsd.yang
+nsr.yang
+odl-network-topology.yang
+project-nsd.yang
+project-vnfd.yang
+vlr.yang
+vnfd-base.yang
+vnfd.yang
+vnffgd.yang
+vnfr.yang
+"
+    echo "installing IM files"
+    if [ ! -d ../IM ]; then
+        echo cloning IM
+        # note that this cannot be inside the SO or else CMAKE will find it 
+        git clone $(dirname $(git remote get-url origin))/IM.git ../IM
+    fi
+    for file in $IM_FILES; do 
+        rm -f models/plugins/yang/$file
+        cp ../IM/models/yang/$file models/plugins/yang
+    done
 
     # Build  and install module
     make -j16 
diff --git a/devops-stages/stage-build.sh b/devops-stages/stage-build.sh
index 4354ee1..876b299 100755
--- a/devops-stages/stage-build.sh
+++ b/devops-stages/stage-build.sh
@@ -1,4 +1,31 @@
 #!/bin/sh
 rm -rf .build
+IM_FILES="
+ietf-l2-topology.yang
+ietf-network-topology.yang
+ietf-network.yang
+mano-rift-groupings.yang
+mano-types.yang
+nsd-base.yang
+nsd.yang
+nsr.yang
+odl-network-topology.yang
+project-nsd.yang
+project-vnfd.yang
+vlr.yang
+vnfd-base.yang
+vnfd.yang
+vnffgd.yang
+vnfr.yang
+"
+echo "installing IM files"
+# note that this cannot be inside the SO or else CMAKE will find it 
+tmp=$(mktemp -d)
+git clone $(dirname $(git remote get-url origin))/IM.git $tmp
+for file in $IM_FILES; do 
+    rm -f models/plugins/yang/$file
+    cp $tmp/models/yang/$file models/plugins/yang
+done
+rm -rf $tmp
 make NOT_DEVELOPER_BUILD=TRUE -j16 package
 
diff --git a/models/plugins/yang/ietf-l2-topology.yang b/models/plugins/yang/ietf-l2-topology.yang
deleted file mode 100644
index 9f572cb..0000000
--- a/models/plugins/yang/ietf-l2-topology.yang
+++ /dev/null
@@ -1,578 +0,0 @@
-
-/*
- * NO RW COPYRIGHT
- *
- */
-
-module ietf-l2-topology {
-    yang-version 1;
-    namespace "urn:ietf:params:xml:ns:yang:ietf-l2-topology";
-    prefix "l2t";
-
-    import ietf-network {
-      prefix "nw";
-    }
-
-    import ietf-network-topology {
-      prefix "nt";
-    }
-
-    import ietf-inet-types {
-      prefix "inet";
-    }
-
-    import ietf-yang-types {
-      prefix "yang";
-    }
-
-    organization "TBD";
-    contact "I-D Editor: jie.dong@huawei.com";
-
-    description
-      "This module defines a basic model for
-       the layer-2 topology of a network";
-
-    revision "2015-06-23" {
-      description "Initial revision";
-      reference "draft-ietf-i2rs-l2-network-topology-01";
-    }
-
-   /*
-    * Typedefs
-    */
-
-    typedef vlan {
-      type uint16 {
-        range "0..4095";
-      }
-      description "VLAN ID";
-    }
-
-    typedef trill-nickname {
-      type uint16;
-      description "TRILL Nickname";
-    }
-
-    typedef flag-type {
-      type identityref {
-        base "flag-identity";
-      }
-      description "Base type for flags";
-    }
-
-    typedef l2-network-event-type {
-      type enumeration {
-        enum "add" {
-          value 0;
-          description "An L2 node or link or termination-point
-          has been added";
-        }
-        enum "remove" {
-          value 1;
-          description "An L2 node or link or termination-point
-          has been removed";
-        }
-        enum "update" {
-          value 2;
-          description "An L2 node or link or termination-point
-          has been updated";
-        }
-      }
-      description "l2 network event type for notifications";
-    } // l2-topology-event-type
-
-
-    /*
-    * Features
-    */
-
-    feature VLAN {
-      description
-        "Indicates that the system supports the
-         vlan functions";
-    }
-
-    feature QinQ {
-      description
-        "Indicates that the system supports the
-         qinq functions";
-    }
-
-    feature PBB {
-      description
-       "Indicates that the device supports the
-        provider-backbone-bridging functions";
-    }
-
-    feature VPLS {
-      description
-        "Indicates that the device supports the
-         VPLS functions";
-      reference "RFC 4761, RFC 4762";
-    }
-
-    feature TRILL {
-      description
-        "Indicates that the device supports the
-         TRILL functions";
-      reference "RFC 6325";
-    }
-
-    feature VXLAN {
-      description
-        "Indicates that the device supports the
-         VXLAN functions";
-      reference "RFC 7348";
-    }
-
-   /*
-    * Identities
-    */
-    identity flag-identity {
-      description "Base type for flags";
-    }
-
-    identity encapsulation-type {
-      description
-        "Base identity from which specific encapsulation
-         types are derived.";
-    }
-
-    identity eth-encapsulation-type {
-      base encapsulation-type;
-      description
-        "Base identity from which specific ethernet
-         encapsulation types are derived.";
-
-    }
-
-    identity ethernet {
-      base eth-encapsulation-type;
-      description
-        "native ethernet encapsulation";
-    }
-
-    identity vlan {
-      base eth-encapsulation-type;
-      description
-        "vlan encapsulation";
-    }
-
-    identity qinq {
-      base eth-encapsulation-type;
-      description
-        "qinq encapsulation";
-    }
-
-    identity pbb {
-      base eth-encapsulation-type;
-      description
-        "pbb encapsulation";
-    }
-
-    identity trill {
-      base eth-encapsulation-type;
-      description
-        "trill encapsulation";
-    }
-
-    identity vpls {
-      base eth-encapsulation-type;
-      description
-        "vpls encapsulation";
-    }
-
-    identity vxlan {
-      base eth-encapsulation-type;
-      description
-        "vxlan encapsulation";
-    }
-
-    identity frame-relay {
-      base encapsulation-type;
-      description
-        "Frame Relay encapsulation";
-    }
-
-    identity ppp {
-      base encapsulation-type;
-      description
-        "PPP encapsulation";
-    }
-
-    identity hdlc {
-      base encapsulation-type;
-      description
-        "HDLC encapsulation";
-    }
-
-    identity atm {
-      base encapsulation-type;
-      description
-        "Base identity from which specific ATM
-         encapsulation types are derived.";
-
-    }
-
-    identity pwe3 {
-      base encapsulation-type;
-      description
-        "Base identity from which specific pw
-         encapsulation types are derived.";
-    }
-
-
-   /*
-    * Groupings
-    */
-
-
-    grouping l2-network-type {
-      description "Identify the topology type to be L2.";
-      container l2-network {
-        presence "indicates L2 Network";
-        description
-        "The presence of the container node indicates
-         L2 Topology";
-      }
-    }
-
-    grouping l2-network-attributes {
-      description "L2 Topology scope attributes";
-      container l2-network-attributes {
-        description "Containing L2 network attributes";
-        leaf name {
-          type string;
-          description "Name of the L2 network";
-        }
-
-        leaf-list flag {
-          type flag-type;
-          description "L2 network flags";
-        }
-      }
-    }
-
-    grouping l2-node-attributes {
-      description "L2 node attributes";
-      container l2-node-attributes {
-        description "Containing L2 node attributes";
-        leaf name {
-          type string;
-          description "Node name";
-        }
-        leaf description {
-          type string;
-          description "Node description";
-        }
-        leaf-list management-address {
-          type inet:ip-address;
-          description "System management address";
-        }
-        leaf management-vid {
-          if-feature VLAN;
-          type vlan;
-          description "System management VID";
-        }
-        leaf-list nick-name {
-          if-feature TRILL;
-          type trill-nickname;
-          description "Nickname of the RBridge";
-        }
-        leaf-list flag {
-          type flag-type;
-          description "Node operational flags";
-        }
-      }
-    }  // grouping l2-node-attributes
-
-
-    grouping l2-link-attributes {
-      description "L2 link attributes";
-      container l2-link-attributes {
-        description "Containing L2 link attributes";
-        leaf name {
-          type string;
-          description "Link name";
-        }
-        leaf-list flag {
-          type flag-type;
-          description "Link flags";
-        }
-        leaf rate {
-          type decimal64 {
-            fraction-digits 2;
-          }
-          description "Link rate";
-
-        }
-        leaf delay {
-          type uint32;
-          description "Link delay in microseconds";
-        }
-        leaf-list srlg {
-          type uint32;
-          description
-            "List of Shared Risk Link Groups
-             this link belongs to.";
-        }
-      }
-    } // grouping l2-link-attributes
-
-    grouping l2-termination-point-attributes {
-      description "L2 termination point attributes";
-      container l2-termination-point-attributes {
-        description "Containing L2 TP attributes";
-        leaf description {
-          type string;
-          description "Port description";
-        }
-
-        leaf maximum-frame-size {
-          type uint32;
-          description "Maximum frame size";
-        }
-
-        choice l2-termination-point-type {
-          description
-            "Indicates termination-point type
-             specific attributes";
-          case ethernet {
-            leaf mac-address {
-              type yang:mac-address;
-              description "Interface MAC address";
-            }
-
-            leaf eth-encapsulation {
-              type identityref {
-                base eth-encapsulation-type;
-              }
-              description
-                "Encapsulation type of this
-                 ternimation point.";
-            }
-
-            leaf port-vlan-id {
-              if-feature VLAN;
-              type vlan;
-              description "Port VLAN ID";
-            }
-
-            list vlan-id-name {
-              if-feature VLAN;
-              key "vlan-id";
-              description "Interface configured VLANs";
-              leaf vlan-id {
-                type vlan;
-                description "VLAN ID";
-              }
-              leaf vlan-name {
-                type string;
-                description "VLAN Name";
-              }
-            }
-          } //case ethernet
-
-          case legacy {
-            leaf encapsulation {
-              type identityref {
-                base encapsulation-type;
-              }
-              description
-                "Encapsulation type of this termination point.";
-            }
-          } //case legacy
-
-        } //choice termination-point-type
-
-        leaf tp-state {
-          type enumeration {
-            enum in-use {
-              value 0;
-              description
-                "the termination point is in forwarding state";
-            }
-            enum blocking {
-              value 1;
-              description
-                "the termination point is in blocking state";
-            }
-            enum down {
-              value 2;
-              description
-                "the termination point is in down state";
-            }
-            enum others {
-              value 3;
-              description
-                "the termination point is in other state";
-            }
-          }
-          config false;
-          description "State of the termination point";
-        }
-      }
-    } // grouping l2-termination-point-attributes
-
-/*** grouping of network/node/link/tp leaf-refs ***/
-
-  grouping network-ref {
-    description
-      "Grouping for an absolute reference to a network topology
-      instance.";
-    leaf network-ref {
-      type leafref {
-        path "/nw:network/nw:network-id";
-      }
-      description
-        "An absolute reference to a network topology instance.";
-    }
-  }
-
-  grouping link-ref {
-    description
-      "Grouping for an absolute reference to a link instance.";
-      uses network-ref;
-      leaf link-ref {
-        type leafref {
-          path "/nw:network"
-            +"[nw:network-id = current()/../network-ref]"
-            +"/nt:link/nt:link-id";
-        }
-      description
-        "An absolute reference to a link instance.";
-    }
-  }
-
-  grouping node-ref {
-    description
-      "Grouping for an absolute reference to a node instance.";
-    uses network-ref;
-    leaf node-ref {
-      type leafref {
-        path "/nw:network"
-          +"[nw:network-id = current()/../network-ref]"
-          +"/nw:node/nw:node-id";
-      }
-      description
-        "An absolute reference to a node instance.";
-    }
-  }
-
-  grouping tp-ref {
-    description
-      "Grouping for an absolute reference to a termination point.";
-    uses node-ref;
-    leaf tp-ref {
-      type leafref {
-        path "/nw:network"
-          +"[nw:network-id = current()/../network-ref]"
-          +"/nw:node[nw:node-id = current()/../node-ref]"
-          +"/nt:termination-point/nt:tp-id";
-      }
-      description
-        "Grouping for an absolute reference to a TP.";
-    }
-  }
-
-
-   /*
-    * Data nodes
-    */
-    augment "/nw:network/nw:network-types" {
-      description
-        "Introduce new network type for L2 topology";
-      uses l2-network-type;
-    }
-
-    augment "/nw:network" {
-      /* RIFT-Change: when not to be used yet
-      when "nw:network-types/l2-network" {
-        description
-          "Augmentation parameters apply only for networks
-           with L2 topology";
-      }
-      */
-      description
-        "Configuration parameters for the L2 network
-         as a whole";
-      uses l2-network-attributes;
-    }
-
-    augment "/nw:network/nw:node" {
-      /* RIFT-Change: when not to be used yet
-      when "../nw:network-types/l2-network" {
-        description
-          "Augmentation parameters apply only for networks
-           with L2 topology";
-      }
-      */
-      description
-        "Configuration parameters for L2 at the node
-         level";
-      uses l2-node-attributes;
-    }
-
-    augment "/nw:network/nt:link" {
-      /* RIFT-Change: when not to be used yet
-      when "/nw:network/nw:network-types/l2-network" {
-        description
-          "Augmentation parameters apply only for networks
-           with L2 topology";
-      }
-      */
-      description "Augment L2 topology link information";
-      uses l2-link-attributes;
-    }
-
-    augment "/nw:network/nw:node/nt:termination-point" {
-      /* RIFT-Change: when not to be used yet
-      when "/nw:network/nw:network-types/l2-network" {
-        description
-          "Augmentation parameters apply only for networks
-           with L2 topology";
-      }
-      */
-      description
-        "Augment L2 topology termination point configuration";
-      uses l2-termination-point-attributes;
-    }
-
-   /*
-    * Notifications
-    */
-
-    notification l2-node-event {
-      description "Notification event for L2 node";
-      leaf event-type {
-        type l2-network-event-type;
-        description "Event type";
-      }
-      uses node-ref;
-      uses l2-network-type;
-      uses l2-node-attributes;
-    }
-
-    notification l2-link-event {
-      description "Notification event for L2 link";
-      leaf event-type {
-        type l2-network-event-type;
-        description "Event type";
-      }
-      uses link-ref;
-      uses l2-network-type;
-      uses l2-link-attributes;
-    }
-
-    notification l2-termination-point-event {
-      description "Notification event for L2 termination point";
-      leaf event-type {
-        type l2-network-event-type;
-        description "Event type";
-      }
-      uses tp-ref;
-      uses l2-network-type;
-      uses l2-termination-point-attributes;
-    }
-
-}  // module l2-topology
diff --git a/models/plugins/yang/ietf-network-topology.yang b/models/plugins/yang/ietf-network-topology.yang
deleted file mode 100644
index e8f7c79..0000000
--- a/models/plugins/yang/ietf-network-topology.yang
+++ /dev/null
@@ -1,257 +0,0 @@
-
-/*
- * NO RW COPYRIGHT
- *
- */
-
-module ietf-network-topology {
-   yang-version 1;
-   namespace "urn:ietf:params:xml:ns:yang:ietf-network-topology";
-   prefix lnk;
-
-   import ietf-inet-types {
-     prefix inet;
-   }
-   import ietf-network {
-     prefix nd;
-   }
-
-   organization "TBD";
-   contact
-     "WILL-BE-DEFINED-LATER";
-   description
-     "This module defines a common base model for network topology,
-      augmenting the base network model with links to connect nodes,
-      as well as termination points to terminate links on nodes.";
-
-   revision 2015-06-08 {
-     description
-       "Initial revision.";
-     reference "draft-ietf-i2rs-yang-network-topo-01";
-   }
-
-   typedef link-id {
-     type inet:uri;
-     description
-       "An identifier for a link in a topology.
-        The identifier may be opaque.
-        The identifier SHOULD be chosen such that the same link in a
-        real network topology will always be identified through the
-        same identifier, even if the model is instantiated in
-            separate datastores. An implementation MAY choose to capture
-        semantics in the identifier, for example to indicate the type
-        of link and/or the type of topology that the link is a part
-        of.";
-   }
-
-   typedef tp-id {
-     type inet:uri;
-     description
-       "An identifier for termination points on a node.
-        The identifier may be opaque.
-        The identifier SHOULD be chosen such that the same TP in a
-        real network topology will always be identified through the
-        same identifier, even if the model is instantiated in
-        separate datastores. An implementation MAY choose to capture
-        semantics in the identifier, for example to indicate the type
-        of TP and/or the type of node and topology that the TP is a
-        part of.";
-   }
-
-   grouping link-ref {
-     description
-       "References a link in a specific network.";
-     leaf link-ref {
-       type leafref {
-         path "/nd:network[nd:network-id=current()/../"+
-           "nd:network-ref]/link/link-id";
-       }
-       description
-         "A type for an absolute reference a link instance.
-          (This type should not be used for relative references.
-          In such a case, a relative path should be used instead.)";
-     }
-     uses nd:network-ref;
-   }
-
-   grouping tp-ref {
-     description
-       "References a termination point in a specific node.";
-     leaf tp-ref {
-       type leafref {
-         path "/nd:network[nd:network-id=current()/../"+
-           "nd:network-ref]/nd:node[nd:node-id=current()/../"+
-           "nd:node-ref]/termination-point/tp-id";
-       }
-       description
-         "A type for an absolute reference to a termination point.
-          (This type should not be used for relative references.
-          In such a case, a relative path should be used instead.)";
-     }
-     uses nd:node-ref;
-   }
-
-   augment "/nd:network" {
-     description
-       "Add links to the network model.";
-     list link {
-       key "link-id";
-
-       description
-         "A Network Link connects a by Local (Source) node and
-          a Remote (Destination) Network Nodes via a set of the
-          nodes' termination points.
-          As it is possible to have several links between the same
-          source and destination nodes, and as a link could
-          potentially be re-homed between termination points, to
-          ensure that we would always know to distinguish between
-          links, every link is identified by a dedicated link
-          identifier.
-          Note that a link models a point-to-point link, not a
-          multipoint link.
-          Layering dependencies on links in underlay topologies are
-          not represented as the layering information of nodes and of
-          termination points is sufficient.";
-       container source {
-         description
-           "This container holds the logical source of a particular
-            link.";
-         leaf source-node {
-           type leafref {
-             // RIFT change: 
-             path "../../../../nd:network/nd:node/nd:node-id";
-           }
-           mandatory true;
-           description
-             "Source node identifier, must be in same topology.";
-         }
-         leaf source-tp {
-           type leafref {
-             // RIFT change: 
-             path "../../../../nd:network/nd:node[nd:node-id=current()/../"+
-               "source-node]/termination-point/tp-id";
-           }
-           description
-             "Termination point within source node that terminates
-              the link.";
-         }
-       }
-       container destination {
-         description
-           "This container holds the logical destination of a
-            particular link.";
-         leaf dest-node {
-           type leafref {
-             // RIFT change 
-             path "../../../../nd:network/nd:node/nd:node-id";
-           }
-           mandatory true;
-           description
-             "Destination node identifier, must be in the same
-              network.";
-         }
-         leaf dest-tp {
-           type leafref {
-             // RIFT change: 
-             path "../../../../nd:network/nd:node[nd:node-id=current()/../"+
-               "dest-node]/termination-point/tp-id";
-           }
-           description
-             "Termination point within destination node that
-              terminates the link.";
-         }
-       }
-       leaf link-id {
-         type link-id;
-         description
-           "The identifier of a link in the topology.
-            A link is specific to a topology to which it belongs.";
-       }
-       list supporting-link {
-         key "network-ref link-ref";
-         description
-           "Identifies the link, or links, that this link
-            is dependent on.";
-         leaf network-ref {
-           type leafref {
-             // RIFT change: 
-             path "../../../../nd:network/nd:supporting-network/nd:network-ref";
-           }
-           description
-             "This leaf identifies in which underlay topology
-              supporting link is present.";
-         }
-         leaf link-ref {
-           type leafref {
-             path "/nd:network[nd:network-id=current()/.."+
-               "/network-ref]/link/link-id";
-           }
-           description
-             "This leaf identifies a link which is a part
-              of this link's underlay. Reference loops, in which
-              a link identifies itself as its underlay, either
-              directly or transitively, are not allowed.";
-         }
-       }
-     }
-   }
-   augment "/nd:network/nd:node" {
-     description
-       "Augment termination points which terminate links.
-        Termination points can ultimately be mapped to interfaces.";
-     list termination-point {
-       key "tp-id";
-       description
-         "A termination point can terminate a link.
-          Depending on the type of topology, a termination point
-          could, for example, refer to a port or an interface.";
-       leaf tp-id {
-         type tp-id;
-         description
-           "Termination point identifier.";
-       }
-       list supporting-termination-point {
-         key "network-ref node-ref tp-ref";
-         description
-           "The leaf list identifies any termination points that
-            the termination point is dependent on, or maps onto.
-            Those termination points will themselves be contained
-            in a supporting node.
-            This dependency information can be inferred from
-            the dependencies between links.  For this reason,
-            this item is not separately configurable.  Hence no
-            corresponding constraint needs to be articulated.
-            The corresponding information is simply provided by the
-            implementing system.";
-         leaf network-ref {
-           type leafref {
-             // RIFT change:
-             path "/nd:network/nd:node/nd:supporting-node/nd:network-ref"; 
-           }
-           description
-             "This leaf identifies in which topology the
-              supporting termination point is present.";
-         }
-         leaf node-ref {
-           type leafref {
-             // RIFT change: 
-             path "/nd:network/nd:node/nd:supporting-node/nd:node-ref";
-           }
-           description
-             "This leaf identifies in which node the supporting
-              termination point is present.";
-         }
-         leaf tp-ref {
-           type leafref {
-             path "/nd:network[nd:network-id=current()/../"+
-               "network-ref]/nd:node[nd:node-id=current()/../"+
-               "node-ref]/termination-point/tp-id";
-           }
-           description
-             "Reference to the underlay node, must be in a
-              different topology";
-         }
-       }
-     }
-   }
-}
diff --git a/models/plugins/yang/ietf-network.yang b/models/plugins/yang/ietf-network.yang
deleted file mode 100644
index 9308544..0000000
--- a/models/plugins/yang/ietf-network.yang
+++ /dev/null
@@ -1,153 +0,0 @@
-
-/*
- * NO RW COPYRIGHT
- *
- */
-
-module ietf-network {
-  yang-version 1;
-  namespace "urn:ietf:params:xml:ns:yang:ietf-network";
-  prefix nd;
-
-  import ietf-inet-types {
-    prefix inet;
-  }
-
-  organization "TBD";
-  contact
-    "WILL-BE-DEFINED-LATER";
-  description
-    "This module defines a common base model for a collection
-     of nodes in a network. Node definitions s are further used
-     in network topologies and inventories.";
-
-  revision 2015-06-08 {
-    description
-      "Initial revision.";
-    reference "draft-ietf-i2rs-yang-network-topo-01";
-  }
-
-  typedef node-id {
-    type inet:uri;
-    description
-      "Identifier for a node.";
-  }
-
-  typedef network-id {
-    type inet:uri;
-    description
-      "Identifier for a network.";
-  }
-
-  grouping network-ref {
-    description
-      "Contains the information necessary to reference a network,
-       for example an underlay network.";
-    leaf network-ref {
-      type leafref {
-        path "/network/network-id";
-      }
-      description
-        "Used to reference a network, for example an underlay
-         network.";
-    }
-  }
-
-  grouping node-ref {
-    description
-      "Contains the information necessary to reference a node.";
-    leaf node-ref {
-      type leafref {
-        path "/network[network-id=current()/../network-ref]"+
-          "/node/node-id";
-      }
-      description
-        "Used to reference a node.
-         Nodes are identified relative to the network they are
-         contained in.";
-    }
-    uses network-ref;
-  }
-
-  list network {
-    config false;
-    key "network-id";
-    description
-      "Describes a network.
-       A network typically contains an inventory of nodes,
-       topological information (augmented through
-       network-topology model), as well as layering
-       information.";
-    container network-types {
-      description
-        "Serves as an augmentation target.
-         The network type is indicated through corresponding
-         presence containers augmented into this container.";
-    }
-    leaf network-id {
-      type network-id;
-      description
-        "Identifies a network.";
-    }
-    leaf server-provided {
-      type boolean;
-      config false;
-      description
-        "Indicates whether the information concerning this
-         particular network is populated by the server
-         (server-provided true, the general case for network
-         information discovered from the server),
-         or whether it is configured by a client
-         (server-provided true, possible e.g. for
-         service overlays managed through a controller).";
-    }
-    list supporting-network {
-      key "network-ref";
-      description
-        "An underlay network, used to represent layered network
-         topologies.";
-
-      leaf network-ref {
-        type leafref {
-          path "/network/network-id";
-        }
-        description
-          "References the underlay network.";
-      }
-    }
-    list node {
-      key "node-id";
-      description
-        "The inventory of nodes of this network.";
-      leaf node-id {
-        type node-id;
-        description
-          "Identifies a node uniquely within the containing
-           network.";
-      }
-      list supporting-node {
-        key "network-ref node-ref";
-        description
-          "Represents another node, in an underlay network, that
-           this node is supported by.  Used to represent layering
-           structure.";
-        leaf network-ref {
-          type leafref {
-            path "../../../supporting-network/network-ref";
-          }
-          description
-            "References the underlay network that the
-             underlay node is part of.";
-        }
-        leaf node-ref {
-          type leafref {
-            path "/network/node/node-id";
-          }
-          description
-            "References the underlay node itself.";
-        }
-      }
-    }
-  }
-}
-
diff --git a/models/plugins/yang/mano-rift-groupings.yang b/models/plugins/yang/mano-rift-groupings.yang
deleted file mode 100644
index 7788724..0000000
--- a/models/plugins/yang/mano-rift-groupings.yang
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 
- *   Copyright 2016-2017 RIFT.IO Inc
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- *
- */
-
- module mano-rift-groupings
-{
-  namespace "urn:ietf:params:xml:ns:yang:nfvo:mano-rift-groupings";
-  prefix "mano-rift";
-
-  import mano-types {
-    prefix "manotypes";
-  }
-
-  grouping custom-meta-data {
-    description "Grouping for instance-specific meta data";
-    list custom-meta-data {
-      description
-          "List of meta-data to be associated with the instance";
-      key "name";
-      leaf name {
-        description "Name of the meta-data parameter";
-        type string;
-      }
-
-      leaf data-type {
-        description "Data-type the meta-data parameter";
-        type manotypes:meta-data-type;
-        default "STRING";
-      }
-
-      leaf value {
-        description "Value of the meta-data parameter";
-        type string;
-      }
-
-      leaf destination {
-        description "Type of input parameter";
-        type enumeration {
-            enum "CLOUD_INIT";
-            enum "CLOUD_METADATA";
-        }
-        default "CLOUD_METADATA";
-      }
-    }
-  }
-
-  grouping volume-info-additions {
-  	leaf boot-volume {
-      description "This flag indicates if this is boot volume or not";
-      type boolean;
-    }
-
-    leaf boot-priority {
-      description "Boot priority associated with volume";
-      type int32;
-    }
-  }
-
-  grouping http-end-point-additions {
-  	leaf data {
-      description
-        "This is the data to be sent with POST ";
-      type  string;
-    }
-  }
-
-  grouping ssh-key-generated {
-  	container ssh-key-generated {
-      description "SSH key pair generated for this NS";
-      leaf public-key {
-        description "Public key generated";
-        type string;
-      }
-      leaf private-key-file {
-        description "Path to the private key file";
-        type string;
-      }
-    }
-  }
-}
diff --git a/models/plugins/yang/mano-types.yang b/models/plugins/yang/mano-types.yang
deleted file mode 100644
index 8950c7a..0000000
--- a/models/plugins/yang/mano-types.yang
+++ /dev/null
@@ -1,2190 +0,0 @@
-
-/*
- *
- *   Copyright 2016-2017 RIFT.IO Inc
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- *
- */
-
-module mano-types
-{
-  namespace "urn:ietf:params:xml:ns:yang:nfvo:mano-types";
-  prefix "manotypes";
-
-  import ietf-inet-types {
-    prefix "inet";
-  }
-
-  import rw-project {
-    prefix "rw-project";
-  }
-
-  revision 2017-02-08 {
-    description
-      "Update model to support projects.";
-  }
-
-  revision 2015-04-23 {
-    description
-      "Initial revision. This YANG file defines
-       the reusable base types for VNF Management
-       and Orchestration (MANO).";
-    reference
-      "Derived from earlier versions of base YANG files";
-  }
-
-  typedef meta-data-type {
-    type enumeration {
-      enum STRING;
-    }
-  }
-
-  typedef package-type {
-      description "Type of descriptor being on-boarded";
-      type enumeration {
-        enum NSD;
-        enum VNFD;
-      }
-    }
-
-  typedef parameter-data-type {
-    type enumeration {
-      enum STRING;
-      enum INTEGER;
-      enum BOOLEAN;
-    }
-  }
-
-  grouping primitive-parameter-value {
-    list parameter {
-      description
-          "List of parameters to the configuration primitive.";
-      key "name";
-      leaf name {
-        description
-            "Name of the parameter.";
-        type string;
-      }
-
-      leaf value {
-        description
-            "Value associated with the name.";
-        type string;
-      }
-    }
-  }
-
-  grouping primitive-parameter {
-    leaf name {
-      description
-          "Name of the parameter.";
-      type string;
-    }
-
-    leaf data-type {
-      description
-          "Data type associated with the name.";
-      type manotypes:parameter-data-type;
-    }
-
-    leaf mandatory {
-      description "Is this field mandatory";
-      type boolean;
-      default false;
-    }
-
-    leaf default-value {
-      description "The default value for this field";
-      type string;
-    }
-
-    leaf parameter-pool {
-      description "NSD parameter pool name to use for this parameter";
-      type string;
-    }
-
-    leaf read-only {
-      description
-        "The value should be dimmed by the UI.
-        Only applies to parameters with default values.";
-      type boolean;
-      default false;
-    }
-
-    leaf hidden {
-      description
-        "The value should be hidden by the UI.
-        Only applies to parameters with default values.";
-      type boolean;
-      default false;
-    }
-  }
-
-  grouping ui-primitive-group {
-    list parameter-group {
-      description
-            "Grouping of parameters which are logically grouped in UI";
-      key "name";
-
-      leaf name {
-        description
-            "Name of the parameter group";
-        type string;
-      }
-
-      list parameter {
-        description
-            "List of parameters for the service primitive.";
-        key "name";
-        uses manotypes:primitive-parameter;
-      }
-
-      leaf mandatory {
-        description "Is this parameter group mandatory";
-        type boolean;
-        default true;
-      }
-    }
-  }
-
-  grouping event-config {
-    leaf seq {
-      description
-          "Sequence number for the configuration primitive.";
-      type uint64;
-    }
-
-    leaf name {
-      description
-          "Name of the configuration primitive.";
-      type string;
-      mandatory "true";
-    }
-
-    leaf user-defined-script {
-      description
-          "A user defined script.";
-      type string;
-    }
-
-    list parameter {
-      key "name";
-      leaf name {
-        type string;
-      }
-
-      leaf value {
-        description "Value of the configuration primitive.";
-        type string;
-      }
-    }
-  }
-  
- grouping image-properties {
-    leaf image {
-      description
-            "Image name for the software image.
-             If the image name is found within the VNF package it will
-             be uploaded to all VIM accounts during onboarding process.
-             Otherwise, the image must be added to the VIM account with
-             the same name as entered here.
-            ";
-      type string;
-    }
-
-    leaf image-checksum {
-      description
-            "Image md5sum for the software image.
-            The md5sum, if provided, along with the image name uniquely
-            identifies an image uploaded to the CAL.
-            ";
-      type string;
-    }
-  }
-
-
-  grouping vca-relationships {
-    container vca-relationships {
-      list relation {
-        description "List of relations between VCA componets.";
-
-        key "requires provides";
-
-        leaf requires {
-          description
-            "Name of the required relation.";
-          type string;
-        }
-
-        leaf provides {
-          description
-            "Name of the provided relation.";
-          type string;
-        }
-      }
-    }
-  }
-
-  grouping vca-configuration {
-    description
-        "Information about the VNF or VDU configuration. Note:
-         If the NS contains multiple instances of the
-         same VNF or VDU, each instance could have a different
-         configuration.";
-
-    choice config-method {
-      description
-          "Defines the configuration method for the VNF or VDU.";
-      case script {
-        description
-            "Use custom script for configuring the VNF or VDU.
-             This script is executed in the context of
-             Orchestrator (The same system and environment
-             as the Launchpad).";
-        container script {
-          leaf script-type {
-            description
-                "Script type - currently supported - Scripts confirming to Rift CA plugin";
-            type enumeration {
-              enum rift;
-            }
-          }
-        }
-      }
-
-      case juju {
-        description
-          "Configure the VNF or VDU through Juju.";
-        container juju {
-          leaf charm {
-            description "Juju charm to use with the VNF or VDU.";
-            type string;
-          }
-          uses manotypes:vca-relationships;
-        }
-      }
-    }
-
-    list config-primitive {
-      description
-        "List of config primitives supported by the
-        configuration agent for this VNF or VDU.";
-      key "name";
-
-      leaf name {
-        description
-          "Name of the config primitive.";
-        type string;
-      }
-
-      list parameter {
-        description
-          "List of parameters to the config primitive.";
-        key "name";
-        uses primitive-parameter;
-      }
-
-      leaf user-defined-script {
-        description
-          "A user defined script. If user defined script is defined,
-           the script will be executed using bash";
-        type string;
-      }
-    }
-
-    list initial-config-primitive {
-      description
-        "Initial set of configuration primitives.";
-      key "seq";
-      leaf seq {
-        description
-          "Sequence number for the configuration primitive.";
-        type uint64;
-      }
-
-      choice primitive-type {
-        case primitive-definition {
-          leaf name {
-            description
-              "Name of the configuration primitive.";
-            type string;
-          }
-
-          uses primitive-parameter-value;
-
-          leaf user-defined-script {
-            description
-              "A user defined script.";
-            type string;
-          }
-        }
-      }
-    }
-  } // END - grouping vca-configuration
-
-  typedef virtual-link-type {
-    description
-        "Type of virtual link
-         ELAN: A multipoint service connecting a set of VNFs
-         ELINE: For a simple point to point connection
-         //        between a VNF and the existing network.
-         // ETREE: A multipoint service connecting one or
-         //        more roots and a set of leaves, but
-         //        preventing inter-leaf communication.";
-    type enumeration {
-      enum ELAN;
-      enum ELINE;
-      // enum ETREE;
-    }
-  }
-
-  grouping named-value {
-    leaf name {
-      type string;
-    }
-
-    leaf value {
-      type string;
-    }
-  }
-
-  typedef http-method {
-    description
-      "Type of HTTP operation";
-
-    type enumeration {
-      enum POST;
-      enum PUT;
-      enum GET;
-      enum DELETE;
-      enum OPTIONS;
-      enum PATCH;
-    }
-  }
-
-  typedef api-type {
-    description
-      "Type of API to fetch monitoring parameters";
-
-    type enumeration {
-      enum HTTP;
-      enum NETCONF;
-      enum SOAP;
-    }
-  }
-
-  typedef json-query-method {
-    description
-      "The method to extract a value from a JSON response
-
-       NAMEKEY - Use the name as the key for a non-nested value.
-       JSONPATH - Use jsonpath-rw implementation to extract a value.
-       OBJECTPATH - Use objectpath implementation to extract a value.";
-      type enumeration {
-        enum NAMEKEY;
-        enum JSONPATH;
-        enum OBJECTPATH;
-      }
-  }
-
-  typedef param-value-type {
-    description
-      "The type of the parameter value";
-    type enumeration {
-       enum INT;
-       enum DECIMAL;
-       enum STRING;
-    }
-  }
-
-  typedef connection-point-type {
-    description
-        "Type of connection point
-        VPORT: Virtual Port
-        // VNIC_ADDR: Virtual NIC Address
-        // PNIC_ADDR: Physical NIC Address
-        // PPORT: Physical Port.";
-
-    type enumeration {
-      enum VPORT;
-    }
-  }
-
-  typedef widget-type {
-    description
-        "Type of the widget, typically used by the UI.";
-    type enumeration {
-      enum COUNTER;
-      enum GAUGE;
-      enum TEXTBOX;
-      enum SLIDER;
-      enum HISTOGRAM;
-      enum BAR;
-    }
-  }
-
-  typedef cpu-feature-type {
-    description
-        "Enumeration for CPU features.
-
-         AES: CPU supports advanced instruction set for
-         AES (Advanced Encryption Standard).
-
-         CAT: Cache Allocation Technology (CAT) allows
-         an Operating System, Hypervisor, or similar
-         system management agent to specify the amount
-         of L3 cache (currently the last-level cache
-         in most server and client platforms) space an
-         application can fill (as a hint to hardware
-         functionality, certain features such as power
-         management may override CAT settings).
-
-         CMT: Cache Monitoring Technology (CMT) allows
-         an Operating System, Hypervisor, or similar
-         system management agent to determine the
-         usage of cache based on applications running
-         on the platform. The implementation is
-         directed at L3 cache monitoring (currently
-         the last-level cache in most server and
-         client platforms).
-
-         DDIO: Intel Data Direct I/O (DDIO) enables
-         Ethernet server NICs and controllers talk
-         directly to the processor cache without a
-         detour via system memory. This enumeration
-         specifies if the VM requires a DDIO
-         capable host.";
-
-    type enumeration {
-      enum PREFER_AES;
-      enum REQUIRE_AES;
-      enum PREFER_CAT;
-      enum REQUIRE_CAT;
-      enum PREFER_CMT;
-      enum REQUIRE_CMT;
-      enum PREFER_DDIO;
-      enum REQUIRE_DDIO;
-      enum REQUIRE_VME;
-      enum PREFER_VME;
-      enum REQUIRE_DE;
-      enum PREFER_DE;
-      enum REQUIRE_PSE;
-      enum PREFER_PSE;
-      enum REQUIRE_TSC;
-      enum PREFER_TSC;
-      enum REQUIRE_MSR;
-      enum PREFER_MSR;
-      enum REQUIRE_PAE;
-      enum PREFER_PAE;
-      enum REQUIRE_MCE;
-      enum PREFER_MCE;
-      enum REQUIRE_CX8;
-      enum PREFER_CX8;
-      enum REQUIRE_APIC;
-      enum PREFER_APIC;
-      enum REQUIRE_SEP;
-      enum PREFER_SEP;
-      enum REQUIRE_MTRR;
-      enum PREFER_MTRR;
-      enum REQUIRE_PGE;
-      enum PREFER_PGE;
-      enum REQUIRE_MCA;
-      enum PREFER_MCA;
-      enum REQUIRE_CMOV;
-      enum PREFER_CMOV;
-      enum REQUIRE_PAT;
-      enum PREFER_PAT;
-      enum REQUIRE_PSE36;
-      enum PREFER_PSE36;
-      enum REQUIRE_CLFLUSH;
-      enum PREFER_CLFLUSH;
-      enum REQUIRE_DTS;
-      enum PREFER_DTS;
-      enum REQUIRE_ACPI;
-      enum PREFER_ACPI;
-      enum REQUIRE_MMX;
-      enum PREFER_MMX;
-      enum REQUIRE_FXSR;
-      enum PREFER_FXSR;
-      enum REQUIRE_SSE;
-      enum PREFER_SSE;
-      enum REQUIRE_SSE2;
-      enum PREFER_SSE2;
-      enum REQUIRE_SS;
-      enum PREFER_SS;
-      enum REQUIRE_HT;
-      enum PREFER_HT;
-      enum REQUIRE_TM;
-      enum PREFER_TM;
-      enum REQUIRE_IA64;
-      enum PREFER_IA64;
-      enum REQUIRE_PBE;
-      enum PREFER_PBE;
-      enum REQUIRE_RDTSCP;
-      enum PREFER_RDTSCP;
-      enum REQUIRE_PNI;
-      enum PREFER_PNI;
-      enum REQUIRE_PCLMULQDQ;
-      enum PREFER_PCLMULQDQ;
-      enum REQUIRE_DTES64;
-      enum PREFER_DTES64;
-      enum REQUIRE_MONITOR;
-      enum PREFER_MONITOR;
-      enum REQUIRE_DS_CPL;
-      enum PREFER_DS_CPL;
-      enum REQUIRE_VMX;
-      enum PREFER_VMX;
-      enum REQUIRE_SMX;
-      enum PREFER_SMX;
-      enum REQUIRE_EST;
-      enum PREFER_EST;
-      enum REQUIRE_TM2;
-      enum PREFER_TM2;
-      enum REQUIRE_SSSE3;
-      enum PREFER_SSSE3;
-      enum REQUIRE_CID;
-      enum PREFER_CID;
-      enum REQUIRE_FMA;
-      enum PREFER_FMA;
-      enum REQUIRE_CX16;
-      enum PREFER_CX16;
-      enum REQUIRE_XTPR;
-      enum PREFER_XTPR;
-      enum REQUIRE_PDCM;
-      enum PREFER_PDCM;
-      enum REQUIRE_PCID;
-      enum PREFER_PCID;
-      enum REQUIRE_DCA;
-      enum PREFER_DCA;
-      enum REQUIRE_SSE4_1;
-      enum PREFER_SSE4_1;
-      enum REQUIRE_SSE4_2;
-      enum PREFER_SSE4_2;
-      enum REQUIRE_X2APIC;
-      enum PREFER_X2APIC;
-      enum REQUIRE_MOVBE;
-      enum PREFER_MOVBE;
-      enum REQUIRE_POPCNT;
-      enum PREFER_POPCNT;
-      enum REQUIRE_TSC_DEADLINE_TIMER;
-      enum PREFER_TSC_DEADLINE_TIMER;
-      enum REQUIRE_XSAVE;
-      enum PREFER_XSAVE;
-      enum REQUIRE_AVX;
-      enum PREFER_AVX;
-      enum REQUIRE_F16C;
-      enum PREFER_F16C;
-      enum REQUIRE_RDRAND;
-      enum PREFER_RDRAND;
-      enum REQUIRE_FSGSBASE;
-      enum PREFER_FSGSBASE;
-      enum REQUIRE_BMI1;
-      enum PREFER_BMI1;
-      enum REQUIRE_HLE;
-      enum PREFER_HLE;
-      enum REQUIRE_AVX2;
-      enum PREFER_AVX2;
-      enum REQUIRE_SMEP;
-      enum PREFER_SMEP;
-      enum REQUIRE_BMI2;
-      enum PREFER_BMI2;
-      enum REQUIRE_ERMS;
-      enum PREFER_ERMS;
-      enum REQUIRE_INVPCID;
-      enum PREFER_INVPCID;
-      enum REQUIRE_RTM;
-      enum PREFER_RTM;
-      enum REQUIRE_MPX;
-      enum PREFER_MPX;
-      enum REQUIRE_RDSEED;
-      enum PREFER_RDSEED;
-      enum REQUIRE_ADX;
-      enum PREFER_ADX;
-      enum REQUIRE_SMAP;
-      enum PREFER_SMAP;
-    }
-  }
-
-  grouping vm-flavor {
-    container vm-flavor {
-      leaf vcpu-count {
-        description
-            "Number of VCPUs for the VM.";
-        type uint16;
-      }
-
-      leaf memory-mb {
-        description
-            "Amount of memory in MB.";
-        type uint64;
-      }
-
-      leaf storage-gb {
-        description
-            "Amount of disk space in GB.";
-        type uint64;
-      }
-    }
-  } //grouping vm-flavor
-
-	grouping vm-flavor-name {
-  	leaf vm-flavor-name {
-  		description "flavor name to be used while creating vm using cloud account";
-  		type string;
-  	}
-	}
-
-  grouping vswitch-epa {
-    container vswitch-epa {
-      leaf ovs-acceleration {
-        description
-            "Specifies Open vSwitch acceleration mode.
-             MANDATORY: OVS acceleration is required
-             PREFERRED: OVS acceleration is preferred";
-        type enumeration {
-          enum MANDATORY;
-          enum PREFERRED;
-          enum DISABLED;
-        }
-      }
-
-      leaf ovs-offload {
-        description
-            "Specifies Open vSwitch hardware offload mode.
-             MANDATORY: OVS offload is required
-             PREFERRED: OVS offload is preferred";
-        type enumeration {
-          enum MANDATORY;
-          enum PREFERRED;
-          enum DISABLED;
-        }
-      }
-    }
-  }
-
-  grouping hypervisor-epa {
-    container hypervisor-epa {
-      leaf type {
-        description
-            "Specifies the type of hypervisor.
-             KVM: KVM
-             XEN: XEN";
-        type enumeration {
-          enum PREFER_KVM;
-          enum REQUIRE_KVM;
-        }
-      }
-      leaf version {
-        type string;
-      }
-    }
-  }
-
-  grouping host-epa {
-    container host-epa {
-      description "Specifies the host level EPA attributes.";
-      leaf cpu-model {
-        description
-            "Host CPU model. Examples include: SandyBridge,
-             IvyBridge";
-        type enumeration {
-          enum PREFER_WESTMERE;
-          enum REQUIRE_WESTMERE;
-          enum PREFER_SANDYBRIDGE;
-          enum REQUIRE_SANDYBRIDGE;
-          enum PREFER_IVYBRIDGE;
-          enum REQUIRE_IVYBRIDGE;
-          enum PREFER_HASWELL;
-          enum REQUIRE_HASWELL;
-          enum PREFER_BROADWELL;
-          enum REQUIRE_BROADWELL;
-          enum PREFER_NEHALEM;
-          enum REQUIRE_NEHALEM;
-          enum PREFER_PENRYN;
-          enum REQUIRE_PENRYN;
-          enum PREFER_CONROE;
-          enum REQUIRE_CONROE;
-          enum PREFER_CORE2DUO;
-          enum REQUIRE_CORE2DUO;
-        }
-      }
-
-      leaf cpu-arch {
-        description "Host CPU architecture.";
-        type enumeration {
-          enum PREFER_X86;
-          enum REQUIRE_X86;
-          enum PREFER_X86_64;
-          enum REQUIRE_X86_64;
-          enum PREFER_I686;
-          enum REQUIRE_I686;
-          enum PREFER_IA64;
-          enum REQUIRE_IA64;
-          enum PREFER_ARMV7;
-          enum REQUIRE_ARMV7;
-          enum PREFER_ARMV8;
-          enum REQUIRE_ARMV8;
-        }
-      }
-
-      leaf cpu-vendor {
-        description "Host CPU Vendor.";
-        type enumeration {
-          enum PREFER_INTEL;
-          enum REQUIRE_INTEL;
-          enum PREFER_AMD;
-          enum REQUIRE_AMD;
-        }
-      }
-
-      leaf cpu-socket-count {
-        description "Number of sockets on the host.";
-        type uint64;
-      }
-
-      leaf cpu-core-count {
-        description "Number of cores on the host.";
-        type uint64;
-      }
-
-      leaf cpu-core-thread-count {
-        description "Number of threads per cores on the host.";
-        type uint64;
-      }
-
-      list cpu-feature {
-        key "feature";
-        description "List of CPU features.";
-        leaf feature {
-          description "CPU feature.";
-          type cpu-feature-type;
-        }
-      }
-
-
-      leaf om-cpu-model-string {
-        description "OpenMANO CPU model string";
-        type string;
-      }
-
-      list om-cpu-feature {
-        key "feature";
-        description "List of OpenMANO CPU features";
-        leaf feature {
-          description "CPU feature";
-          type string;
-        }
-      }
-    }
-  }
-
-  grouping guest-epa {
-    description "EPA attributes for the guest";
-    container guest-epa {
-      leaf trusted-execution {
-        description "This VM should be allocated from trusted pool";
-        type boolean;
-      }
-
-      leaf mempage-size {
-        description
-            "Memory page allocation size. If a VM requires
-             hugepages, it should choose LARGE or SIZE_2MB
-             or SIZE_1GB. If the VM prefers hugepages it
-             should choose PREFER_LARGE.
-             LARGE        : Require hugepages (either 2MB or 1GB)
-             SMALL        : Doesn't require hugepages
-             SIZE_2MB     : Requires 2MB hugepages
-             SIZE_1GB     : Requires 1GB hugepages
-             PREFER_LARGE : Application prefers hugepages";
-        type enumeration {
-          enum LARGE;
-          enum SMALL;
-          enum SIZE_2MB;
-          enum SIZE_1GB;
-          enum PREFER_LARGE;
-        }
-      }
-
-      leaf cpu-pinning-policy {
-        description
-            "CPU pinning policy describes association
-             between virtual CPUs in guest and the
-             physical CPUs in the host.
-             DEDICATED : Virtual CPUs are pinned to
-                         physical CPUs
-             SHARED    : Multiple VMs may share the
-                         same physical CPUs.
-             ANY       : Any policy is acceptable for the VM";
-        type enumeration {
-          enum DEDICATED;
-          enum SHARED;
-          enum ANY;
-        }
-        default "ANY";
-      }
-
-      leaf cpu-thread-pinning-policy {
-          description
-            "CPU thread pinning policy describes how to
-             place the guest CPUs when the host supports
-             hyper threads:
-             AVOID   : Avoids placing a guest on a host
-                       with threads.
-             SEPARATE: Places vCPUs on separate cores,
-                       and avoids placing two vCPUs on
-                       two threads of same core.
-             ISOLATE : Places each vCPU on a different core,
-                       and places no vCPUs from a different
-                       guest on the same core.
-             PREFER  : Attempts to place vCPUs on threads
-                       of the same core.";
-        type enumeration {
-          enum AVOID;
-          enum SEPARATE;
-          enum ISOLATE;
-          enum PREFER;
-        }
-      }
-
-      list pcie-device {
-        description
-            "List of pcie passthrough devices.";
-        key device-id;
-        leaf device-id {
-          description
-              "Device identifier.";
-          type string;
-        }
-        leaf count {
-          description
-              "Number of devices to attach to the VM.";
-          type uint64;
-        }
-      }
-
-      choice numa-policy {
-        case numa-unaware {
-          leaf numa-unaware {
-            type empty;
-          }
-        }
-
-        case numa-aware {
-          container numa-node-policy {
-            description
-                "This policy defines NUMA topology of the
-                 guest. Specifically identifies if the guest
-                 should be run on a host with one NUMA
-                 node or multiple NUMA nodes. As an example
-                 a guest might need 8 VCPUs and 4 GB of
-                 memory. However, it might need the VCPUs
-                 and memory distributed across multiple
-                 NUMA nodes. In this scenario, NUMA node
-                 1 could run with 6 VCPUs and 3GB, and
-                 NUMA node 2 could run with 2 VCPUs and
-                 1GB.";
-
-            leaf node-cnt {
-              description
-                  "The number of NUMA nodes to expose to the VM.";
-              type uint16;
-            }
-
-            leaf mem-policy {
-              description
-                  "This policy specifies how the memory should
-                   be allocated in a multi-node scenario.
-                   STRICT    : The memory must be allocated
-                               strictly from the memory attached
-                               to the NUMA node.
-                   PREFERRED : The memory should be allocated
-                               preferentially from the memory
-                               attached to the NUMA node";
-              type enumeration {
-                enum STRICT;
-                enum PREFERRED;
-              }
-            }
-
-           list node {
-              key id;
-              leaf id {
-                description
-                    "NUMA node identification. Typically
-                     it's 0 or 1";
-                type uint64;
-              }
-
-              list vcpu {
-                key "id";
-                description
-                    "List of VCPUs to allocate on
-                     this NUMA node.";
-                leaf id {
-                  type uint64;
-                  description "List of VCPUs ids to allocate on
-                               this NUMA node";
-                }
-              }
-
-              leaf memory-mb {
-                description
-                    "Memory size expressed in MB
-                     for this NUMA node.";
-                type uint64;
-              }
-
-              choice om-numa-type {
-                description
-                    "OpenMANO Numa type selection";
-
-                case cores {
-                  leaf num-cores {
-                    type uint8;
-                  }
-                }
-
-                case paired-threads {
-                  container paired-threads {
-                    leaf num-paired-threads {
-                      type uint8;
-                    }
-
-                    list paired-thread-ids {
-                      description
-                          "List of thread pairs to use in case of paired-thread NUMA";
-                      max-elements 16;
-                      key thread-a;
-
-                      leaf thread-a {
-                          type uint8;
-                      }
-
-                      leaf thread-b {
-                          type uint8;
-                      }
-                    }
-                  }
-                }
-                case threads {
-                  leaf num-threads {
-                    type uint8;
-                  }
-                }
-              }
-            }
-
-          }
-        }
-      }
-    }
-  }
-
-  grouping provider-network {
-    container provider-network {
-      description "Container for the provider network.";
-      leaf physical-network {
-        description
-            "Name of the physical network on which the provider
-             network is built.";
-        type string;
-      }
-
-      leaf segmentation_id {
-        description
-            "ID of segregated virtual networks";
-            type uint32;
-      }
-    }
-  }
-
-  grouping ns-service-primitive {
-    list service-primitive {
-      description
-          "Network service level service primitives.";
-
-      key "name";
-
-      leaf name {
-        description
-            "Name of the service primitive.";
-        type string;
-      }
-
-      list parameter {
-        description
-            "List of parameters for the service primitive.";
-
-        key "name";
-        uses manotypes:primitive-parameter;
-      }
-
-      list parameter-group {
-        description
-            "Grouping of parameters which are logically grouped in UI";
-        key "name";
-
-        leaf name {
-          description
-              "Name of the parameter group";
-          type string;
-        }
-
-        list parameter {
-          description
-              "List of parameters for the service primitive.";
-          key "name";
-          uses manotypes:primitive-parameter;
-        }
-
-        leaf mandatory {
-          description "Is this parameter group mandatory";
-          type boolean;
-          default true;
-        }
-      }
-
-      list vnf-primitive-group {
-        description
-            "List of service primitives grouped by VNF.";
-
-        key "member-vnf-index-ref";
-        leaf member-vnf-index-ref {
-          description
-              "Reference to member-vnf within constituent-vnfds";
-          type uint64;
-        }
-
-        leaf vnfd-id-ref {
-          description
-              "A reference to a vnfd. This is a
-               leafref to path:
-                   ../../../../nsd:constituent-vnfd
-                   + [nsd:id = current()/../nsd:id-ref]
-                   + /nsd:vnfd-id-ref
-               NOTE: An issue with confd is preventing the
-               use of xpath. Seems to be an issue with leafref
-               to leafref, whose target is in a different module.
-               Once that is resolved this will switched to use
-               leafref";
-
-          type string;
-        }
-
-        leaf vnfd-name {
-          description
-              "Name of the VNFD";
-          type string;
-        }
-
-        list primitive {
-          key "index";
-
-          leaf index {
-            description "Index of this primitive";
-            type uint32;
-          }
-
-          leaf name {
-            description "Name of the primitive in the VNF primitive ";
-            type string;
-          }
-        }
-      }
-
-      leaf user-defined-script {
-        description
-            "A user defined script.";
-        type string;
-      }
-    }
-  }
-
-  grouping monitoring-param {
-    list http-endpoint {
-      description
-          "List of http endpoints to be used by monitoring params";
-      key path;
-
-      leaf path {
-        description "The HTTP path on the management server";
-        type string;
-      }
-
-      leaf https {
-        description "Pick HTTPS instead of HTTP , Default is false";
-        type boolean;
-        default "false";
-      }
-
-      leaf port {
-        description "The HTTP port to connect to";
-        type inet:port-number;
-      }
-
-      leaf username {
-        description "The HTTP basic auth username";
-        type string;
-      }
-
-      leaf password {
-        description "The HTTP basic auth password";
-        type string;
-      }
-
-      leaf polling-interval-secs {
-        description "The HTTP polling interval in seconds";
-        type uint8;
-        default 2;
-      }
-
-      leaf method {
-        description
-          "Method that the URI should perform.
-           Deafult action is GET.";
-
-        type manotypes:http-method;
-        default "GET";
-      }
-
-      list headers {
-        description "Custom HTTP headers to put on HTTP request";
-        key key;
-        leaf key{
-          description "HTTP header key";
-          type string;
-        }
-
-        leaf value{
-          description "HTTP header value";
-          type string;
-        }
-      }
-    }
-
-    list monitoring-param {
-      description
-          "List of monitoring parameters at the network service level";
-      key id;
-      leaf id {
-        type string;
-      }
-
-      leaf name {
-        type string;
-      }
-
-      leaf http-endpoint-ref {
-        type leafref {
-          path "../../http-endpoint/path";
-        }
-      }
-
-      leaf json-query-method {
-        type json-query-method;
-        default "NAMEKEY";
-      }
-
-      container json-query-params {
-        leaf json-path {
-          description
-            "The jsonpath to use to extract value from JSON structure";
-          type string;
-        }
-        leaf object-path {
-          description
-            "The objectpath to use to extract value from JSON structure";
-          type string;
-        }
-      }
-
-      uses monitoring-param-ui-data;
-      uses monitoring-param-value;
-
-    }
-  }
-
-  grouping monitoring-param-aggregation {
-    typedef aggregation-type {
-      description "aggregation-type";
-      type enumeration {
-        enum AVERAGE;
-        enum MINIMUM;
-        enum MAXIMUM;
-        enum COUNT;
-        enum SUM;
-      }
-    }
-
-    leaf aggregation-type {
-      type aggregation-type;
-    }
-  }
-
-  grouping monitoring-param-ui-data {
-      leaf description {
-        type string;
-      }
-
-      leaf group-tag {
-        description "A tag to group monitoring parameters";
-        type string;
-      }
-
-
-      leaf widget-type {
-        description "Defines the UI Display variant of measured counters.";
-        type manotypes:widget-type;
-        default "COUNTER";
-      }
-
-      leaf units {
-        description "Measured Counter Units (e.g., Packets, Kbps, Mbps, etc.)";
-        type string;
-      }
-  }
-
-  grouping monitoring-param-value {
-      leaf value-type {
-        type param-value-type;
-        default "INT";
-      }
-
-      container numeric-constraints {
-        leaf min-value {
-          description
-              "Minimum value for the parameter";
-          type uint64;
-        }
-        leaf max-value {
-          description
-              "Maximum value for the parameter";
-          type uint64;
-        }
-      }
-
-      container text-constraints {
-        leaf min-length {
-          description
-              "Minimum string length for the parameter";
-          type uint8;
-        }
-        leaf max-length {
-          description
-              "Maximum string length for the parameter";
-          type uint8;
-        }
-      }
-
-      leaf value-integer {
-        description
-            "Current value for an integer parameter";
-        type int64;
-      }
-
-      leaf value-decimal {
-        description
-            "Current value for a decimal parameter";
-        type decimal64 {
-          fraction-digits 4;
-        }
-      }
-
-      leaf value-string {
-        description
-            "Current value for a string parameter";
-        type string;
-      }
-  }
-
-  grouping control-param {
-    list control-param {
-      description
-          "List of control parameters to manage and
-           update the running configuration of the VNF";
-      key id;
-
-      leaf id {
-        description "Identifier for control parameter";
-        type string;
-      }
-
-      leaf name {
-        description "Name of a control parameter";
-        type string;
-      }
-
-      leaf description {
-        description "A description of the control parameter";
-        type string;
-      }
-
-      leaf group-tag {
-        description "A tag to group control parameters";
-        type string;
-      }
-
-      leaf min-value {
-        description
-            "Minimum value for the parameter";
-        type uint64;
-      }
-
-      leaf max-value {
-        description
-            "Maximum value for the parameter";
-        type uint64;
-      }
-
-      leaf current-value {
-        description
-            "Current value for the parameter";
-        type uint64;
-      }
-
-      leaf step-value {
-        description
-            "Step value for the parameter";
-        type uint64;
-      }
-
-      leaf units {
-        type string;
-      }
-
-      leaf widget-type {
-        type manotypes:widget-type;
-      }
-
-      leaf url {
-        description
-          "This is the URL where the operation should be performed.";
-
-        type inet:uri;
-      }
-
-      leaf method {
-        description
-          "Method that the URI should perform.
-           Default Action is POST";
-
-        type manotypes:http-method;
-        default "POST";
-      }
-
-      leaf payload {
-        description
-          "This is the operation payload or payload template as stringified
-           JSON. This field provides the data  to be sent for this operation
-           call";
-
-        type string;
-      }
-    }
-  }
-
-  grouping action-param {
-    list action-param {
-      description
-          "List of action parameters to
-           control VNF";
-      key id;
-      leaf id {
-        type string;
-      }
-
-      leaf name {
-        type string;
-      }
-
-      leaf description {
-        type string;
-      }
-
-      leaf group-tag {
-        description "A tag to group monitoring parameter";
-        type string;
-      }
-
-      leaf url {
-        description
-          "This is the URL where to perform the operation";
-        type inet:uri;
-      }
-
-      leaf method {
-        description
-          "This is the method to be performed at the uri.
-           POST by default for action";
-
-        type manotypes:http-method;
-        default "POST";
-      }
-
-      leaf payload {
-        description
-          "This is the operation payload or payload template to be sent in
-           the data for this operation call";
-
-        type string;
-      }
-    }
-  }
-
-  grouping input-parameter {
-    description "List of input parameters that can be specified when instantiating a network service.";
-
-    list input-parameter {
-      description
-          "List of input parameters";
-
-      key xpath;
-
-
-      leaf xpath {
-        description
-          "An xpath that specfies which element in a descriptor is to be
-          modified.";
-        type string;
-      }
-
-      leaf value {
-        description
-          "The value that the element specified by the xpath should take when a
-          record is created.";
-        type string;
-      }
-    }
-  }
-
-  grouping input-parameter-xpath {
-    list input-parameter-xpath {
-      description
-          "List of xpaths to parameters inside the NSD
-           the can be customized during the instantiation.";
-
-      key "xpath";
-      leaf xpath {
-        description
-            "An xpath that specifies the element in a descriptor.";
-        type string;
-      }
-
-      leaf label {
-        description "A descriptive string";
-        type string;
-      }
-
-      leaf default-value {
-        description "Default Value for the Input Parameter";
-        type string;
-      }
-    }
-  }
-
-  grouping nfvi-metrics {
-    container vcpu {
-      leaf label {
-        description
-          "Label to show in UI";
-        type string;
-        default "VCPU";
-      }
-
-      leaf total {
-        description
-          "The total number of VCPUs available.";
-        type uint64;
-      }
-
-      leaf utilization {
-        description
-          "The VCPU utilization (percentage).";
-        type decimal64 {
-          fraction-digits 2;
-          range "0 .. 100";
-        }
-      }
-    }
-
-    container memory {
-      leaf label {
-        description
-          "Label to show in UI";
-        type string;
-        default "MEMORY";
-      }
-
-      leaf used {
-        description
-          "The amount of memory (bytes) currently in use.";
-        type uint64;
-      }
-
-      leaf total {
-        description
-          "The amount of memory (bytes) available.";
-        type uint64;
-      }
-
-      leaf utilization {
-        description
-          "The memory utilization (percentage).";
-        type decimal64 {
-          fraction-digits 2;
-          range "0 .. 100";
-        }
-      }
-    }
-
-    container storage {
-      leaf label {
-        description
-          "Label to show in UI";
-        type string;
-        default "STORAGE";
-      }
-
-      leaf used {
-        description
-          "The amount of storage (bytes) currently in use.";
-        type uint64;
-      }
-
-      leaf total {
-        description
-          "The amount of storage (bytes) available.";
-        type uint64;
-      }
-
-      leaf utilization {
-        description
-          "The storage utilization (percentage).";
-        type decimal64 {
-          fraction-digits 2;
-          range "0 .. 100";
-        }
-      }
-    }
-
-    container external-ports {
-      leaf label {
-        description
-          "Label to show in UI";
-        type string;
-        default "EXTERNAL PORTS";
-      }
-
-      leaf total {
-        description
-          "The total number of external ports.";
-        type uint64;
-      }
-    }
-
-    container internal-ports {
-      leaf label {
-        description
-          "Label to show in UI";
-        type string;
-        default "INTERNAL PORTS";
-      }
-
-      leaf total {
-        description
-          "The total number of internal ports.";
-        type uint64;
-      }
-    }
-
-    container network {
-      leaf label {
-        description
-          "Label to show in UI";
-        type string;
-        default "NETWORK TRAFFIC";
-      }
-
-      container incoming {
-        leaf label {
-          description
-            "Label to show in UI";
-          type string;
-          default "INCOMING NETWORK TRAFFIC";
-        }
-
-        leaf bytes {
-          description
-            "The cumulative number of incoming bytes.";
-          type uint64;
-        }
-
-        leaf packets {
-          description
-            "The cumulative number of incoming packets.";
-          type uint64;
-        }
-
-        leaf byte-rate {
-          description
-            "The current incoming byte-rate (bytes per second).";
-          type decimal64 {
-            fraction-digits 2;
-          }
-        }
-
-        leaf packet-rate {
-          description
-            "The current incoming packet (packets per second).";
-          type decimal64 {
-            fraction-digits 2;
-          }
-        }
-      }
-
-      container outgoing {
-        leaf label {
-          description
-            "Label to show in UI";
-          type string;
-          default "OUTGOING NETWORK TRAFFIC";
-        }
-
-        leaf bytes {
-          description
-            "The cumulative number of outgoing bytes.";
-          type uint64;
-        }
-
-        leaf packets {
-          description
-            "The cumulative number of outgoing packets.";
-          type uint64;
-        }
-
-        leaf byte-rate {
-          description
-            "The current outgoing byte-rate (bytes per second).";
-          type decimal64 {
-            fraction-digits 2;
-          }
-        }
-
-        leaf packet-rate {
-          description
-            "The current outgoing packet (packets per second).";
-          type decimal64 {
-            fraction-digits 2;
-          }
-        }
-      }
-    }
-  }
-
-  typedef alarm-severity-type {
-    description "An indication of the importance or urgency of the alarm";
-    type enumeration {
-      enum LOW;
-      enum MODERATE;
-      enum CRITICAL;
-    }
-  }
-
-  typedef alarm-metric-type {
-    description "The type of metrics to register the alarm for";
-    type enumeration {
-      enum CPU_UTILIZATION;
-      enum MEMORY_UTILIZATION;
-      enum STORAGE_UTILIZATION;
-    }
-  }
-
-  typedef alarm-statistic-type {
-    description
-        "Statistic type to use to determine threshold crossing
-         for an alarm.";
-    type enumeration {
-      enum AVERAGE;
-      enum MINIMUM;
-      enum MAXIMUM;
-      enum COUNT;
-      enum SUM;
-    }
-  }
-
-  typedef alarm-operation-type {
-    description
-        "The relational operator used to define whether an alarm
-        should be triggered in certain scenarios, such as if the
-        metric statistic goes above or below a specified value.";
-    type enumeration {
-      enum GE; // greater than or equal
-      enum LE; // less than or equal
-      enum GT; // greater than
-      enum LT; // less than
-      enum EQ; // equal
-    }
-  }
-
-  grouping alarm {
-    leaf alarm-id {
-      description
-          "This field is reserved for the identifier assigned by the VIM provider";
-
-      type string;
-    }
-
-    leaf name {
-      description "A human readable string to identify the alarm";
-      type string;
-    }
-
-    leaf description {
-      description "A description of this alarm";
-      type string;
-    }
-
-    leaf vdur-id {
-      description
-          "The identifier of the VDUR that the alarm is associated with";
-      type string;
-    }
-
-    container actions {
-      list ok {
-        key "url";
-        leaf url {
-          type string;
-        }
-      }
-
-      list insufficient-data {
-        key "url";
-        leaf url {
-          type string;
-        }
-      }
-
-      list alarm {
-        key "url";
-        leaf url {
-          type string;
-        }
-      }
-    }
-
-    leaf repeat {
-      description
-          "This flag indicates whether the alarm should be repeatedly emitted
-          while the associated threshold has been crossed.";
-
-      type boolean;
-      default true;
-    }
-
-    leaf enabled {
-      description
-          "This flag indicates whether the alarm has been enabled or
-          disabled.";
-
-      type boolean;
-      default true;
-    }
-
-    leaf severity {
-      description "A measure of the importance or urgency of the alarm";
-      type alarm-severity-type;
-    }
-
-    leaf metric {
-      description "The metric to be tracked by this alarm.";
-      type alarm-metric-type;
-    }
-
-    leaf statistic {
-      description "The type of metric statistic that is tracked by this alarm";
-      type alarm-statistic-type;
-    }
-
-    leaf operation {
-      description
-          "The relational operator used to define whether an alarm should be
-           triggered in certain scenarios, such as if the metric statistic
-           goes above or below a specified value.";
-      type alarm-operation-type;
-    }
-
-    leaf value {
-      description
-          "This value defines the threshold that, if crossed, will trigger
-          the alarm.";
-      type decimal64 {
-        fraction-digits 4;
-      }
-    }
-
-    leaf period {
-      description
-          "The period defines the length of time (seconds) that the metric
-          data are collected over in oreder to evaluate the chosen
-          statistic.";
-      type uint32;
-    }
-
-    leaf evaluations {
-      description
-          "Defines the length of time (seconds) in which metric data are
-           collected in order to evaluate the chosen statistic.";
-      type uint32;
-    }
-  }
-
-  typedef cloud-account-type {
-    description "VIM account type";
-    type enumeration {
-      enum aws;
-      enum cloudsim;
-      enum cloudsim_proxy;
-      enum mock;
-      enum openmano;
-      enum openstack;
-      enum vsphere;
-      enum openvim;
-    }
-  }
-
-  grouping host-aggregate {
-    list host-aggregate {
-      description "Name of the Host Aggregate";
-      key "metadata-key";
-
-      leaf metadata-key {
-        description
-            "Name of the additional information attached to the host-aggregate";
-        type string;
-      }
-      leaf metadata-value {
-        description
-            "Value of the corresponding metadata-key";
-        type string;
-      }
-    }
-  }
-
-  grouping placement-group-input {
-    leaf cloud-type {
-      type manotypes:cloud-account-type;
-    }
-    choice cloud-provider {
-      case openstack {
-        container availability-zone {
-          description "Name of the Availability Zone";
-          leaf name {
-            type string;
-          }
-        }
-        container server-group {
-          description "Name of the Affinity/Anti-Affinity Server Group";
-          leaf name {
-            type string;
-          }
-        }
-        uses host-aggregate;
-      }
-      case aws {
-        leaf aws-construct {
-          type empty;
-        }
-      }
-      case openmano {
-        leaf openmano-construct {
-          type empty;
-        }
-      }
-      case vsphere {
-        leaf vsphere-construct {
-          type empty;
-        }
-      }
-      case mock {
-        leaf mock-construct {
-          type empty;
-        }
-      }
-      case cloudsim {
-        leaf cloudsim-construct {
-          type empty;
-        }
-      }
-    }
-  }
-
-  grouping cloud-config {
-    list key-pair {
-      key "name";
-      description "Used to configure the list of public keys to be injected as part
-          of ns instantiation";
-
-      leaf name {
-        description "Name of this key pair";
-        type string;
-      }
-
-      leaf key {
-        description "Key associated with this key pair";
-        type string;
-      }
-    }
-
-    list user {
-      key "name";
-      description "List of users to be added through cloud-config";
-
-      leaf name {
-        description "Name of the user ";
-        type string;
-      }
-
-      leaf user-info {
-        description "The user name's real name";
-        type string;
-      }
-
-      list key-pair {
-        key "name";
-        description "Used to configure the list of public keys to be injected as part
-            of ns instantiation";
-
-        leaf name {
-          description "Name of this key pair";
-          type string;
-        }
-
-        leaf key {
-          description "Key associated with this key pair";
-          type string;
-        }
-      }
-    }
-  }
-
-  grouping placement-group-info {
-    description "";
-
-    leaf name {
-      description
-          "Place group construct to define the compute resource placement strategy
-           in cloud environment";
-      type string;
-    }
-
-    leaf requirement {
-      description "This is free text space used to describe the intent/rationale
-                   behind this placement group. This is for human consumption only";
-      type string;
-    }
-
-    leaf strategy {
-      description
-          "Strategy associated with this placement group
-             Following values are possible
-               - COLOCATION: Colocation strategy imply intent to share the physical
-                             infrastructure (hypervisor/network) among all members
-                             of this group.
-               - ISOLATION: Isolation strategy imply intent to not share the physical
-                            infrastructure (hypervisor/network) among the members
-                            of this group.
-             ";
-      type enumeration {
-        enum COLOCATION;
-        enum ISOLATION;
-      }
-      default "COLOCATION";
-    }
-  }
-
-  grouping ip-profile-info {
-    description "Grouping for IP-Profile";
-    container ip-profile-params {
-
-      leaf ip-version {
-        type inet:ip-version;
-        default ipv4;
-      }
-
-      leaf subnet-address {
-        description "Subnet IP prefix associated with IP Profile";
-        type inet:ip-prefix;
-      }
-
-      leaf gateway-address {
-        description "IP Address of the default gateway associated with IP Profile";
-        type inet:ip-address;
-      }
-
-      leaf security-group {
-        description "Name of the security group";
-        type string;
-      }
-
-      list dns-server {
-        key "address";
-        leaf address {
-          description "List of DNS Servers associated with IP Profile";
-          type inet:ip-address;
-        }
-      }
-
-      container dhcp-params {
-        leaf enabled {
-          description "This flag indicates if DHCP is enabled or not";
-          type boolean;
-          default true;
-        }
-
-        leaf start-address {
-          description "Start IP address of the IP-Address range associated with DHCP domain";
-          type inet:ip-address;
-        }
-
-        leaf count {
-          description "Size of the DHCP pool associated with DHCP domain";
-          type uint32;
-        }
-      }
-
-      leaf subnet-prefix-pool {
-        description "VIM Specific reference to pre-created subnet prefix";
-        type string;
-      }
-    }
-  }
-
-  grouping ip-profile-list {
-    list ip-profiles {
-      description
-          "List of IP Profiles.
-             IP Profile describes the IP characteristics for the Virtual-Link";
-
-      key "name";
-
-      leaf name {
-        description "Name of the IP-Profile";
-        type string;
-      }
-
-      leaf description {
-        description "Description for IP profile";
-        type string;
-      }
-
-      uses ip-profile-info;
-    }
-  }
-
-  grouping config-file {
-    description "Grouping for files needed to be mounted into an additional drive";
-    list config-file {
-      description
-          "List of configuration files to be written on an additional drive";
-      key "source";
-      leaf source {
-        description "Name of the configuration file";
-        type string;
-      }
-      leaf dest {
-        description "Full path of the destination in the guest";
-        type string;
-      }
-    }
-  }
-
-  grouping supplemental-boot-data {
-    description "Grouping for custom vim data";
-    container supplemental-boot-data {
-      uses manotypes:config-file;
-      leaf boot-data-drive {
-        description "Some VIMs implement additional drives to host config-files or meta-data";
-        type boolean;
-        default false;
-      }
-    }
-  }
-
-  grouping volume-info {
-    description "Grouping for Volume-info";
-
-    leaf description {
-      description "Description for Volume";
-      type string;
-    }
-
-    leaf size {
-      description "Size of disk in GB";
-      type uint64;
-    }
-
-    choice volume-source {
-      description
-            "Defines the source of the volume. Possible options are
-             1. Ephemeral -- Empty disk
-             2. Image     -- Refer to image to be used for volume
-             3. Volume    -- Reference of pre-existing volume to be used
-            ";
-
-      case ephemeral {
-        leaf ephemeral {
-          type empty;
-        }
-      }
-
-      case image {
-        uses image-properties;
-      }
-    }
-
-    leaf device-bus {
-      description "Type of disk-bus on which this disk is exposed to guest";
-      type enumeration {
-        enum ide;
-        enum usb;
-        enum virtio;
-        enum scsi;
-      }
-    }
-
-    leaf device-type {
-      description "The type of device as exposed to guest";
-      type enumeration {
-          enum disk;
-          enum cdrom;
-          enum floppy;
-          enum lun;
-      }
-    }
-  }
-
-  grouping rpc-project-name {
-    leaf project-name {
-      default "default";
-      description
-        "Project to which this belongs";
-      type leafref {
-        path "/rw-project:project/rw-project:name";
-      }
-    }
-  }
-}
diff --git a/models/plugins/yang/nsd-base.yang b/models/plugins/yang/nsd-base.yang
deleted file mode 100644
index c332869..0000000
--- a/models/plugins/yang/nsd-base.yang
+++ /dev/null
@@ -1,781 +0,0 @@
-
-/*
- * 
- *   Copyright 2017 RIFT.IO Inc
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- *
- */
-
-module nsd-base
-{
-  namespace "http://riftio.com/ns/riftware-1.0/nsd-base";
-  prefix "nsd-base";
-
-  import ietf-inet-types {
-    prefix "inet";
-  }
-
-  import mano-types {
-    prefix "manotypes";
-  }
-
-  revision 2017-02-28 {
-    description
-      "Initial revision. This YANG file defines
-       the Network Service Descriptor (NSD)
-       common groupings";
-    reference
-      "Derived from earlier versions of base YANG files";
-  }
-
-  typedef scaling-trigger {
-    type enumeration {
-      enum pre-scale-in {
-        value 1;
-      }
-      enum post-scale-in {
-        value 2;
-      }
-      enum pre-scale-out {
-        value 3;
-      }
-      enum post-scale-out {
-        value 4;
-      }
-    }
-  }
-
-  typedef scaling-policy-type {
-    type enumeration {
-      enum manual {
-        value 1;
-      }
-      enum automatic {
-        value 2;
-      }
-    }
-  }
-
-  typedef scaling-criteria-operation {
-    type enumeration {
-      enum AND {
-        value 1;
-      }
-      enum OR {
-        value 2;
-      }
-    }
-  }
-
-  grouping primitive-parameter {
-    leaf name {
-      description
-          "Name of the parameter.";
-      type string;
-    }
-
-    leaf data-type {
-      description
-          "Data type associated with the name.";
-      type manotypes:parameter-data-type;
-    }
-
-    leaf mandatory {
-      description "Is this field mandatory";
-      type boolean;
-      default false;
-    }
-
-    leaf default-value {
-      description "The default value for this field";
-      type string;
-    }
-
-    leaf parameter-pool {
-      description "NSD parameter pool name to use for this parameter";
-      type string;
-    }
-  }
-
-  grouping nsd-descriptor-common {
-    leaf id {
-      description "Identifier for the NSD.";
-      type string {
-        length 1..63;
-      }
-    }
-
-    leaf name {
-      description "NSD name.";
-      mandatory true;
-      type string;
-    }
-
-    leaf short-name {
-      description "Short name to appear as label in the UI";
-      type string;
-    }
-
-    leaf vendor {
-      description "Vendor of the NSD.";
-      type string;
-    }
-
-    leaf logo {
-      description
-        "File path for  the vendor specific logo. For example icons/mylogo.png.
-         The logo  should be part of the network service";
-      type string;
-    }
-
-    leaf description {
-      description "Description of the NSD.";
-      type string;
-    }
-
-    leaf version {
-      description "Version of the NSD";
-      type string;
-    }
-
-    list connection-point {
-      description
-          "List for external connection points.
-          Each NS has one or more external connection
-          points. As the name implies that external
-          connection points are used for connecting
-          the NS to other NS or to external networks.
-          Each NS exposes these connection points to
-          the orchestrator. The orchestrator can
-          construct network service chains by
-          connecting the connection points between
-          different NS.";
-
-      key "name";
-      leaf name {
-        description
-            "Name of the NS connection point.";
-        type string;
-      }
-
-      leaf type {
-        description
-            "Type of the connection point.";
-        type manotypes:connection-point-type;
-      }
-    }
-
-    list scaling-group-descriptor {
-      description
-          "scaling group descriptor within this network service.
-           The scaling group defines a group of VNFs,
-           and the ratio of VNFs in the network service
-           that is used as target for scaling action";
-
-      key "name";
-
-      leaf name {
-        description "Name of this scaling group.";
-        type string;
-      }
-
-      list scaling-policy {
-
-        key "name";
-
-        leaf name {
-          description
-              "Name of the scaling policy";
-          type string;
-        }
-
-        leaf scaling-type {
-          description
-              "Type of scaling";
-          type scaling-policy-type;
-        }
-
-        leaf enabled {
-          description
-            "Specifies if the scaling policy can be applied";
-          type boolean;
-          default true;
-        }
-
-        leaf scale-in-operation-type {
-          description
-              "Operation to be applied to check between scaling criterias to
-               check if the scale in threshold condition has been met.
-               Defaults to AND";
-          type scaling-criteria-operation;
-          default AND;
-        }
-
-        leaf scale-out-operation-type {
-          description
-              "Operation to be applied to check between scaling criterias to
-               check if the scale out threshold condition has been met.
-               Defauls to OR";
-          type scaling-criteria-operation;
-          default OR;
-        }
-
-        leaf threshold-time {
-          description
-            "The duration for which the criteria must hold true";
-          type uint32;
-          mandatory true;
-        }
-
-        leaf cooldown-time {
-          description
-            "The duration after a scaling-in/scaling-out action has been
-            triggered, for which there will be no further optional";
-          type uint32;
-          mandatory true;
-        }
-
-        list scaling-criteria {
-          description
-              "list of conditions to be met for generating scaling
-                 requests";
-          key "name";
-
-          leaf name {
-            type string;
-          }
-
-          leaf scale-in-threshold {
-            description
-                "Value below which scale-in requests are generated";
-            type uint64;
-          }
-
-          leaf scale-out-threshold {
-            description
-                "Value above which scale-out requests are generated";
-            type uint64;
-          }
-
-          leaf ns-monitoring-param-ref {
-            description
-               "Reference to the NS level monitoring parameter
-                that is aggregated";
-            type leafref {
-              path "../../../../monitoring-param/id";
-            }
-          }
-        }
-      }
-
-      list vnfd-member {
-        description "List of VNFs in this scaling group";
-        key "member-vnf-index-ref";
-
-        leaf member-vnf-index-ref {
-          description "member VNF index of this member VNF";
-          type leafref {
-            path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-
-        leaf count {
-          description
-            "count of this member VNF  within this scaling group.
-             The count allows to define  the number of instances
-             when a scaling action targets this scaling group";
-          type uint32;
-          default 1;
-        }
-      }
-
-      leaf min-instance-count {
-        description
-          "Minimum instances of the scaling group which are allowed.
-          These instances are created by default when the network service
-          is instantiated.";
-        type uint32;
-        default 0;
-      }
-
-      leaf max-instance-count {
-        description
-          "Maximum instances of this scaling group that are allowed
-           in a single network service. The network service scaling
-           will fail, when the number of service group instances
-           exceed the max-instance-count specified.";
-        type uint32;
-        default 10;
-      }
-
-      list scaling-config-action {
-        description "List of scaling config actions";
-        key "trigger";
-
-        leaf trigger {
-          description "scaling trigger";
-          type scaling-trigger;
-        }
-
-        leaf ns-service-primitive-name-ref {
-          description "Reference to the NS service primitive";
-          type leafref {
-            path "../../../service-primitive/name";
-          }
-        }
-      }
-    }
-
-
-    list vnffgd {
-      description
-          "List of VNF Forwarding Graph Descriptors (VNFFGD).";
-
-      key "id";
-
-      leaf id {
-        description
-            "Identifier for the VNFFGD.";
-        type string;
-      }
-
-      leaf name {
-        description
-            "VNFFGD name.";
-        type string;
-      }
-
-      leaf short-name {
-        description
-            "Short name to appear as label in the UI";
-        type string;
-      }
-
-      leaf vendor {
-        description "Provider of the VNFFGD.";
-        type string;
-      }
-
-      leaf description {
-        description "Description of the VNFFGD.";
-        type string;
-      }
-
-      leaf version {
-        description "Version of the VNFFGD";
-        type string;
-      }
-
-      list rsp {
-        description
-          "List of Rendered Service Paths (RSP).";
-
-        key "id";
-
-        leaf id {
-          description
-            "Identifier for the RSP.";
-          type string;
-        }
-
-        leaf name {
-          description
-            "RSP name.";
-          type string;
-        }
-
-        list vnfd-connection-point-ref {
-          description
-            "A list of references to connection points.";
-          key "member-vnf-index-ref";
-
-          leaf member-vnf-index-ref {
-            description "Reference to member-vnf within constituent-vnfds";
-            type leafref {
-              path "../../../../constituent-vnfd/member-vnf-index";
-            }
-          }
-
-          leaf order {
-            type uint8;
-            description
-              "A number that denotes the order of a VNF in a chain";
-          }
-
-          leaf vnfd-id-ref {
-            description
-              "A reference to a vnfd. This is a
-                  leafref to path:
-                      ../../../../nsd:constituent-vnfd
-                      + [nsd:id = current()/../nsd:id-ref]
-                      + /nsd:vnfd-id-ref";
-
-             type leafref {
-                path "../../../../constituent-vnfd" +
-                     "[member-vnf-index = current()/../member-vnf-index-ref]" +
-                     "/vnfd-id-ref";
-             }
-           }
-
-          leaf vnfd-connection-point-ref {
-            description
-              "A reference to a connection point name
-                  in a vnfd. This is a leafref to path:
-                      /vnfd:vnfd-catalog/vnfd:vnfd
-                      + [vnfd:id = current()/../nsd:vnfd-id-ref]
-                      + /vnfd:connection-point/vnfd:name
-                  NOTE: An issue with confd is preventing the
-                  use of xpath. Seems to be an issue with leafref
-                  to leafref, whose target is in a different module.
-                  Once that is resolved this will switched to use
-                  leafref";
-            // TODO: Keeping as string as this needs to be
-            // diffenent lvel based of if it is nsd-catalog or
-            // in nsr.
-            // type leafref {
-            //   path "../../../../../../vnfd:vnfd-catalog/vnfd:vnfd" +
-            //        "[vnfd:id = current()/../vnfd-id-ref]/" +
-            //        "vnfd:connection-point/vnfd:name";
-            // }
-            type string;
-          }
-        }
-      } //rsp
-
-      list classifier {
-        description
-            "List of classifier rules.";
-
-        key "id";
-
-        leaf id {
-          description
-              "Identifier for the classifier rule.";
-          type string;
-        }
-
-        leaf name {
-          description
-              "Name of the classifier.";
-          type string;
-        }
-
-        leaf rsp-id-ref {
-          description
-              "A reference to the RSP.";
-          type leafref {
-            path "../../rsp/id";
-          }
-        }
-
-        leaf member-vnf-index-ref {
-          description "Reference to member-vnf within constituent-vnfds";
-          type leafref {
-            path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-
-        leaf vnfd-id-ref {
-          description
-              "A reference to a vnfd. This is a
-                  leafref to path:
-                      ../../../nsd:constituent-vnfd
-                      + [nsd:id = current()/../nsd:id-ref]
-                      + /nsd:vnfd-id-ref";
-
-          type leafref {
-              path "../../../constituent-vnfd" +
-                   "[member-vnf-index = current()/../member-vnf-index-ref]" +
-                   "/vnfd-id-ref";
-          }
-        }
-
-        leaf vnfd-connection-point-ref {
-          description
-              "A reference to a connection point name
-                  in a vnfd. This is a leafref to path:
-                      /vnfd:vnfd-catalog/vnfd:vnfd
-                      + [vnfd:id = current()/../nsd:vnfd-id-ref]
-                      + /vnfd:connection-point/vnfd:name
-                  NOTE: An issue with confd is preventing the
-                  use of xpath. Seems to be an issue with leafref
-                  to leafref, whose target is in a different module.
-                  Once that is resolved this will switched to use
-                  leafref";
-          // TODO: Keeping as string as this needs to be
-          // diffenent lvel based of if it is nsd-catalog or
-          // in nsr.
-          // type leafref {
-          //     path "../../../../../vnfd:vnfd-catalog/vnfd:vnfd" +
-          //          "[vnfd:id = current()/../vnfd-id-ref]/" +
-          //          "vnfd:connection-point/vnfd:name";
-          // }
-          type string;
-        }
-
-        list match-attributes {
-          description
-              "List of match attributes.";
-
-          key "id";
-
-          leaf id {
-            description
-                "Identifier for the classifier match attribute rule.";
-            type string;
-          }
-
-          leaf ip-proto {
-            description
-                "IP Protocol.";
-            type uint8;
-          }
-
-          leaf source-ip-address {
-            description
-                "Source IP address.";
-            type inet:ip-address;
-          }
-
-          leaf destination-ip-address {
-            description
-                "Destination IP address.";
-            type inet:ip-address;
-          }
-
-          leaf source-port {
-            description
-                "Source port number.";
-            type inet:port-number;
-          }
-
-          leaf destination-port {
-            description
-                "Destination port number.";
-            type inet:port-number;
-          }
-          //TODO: Add more match criteria
-        } //match-attributes
-      } // classifier
-    } // vnffgd
-
-    uses manotypes:ip-profile-list;
-
-    list initial-service-primitive {
-      description
-        "Initial set of service primitives for NSD.";
-      key "seq";
-
-      uses manotypes:event-config;
-    }
-
-    list terminate-service-primitive {
-      description
-        "Set of service primitives during
-         termination for NSD.";
-      key "seq";
-
-      uses manotypes:event-config;
-    }
-
-    uses manotypes:input-parameter-xpath;
-
-    list parameter-pool {
-      description
-        "Pool of parameter values which must be
-         pulled from during configuration";
-      key "name";
-
-      leaf name {
-        description
-            "Name of the configuration value pool";
-        type string;
-      }
-
-      container range {
-        description
-            "Create a range of values to populate the pool with";
-
-        leaf start-value {
-          description
-              "Generated pool values start at this value";
-          type uint32;
-          mandatory true;
-        }
-
-        leaf end-value {
-          description
-              "Generated pool values stop at this value";
-          type uint32;
-          mandatory true;
-        }
-      }
-    }
-
-    list key-pair {
-      key "name";
-      description "Used to configure the list of public keys to be injected as part
-          of ns instantiation";
-
-      leaf name {
-        description "Name of this key pair";
-        type string;
-      }
-
-      leaf key {
-        description "Key associated with this key pair";
-        type string;
-      }
-    }
-
-    list user {
-      key "name";
-      description "List of users to be added through cloud-config";
-
-      leaf name {
-        description "Name of the user ";
-        type string;
-      }
-
-      leaf user-info {
-        description "The user name's real name";
-        type string;
-      }
-
-      list key-pair {
-        key "name";
-        description "Used to configure the list of public keys to be injected as part
-            of ns instantiation";
-
-        leaf name {
-          description "Name of this key pair";
-          type string;
-        }
-
-        leaf key {
-          description "Key associated with this key pair";
-          type string;
-        }
-      }
-    }
-  }
-
-  grouping nsd-vld-common {
-    /* Still having issues modelling this,
-       see the comments under vnfd-connection-point-ref
-    */
-    description
-      "List of Virtual Link Descriptors.";
-
-    leaf id {
-      description
-        "Identifier for the VLD.";
-      type string;
-    }
-
-    leaf name {
-      description
-        "Virtual Link Descriptor (VLD) name.";
-      type string;
-    }
-
-    leaf short-name {
-      description
-        "Short name to appear as label in the UI";
-      type string;
-    }
-
-    leaf vendor {
-      description "Provider of the VLD.";
-      type string;
-    }
-
-    leaf description {
-      description "Description of the VLD.";
-      type string;
-    }
-
-    leaf version {
-      description "Version of the VLD";
-      type string;
-    }
-
-    leaf type {
-      type manotypes:virtual-link-type;
-    }
-
-    leaf root-bandwidth {
-      description
-        "For ELAN this is the aggregate bandwidth.";
-      type uint64;
-    }
-
-    leaf leaf-bandwidth {
-      description
-        "For ELAN this is the bandwidth of branches.";
-      type uint64;
-    }
-
-    // replicate for pnfd container here
-    uses manotypes:provider-network;
-
-    leaf mgmt-network {
-      description "Flag indicating whether this network is a VIM management network";
-      type boolean;
-      default false;
-    }
-
-    choice init-params {
-      description "Extra parameters for VLD instantiation";
-
-      case vim-network-ref {
-        leaf vim-network-name {
-          description
-            "Name of network in VIM account. This is used to indicate
-                   pre-provisioned network name in cloud account.";
-          type string;
-        }
-      }
-
-      case vim-network-profile {
-        leaf ip-profile-ref {
-          description "Named reference to IP-profile object";
-          type leafref {
-            path "../../ip-profiles/name";
-          }
-        }
-      }
-
-    }
-  }
-
-  grouping monitoring-param-common {
-    description
-      "List of monitoring parameters from VNF's that should be
-        propogated up into NSR";
-
-    leaf id {
-      type string;
-    }
-
-    leaf name {
-      type string;
-    }
-
-    uses manotypes:monitoring-param-value;
-    uses manotypes:monitoring-param-ui-data;
-    uses manotypes:monitoring-param-aggregation;
-  }
-}
diff --git a/models/plugins/yang/nsd.yang b/models/plugins/yang/nsd.yang
deleted file mode 100644
index 4a88eac..0000000
--- a/models/plugins/yang/nsd.yang
+++ /dev/null
@@ -1,319 +0,0 @@
-
-/*
- *
- *   Copyright 2016-2017 RIFT.IO Inc
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- *
- */
-
-module nsd
-{
-  namespace "urn:ietf:params:xml:ns:yang:nfvo:nsd";
-  prefix "nsd";
-
-  import vnfd {
-    prefix "vnfd";
-  }
-
-  import nsd-base {
-    prefix "nsd-base";
-  }
-
-  import mano-types {
-    prefix "manotypes";
-  }
-
-  revision 2017-02-28 {
-    description
-      "Update model to support projects.";
-  }
-
-  revision 2014-10-27 {
-    description
-      "Initial revision. This YANG file defines
-       the Network Service Descriptor (NSD)";
-    reference
-      "Derived from earlier versions of base YANG files";
-  }
-
-  grouping nsd-constituent-vnfd {
-    list constituent-vnfd {
-      description
-          "List of VNFDs that are part of this
-          network service.";
-
-      key "member-vnf-index";
-
-      leaf member-vnf-index {
-        description
-          "Identifier/index for the VNFD. This separate id
-           is required to ensure that multiple VNFs can be
-           part of single NS";
-        type uint64;
-      }
-
-      leaf vnfd-id-ref {
-        description
-          "Identifier for the VNFD.";
-        type leafref {
-          path "/vnfd:vnfd-catalog/vnfd:vnfd/vnfd:id";
-        }
-      }
-
-      leaf start-by-default {
-        description
-          "VNFD is started as part of the NS instantiation";
-        type boolean;
-        default true;
-      }
-    }
-  }
-
-  grouping nsd-vld {
-    list vld {
-
-      key "id";
-
-      uses nsd-base:nsd-vld-common;
-
-      list vnfd-connection-point-ref {
-        description
-            "A list of references to connection points.";
-        key "member-vnf-index-ref vnfd-connection-point-ref";
-
-        leaf member-vnf-index-ref {
-          description "Reference to member-vnf within constituent-vnfds";
-          type leafref {
-            path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-
-        leaf vnfd-id-ref {
-          description
-              "A reference to a VNFD";
-          type leafref {
-            path "../../../constituent-vnfd" +
-                 "[member-vnf-index = current()/../member-vnf-index-ref]" +
-                 "/vnfd-id-ref";
-          }
-        }
-
-        leaf vnfd-connection-point-ref {
-          description "A reference to a connection point name";
-          type leafref {
-            path "/vnfd:vnfd-catalog/vnfd:vnfd" +
-                 "[vnfd:id = current()/../vnfd-id-ref]/" +
-                 "vnfd:connection-point/vnfd:name";
-          }
-        }
-      }
-    }
-  }
-
-  grouping nsd-vnf-dependency {
-    list vnf-dependency {
-      description
-          "List of VNF dependencies.";
-      key vnf-source-ref;
-      leaf vnf-source-ref {
-        type leafref {
-          path "/vnfd:vnfd-catalog/vnfd:vnfd/vnfd:id";
-        }
-      }
-      leaf vnf-depends-on-ref {
-        description
-            "Reference to VNF that sorce VNF depends.";
-        type leafref {
-          path "/vnfd:vnfd-catalog/vnfd:vnfd/vnfd:id";
-        }
-      }
-    }
-  }
-
-  grouping nsd-placement-groups {
-    list placement-groups {
-      description "List of placement groups at NS level";
-
-      key "name";
-      uses manotypes:placement-group-info;
-
-      list member-vnfd {
-        description
-            "List of VNFDs that are part of this placement group";
-
-        key "member-vnf-index-ref";
-
-        leaf member-vnf-index-ref {
-          description "Member VNF index of this member VNF";
-          type leafref {
-            path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-
-        leaf vnfd-id-ref {
-          description
-              "Identifier for the VNFD.";
-          type leafref {
-            path "../../../constituent-vnfd" + 
-                 "[member-vnf-index = current()/../member-vnf-index-ref]" +
-                 "/vnfd-id-ref";
-          }
-        }
-      }
-    }
-  }
-
-  grouping nsd-monitoring-param {
-
-    list monitoring-param {
-      key id;
-
-      uses nsd-base:monitoring-param-common;
-
-      list vnfd-monitoring-param {
-        description "A list of VNFD monitoring params";
-        key "member-vnf-index-ref vnfd-monitoring-param-ref";
-
-        leaf vnfd-id-ref {
-          description
-             "A reference to a VNFD. This is a leafref";
-
-          type leafref {
-            path "../../../constituent-vnfd" +
-                 "[member-vnf-index = current()/../member-vnf-index-ref]" +
-                 "/vnfd-id-ref";
-          }
-        }
-
-        leaf vnfd-monitoring-param-ref {
-          description "A reference to the VNFD monitoring param";
-          type leafref {
-            path "/vnfd:vnfd-catalog/vnfd:vnfd"
-              + "[vnfd:id = current()/../vnfd-id-ref]"
-              + "/vnfd:monitoring-param/vnfd:id";
-          }
-        }
-
-        leaf member-vnf-index-ref {
-          description
-            "Mandatory reference to member-vnf within constituent-vnfds";
-          type leafref {
-            path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-      }
-    }
-  }
-
-  grouping nsd-service-primitive {
-   list service-primitive {
-      description
-          "Network service level service primitives.";
-
-      key "name";
-
-      leaf name {
-        description
-            "Name of the service primitive.";
-        type string;
-      }
-
-      list parameter {
-        description
-            "List of parameters for the service primitive.";
-
-        key "name";
-        uses manotypes:primitive-parameter;
-      }
-
-      uses manotypes:ui-primitive-group;
-
-      list vnf-primitive-group {
-        description
-            "List of service primitives grouped by VNF.";
-
-        key "member-vnf-index-ref";
-        leaf member-vnf-index-ref {
-          description
-              "Reference to member-vnf within constituent-vnfds";
-          type leafref {
-             path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-
-        leaf vnfd-id-ref {
-          description
-              "A reference to a VNFD. This is a leafref";
-
-          type leafref {
-             path "../../../constituent-vnfd" +
-                "[member-vnf-index = current()/../member-vnf-index-ref]" + "/vnfd-id-ref";
-          }
-        }
-
-        leaf vnfd-name {
-          description
-              "Name of the VNFD";
-          type leafref {
-              path "/vnfd:vnfd-catalog/vnfd:vnfd"
-                    + "[vnfd:id = current()/../vnfd-id-ref]"
-                    + "/vnfd:name";
-          }
-        }
-
-        list primitive {
-          key "index";
-
-          leaf index {
-            description "Index of this primitive";
-            type uint32;
-          }
-
-          leaf name {
-            description "Name of the primitive in the VNF primitive ";
-            type string;
-          }
-        }
-      }
-
-      leaf user-defined-script {
-        description
-            "A user defined script.";
-        type string;
-      }
-    }
-  }
-
-  container nsd-catalog {
-
-    list nsd {
-      key id;
-
-      uses nsd-base:nsd-descriptor-common;
-
-      uses nsd-vld;
-
-      uses nsd-constituent-vnfd;
-
-      uses nsd-placement-groups;
-
-      uses nsd-vnf-dependency;
-
-      uses nsd-monitoring-param;
-
-      uses nsd-service-primitive;
-    }
-  }
-}
diff --git a/models/plugins/yang/nsr.yang b/models/plugins/yang/nsr.yang
deleted file mode 100644
index 12cf850..0000000
--- a/models/plugins/yang/nsr.yang
+++ /dev/null
@@ -1,1610 +0,0 @@
-
-/*
- * 
- *   Copyright 2016-2017 RIFT.IO Inc
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- *
- */
-
-module nsr
-{
-  namespace "urn:ietf:params:xml:ns:yang:nfvo:nsr";
-  prefix "nsr";
-
-  import vlr {
-    prefix "vlr";
-  }
-
-  import nsd-base {
-    prefix "nsd-base";
-  }
-
-  import project-nsd {
-    prefix "project-nsd";
-  }
-
-  import project-vnfd {
-    prefix "project-vnfd";
-  }
-
-  import vnfr {
-    prefix "vnfr";
-  }
-
-  import ietf-inet-types {
-    prefix "inet";
-  }
-
-  import ietf-yang-types {
-    prefix "yang";
-  }
-
-  import mano-types {
-    prefix "manotypes";
-  }
-
-  import rw-project {
-    prefix "rw-project";
-  }
-
-  revision 2017-02-08 {
-    description
-      "Update model to support projects.";
-  }
-
-  revision 2015-09-10 {
-    description
-      "Initial revision. This YANG file defines
-       the Network Service Record (NSR)";
-    reference
-      "Derived from earlier versions of base YANG files";
-  }
-
-  typedef vnffgr-operational-status {
-    type enumeration {
-      enum init;
-      enum running;
-      enum terminate;
-      enum terminated;
-      enum failed;
-    }
-  }
-
-  typedef ns-operational-status {
-    type enumeration {
-      enum init;
-      enum vl-init-phase;
-      enum vnf-init-phase;
-      enum running;
-      enum terminate;
-      enum vnf-terminate-phase;
-      enum vl-terminate-phase;
-      enum terminated;
-      enum failed;
-      enum scaling-out;
-      enum scaling-in;
-      enum vl-instantiate;
-      enum vl-terminate;
-    }
-  }
-
-  typedef config-states {
-    type enumeration {
-      enum init;
-      enum configuring;
-      enum config_not_needed;
-      enum configured;
-      enum failed;
-      enum terminate;
-    }
-  }
-
-  typedef trigger-type {
-    type enumeration {
-      enum ns-primitive;
-      enum vnf-primitive;
-    }
-  }
-
-  grouping cloud-config {
-    description "List of cloud config parameters";
-
-    list ssh-authorized-key {
-      key "key-pair-ref";
-
-      description "List of authorized ssh keys as part of cloud-config";
-
-      leaf key-pair-ref {
-        description "A reference to the key pair entry in the global key pair table";
-        type leafref {
-          path "../../../../key-pair/name";
-        }
-      }
-    }
-    list user {
-      key "name";
-      description "Used to configure the list of public keys to be injected as part
-                 of ns instantiation";
-      leaf name {
-        description "Name of this key pair";
-        type string;
-      }
-      leaf user-info {
-        description "The user name's real name";
-        type string;
-      }
-      list ssh-authorized-key {
-        key "key-pair-ref";
-
-        description "Used to configure the list of public keys to be injected as part
-                        of ns instantiation";
-
-        leaf key-pair-ref {
-          description "A reference to the key pair entry in the global key pair table";
-          type leafref {
-            path "../../../../../key-pair/name";
-          }
-        }
-      }
-    }
-  }
-
-  augment "/rw-project:project" {
-    list key-pair {
-      key "name";
-      description "Used to configure the list of public keys to be injected as part
-                 of ns instantiation";
-      leaf name {
-        description "Name of this key pair";
-        type string;
-      }
-
-      leaf key {
-        description "Key associated with this key pair";
-        type string;
-      }
-    }
-  }
-
-  grouping event-service-primitive {
-    leaf seq {
-      description
-          "Sequence number for the service primitive.";
-      type uint64;
-    }
-
-    leaf name {
-      description
-          "Name of the service primitive.";
-      type string;
-      mandatory "true";
-    }
-
-    leaf user-defined-script {
-      description
-          "A user defined script.";
-      type string;
-    }
-
-    list parameter {
-      key "name";
-      leaf name {
-        type string;
-      }
-
-      leaf value {
-        type string;
-      }
-    }
-  }
-
-  augment "/rw-project:project" {
-    container ns-instance-config {
-
-      list nsr {
-        key "id";
-        unique "name";
-
-        leaf id {
-          description "Identifier for the NSR.";
-          type yang:uuid;
-        }
-
-        leaf name {
-          description "NSR name.";
-          type string;
-        }
-
-        leaf short-name {
-          description "NSR short name.";
-          type string;
-        }
-
-        leaf description {
-          description "NSR description.";
-          type string;
-        }
-
-        leaf admin-status {
-          description
-            "This is the administrative status of the NS instance";
-
-          type enumeration {
-            enum ENABLED;
-            enum DISABLED;
-          }
-        }
-
-        container nsd {
-          description "NS descriptor used to instantiate this NS";
-
-          uses nsd-base:nsd-descriptor-common;
-
-          uses project-nsd:nsr-nsd-vld;
-
-          uses project-nsd:nsr-nsd-constituent-vnfd;
-
-          uses project-nsd:nsr-nsd-placement-groups;
-
-          uses project-nsd:nsr-nsd-vnf-dependency;
-
-          uses project-nsd:nsr-nsd-monitoring-param;
-
-          uses project-nsd:nsr-nsd-service-primitive;
-        }
-        uses ns-instance-config-params;
-      }
-    }
-  }
-
-  grouping ns-instance-config-params-common {
-    uses manotypes:input-parameter;
-
-    list scaling-group {
-      description "List of ns scaling group instances";
-      key "scaling-group-name-ref";
-
-      leaf scaling-group-name-ref {
-        description "name of the scaling group
-        leafref path ../nsd/scaling-group-descriptor/name";
-        type string;
-      }
-
-      list instance {
-        description "The instance of the scaling group";
-        key "id";
-        leaf id {
-          description "Scaling group instance uuid";
-          type uint16;
-        }
-      }
-    }
-
-    list nsd-placement-group-maps {
-      description
-          "Mapping from mano-placement groups construct from NSD to cloud
-           platform placement group construct";
-
-      key "placement-group-ref";
-
-      leaf placement-group-ref {
-        description
-          "Reference for NSD placement group";
-        // type leafref {
-        //   path "../../nsd/placement-groups/name";
-        // }
-        type string;
-      }
-      uses manotypes:placement-group-input;
-    }
-  }
-
-  grouping ns-instance-config-params {
-    uses ns-instance-config-params-common;
-
-    list vnfd-placement-group-maps {
-      description
-        "Mapping from mano-placement groups construct from VNFD to cloud
-          platform placement group construct";
-
-      key "placement-group-ref vnfd-id-ref";
-
-      leaf vnfd-id-ref {
-        description
-          "A reference to a vnfd. This is a
-          leafref to path:
-          ../../../../project-nsd:constituent-vnfd
-          + [id = current()/../id-ref]
-          + /project-nsd:vnfd-id-ref
-          NOTE: An issue with confd is preventing the
-          use of xpath. Seems to be an issue with leafref
-          to leafref, whose target is in a different module.
-          Once that is resolved this will switched to use
-          leafref";
-        type yang:uuid;
-      }
-
-      leaf placement-group-ref {
-        description
-          "A reference to VNFD placement group";
-        type leafref {
-          path "../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd[project-vnfd:id = " +
-            "current()/../vnfd-id-ref]/project-vnfd:placement-groups/project-vnfd:name";
-        }
-      }
-
-      uses manotypes:placement-group-input;
-    }
-
-    uses cloud-config;
-  }
-
-  grouping vnffgr {
-
-    list vnffgr {
-      key "id";
-
-      leaf id {
-        description "Identifier for the VNFFGR.";
-        type yang:uuid;
-      }
-
-      leaf vnffgd-id-ref {
-        description "VNFFG descriptor id reference";
-        type leafref {
-          path "../../../../ns-instance-config/nsr"
-            + "[id=current()/../../ns-instance-config-ref]"
-            + "/nsd/vnffgd/id";
-        }
-      }
-
-      leaf vnffgd-name-ref {
-        description "VNFFG descriptor name reference";
-        type leafref {
-            path "../../../../ns-instance-config/nsr"
-              + "[id=current()/../../ns-instance-config-ref]"
-              + "/nsd/vnffgd"
-              + "[id=current()/../vnffgd-id-ref]"
-              + "/name";
-        }
-      }
-
-      leaf sdn-account {
-        description
-            "The SDN account to use when requesting resources for
-            this vnffgr";
-        type string;
-      }
-
-      leaf cloud-account {
-        description "Cloud Account in which NSR is instantiated";
-        type string;
-      }
-
-      leaf operational-status {
-        description
-          "The operational status of the VNFFGR instance
-            init                : The VNFFGR has just started.
-            running             : The VNFFGR is in running state.
-            terminate           : The VNFFGR is being terminated.
-            terminated          : The VNFFGR is in the terminated state.
-            failed              : The VNFFGR instantiation failed
-          ";
-        type vnffgr-operational-status;
-      }
-
-      list rsp {
-        key "id";
-
-        leaf id {
-          description
-              "Identifier for the RSP.";
-          type yang:uuid;
-        }
-
-        leaf name {
-          description
-              "Name for the RSP";
-          type string;
-        }
-
-        leaf rsp-id {
-          description
-              "Returned Identifier for the RSP.";
-          type yang:uuid;
-        }
-
-        leaf vnffgd-rsp-id-ref {
-          description
-              "Identifier for the VNFFG Descriptor RSP reference";
-          type leafref {
-            path "../../../../../ns-instance-config/nsr"
-              + "[id=current()/../../../ns-instance-config-ref]"
-              + "/nsd/vnffgd"
-              + "[id=current()/../../vnffgd-id-ref]"
-              + "/rsp/id";
-          }
-        }
-
-        leaf vnffgd-rsp-name-ref {
-          description
-              "Name for the VNFFG Descriptor RSP reference";
-          type leafref {
-            path "../../../../../ns-instance-config/nsr"
-              + "[id=current()/../../../ns-instance-config-ref]"
-              + "/nsd/vnffgd"
-              + "[id=current()/../../vnffgd-id-ref]"
-              + "/rsp"
-              + "[id=current()/../vnffgd-rsp-id-ref]"
-              + "/name";
-          }
-        }
-
-        leaf classifier-name {
-          type string;
-        }
-
-        leaf path-id {
-          description
-              "Unique Identifier for the service path";
-          type uint32;
-        }
-
-        list vnfr-connection-point-ref {
-          key "hop-number";
-          leaf hop-number {
-            description
-                "Monotonically increasing number to show service path hop
-                order";
-            type uint8;
-          }
-          leaf service-function-type {
-            description
-                "Type of Service Function.
-                NOTE: This needs to map with Service Function Type in ODL to
-                support VNFFG. Service Function Type is mandatory param in ODL
-                SFC. This is temporarily set to string for ease of use";
-            type string;
-          }
-
-          leaf member-vnf-index-ref {
-            type uint64;
-          }
-          leaf vnfd-id-ref {
-            description
-                "Reference to VNF Descriptor Id";
-            type string;
-          }
-          leaf vnfr-id-ref {
-            description
-                "A reference to a vnfr id";
-                type leafref {
-                  path "../../../../../../vnfr:vnfr-catalog/vnfr:vnfr/vnfr:id";
-                }
-          }
-          leaf vnfr-name-ref {
-            description
-                "A reference to a vnfr name";
-                type leafref {
-                  path "../../../../../../vnfr:vnfr-catalog/vnfr:vnfr/vnfr:name";
-                }
-          }
-          leaf vnfr-connection-point-ref {
-            description
-                "A reference to a vnfr connection point.";
-            type leafref {
-              path "../../../../../../vnfr:vnfr-catalog/vnfr:vnfr"
-                 + "[vnfr:id = current()/../vnfr-id-ref]"
-                 + "/vnfr:connection-point/vnfr:name";
-            }
-          }
-          leaf service-index {
-            description
-                "Location within the service path";
-            type uint8;
-          }
-          container connection-point-params {
-            leaf mgmt-address {
-              type inet:ip-address;
-            }
-            leaf name {
-              type string;
-            }
-            leaf port-id {
-              type string;
-            }
-            leaf vm-id {
-              type string;
-            }
-            leaf address {
-              type inet:ip-address;
-            }
-            leaf port {
-              type inet:port-number;
-            }
-          }
-
-          container service-function-forwarder {
-            leaf name {
-              description
-                  "Service Function Forwarder name";
-              type string;
-            }
-            leaf ip-address {
-              description
-                  "Data Plane IP Address of the SFF";
-              type inet:ip-address;
-            }
-            leaf port {
-              description
-                  "Data Plane Port of the SFF";
-              type inet:port-number;
-            }
-          }
-        }
-      }
-
-      list classifier {
-          key "id";
-
-          leaf id {
-            description
-                "Identifier for the classifier rule.";
-            type yang:uuid;
-          }
-          leaf name {
-            description
-                "Name of the classifier.";
-            type string;
-          }
-          leaf-list classifier-id {
-            description
-                "Returned Identifier for the classifier rule.";
-            type yang:uuid;
-          }
-          leaf rsp-id-ref {
-            description
-                "A reference to the RSP.";
-            type leafref {
-              path "../../rsp/id";
-            }
-          }
-          leaf rsp-name {
-            description
-              "Name for the RSP";
-            type string;
-          }
-          leaf vnfr-id-ref {
-            description
-                "A reference to a vnfr id";
-                type leafref {
-                  path "../../../../../vnfr:vnfr-catalog/vnfr:vnfr/vnfr:id";
-                }
-          }
-          leaf vnfr-name-ref {
-            description
-                "A reference to a vnfr name";
-                type leafref {
-                  path "../../../../../vnfr:vnfr-catalog/vnfr:vnfr/vnfr:name";
-                }
-          }
-          leaf vnfr-connection-point-ref {
-            description
-                "A reference to a vnfr connection point.";
-            type leafref {
-              path "../../../../../vnfr:vnfr-catalog/vnfr:vnfr"
-                 + "[vnfr:id = current()/../vnfr-id-ref]"
-                 + "/vnfr:connection-point/vnfr:name";
-            }
-          }
-          leaf port-id {
-            type string;
-          }
-          leaf vm-id {
-            type string;
-          }
-          leaf ip-address {
-            type string;
-          }
-          leaf sff-name {
-            type string;
-          }
-      }
-    }
-  }
-
-  augment "/rw-project:project" {
-    container ns-instance-opdata {
-      config false;
-
-      list nsr {
-        key "ns-instance-config-ref";
-
-        leaf ns-instance-config-ref {
-          type leafref {
-            path "../../../ns-instance-config/nsr/id";
-          }
-          // type yang:uuid;
-        }
-
-        leaf name-ref {
-          description "Network service name reference";
-          type leafref {
-            path "../../../ns-instance-config/nsr" +
-              "[id=current()/../ns-instance-config-ref]" +
-              "/name";
-          }
-        }
-
-        leaf nsd-ref {
-          description "Network service descriptor id reference";
-          type leafref {
-            path "../../../ns-instance-config/nsr"
-              + "[id=current()/../ns-instance-config-ref]"
-              + "/nsd/id";
-          }
-        }
-
-        leaf nsd-name-ref {
-          description "Network service descriptor name reference";
-          type leafref {
-            path "../../../ns-instance-config/nsr"
-              + "[id=current()/../ns-instance-config-ref]"
-              + "/nsd/name";
-          }
-        }
-
-        leaf create-time {
-          description
-            "Creation timestamp of this Network Service.
-          The timestamp is expressed as seconds
-          since unix epoch - 1970-01-01T00:00:00Z";
-
-          type uint32;
-        }
-
-        leaf uptime {
-          description
-            "Active period of this Network Service.
-          Uptime is expressed in seconds";
-
-          type uint32;
-        }
-
-        list connection-point {
-          description
-            "List for external connection points.
-            Each NS has one or more external connection points.
-            As the name implies that external connection points
-            are used for connecting the NS to other NS or to
-            external networks. Each NS exposes these connection
-            points to the orchestrator. The orchestrator can
-            construct network service chains by connecting the
-            connection points between different NS.";
-
-          key "name";
-          leaf name {
-            description
-              "Name of the NS connection point.";
-            type string;
-          }
-
-          leaf type {
-            description
-              "Type of the connection point.";
-            type manotypes:connection-point-type;
-          }
-        }
-
-        list vlr {
-          key "vlr-ref";
-          leaf vlr-ref {
-            description
-              "Reference to a VLR record in the VLR catalog";
-            type leafref {
-              path "../../../../vlr:vlr-catalog/vlr:vlr/vlr:id";
-            }
-          }
-
-
-          list vnfr-connection-point-ref {
-            description
-              "A list of references to connection points.";
-            key "vnfr-id";
-
-            leaf vnfr-id {
-              description "A reference to a vnfr";
-              type leafref {
-                path "../../../../../vnfr:vnfr-catalog/vnfr:vnfr/vnfr:id";
-              }
-            }
-
-            leaf connection-point {
-              description
-                "A reference to a connection point name in a vnfr";
-              type leafref {
-                path "../../../../../vnfr:vnfr-catalog/vnfr:vnfr"
-                  + "[vnfr:id = current()/../vnfr-id]"
-                  + "/vnfr:connection-point/vnfr:name";
-              }
-            }
-          }
-        }
-
-        list constituent-vnfr-ref {
-          description
-            "List of VNFRs that are part of this
-             network service.";
-          key "vnfr-id";
-
-          leaf vnfr-id {
-            description
-              "Reference to the VNFR id
-               This should be a leafref to /vnfr:vnfr-catalog/vnfr:vnfr/vnfr:id
-               But due to confd bug (RIFT-9451), changing to string.";
-            type string;
-          }
-        }
-
-        list scaling-group-record {
-          description "List of scaling group records";
-          key "scaling-group-name-ref";
-
-          leaf scaling-group-name-ref {
-            description "name of the scaling group";
-            type leafref {
-              path "../../../../ns-instance-config/nsr"
-                + "[id=current()/../../ns-instance-config-ref]"
-                + "/nsd/scaling-group-descriptor/name";
-            }
-          }
-
-          list instance {
-            description "Reference to scaling group instance record";
-            key "instance-id";
-            leaf instance-id {
-              description "Scaling group instance id";
-              type uint16;
-            }
-
-            leaf is-default {
-              description "Flag indicating whether this instance was part of
-                default scaling group (and thus undeletable)";
-              type boolean;
-            }
-
-            leaf op-status {
-              description
-                "The operational status of the NS instance
-                init                : The scaling group has just started.
-                vnf-init-phase      : The VNFs in the scaling group are being instantiated.
-                running             : The scaling group  is in running state.
-                terminate           : The scaling group is being terminated.
-                vnf-terminate-phase : The VNFs in the scaling group are being terminated.
-                terminated          : The scaling group  is in the terminated state.
-                failed              : The scaling group instantiation failed.
-              ";
-
-              type enumeration {
-                enum init;
-                enum vnf-init-phase;
-                enum running;
-                enum terminate;
-                enum vnf-terminate-phase;
-                enum terminated;
-                enum failed;
-              }
-            }
-
-            leaf config-status {
-              description
-                "The configuration status of the scaling group instance
-               configuring : At least one of the VNFs in this scaling group instance
-                             is in configuring state
-               configured  : All the VNFs in this scaling group instance are
-                             configured or config-not-needed state
-               failed      : Configuring this scaling group instance failed
-              ";
-              type config-states;
-            }
-
-            leaf error-msg {
-              description
-                "Reason for failure in configuration of this scaling instance";
-              type string;
-            }
-
-            leaf create-time {
-              description
-                "Creation timestamp of this scaling group record.
-              The timestamp is expressed as seconds
-              since unix epoch - 1970-01-01T00:00:00Z";
-
-              type uint32;
-            }
-
-            leaf-list vnfrs {
-              description "Reference to VNFR within the scale instance";
-              type leafref {
-                path "../../../constituent-vnfr-ref/vnfr-id";
-              }
-            }
-          }
-        }
-
-        uses vnffgr;
-
-        leaf operational-status {
-          description
-            "The operational status of the NS instance
-            init                : The network service has just started.
-            vl-init-phase       : The VLs in the NS are being instantiated.
-            vnf-init-phase      : The VNFs in the NS are being instantiated.
-            running             : The NS is in running state.
-            terminate           : The NS is being terminated.
-            vnf-terminate-phase : The NS is terminating the VNFs in the NS.
-            vl-terminate-phase  : The NS is terminating the VLs in the NS.
-            terminated          : The NS is in the terminated state.
-            failed              : The NS instantiation failed.
-            scaling-out         : The NS is scaling out
-            scaling-in          : The NS is scaling in
-            vl-instantiate      : The NS is initiating a new VL
-            vl-terminate        : The NS is terminating a VL
-          ";
-
-          type ns-operational-status;
-        }
-
-        leaf config-status {
-          description
-            "The configuration status of the NS instance
-            configuring: At least one of the VNFs in this instance is in configuring state
-            configured:  All the VNFs in this NS instance are configured or config-not-needed state
-          ";
-          type config-states;
-        }
-
-        list service-primitive {
-           description
-                "Network service level service primitives.";
-
-           key "name";
-
-           leaf name {
-              description
-                  "Name of the service primitive.";
-              type string;
-           }
-
-           list parameter {
-              description
-                  "List of parameters for the service primitive.";
-
-              key "name";
-              uses manotypes:primitive-parameter;
-           }
-
-           uses manotypes:ui-primitive-group;
-
-           list vnf-primitive-group {
-              description
-                "Reference to member-vnf within constituent-vnfds";
-
-              key "member-vnf-index-ref";
-              leaf member-vnf-index-ref {
-                description
-                   "Reference to member-vnf within constituent-vnfds";
-                type uint64;
-              }
-
-              leaf vnfd-id-ref {
-                 description
-                   "A reference to a vnfd. This is a 
-                    leafref to path:
-                        ../../../../nsd:constituent-vnfd
-                        + [nsd:id = current()/../nsd:id-ref]
-                        + /nsd:vnfd-id-ref
-                    NOTE: An issue with confd is preventing the
-                    use of xpath. Seems to be an issue with leafref
-                    to leafref, whose target is in a different module.
-                    Once that is resovled this will switched to use
-                    leafref";
-
-                 type string;
-              }
-
-              leaf vnfd-name {
-                 description
-                   "Name of the VNFD";
-                 type string;
-              }
-
-              list primitive {
-                 key "index";
-
-                 leaf index {
-                   description "Index of this primitive";
-                   type uint32;
-                 }
-
-                 leaf name {
-                   description "Name of the primitive in the VNF primitive ";
-                   type string;
-                 }
-              }
-           }
-
-           leaf user-defined-script {
-             description
-               "A user defined script.";
-             type string;
-           }
-        }
-
-        list initial-service-primitive {
-          description
-            "Initial set of service primitives for NSD.";
-          key "seq";
-
-          uses event-service-primitive;
-        }
-
-        list terminate-service-primitive {
-          description
-            "Set of service primitives to
-             execute during termination of NSD.";
-          key "seq";
-
-          uses event-service-primitive;
-        }
-
-        list monitoring-param {
-          description
-            "List of NS level params.";
-          key "id";
-
-          uses manotypes:monitoring-param-value;
-          uses manotypes:monitoring-param-ui-data;
-          uses manotypes:monitoring-param-aggregation;
-
-          leaf id {
-            type string;
-          }
-
-          leaf name {
-            type string;
-          }
-
-          leaf nsd-mon-param-ref {
-            description "Reference to the NSD monitoring param descriptor
-                       that produced this result";
-            // TODO: Fix leafref
-            type leafref {
-              path "../../../../project-nsd:nsd-catalog/project-nsd:nsd" +
-                "[project-nsd:id = current()/../../nsd-ref]" +
-                "/project-nsd:monitoring-param/project-nsd:id";
-            }
-          }
-
-          list vnfr-mon-param-ref {
-            description "A list of VNFR monitoring params associated with this monp";
-            key "vnfr-id-ref vnfr-mon-param-ref";
-
-            leaf vnfr-id-ref {
-              description
-                "A reference to a vnfr. This is a
-                leafref to path:
-                    /vnfr:vnfr-catalog/vnfr:vnfr/vnfr:id";
-
-              type yang:uuid;
-            }
-
-            leaf vnfr-mon-param-ref {
-              description "A reference to the VNFR monitoring param";
-              type leafref {
-                path "../../../../../vnfr:vnfr-catalog/vnfr:vnfr"
-                  + "[vnfr:id = current()/../vnfr-id-ref]"
-                  + "/vnfr:monitoring-param/vnfr:id";
-              }
-            }
-          }
-        }
-
-        list config-agent-job {
-          key "job-id";
-
-          leaf job-id {
-            description "config agent job Identifier for the NS.";
-            type uint64;
-          }
-
-          leaf job-name {
-            description "Config agent job name";
-            type string;
-          }
-
-          leaf job-status {
-            description
-              "Job status to be set based on each VNF primitive execution,
-               pending  - if at least one VNF is in pending state
-                          and remaining VNFs are in success state.
-               Success  - if all VNF executions are in success state
-               failure  - if one of the VNF executions is failure";
-            type enumeration {
-              enum pending;
-              enum success;
-              enum failure;
-            }
-          }
-
-          leaf triggered-by {
-            description "The primitive is triggered from NS or VNF level";
-            type trigger-type;
-          }
-
-          leaf create-time {
-            description
-              "Creation timestamp of this Config Agent Job.
-            The timestamp is expressed as seconds
-            since unix epoch - 1970-01-01T00:00:00Z";
-
-            type uint32;
-          }
-
-          leaf job-status-details {
-            description "Config agent job status details, in case of errors";
-            type string;
-          }
-
-          uses manotypes:primitive-parameter-value;
-
-          list parameter-group {
-            description
-              "List of NS Primitive parameter groups";
-            key "name";
-            leaf name {
-              description
-                "Name of the parameter.";
-              type string;
-            }
-
-            uses manotypes:primitive-parameter-value;
-          }
-
-          list vnfr {
-            key "id";
-            leaf id {
-              description "Identifier for the VNFR.";
-              type yang:uuid;
-            }
-            leaf vnf-job-status {
-              description
-                "Job status to be set based on each VNF primitive execution,
-                 pending  - if at least one primitive is in pending state
-                            and remaining primitives are in success state.
-                 Success  - if all primitive executions are in success state
-                 failure  - if one of the primitive executions is failure";
-              type enumeration {
-                enum pending;
-                enum success;
-                enum failure;
-              }
-            }
-
-            list primitive {
-              key "name";
-              leaf name {
-                description "the name of the primitive";
-                type string;
-              }
-
-              uses manotypes:primitive-parameter-value;
-
-              leaf execution-id {
-                description "Execution id of the primitive";
-                type string;
-              }
-              leaf execution-status {
-                description "status of the Execution";
-                type enumeration {
-                  enum pending;
-                  enum success;
-                  enum failure;
-                }
-              }
-              leaf execution-error-details {
-                description "Error details if execution-status is failure";
-                type string;
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-
-  grouping rpc-common {
-    uses manotypes:rpc-project-name;
-
-    leaf nsr_id_ref {
-      description "Reference to NSR ID ref";
-      type leafref {
-        path "/rw-project:project[rw-project:name=current()/.." +
-          "/nsr:project-name]/nsr:ns-instance-config/nsr:nsr/nsr:id";
-      }
-      mandatory true;
-    }
-  }
-
-  rpc get-ns-service-primitive-values {
-    description "Get the service primitive parameter values";
-
-    input {
-      leaf name {
-        description "Name of the NS service primitive group";
-        mandatory true;
-        type string;
-      }
-
-      uses rpc-common;
-    }
-
-    output {
-      list ns-parameter {
-        description "Automatically generated parameter";
-        key "name";
-
-        leaf name {
-          description "Parameter name which should be pulled from a parameter pool";
-          type string;
-        }
-        leaf value {
-          description "Automatically generated value";
-          type string;
-        }
-      }
-
-      list ns-parameter-group {
-        description "Automatically generated parameters in parameter group";
-        key "name";
-        leaf name {
-          description "Parameter group name";
-          type string;
-        }
-        list parameter {
-          description "Automatically generated group parameter";
-          key "name";
-
-          leaf name {
-            description "Parameter name which should be pulled from a parameter pool";
-            type string;
-          }
-          leaf value {
-            description "Automatically generated value";
-            type string;
-          }
-        }
-      }
-
-      list vnf-primitive-group {
-        description
-            "List of service primitives grouped by VNF.";
-
-        key "member-vnf-index-ref";
-        leaf member-vnf-index-ref {
-          description
-              "Reference to member-vnf within constituent-vnfds";
-          type uint64;
-        }
-
-        leaf vnfd-id-ref {
-          description
-              "A reference to a vnfd. This is a
-               leafref to path:
-                   ../../../../project-nsd:constituent-vnfd
-                   + [project-nsd:id = current()/../project-nsd:id-ref]
-                   + /project-nsd:vnfd-id-ref
-               NOTE: An issue with confd is preventing the
-               use of xpath. Seems to be an issue with leafref
-               to leafref, whose target is in a different module.
-               Once that is resolved this will switched to use
-               leafref";
-
-          type string;
-        }
-
-        list primitive {
-          key "index";
-          leaf index {
-            description "Index of this primitive";
-            type uint32;
-          }
-
-          leaf name {
-            description "Name of the primitive associated with a value pool";
-            type string;
-          }
-
-          list parameter {
-            description "Automatically generated parameter";
-            key "name";
-
-            leaf name {
-              description "Parameter name which should be pulled from a parameter pool";
-              type string;
-            }
-            leaf value {
-              description "Automatically generated value";
-              type string;
-            }
-          }
-        }
-      }
-    }
-  }
-
-  rpc exec-ns-service-primitive {
-    description "Executes a NS service primitive or script";
-
-    input {
-      leaf name {
-        description "Name of the primitive";
-        type string;
-      }
-
-      uses rpc-common;
-
-      leaf triggered-by {
-        description "The primitive is triggered from NS or VNF level";
-        type trigger-type;
-        default ns-primitive;
-      }
-
-      uses manotypes:primitive-parameter-value;
-
-      list parameter-group {
-        description
-            "List of NS Primitive parameter groups";
-        key "name";
-        leaf name {
-          description
-              "Name of the parameter.";
-          type string;
-        }
-
-        uses manotypes:primitive-parameter-value;
-      }
-
-      list vnf-list {
-        description
-            "List of VNFs whose primitives are being set.";
-        key "member_vnf_index_ref";
-
-        leaf member_vnf_index_ref {
-          description "Member VNF index";
-          type uint64;
-        }
-
-        leaf vnfr-id-ref {
-          description
-              "A reference to a vnfr. This is a
-               leafref to path";
-          type yang:uuid;
-        }
-
-        list vnf-primitive {
-          description
-              "List of service primitives supported by the
-            configuration agent for this VNF.";
-          key "index";
-
-          leaf index {
-            description
-                "index of the service primitive.";
-            type uint32;
-          }
-          leaf name {
-            description
-                "Name of the service primitive.";
-            type string;
-          }
-
-          uses manotypes:primitive-parameter-value;
-        }
-      }
-      leaf user-defined-script {
-        description
-            "A user defined script.";
-        type string;
-      }
-    }
-    output {
-      leaf job-id {
-        description "Job identifier for this RPC";
-        type uint64;
-      }
-
-      leaf name {
-        description "Name of the service primitive";
-        type string;
-      }
-
-      uses rpc-common;
-
-      leaf triggered-by {
-        description "The primitive is triggered from NS or VNF level";
-        type trigger-type;
-      }
-
-      leaf create-time {
-        description
-          "Creation timestamp of this config agent JOB.
-          The timestamp is expressed as seconds
-          since unix epoch - 1970-01-01T00:00:00Z";
-
-        type uint32;
-      }
-
-      leaf job-status-details {
-        description "Job status details, in case of any errors";
-        type string;
-      }
-
-      uses manotypes:primitive-parameter-value;
-
-      list parameter-group {
-        description
-            "List of NS Primitive parameter groups";
-        key "name";
-        leaf name {
-          description
-              "Name of the parameter.";
-          type string;
-        }
-
-        uses manotypes:primitive-parameter-value;
-      }
-
-      list vnf-out-list {
-        description
-            "List of VNFs whose primitives were set.";
-        key "member_vnf_index_ref";
-
-        leaf member_vnf_index_ref {
-          description "Member VNF index";
-          type uint64;
-        }
-        leaf vnfr-id-ref {
-          description
-              "A reference to a vnfr. This is a
-               leafref to path";
-          type yang:uuid;
-        }
-
-        list vnf-out-primitive {
-          description
-              "List of service primitives supported by the
-            configuration agent for this VNF.";
-          key "index";
-
-          leaf index {
-            description
-                "index of the service primitive.";
-            type uint32;
-          }
-
-          leaf name {
-            description
-                "Name of the service primitive.";
-            type string;
-          }
-
-          uses manotypes:primitive-parameter-value;
-
-          leaf execution-id {
-            description "Execution id of this primitive";
-            type string;
-          }
-
-          leaf execution-status {
-            description "Status of the execution of this primitive";
-            type string;
-          }
-
-          leaf execution-error-details {
-            description "Error details if execution-status is failed";
-            type string;
-          }
-        }
-      }
-    }
-  }
-
-  rpc exec-scale-in {
-    description "Executes scale out request";
-
-    input {
-      uses rpc-common;
-
-      leaf scaling-group-name-ref {
-        description "name of the scaling group";
-        type leafref {
-          path "/rw-project:project[rw-project:name=current()/.." +
-            "/nsr:project-name]/nsr:ns-instance-config/nsr:nsr" +
-            "[nsr:id=current()/../nsr:nsr_id_ref]/nsr:nsd" +
-            "/nsr:scaling-group-descriptor/nsr:name";
-        }
-        mandatory true;
-      }
-
-      leaf instance-id {
-        description "id of the scaling group";
-        type leafref {
-          path "/rw-project:project[rw-project:name=current()/.." +
-            "/nsr:project-name]/nsr:ns-instance-config/nsr:nsr" +
-            "[nsr:id=current()/../nsr:nsr_id_ref]" +
-            "/nsr:scaling-group[nsr:scaling-group-name-ref=current()/.." +
-            "/nsr:scaling-group-name-ref]/nsr:instance/nsr:id";
-        }
-        mandatory true;
-      }
-
-
-    }
-    output {
-      leaf instance-id {
-        description "id of the scaling group";
-        type uint64;
-      }
-    }
-  }
-
-  rpc exec-scale-out {
-    description "Executes scale out request";
-
-    input {
-      uses rpc-common;
-
-      leaf scaling-group-name-ref {
-        description "name of the scaling group";
-        type leafref {
-          path "/rw-project:project[rw-project:name=current()/.." +
-            "/nsr:project-name]/nsr:ns-instance-config/nsr:nsr" +
-            "[nsr:id=current()/../nsr:nsr_id_ref]/nsr:nsd" +
-            "/nsr:scaling-group-descriptor/nsr:name";
-        }
-        mandatory true;
-      }
-
-      leaf instance-id {
-        description "id of the scaling group";
-        type uint64;
-      }
-    }
-
-    output {
-     leaf instance-id {
-        description "id of the scaling group";
-        type uint64;
-      }
-    }
-  }
-
-  rpc start-network-service {
-    description "Start the network service";
-    input {
-      leaf name {
-        mandatory true;
-        description "Name of the Network Service";
-        type string;
-      }
-
-      uses manotypes:rpc-project-name;
-
-      leaf nsd_id_ref {
-        description "Reference to NSD ID ref";
-        type leafref {
-          path "/rw-project:project[rw-project:name=current()/.." +
-            "/project-name]/project-nsd:nsd-catalog/project-nsd:nsd/project-nsd:id";
-        }
-      }
-      uses ns-instance-config-params-common;
-
-      list vnfd-placement-group-maps {
-        description
-          "Mapping from mano-placement groups construct from VNFD to cloud
-          platform placement group construct";
-
-        key "placement-group-ref vnfd-id-ref";
-
-        leaf vnfd-id-ref {
-          description
-            "A reference to a vnfd. This is a
-          leafref to path:
-          ../../../../project-nsd:constituent-vnfd
-          + [id = current()/../project-nsd:id-ref]
-          + /project-nsd:vnfd-id-ref
-          NOTE: An issue with confd is preventing the
-          use of xpath. Seems to be an issue with leafref
-          to leafref, whose target is in a different module.
-          Once that is resovled this will switched to use
-          leafref";
-          type yang:uuid;
-        }
-
-        leaf placement-group-ref {
-          description
-            "A reference to VNFD placement group";
-          type leafref {
-            path "/rw-project:project[rw-project:name=current()/" +
-              "../../project-name]/project-vnfd:vnfd-catalog/project-vnfd:vnfd[project-vnfd:id = " +
-              "current()/../vnfd-id-ref]/project-vnfd:placement-groups/project-vnfd:name";
-          }
-        }
-
-        uses manotypes:placement-group-input;
-
-        list ssh-authorized-key {
-          key "key-pair-ref";
-
-          description "List of authorized ssh keys as part of cloud-config";
-
-          leaf key-pair-ref {
-            description "A reference to the key pair entry in the global key pair table";
-            type leafref {
-              path "/rw-project:project[rw-project:name=current()/../../../" +
-                "project-name]/key-pair/name";
-            }
-          }
-        }
-
-        list user {
-          key "name";
-
-          description "List of users to be added through cloud-config";
-          leaf name {
-            description "Name of the user ";
-            type string;
-          }
-          leaf user-info {
-            description "The user name's real name";
-            type string;
-          }
-          list ssh-authorized-key {
-            key "key-pair-ref";
-
-            description "Used to configure the list of public keys to be injected as part
-                        of ns instantiation";
-
-            leaf key-pair-ref {
-              description "A reference to the key pair entry in the global key pair table";
-              type leafref {
-                path "/rw-project:project[rw-project:name=current()/" +
-                  "../../../../project-name]/key-pair/name";
-              }
-            }
-          }
-        }
-      }
-    }
-
-    output {
-      leaf nsr-id {
-        description "Automatically generated parameter";
-        type yang:uuid;
-      }
-    }
-  }
-}
diff --git a/models/plugins/yang/odl-network-topology.yang b/models/plugins/yang/odl-network-topology.yang
deleted file mode 100644
index 9c7101d..0000000
--- a/models/plugins/yang/odl-network-topology.yang
+++ /dev/null
@@ -1,359 +0,0 @@
-
-/*
- * 
- *   Copyright 2016 RIFT.IO Inc
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- *
- */
-
-module odl-network-topology  {
-    yang-version 1;
-    namespace "urn:TBD:params:xml:ns:yang:network-topology";
-    // replace with IANA namespace when assigned
-    prefix "nt";
-
-    import ietf-inet-types { prefix "inet";  }
-
-    organization "TBD";
-
-    contact "WILL-BE-DEFINED-LATER";
-
-    description
-        "This module defines a model for the topology of a network.
-        Key design decisions are as follows:
-        A topology consists of a set of nodes and links.
-        Links are point-to-point and unidirectional.
-        Bidirectional connections need to be represented through
-        two separate links.
-        Multipoint connections, broadcast domains etc can be represented
-        through a hierarchy of nodes, then connecting nodes at
-        upper layers of the hierarchy.";
-
-    revision 2013-10-21 {
-        description
-            "Initial revision.";
-    }
-
-    typedef topology-id {
-        type inet:uri;
-        description
-            "An identifier for a topology.";
-    }
-
-    typedef node-id {
-        type inet:uri;
-        description
-            "An identifier for a node in a topology.
-            The identifier may be opaque.
-            The identifier SHOULD be chosen such that the same node in a
-            real network topology will always be identified through the
-            same identifier, even if the model is instantiated in separate
-            datastores. An implementation MAY choose to capture semantics
-            in the identifier, for example to indicate the type of node
-            and/or the type of topology that the node is a part of.";
-    }
-
-
-    typedef link-id {
-        type inet:uri;
-        description
-            "An identifier for a link in a topology.
-            The identifier may be opaque.
-            The identifier SHOULD be chosen such that the same link in a
-            real network topology will always be identified through the
-            same identifier, even if the model is instantiated in separate
-            datastores. An implementation MAY choose to capture semantics
-            in the identifier, for example to indicate the type of link
-            and/or the type of topology that the link is a part of.";
-    }
-
-    typedef tp-id {
-        type inet:uri;
-        description
-            "An identifier for termination points on a node.
-            The identifier may be opaque.
-            The identifier SHOULD be chosen such that the same TP in a
-            real network topology will always be identified through the
-            same identifier, even if the model is instantiated in separate
-            datastores. An implementation MAY choose to capture semantics
-            in the identifier, for example to indicate the type of TP
-            and/or the type of node and topology that the TP is a part of.";
-    }
-
-    typedef tp-ref {
-        type leafref {
-            path "/network-topology/topology/node/termination-point/tp-id";
-        }
-        description
-            "A type for an absolute reference to a termination point.
-            (This type should not be used for relative references.
-            In such a case, a relative path should be used instead.)";
-    }
-    typedef topology-ref {
-        type leafref {
-            path "/network-topology/topology/topology-id";
-        }
-        description
-            "A type for an absolute reference a topology instance.";
-    }
-
-    typedef node-ref {
-        type leafref {
-            path "/network-topology/topology/node/node-id";
-        }
-        description
-
-            "A type for an absolute reference to a node instance.
-            (This type should not be used for relative references.
-            In such a case, a relative path should be used instead.)";
-    }
-
-    typedef link-ref {
-        type leafref {
-            path "/network-topology/topology/link/link-id";
-        }
-        description
-            "A type for an absolute reference a link instance.
-            (This type should not be used for relative references.
-            In such a case, a relative path should be used instead.)";
-    }
-
-    grouping tp-attributes {
-        description
-            "The data objects needed to define a termination point.
-            (This only includes a single leaf at this point, used
-            to identify the termination point.)
-            Provided in a grouping so that in addition to the datastore,
-            the data can also be included in notifications.";
-        leaf tp-id {
-            type tp-id;
-        }
-        leaf-list tp-ref {
-            type tp-ref;
-            config false;
-            description
-                "The leaf list identifies any termination points that the
-                termination point is dependent on, or maps onto.
-                Those termination points will themselves be contained
-                in a supporting node.
-                This dependency information can be inferred from
-                the dependencies between links.  For this reason,
-                this item is not separately configurable.  Hence no
-                corresponding constraint needs to be articulated.
-                The corresponding information is simply provided by the
-                implementing system.";
-        }
-    }
-
-    grouping node-attributes {
-        description
-            "The data objects needed to define a node.
-            The objects are provided in a grouping so that in addition to
-            the datastore, the data can also be included in notifications
-            as needed.";
-
-        leaf node-id {
-            type node-id;
-            description
-                "The identifier of a node in the topology.
-                A node is specific to a topology to which it belongs.";
-        }
-        list supporting-node {
-            description
-                "This list defines vertical layering information for nodes.
-                It allows to capture for any given node, which node (or nodes)
-                in the corresponding underlay topology it maps onto.
-                A node can map to zero, one, or more nodes below it;
-                accordingly there can be zero, one, or more elements in the list.
-                If there are specific layering requirements, for example
-                specific to a particular type of topology that only allows
-                for certain layering relationships, the choice
-                below can be augmented with additional cases.
-                A list has been chosen rather than a leaf-list in order
-                to provide room for augmentations, e.g. for
-                statistics or priorization information associated with
-                supporting nodes.";
-            // This is not what was published in the initial draft,
-            // added topology-ref leaf and added it to the key
-            key "topology-ref node-ref";
-            leaf topology-ref {
-                type topology-ref;
-            }
-            leaf node-ref {
-                type node-ref;
-            }
-        }
-    }
-
-    grouping link-attributes {
-        // This is a grouping, not defined inline with the link definition itself,
-        // so it can be included in a notification, if needed
-        leaf link-id {
-            type link-id;
-            description
-                "The identifier of a link in the topology.
-                A link is specific to a topology to which it belongs.";
-        }
-        container source {
-            leaf source-node {
-                mandatory true;
-                type node-ref;
-                description
-                    "Source node identifier, must be in same topology.";
-            }
-            leaf source-tp {
-                type tp-ref;
-                description
-                    "Termination point within source node that terminates the link.";
-
-            }
-        }
-        container destination {
-            leaf dest-node {
-                mandatory true;
-                type node-ref;
-                description
-                    "Destination node identifier, must be in same topology.";
-            }
-            leaf dest-tp {
-                type tp-ref;
-                description
-                    "Termination point within destination node that terminates the link.";
-            }
-        }
-        list supporting-link {
-            key "link-ref";
-            leaf link-ref {
-                type link-ref;
-            }
-        }
-    }
-
-
-    container network-topology {
-        list topology {
-            description "
-                This is the model of an abstract topology.
-                A topology contains nodes and links.
-                Each topology MUST be identified by
-                unique topology-id for reason that a network could contain many
-                topologies.
-            ";
-            key "topology-id";
-            leaf topology-id {
-                type topology-id;
-                description "
-                    It is presumed that a datastore will contain many topologies. To
-                    distinguish between topologies it is vital to have UNIQUE
-                    topology identifiers.
-                ";
-            }
-            leaf server-provided {
-                type boolean;
-                config false;
-                description "
-                    Indicates whether the topology is configurable by clients,
-                    or whether it is provided by the server.  This leaf is
-
-                    populated by the server implementing the model.
-                    It is set to false for topologies that are created by a client;
-                    it is set to true otherwise.  If it is set to true, any
-                    attempt to edit the topology MUST be rejected.
-                ";
-            }
-            container topology-types {
-                description
-                    "This container is used to identify the type, or types
-                    (as a topology can support several types simultaneously),
-                    of the topology.
-                    Topology types are the subject of several integrity constraints
-                    that an implementing server can validate in order to
-                    maintain integrity of the datastore.
-                    Topology types are indicated through separate data nodes;
-                    the set of topology types is expected to increase over time.
-                    To add support for a new topology, an augmenting module
-                    needs to augment this container with a new empty optional
-                    container to indicate the new topology type.
-                    The use of a container allows to indicate a subcategorization
-                    of topology types.
-                    The container SHALL NOT be augmented with any data nodes
-                    that serve a purpose other than identifying a particular
-                    topology type.
-                ";
-            }
-            list underlay-topology {
-                key "topology-ref";
-                leaf topology-ref {
-                    type topology-ref;
-                }
-                // a list, not a leaf-list, to allow for potential augmentation
-                // with properties specific to the underlay topology,
-                // such as statistics, preferences, or cost.
-                description
-                    "Identifies the topology, or topologies, that this topology
-                    is dependent on.";
-            }
-
-            list node {
-                description "The list of network nodes defined for the topology.";
-                key "node-id";
-                uses node-attributes;
-                must "boolean(../underlay-topology[*]/node[./supporting-nodes/node-ref])";
-                    // This constraint is meant to ensure that a referenced node is in fact
-                    // a node in an underlay topology.
-                list termination-point {
-                    description
-
-                        "A termination point can terminate a link.
-                        Depending on the type of topology, a termination point could,
-                        for example, refer to a port or an interface.";
-                    key "tp-id";
-                    uses tp-attributes;
-                }
-            }
-
-            list link {
-                description "
-                    A Network Link connects a by Local (Source) node and
-                    a Remote (Destination) Network Nodes via a set of the
-                    nodes' termination points.
-                    As it is possible to have several links between the same
-                    source and destination nodes, and as a link could potentially
-                    be re-homed between termination points, to ensure that we
-                    would always know to distinguish between links, every link
-                    is identified by a dedicated link identifier.
-                    Note that a link models a point-to-point link, not a multipoint
-                    link.
-                    Layering dependencies on links in underlay topologies are
-                    not represented as the layering information of nodes and of
-                    termination points is sufficient.
-                ";
-                key "link-id";
-                uses link-attributes;
-                must "boolean(../underlay-topology/link[./supporting-link])";
-                    // Constraint: any supporting link must be part of an underlay topology
-                must "boolean(../node[./source/source-node])";
-                    // Constraint: A link must have as source a node of the same topology
-                must "boolean(../node[./destination/dest-node])";
-                    // Constraint: A link must have as source a destination of the same topology
-                must "boolean(../node/termination-point[./source/source-tp])";
-                    // Constraint: The source termination point must be contained in the source node
-                must "boolean(../node/termination-point[./destination/dest-tp])";
-                    // Constraint: The destination termination point must be contained
-                    // in the destination node
-            }
-        }
-    }
-}
diff --git a/models/plugins/yang/project-nsd.yang b/models/plugins/yang/project-nsd.yang
deleted file mode 100644
index ae79d96..0000000
--- a/models/plugins/yang/project-nsd.yang
+++ /dev/null
@@ -1,600 +0,0 @@
-
-/*
- * 
- *   Copyright 2017 RIFT.IO Inc
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- *
- */
-
-module project-nsd
-{
-  namespace "http://riftio.com/ns/riftware-1.0/project-nsd";
-  prefix "project-nsd";
-
-  import mano-types {
-    prefix "manotypes";
-  }
-
-  import project-vnfd {
-    prefix "project-vnfd";
-  }
-
-  import nsd-base {
-    prefix "nsd-base";
-  }
-
-  import rw-project {
-    prefix "rw-project";
-  }
-
-
-  revision 2017-02-28 {
-    description
-      "Initial revision. This YANG file defines
-       the Network Service Descriptor (NSD)
-       under projects";
-    reference
-      "Derived from earlier versions of base YANG files";
-  }
-
-
-  grouping nsd-constituent-vnfd {
-    list constituent-vnfd {
-      description
-          "List of VNFDs that are part of this
-          network service.";
-
-      key "member-vnf-index";
-
-      leaf member-vnf-index {
-        description
-          "Identifier/index for the VNFD. This separate id
-           is required to ensure that multiple VNFs can be
-           part of single NS";
-        type uint64;
-      }
-
-      leaf vnfd-id-ref {
-        description
-          "Identifier for the VNFD.";
-        type leafref {
-          path "/rw-project:project[rw-project:name = current()/../../../../rw-project:name]" +
-            "/project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
-        }
-      }
-
-      leaf start-by-default {
-        description
-          "VNFD is started as part of the NS instantiation";
-        type boolean;
-        default true;
-      }
-    }
-  }
-
-  grouping nsr-nsd-constituent-vnfd {
-    list constituent-vnfd {
-      description
-          "List of VNFDs that are part of this
-          network service.";
-
-      key "member-vnf-index";
-
-      leaf member-vnf-index {
-        description
-          "Identifier/index for the VNFD. This separate id
-           is required to ensure that multiple VNFs can be
-           part of single NS";
-        type uint64;
-      }
-
-      leaf vnfd-id-ref {
-        description
-          "Identifier for the VNFD.";
-        type leafref {
-          path "/rw-project:project[rw-project:name = current()/../../../../../rw-project:name]" +
-            "/project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
-        }
-      }
-
-      leaf start-by-default {
-        description
-          "VNFD is started as part of the NS instantiation";
-        type boolean;
-        default true;
-      }
-    }
-  }
-
-  grouping nsd-vld {
-    list vld {
-
-      key "id";
-
-      uses nsd-base:nsd-vld-common;
-
-      list vnfd-connection-point-ref {
-        description
-            "A list of references to connection points.";
-        key "member-vnf-index-ref vnfd-connection-point-ref";
-
-        leaf member-vnf-index-ref {
-          description "Reference to member-vnf within constituent-vnfds";
-          type leafref {
-            path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-
-        leaf vnfd-id-ref {
-          description
-              "A reference to a vnfd. This is a
-               leafref to path:
-                   ../../constituent-vnfd
-                   + [id = current()/../id-ref]
-                   + /vnfd-id-ref
-               NOTE: An issue with confd is preventing the
-               use of xpath. Seems to be an issue with leafref
-               to leafref, whose target is in a different module.
-               Once that is resolved this will switched to use
-               leafref";
-          //type string;
-          type leafref {
-            path "../../../constituent-vnfd[member-vnf-index = current()/../member-vnf-index-ref]/vnfd-id-ref";
-          }
-        }
-
-        leaf vnfd-connection-point-ref {
-          description "A reference to a connection point name";
-          type leafref {
-            path "../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd" +
-                 "[project-vnfd:id = current()/../vnfd-id-ref]/" +
-                 "project-vnfd:connection-point/project-vnfd:name";
-          }
-        }
-      }
-    }
-  }
-
-  grouping nsr-nsd-vld {
-    list vld {
-
-      key "id";
-
-      uses nsd-base:nsd-vld-common;
-
-      list vnfd-connection-point-ref {
-        description
-            "A list of references to connection points.";
-        key "member-vnf-index-ref vnfd-connection-point-ref";
-
-        leaf member-vnf-index-ref {
-          description "Reference to member-vnf within constituent-vnfds";
-
-          type leafref {
-            path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-
-        leaf vnfd-id-ref {
-          description
-              "A reference to a vnfd. This is a
-               leafref to path:
-                   ../../nsd:constituent-vnfd
-                   + [nsd:id = current()/../nsd:id-ref]
-                   + /nsd:vnfd-id-ref
-               NOTE: An issue with confd is preventing the
-               use of xpath. Seems to be an issue with leafref
-               to leafref, whose target is in a different module.
-               Once that is resolved this will switched to use
-               leafref";
-          type string;
-        }
-
-        leaf vnfd-connection-point-ref {
-          description "A reference to a connection point name";
-          type leafref {
-            path "../../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd" +
-                 "[project-vnfd:id = current()/../vnfd-id-ref]/" +
-                 "project-vnfd:connection-point/project-vnfd:name";
-          }
-        }
-      }
-    }
-  }
-
-  grouping nsd-vnf-dependency {
-    list vnf-dependency {
-      description
-          "List of VNF dependencies.";
-      key vnf-source-ref;
-      leaf vnf-source-ref {
-        type leafref {
-          path "../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
-        }
-      }
-      leaf vnf-depends-on-ref {
-        description
-            "Reference to VNF that sorce VNF depends.";
-        type leafref {
-          path "../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
-        }
-      }
-    }
-  }
-
-  grouping nsr-nsd-vnf-dependency {
-    list vnf-dependency {
-      description
-          "List of VNF dependencies.";
-      key vnf-source-ref;
-      leaf vnf-source-ref {
-        type leafref {
-          path "../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
-        }
-      }
-      leaf vnf-depends-on-ref {
-        description
-            "Reference to VNF that sorce VNF depends.";
-        type leafref {
-          path "../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
-        }
-      }
-    }
-  }
-
-  grouping nsd-placement-groups {
-    list placement-groups {
-      description "List of placement groups at NS level";
-
-      key "name";
-      uses manotypes:placement-group-info;
-
-      list member-vnfd {
-        description
-            "List of VNFDs that are part of this placement group";
-
-        key "member-vnf-index-ref";
-
-        leaf member-vnf-index-ref {
-          description "member VNF index of this member VNF";
-          type leafref {
-            path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-
-        leaf vnfd-id-ref {
-          description
-              "Identifier for the VNFD.";
-          type leafref {
-            path "../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
-          }
-        }
-      }
-    }
-  }
-
-  grouping nsr-nsd-placement-groups {
-    list placement-groups {
-      description "List of placement groups at NS level";
-
-      key "name";
-      uses manotypes:placement-group-info;
-
-      list member-vnfd {
-        description
-            "List of VNFDs that are part of this placement group";
-
-        key "member-vnf-index-ref";
-
-        leaf member-vnf-index-ref {
-          description "member VNF index of this member VNF";
-          type leafref {
-            path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-
-        leaf vnfd-id-ref {
-          description
-              "Identifier for the VNFD.";
-          type leafref {
-            path "../../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
-          }
-        }
-      }
-    }
-  }
-
-  grouping nsd-monitoring-param {
-
-    list monitoring-param {
-      key "id";
-
-      uses nsd-base:monitoring-param-common;
-
-      list vnfd-monitoring-param {
-        description "A list of VNFD monitoring params";
-        key "member-vnf-index-ref vnfd-monitoring-param-ref";
-
-        leaf vnfd-id-ref {
-          description
-            "A reference to a vnfd. This is a
-              leafref to path:
-                  ../../../../nsd:constituent-vnfd
-                  + [nsd:id = current()/../nsd:id-ref]
-                  + /nsd:vnfd-id-ref
-              NOTE: An issue with confd is preventing the
-              use of xpath. Seems to be an issue with leafref
-              to leafref, whose target is in a different module.
-              Once that is resolved this will switched to use
-              leafref";
-
-          type leafref {
-            path "../../../constituent-vnfd" +
-              "[member-vnf-index = current()/../member-vnf-index-ref]" +
-              "/vnfd-id-ref";
-          }
-        }
-
-        leaf vnfd-monitoring-param-ref {
-          description "A reference to the VNFD monitoring param";
-          type leafref {
-            path "../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd"
-              + "[project-vnfd:id = current()/../vnfd-id-ref]"
-              + "/project-vnfd:monitoring-param/project-vnfd:id";
-          }
-        }
-
-        leaf member-vnf-index-ref {
-          description
-            "Optional reference to member-vnf within constituent-vnfds";
-          type leafref {
-            path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-      }
-    }
-  }
-
-  grouping nsr-nsd-monitoring-param {
-    list monitoring-param {
-      key "id";
-
-      uses nsd-base:monitoring-param-common;
-
-      list vnfd-monitoring-param {
-        description "A list of VNFD monitoring params";
-        key "member-vnf-index-ref vnfd-monitoring-param-ref";
-
-        leaf vnfd-id-ref {
-          description
-            "A reference to a vnfd. This is a
-              leafref to path:
-                  ../../../../nsd:constituent-vnfd
-                  + [nsd:id = current()/../nsd:id-ref]
-                  + /nsd:vnfd-id-ref
-              NOTE: An issue with confd is preventing the
-              use of xpath. Seems to be an issue with leafref
-              to leafref, whose target is in a different module.
-              Once that is resolved this will switched to use
-              leafref";
-
-          type string;
-        }
-
-        leaf vnfd-monitoring-param-ref {
-          description "A reference to the VNFD monitoring param";
-          type leafref {
-            path "../../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd"
-              + "[project-vnfd:id = current()/../vnfd-id-ref]"
-              + "/project-vnfd:monitoring-param/project-vnfd:id";
-          }
-        }
-
-        leaf member-vnf-index-ref {
-          description
-            "Optional reference to member-vnf within constituent-vnfds";
-          type leafref {
-            path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-      }
-    }
-  }
-
-  grouping nsd-service-primitive {
-   list service-primitive {
-      description
-          "Network service level service primitives.";
-
-      key "name";
-
-      leaf name {
-        description
-            "Name of the service primitive.";
-        type string;
-      }
-
-      list parameter {
-        description
-            "List of parameters for the service primitive.";
-
-        key "name";
-        uses manotypes:primitive-parameter;
-      }
-
-      uses manotypes:ui-primitive-group;
-
-      list vnf-primitive-group {
-        description
-            "List of service primitives grouped by VNF.";
-
-        key "member-vnf-index-ref";
-        leaf member-vnf-index-ref {
-          description
-              "Reference to member-vnf within constituent-vnfds";
-          type leafref {
-             path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-
-        leaf vnfd-id-ref {
-          description
-              "A reference to a vnfd. This is a leafref";
-
-          type leafref {
-             path "../../../constituent-vnfd" +
-                "[member-vnf-index = current()/../member-vnf-index-ref]" + "/vnfd-id-ref";
-          }
-        }
-
-        leaf vnfd-name {
-          description
-              "Name of the VNFD";
-          type leafref {
-              path "../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd"
-                    + "[project-vnfd:id = current()/../vnfd-id-ref]"
-                    + "/project-vnfd:name";
-          }
-        }
-
-        list primitive {
-          key "index";
-
-          leaf index {
-            description "Index of this primitive";
-            type uint32;
-          }
-
-          leaf name {
-            description "Name of the primitive in the VNF primitive ";
-            type string;
-          }
-        }
-      }
-
-      leaf user-defined-script {
-        description
-            "A user defined script.";
-        type string;
-      }
-    }
-  }
-
-  grouping nsr-nsd-service-primitive {
-   list service-primitive {
-      description
-          "Network service level service primitives.";
-
-      key "name";
-
-      leaf name {
-        description
-            "Name of the service primitive.";
-        type string;
-      }
-
-      list parameter {
-        description
-            "List of parameters for the service primitive.";
-
-        key "name";
-        uses manotypes:primitive-parameter;
-      }
-
-      uses manotypes:ui-primitive-group;
-
-      list vnf-primitive-group {
-        description
-            "List of service primitives grouped by VNF.";
-
-        key "member-vnf-index-ref";
-        leaf member-vnf-index-ref {
-          description
-              "Reference to member-vnf within constituent-vnfds";
-          type leafref {
-             path "../../../constituent-vnfd/member-vnf-index";
-          }
-        }
-
-        leaf vnfd-id-ref {
-          description
-              "A reference to a vnfd. This is a leafref";
-
-          type leafref {
-             path "../../../constituent-vnfd" +
-                "[member-vnf-index = current()/../member-vnf-index-ref]" + "/vnfd-id-ref";
-          }
-        }
-
-        leaf vnfd-name {
-          description
-              "Name of the VNFD";
-          type leafref {
-              path "../../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd"
-                    + "[project-vnfd:id = current()/../vnfd-id-ref]"
-                    + "/project-vnfd:name";
-          }
-        }
-
-        list primitive {
-          key "index";
-
-          leaf index {
-            description "Index of this primitive";
-            type uint32;
-          }
-
-          leaf name {
-            description "Name of the primitive in the VNF primitive ";
-            type string;
-          }
-        }
-      }
-
-      leaf user-defined-script {
-        description
-            "A user defined script.";
-        type string;
-      }
-    }
-  }
-
-  grouping nsd-descriptor {
-     uses nsd-base:nsd-descriptor-common;
-
-     uses nsd-vld;
-
-     uses nsd-constituent-vnfd;
-
-     uses nsd-placement-groups;
-
-     uses nsd-vnf-dependency;
-
-     uses nsd-monitoring-param;
-
-     uses nsd-service-primitive;
-  }
-
-  augment "/rw-project:project" {
-    container nsd-catalog {
-
-      list nsd {
-        key id;
-
-        uses nsd-descriptor;
-      }
-    }
-  }
-}
diff --git a/models/plugins/yang/project-vnfd.yang b/models/plugins/yang/project-vnfd.yang
deleted file mode 100644
index 5342436..0000000
--- a/models/plugins/yang/project-vnfd.yang
+++ /dev/null
@@ -1,57 +0,0 @@
-
-/*
- * 
- *   Copyright 2017 RIFT.IO Inc
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- *
- */
-
-module project-vnfd
-{
-  namespace "http://riftio.com/ns/riftware-1.0/project-vnfd";
-  prefix "project-vnfd";
-
-  import rw-project {
-    prefix "rw-project";
-  }
-
-  import vnfd-base {
-    prefix "vnfd-base";
-  }
-
-  revision 2017-02-28 {
-    description
-      "Initial revision. This YANG file defines
-       the Virtual Network Function (VNF) descriptor
-       under a project";
-    reference
-      "Derived from earlier versions of base YANG files";
-  }
-
-  augment /rw-project:project {
-    container vnfd-catalog {
-      description
-        "Virtual Network Function Descriptor (VNFD).";
-
-      list vnfd {
-        key "id";
-
-        uses vnfd-base:vnfd-descriptor;
-      }
-    }
-  }
-}
-
-// vim: sw=2
diff --git a/models/plugins/yang/vlr.yang b/models/plugins/yang/vlr.yang
deleted file mode 100644
index 6a9b591..0000000
--- a/models/plugins/yang/vlr.yang
+++ /dev/null
@@ -1,193 +0,0 @@
-
-/*
- * 
- *   Copyright 2016-2017 RIFT.IO Inc
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- *
- */
-
-module vlr
-{
-  namespace "urn:ietf:params:xml:ns:yang:nfvo:vlr";
-  prefix "vlr";
-
-  import ietf-yang-types {
-    prefix "yang";
-  }
-
-  import mano-types {
-    prefix "manotypes";
-  }
-
-  import rw-project {
-    prefix "rw-project";
-  }
-
-  revision 2017-02-08 {
-    description
-      "Update model to support projects.";
-  }
-
-  revision 2015-09-10 {
-    description
-      "Initial revision. This YANG file defines
-       the Virtual Link Record (VLR)";
-    reference
-      "Derived from earlier versions of base YANG files";
-  }
-
-  augment "/rw-project:project" {
-    container vlr-catalog {
-      config false;
-
-      list vlr {
-        key "id";
-        unique "name";
-
-        leaf id {
-          description "Identifier for the VLR.";
-          type yang:uuid;
-        }
-
-        leaf name {
-          description "VLR name.";
-          type string;
-        }
-
-        leaf nsr-id-ref {
-          description
-            "NS instance identifier. 
-             This is a leafref /rw-project:project/nsr:ns-instance-config/nsr:nsr/nsr:id";
-          type yang:uuid;
-        }
-
-        leaf vld-ref {
-          description
-            "Reference to VLD
-           /rw-project:project/nsr:ns-instance-config/nsr:nsr[nsr:id=../nsr-id-ref]
-           /nsd/vld:vld/vld:id";
-          type string;
-        }
-
-        leaf res-id {
-          description "Identifier for resmgr id mapping";
-          type yang:uuid;
-        }
-
-        leaf short-name {
-          description "Short name to appear as label in the UI";
-          type string;
-        }
-
-        leaf vendor {
-          description "Provider of the VLR.";
-          type string;
-        }
-
-        leaf description {
-          description "Description of the VLR.";
-          type string;
-        }
-
-        leaf version {
-          description "Version of the VLR";
-          type string;
-        }
-
-        leaf type {
-          type manotypes:virtual-link-type;
-        }
-
-        leaf root-bandwidth {
-          description
-            "For ELAN this is the aggregate bandwidth.";
-          type uint64;
-        }
-
-        leaf leaf-bandwidth {
-          description
-            "For ELAN this is the bandwidth of branches.";
-          type uint64;
-        }
-
-        leaf create-time {
-          description
-            "Creation timestamp of this Virtual Link.
-          The timestamp is expressed as seconds 
-          since unix epoch - 1970-01-01T00:00:00Z";
-
-          type uint32;
-        }
-
-        leaf uptime {
-          description
-            "Active period of this Virtual Link.
-          Uptime is expressed in seconds";
-
-          type uint32;
-        }
-
-        leaf network-id {
-          description
-            "Identifier for the allocated network resource.";
-          type string;
-        }
-
-        leaf vim-network-name {
-          description
-            "Name of network in VIM account. This is used to indicate
-            pre-provisioned network name in cloud account.";
-          type string;
-        }
-
-        // replicate for pnfd container here
-
-        uses manotypes:provider-network;
-        uses manotypes:ip-profile-info;
-      
-        leaf status {
-          description
-            "Status of the virtual link record.";
-          type enumeration {
-            enum LINK_UP;
-            enum DEGRADED;
-            enum LINK_DOWN;
-          }
-        }
-        leaf operational-status {
-          description
-            "The operational status of the Virtual Link
-            init                 : The VL is in init stat.
-            vl-alloc-pending     : The VL alloc is pending in VIM
-            running              : The VL is up  and running in VM
-            vl-terminate-pending : The VL is being terminated in VIM.
-            terminated           : The VL is terminated in the VM.
-            failed               : The VL instantiation failed in VIM.
-          ";
-
-          type enumeration {
-            enum init;
-            enum vl-alloc-pending;
-            enum running;
-            enum vl-terminate-pending;
-            enum terminated;
-            enum failed;
-          }
-        }
-      }
-    }
-  }
-}
-
diff --git a/models/plugins/yang/vnfd-base.yang b/models/plugins/yang/vnfd-base.yang
deleted file mode 100644
index c2eae35..0000000
--- a/models/plugins/yang/vnfd-base.yang
+++ /dev/null
@@ -1,547 +0,0 @@
-
-/*
- *
- *   Copyright 2017 RIFT.IO Inc
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- *
- */
-
-module vnfd-base
-{
-  namespace "http://riftio.com/ns/riftware-1.0/vnfd-base";
-  prefix "vnfd-base";
-
-  import mano-types {
-    prefix "manotypes";
-  }
-
-  import ietf-inet-types {
-    prefix "inet";
-  }
-
-  revision 2017-02-28 {
-    description
-      "Initial revision. This YANG file defines
-       the common types for Virtual Network Function
-       (VNF) descriptor";
-    reference
-      "Derived from earlier versions of base YANG files";
-  }
-
-  grouping common-connection-point {
-    leaf name {
-      description "Name of the connection point";
-      type string;
-    }
-
-    leaf id {
-      description "Identifier for the internal connection points";
-      type string;
-    }
-
-    leaf short-name {
-      description "Short name to appear as label in the UI";
-      type string;
-    }
-
-    leaf type {
-      description "Type of the connection point.";
-      type manotypes:connection-point-type;
-    }
-
-    leaf port-security-enabled {
-      description "Enables the port security for the port";
-      type boolean;
-    }
-  }
-
-  typedef interface-type {
-    type enumeration {
-      enum INTERNAL;
-      enum EXTERNAL;
-    }
-  }
-
-  grouping virtual-interface {
-    container virtual-interface {
-      description
-          "Container for the virtual interface properties";
-
-      leaf type {
-        description
-            "Specifies the type of virtual interface
-             between VM and host.
-             VIRTIO          : Use the traditional VIRTIO interface.
-             PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
-             SR-IOV          : Use SR-IOV interface.
-             E1000           : Emulate E1000 interface.
-             RTL8139         : Emulate RTL8139 interface.
-             PCNET           : Emulate PCNET interface.
-             OM-MGMT         : Used to specify openmano mgmt external-connection type";
-
-        type enumeration {
-          enum OM-MGMT;
-          enum PCI-PASSTHROUGH;
-          enum SR-IOV;
-          enum VIRTIO;
-          enum E1000;
-          enum RTL8139;
-          enum PCNET;
-        }
-        default "VIRTIO";
-      }
-
-      leaf vpci {
-        description
-            "Specifies the virtual PCI address. Expressed in
-             the following format dddd:dd:dd.d. For example
-             0000:00:12.0. This information can be used to
-             pass as metadata during the VM creation.";
-        type string;
-      }
-
-      leaf bandwidth {
-        description
-            "Aggregate bandwidth of the NIC.";
-        type uint64;
-      }
-    }
-  }
-
-  grouping vnfd-descriptor {
-      leaf id {
-        description "Identifier for the VNFD.";
-        type string {
-          length "1..63";
-        }
-      }
-
-      leaf name {
-        description "VNFD name.";
-        mandatory true;
-        type string;
-      }
-
-      leaf short-name {
-        description "Short name to appear as label in the UI";
-        type string;
-      }
-
-      leaf vendor {
-        description "Vendor of the VNFD.";
-        type string;
-      }
-
-      leaf logo {
-        description
-            "Vendor logo for the Virtual Network Function";
-        type string;
-      }
-
-      leaf description {
-        description "Description of the VNFD.";
-        type string;
-      }
-
-      leaf version {
-        description "Version of the VNFD";
-        type string;
-      }
-
-
-      container vnf-configuration {
-        uses manotypes:vca-configuration;
-      }
-
-      container mgmt-interface {
-        description
-            "Interface over which the VNF is managed.";
-
-        choice endpoint-type {
-          description
-              "Indicates the type of management endpoint.";
-
-          case ip {
-            description
-                "Specifies the static IP address for managing the VNF.";
-            leaf ip-address {
-              type inet:ip-address;
-            }
-          }
-
-          case vdu-id {
-            description
-                "Use the default management interface on this VDU.";
-            leaf vdu-id {
-              type leafref {
-                path "../../vdu/id";
-              }
-            }
-          }
-
-          case cp {
-            description
-                "Use the ip address associated with this connection point.";
-            leaf cp {
-              type leafref {
-                path "../../connection-point/name";
-              }
-            }
-          }
-        }
-
-        leaf port {
-          description
-              "Port for the management interface.";
-          type inet:port-number;
-        }
-
-        container dashboard-params {
-          description "Parameters for the VNF dashboard";
-
-          leaf path {
-            description "The HTTP path for the dashboard";
-            type string;
-          }
-
-          leaf https {
-            description "Pick HTTPS instead of HTTP , Default is false";
-            type boolean;
-          }
-
-          leaf port {
-            description "The HTTP port for the dashboard";
-            type inet:port-number;
-          }
-        }
-      }
-
-      list internal-vld {
-        key "id";
-        description
-          "List of Internal Virtual Link Descriptors (VLD).
-          The internal VLD describes the basic topology of
-          the connectivity such as E-LAN, E-Line, E-Tree.
-          between internal VNF components of the system.";
-
-        leaf id {
-          description "Identifier for the VLD";
-          type string;
-        }
-
-        leaf name {
-          description "Name of the internal VLD";
-          type string;
-        }
-
-        leaf short-name {
-          description "Short name to appear as label in the UI";
-          type string;
-        }
-
-        leaf description {
-          type string;
-        }
-
-        leaf type {
-          type manotypes:virtual-link-type;
-        }
-
-        leaf root-bandwidth {
-          description
-              "For ELAN this is the aggregate bandwidth.";
-          type uint64;
-        }
-
-        leaf leaf-bandwidth {
-          description
-              "For ELAN this is the bandwidth of branches.";
-          type uint64;
-        }
-
-        list internal-connection-point {
-          key "id-ref";
-          description "List of internal connection points in this VLD";
-          leaf id-ref {
-            description "reference to the internal connection point id";
-            type leafref {
-              path "../../../vdu/internal-connection-point/id";
-            }
-          }
-        }
-
-        uses manotypes:provider-network;
-        choice init-params {
-          description "Extra parameters for VLD instantiation";
-
-          case vim-network-ref {
-            leaf vim-network-name {
-              description
-                  "Name of network in VIM account. This is used to indicate
-                    pre-provisioned network name in cloud account.";
-              type string;
-            }
-          }
-
-          case vim-network-profile {
-            leaf ip-profile-ref {
-              description "Named reference to IP-profile object";
-              type string;
-            }
-          }
-
-        }
-      }
-
-      uses manotypes:ip-profile-list;
-
-      list connection-point {
-        key "name";
-        description
-          "List for external connection points. Each VNF has one
-          or more external connection points that connect the VNF
-          to other VNFs or to external networks. Each VNF exposes
-          connection points to the orchestrator, which can construct
-          network services by connecting the connection points
-          between different VNFs. The NFVO will use VLDs and VNFFGs
-          at the network service level to construct network services.";
-
-        uses common-connection-point;
-      }
-
-      list vdu {
-        description "List of Virtual Deployment Units";
-        key "id";
-
-        leaf id {
-          description "Unique id for the VDU";
-          type string;
-        }
-
-        leaf name {
-          description "Unique name for the VDU";
-          type string;
-        }
-
-        leaf description {
-            description "Description of the VDU.";
-            type string;
-        }
-
-        leaf count {
-          description "Number of instances of VDU";
-          type uint64;
-        }
-
-        leaf mgmt-vpci {
-          description
-              "Specifies the virtual PCI address. Expressed in
-             the following format dddd:dd:dd.d. For example
-             0000:00:12.0. This information can be used to
-             pass as metadata during the VM creation.";
-          type string;
-        }
-
-        uses manotypes:vm-flavor;
-        uses manotypes:guest-epa;
-        uses manotypes:vswitch-epa;
-        uses manotypes:hypervisor-epa;
-        uses manotypes:host-epa;
-
-        list alarm {
-          key "alarm-id";
-
-          uses manotypes:alarm;
-        }
-
-        uses manotypes:image-properties;
-
-        container vdu-configuration {
-          uses manotypes:vca-configuration;
-        }
-
-        choice cloud-init-input {
-          description
-            "Indicates how the contents of cloud-init script are provided.
-             There are 2 choices - inline or in a file";
-
-          case inline {
-            leaf cloud-init {
-              description
-                "Contents of cloud-init script, provided inline, in cloud-config format";
-              type string;
-            }
-          }
-
-          case filename {
-            leaf cloud-init-file {
-              description
-                "Name of file with contents of cloud-init script in cloud-config format";
-                type string;
-            }
-          }
-        }
-
-        uses manotypes:supplemental-boot-data;
-
-        list internal-connection-point {
-          key "id";
-          description
-            "List for internal connection points. Each VNFC
-            has zero or more internal connection points.
-            Internal connection points are used for connecting
-            the VNF with components internal to the VNF. If a VNF
-            has only one VNFC, it may not have any internal
-            connection points.";
-
-          uses common-connection-point;
-
-          leaf internal-vld-ref {
-            type leafref {
-              path "../../../internal-vld/id";
-            }
-          }
-        }
-
-        list interface {
-          description
-              "List of Interfaces (external and internal) for the VNF";
-          key name;
-
-          leaf name {
-            description
-                "Name of the interface. Note that this
-                name has only local significance to the VDU.";
-            type string;
-          }
-
-          leaf position {
-            description
-                "Explicit Position of the interface within the list";
-            type uint32;
-          }
-
-          leaf type {
-            description
-                "Type of the Interface";
-            type interface-type;
-
-            default "EXTERNAL";
-          }
-
-          choice connection-point-type {
-            case internal {
-              leaf internal-connection-point-ref {
-                description
-                    "Leaf Ref to the particular internal connection point";
-                type leafref {
-                   path "../../internal-connection-point/id";
-                 }
-              }
-            }
-            case external {
-              leaf external-connection-point-ref {
-                description
-                    "Leaf Ref to the particular external connection point";
-                type leafref {
-                   path "../../../connection-point/name";
-                 }
-              }
-            }
-          }
-
-          uses virtual-interface;
-        }
-
-
-        list volumes {
-          key "name";
-
-          leaf name {
-            description "Name of the disk-volumes, e.g. vda, vdb etc";
-            type string;
-          }
-
-          uses manotypes:volume-info;
-        }
-      }
-
-      list vdu-dependency {
-        description
-            "List of VDU dependencies.";
-
-        key vdu-source-ref;
-        leaf vdu-source-ref {
-          type leafref {
-            path "../../vdu/id";
-          }
-        }
-
-        leaf vdu-depends-on-ref {
-          description
-            "Reference to the VDU on which
-            the source VDU depends.";
-          type leafref {
-            path "../../vdu/id";
-          }
-        }
-      }
-
-      leaf service-function-chain {
-        description "Type of node in Service Function Chaining Architecture";
-
-        type enumeration {
-          enum UNAWARE;
-          enum CLASSIFIER;
-          enum SF;
-          enum SFF;
-        }
-        default "UNAWARE";
-      }
-
-      leaf service-function-type {
-        description
-          "Type of Service Function.
-           NOTE: This needs to map with Service Function Type in ODL to
-           support VNFFG. Service Function Type is mandatory param in ODL
-           SFC. This is temporarily set to string for ease of use";
-        type string;
-      }
-
-      uses manotypes:monitoring-param;
-
-      list placement-groups {
-        description "List of placement groups at VNF level";
-
-        key "name";
-        uses manotypes:placement-group-info;
-
-        list member-vdus {
-
-          description
-              "List of VDUs that are part of this placement group";
-          key "member-vdu-ref";
-
-          leaf member-vdu-ref {
-            type leafref {
-              path "../../../vdu/id";
-            }
-          }
-        }
-      }
-  }
-}
-
-// vim: sw=2
diff --git a/models/plugins/yang/vnfd.yang b/models/plugins/yang/vnfd.yang
deleted file mode 100644
index d1c9df6..0000000
--- a/models/plugins/yang/vnfd.yang
+++ /dev/null
@@ -1,54 +0,0 @@
-
-/*
- *
- *   Copyright 2016-2017 RIFT.IO Inc
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- *
- */
-
-module vnfd
-{
-  namespace "urn:ietf:params:xml:ns:yang:nfvo:vnfd";
-  prefix "vnfd";
-
-  import vnfd-base {
-    prefix "vnfd-base";
-  }
-
-  revision 2017-02-28 {
-    description
-      "Update model to support projects.";
-  }
-
-  revision 2015-09-10 {
-    description
-      "Initial revision. This YANG file defines
-       the Virtual Network Function (VNF)";
-    reference
-      "Derived from earlier versions of base YANG files";
-  }
-  container vnfd-catalog {
-    description
-      "Virtual Network Function Descriptor (VNFD).";
-
-    list vnfd {
-      key "id";
-
-        uses vnfd-base:vnfd-descriptor;
-    }
-  }
-}
-
-// vim: sw=2
diff --git a/models/plugins/yang/vnffgd.yang b/models/plugins/yang/vnffgd.yang
deleted file mode 100644
index 652ee81..0000000
--- a/models/plugins/yang/vnffgd.yang
+++ /dev/null
@@ -1,82 +0,0 @@
-
-/*
- * 
- *   Copyright 2016-2017 RIFT.IO Inc
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- *
- */
-
-module vnffgd
-{
-  namespace "urn:ietf:params:xml:ns:yang:nfvo:vnffgd";
-  prefix "vnffgd";
-
-  import ietf-yang-types {
-    prefix "yang";
-  }
-
-  import rw-project {
-    prefix "rw-project";
-  }
-
-  revision 2017-02-08 {
-    description
-      "Update model to support projects.";
-  }
-
-  revision 2014-10-27 {
-    description
-      "Initial revision. This YANG file defines 
-       the VNF Forwarding Graph Descriptor (VNFFGD)";
-    reference
-      "Derived from earlier versions of base YANG files";
-  }
-
-  augment "/rw-project:project" {
-    container vnffgd-catalog {
-
-      list vnffgd {
-        key "id";
-
-        leaf name {
-          description "VNF Forwarding Graph Descriptor name.";
-          type string;
-        }
-
-        leaf id {
-          description "Identifier for the VNFFGD.";
-          type yang:uuid;
-        }
-
-        leaf provider {
-          description "Provider of the VNFFGD.";
-          type string;
-        }
-
-        leaf description {
-          description "Description of the VNFFGD.";
-          type string;
-        }
-
-        leaf version {
-          description "Version of the VNFFGD";
-          type string;
-        }
-
-        //TODO: Add more content here
-      }
-    }
-  }
-}
diff --git a/models/plugins/yang/vnfr.yang b/models/plugins/yang/vnfr.yang
deleted file mode 100644
index b669f97..0000000
--- a/models/plugins/yang/vnfr.yang
+++ /dev/null
@@ -1,609 +0,0 @@
-
-/*
- *
- *   Copyright 2016-2017 RIFT.IO Inc
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- *
- */
-
-module vnfr
-{
-  namespace "urn:ietf:params:xml:ns:yang:nfvo:vnfr";
-  prefix "vnfr";
-
-  import mano-types {
-    prefix "manotypes";
-  }
-
-  import vnfd-base {
-    prefix "vnfd-base";
-  }
-
-  import project-vnfd {
-    prefix "project-vnfd";
-  }
-
-  import project-nsd {
-    prefix "project-nsd";
-  }
-
-  import vlr {
-    prefix "vlr";
-  }
-
-  import ietf-yang-types {
-    prefix "yang";
-  }
-
-  import ietf-inet-types {
-    prefix "inet";
-  }
-
-  import rw-project {
-    prefix "rw-project";
-  }
-
-  revision 2017-02-28 {
-    description
-      "Update model to support projects.";
-  }
-
-  revision 2015-09-10 {
-    description
-      "Initial revision. This YANG file defines
-       the Virtual Network Function Record (VNFR)";
-    reference
-      "Derived from earlier versions of base YANG files";
-  }
-
-  typedef vdu-operational-status {
-    type enumeration {
-      enum init;
-      enum vm-init-phase;
-      enum vm-alloc-pending;
-      enum running;
-      enum upgrading;
-      enum terminate;
-      enum vl-terminate-phase;
-      enum terminated;
-      enum failed;
-    }
-  }
-
-  typedef vnf-operational-status {
-    type enumeration {
-      enum pre-init;
-      enum init;
-      enum vl-init-phase;
-      enum vm-init-phase;
-      enum running;
-      enum upgrading;   // Experimental
-      enum terminate;
-      enum vm-terminate-phase;
-      enum vl-terminate-phase;
-      enum terminated;
-      enum failed;
-    }
-  }
-
-  grouping placement-group-info {
-    list placement-groups-info {
-      description
-          "
-          Placement groups to which this VDU belongs and its
-          cloud construct
-          ";
-      key "name";
-      uses manotypes:placement-group-info;
-      uses manotypes:placement-group-input;
-    }
-  }
-
-  grouping virtual-interface {
-    container virtual-interface {
-      description
-          "Container for the virtual interface properties";
-
-      leaf type {
-        description
-            "Specifies the type of virtual interface
-             between VM and host.
-             VIRTIO          : Use the traditional VIRTIO interface.
-             PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
-             SR-IOV          : Use SR-IOV interface.";
-        type enumeration {
-          enum VIRTIO;
-          enum PCI-PASSTHROUGH;
-          enum SR-IOV;
-        }
-      }
-
-      leaf bandwidth {
-        description
-            "Aggregate bandwidth of the NIC.";
-        type uint64;
-      }
-
-      leaf ovs-offload {
-        description
-            "Defines if the NIC supports OVS offload.
-             MANDATORY : OVS offload support in the NIC is mandatory.
-             PREFERRED : OVS offload support in the NIC is preferred.";
-        type enumeration {
-          enum MANDATORY;
-          enum PREFERRED;
-        }
-      }
-
-      leaf vendor-id {
-        description
-            "Specifies the vendor specific id for
-             the device. This is used when a NIC from
-             specific HW vendor is required.";
-        type string;
-      }
-
-      leaf datapath-library {
-        description
-            "Specifies the name and version of the datapath
-             library the NIC is expected to support.";
-        type string;
-      }
-
-      leaf provider-network-name {
-        description
-            "Name of the provider network to which this
-             NIC is attached.";
-        type string;
-      }
-    }
-  }
-
-  grouping associated-virtual-cps {
-    list virtual-cps {
-      key "name";
-      uses vnfd-base:common-connection-point;
-
-      leaf ip-address {
-        description
-            "IP address assigned to the virtual connection point";
-        type inet:ip-address;
-      }
-
-      leaf mac-address {
-        description
-            "MAC address assigned to the virtual connection point";
-        type string;
-      }
-
-      leaf connection-point-id {
-        description "VIM identifier for connection point";
-        type string;
-      }
-    }
-  }
-
-  augment "/rw-project:project" {
-    container vnfr-catalog {
-      config false;
-      list vnfr {
-        description
-          "Virtual Network Function Record (VNFR).";
-        key "id";
-        unique "name";
-
-        leaf id {
-          description "Identifier for the VNFR.";
-          type yang:uuid;
-        }
-
-        leaf nsr-id-ref {
-          description
-            "NS instance identifier.
-             This is a leafref /nsr:ns-instance-config/nsr:nsr/nsr:id";
-          type yang:uuid;
-        }
-
-        leaf member-vnf-index-ref {
-          description "Reference to member VNF index in Network service.";
-          type leafref {
-            path "../../../project-nsd:nsd-catalog/project-nsd:nsd/project-nsd:constituent-vnfd/project-nsd:member-vnf-index";
-          }
-        }
-
-        leaf dashboard-url {
-          description "Dashboard URL";
-          type inet:uri;
-        }
-
-        leaf name {
-          description "VNFR name.";
-          type string;
-        }
-
-        leaf short-name {
-          description "VNFR short name.";
-          type string;
-        }
-
-        leaf vendor {
-          description "Vendor of the VNFR.";
-          type string;
-        }
-
-        leaf description {
-          description "Description of the VNFR.";
-          type string;
-        }
-
-        leaf version {
-          description "Version of the VNFR";
-          type string;
-        }
-
-        leaf create-time {
-          description
-            "Creation timestamp of this Virtual Network
-          Function.  The timestamp is expressed as
-          seconds since unix epoch - 1970-01-01T00:00:00Z";
-
-          type uint32;
-        }
-
-        leaf uptime {
-          description
-            "Active period of this Virtual Network Function.
-          Uptime is expressed in seconds";
-
-          type uint32;
-        }
-
-        container vnfd {
-          description "VNF descriptor used to instantiate this VNF";
-          uses vnfd-base:vnfd-descriptor;
-        }
-
-        leaf vnfd-ref {
-          description "Reference to VNFD";
-          type leafref {
-            path "../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
-          }
-        }
-
-        // Use parameters provided here to configure this VNF
-      container vnf-configuration {
-        uses manotypes:vca-configuration;
-      }
-
-        // Mainly used by Mon-params & dashboard url
-        container mgmt-interface {
-          leaf ip-address {
-            type inet:ip-address;
-          }
-
-          leaf port {
-            type inet:port-number;
-          }
-
-          container ssh-key {
-            description "SSH key pair used for this VNF";
-            leaf public-key {
-              description "Public key configured on this VNF";
-              type string;
-            }
-
-            leaf private-key-file {
-              description "Path to the private key file";
-              type string;
-            }
-          }
-        }
-
-        list internal-vlr {
-          key "vlr-ref";
-
-          leaf vlr-ref {
-            description "Reference to a VLR record in the VLR catalog";
-            type leafref {
-              path "../../../../vlr:vlr-catalog/vlr:vlr/vlr:id";
-            }
-          }
-
-          leaf-list internal-connection-point-ref {
-            type leafref {
-              path "../../vdur/internal-connection-point/id";
-            }
-          }
-        }
-
-        list connection-point {
-          key "name";
-          description
-            "List for external connection points. Each VNF has one
-             or more external connection points. As the name
-             implies that external connection points are used for
-             connecting the VNF to other VNFs or to external networks.
-             Each VNF exposes these connection points to the
-             orchestrator. The orchestrator can construct network
-             services by connecting the connection points between
-             different VNFs. The NFVO will use VLDs and VNFFGs at
-             the network service level to construct network services.";
-
-          uses vnfd-base:common-connection-point;
-
-          leaf vlr-ref {
-            description
-              "Reference to the VLR associated with this connection point";
-            type  leafref {
-              path "../../../../vlr:vlr-catalog/vlr:vlr/vlr:id";
-            }
-          }
-
-          leaf ip-address {
-            description
-              "IP address assigned to the external connection point";
-            type inet:ip-address;
-          }
-
-          leaf mac-address {
-            description
-              "MAC address assigned to the external connection point";
-            // type inet:mac-address;
-            type string;
-          }
-
-          leaf connection-point-id {
-            type string;
-          }
-
-          uses associated-virtual-cps;
-        }
-
-        list vdur {
-          description "List of Virtual Deployment Units";
-          key "id";
-          unique "name";
-
-          leaf id {
-            description "Unique id for the VDU";
-            type yang:uuid;
-          }
-
-          leaf name {
-            description "name of the instantiated VDUR";
-            type string;
-          }
-
-          leaf unique-short-name {
-            description "Short Unique name of the VDU
-                  This will be of the format NSR name-ShortnedString-VDUname
-                  NSR name and VDU name shall be constrained to 10 characters";
-            type string;
-          }
-
-          leaf vdu-id-ref {
-            type leafref {
-              path "../../vnfd/vdu/id";
-            }
-          }
-
-          leaf vim-id {
-            description "Allocated VM resource id";
-            type string;
-          }
-
-          leaf flavor-id {
-            description "VIM assigned flavor id";
-            type string;
-          }
-
-          leaf image-id {
-            description "VIM assigned image id";
-            type string;
-          }
-
-          leaf management-ip {
-            description "Management IP address";
-            type inet:ip-address;
-          }
-
-          leaf vm-management-ip {
-            description "VM Private Management IP address";
-            type inet:ip-address;
-          }
-
-          leaf console-url {
-            description "Console URL for this VDU, if available";
-            type inet:uri;
-          }
-
-          uses manotypes:vm-flavor;
-          uses manotypes:guest-epa;
-          uses manotypes:vswitch-epa;
-          uses manotypes:hypervisor-epa;
-          uses manotypes:host-epa;
-
-          uses manotypes:supplemental-boot-data;
-
-        container vdu-configuration {
-          uses manotypes:vca-configuration;
-        }
-
-          list volumes {
-            key "name";
-
-            leaf name {
-              description "Name of the disk-volumes, e.g. vda, vdb etc";
-              type string;
-            }
-
-            leaf volume-id {
-              description "VIM assigned volume id";
-              type string;
-            }
-
-            uses manotypes:volume-info;
-          }
-
-          list internal-connection-point {
-            key "id";
-            description
-              "List for internal connection points. Each VNFC
-               has zero or more internal connection points.
-               Internal connection points are used for connecting
-               the VNF components internal to the VNF. If a VNF
-               has only one VNFC, it may not have any internal
-               connection points.";
-
-            uses vnfd-base:common-connection-point;
-
-            leaf ip-address {
-              description
-                "IP address assigned to the internal connection point";
-              type inet:ip-address;
-            }
-
-            leaf mac-address {
-              description
-                "MAC address assigned to the internal connection point";
-              // type inet:mac-address;
-              type string;
-            }
-
-            leaf connection-point-id {
-              type string;
-            }
-
-            uses associated-virtual-cps;
-          }
-
-        list interface {
-          description
-              "List of interfaces (internal and external) for the VNF";
-          key name;
-
-          leaf name {
-            description
-                "Name of the interface. Note that this
-                name has only local significance to the VDU.";
-            type string;
-          }
-
-          leaf position {
-            description
-                "Explicit Position of the interface within the list";
-            type uint32;
-          }
-
-          leaf type {
-            description
-                "Type of the Interface";
-
-            type vnfd-base:interface-type;
-
-            default "EXTERNAL";
-          }
-          choice connection-point-type {
-            case internal {
-              leaf internal-connection-point-ref {
-                description
-                    "Leaf Ref to the particular internal connection point";
-                type leafref {
-                  path "../../internal-connection-point/id";
-                }
-              }
-            }
-            case external {
-              leaf external-connection-point-ref {
-                description
-                    "Leaf Ref to the particular external connection point";
-                type leafref {
-                  path "../../../connection-point/name";
-                }
-              }
-            }
-          }
-          uses virtual-interface;
-        }
-
-         leaf operational-status {
-            description
-              "The operational status of the VDU
-                init                : The VDU has just started.
-                vm-init-phase       : The VDUs in the VNF is being created in VIM.
-                vm-alloc-pending    : The  VM alloc is pending in VIM
-                running             : The VDU is active in VM
-                upgrading           : The VDU is being upgraded (EXPERIMENTAL)
-                terminate           : The VDU is being terminated
-                vm-terminate-phase  : The VDU in the VNF is being terminated in VIM.
-                terminated          : The VDU is in the terminated state.
-                failed              : The VDU  instantiation failed.
-              ";
-            type vdu-operational-status;
-         }
-
-          uses placement-group-info;
-        }
-
-        uses manotypes:monitoring-param;
-
-        leaf operational-status {
-          description
-            "The operational status of the VNFR instance
-              pre-init            : The VNF before Input Param Substitution.
-              init                : The VNF has just started.
-              vl-init-phase       : The internal VLs in the VNF are being instantiated.
-              vm-init-phase       : The VMs for VDUs in the VNF are being instantiated.
-              running             : The VNF is in running state.
-              terminate           : The VNF is being terminated.
-              vm-terminate-phase  : The VMs in the VNF are being terminated.
-              vl-terminate-phase  : The internal VLs in the VNF are being terminated.
-              terminated          : The VNF is in the terminated state.
-              failed              : The VNF instantiation failed
-            ";
-          type vnf-operational-status;
-        }
-
-        leaf config-status {
-          description
-            "The configuration status of the NS instance
-            configuring: At least one of the VNFs in this instance is in configuring state
-            configured:  All the VNFs in this NS instance are configured or config-not-needed state
-          ";
-
-          type enumeration {
-            enum configuring {
-              value 1;
-            }
-            enum configured {
-              value 2;
-            }
-            enum failed {
-              value 3;
-            }
-            enum config-not-needed {
-              value 4;
-            }
-          }
-        }
-        uses placement-group-info;
-
-        container cloud-config {
-          uses manotypes:cloud-config;
-        }
-      }
-    }
-  }
-}
