diff --git a/apps/openroadm/BUCK b/apps/openroadm/BUCK
index c405f9d..c3fa40f 100644
--- a/apps/openroadm/BUCK
+++ b/apps/openroadm/BUCK
@@ -7,10 +7,10 @@
   'org.onosproject.protocols.restconfserver',
   'org.onosproject.netconf',
   'org.onosproject.netconfsb',
+  'org.onosproject.models.openroadm',
 ]
 
 BUNDLES = [
-  '//apps/openroadm/yangmodel:onos-apps-openroadm-yangmodel',
   '//apps/openroadm/service:onos-apps-openroadm-service',
   '//apps/openroadm/network:onos-apps-openroadm-network',
 ]
diff --git a/apps/openroadm/network/BUCK b/apps/openroadm/network/BUCK
index ed9d919..7e8d0b2 100644
--- a/apps/openroadm/network/BUCK
+++ b/apps/openroadm/network/BUCK
@@ -1,6 +1,6 @@
 COMPILE_DEPS = [
   '//lib:CORE_DEPS',
-  '//apps/openroadm/yangmodel:onos-apps-openroadm-yangmodel',
+  '//models/openroadm:onos-models-openroadm',
   '//core/store/serializers:onos-core-serializers',
 ] + YANG_TOOLS
 
diff --git a/apps/openroadm/service/BUCK b/apps/openroadm/service/BUCK
index ed9d919..7e8d0b2 100644
--- a/apps/openroadm/service/BUCK
+++ b/apps/openroadm/service/BUCK
@@ -1,6 +1,6 @@
 COMPILE_DEPS = [
   '//lib:CORE_DEPS',
-  '//apps/openroadm/yangmodel:onos-apps-openroadm-yangmodel',
+  '//models/openroadm:onos-models-openroadm',
   '//core/store/serializers:onos-core-serializers',
 ] + YANG_TOOLS
 
diff --git a/apps/openroadm/yangmodel/BUCK b/apps/openroadm/yangmodel/BUCK
deleted file mode 100644
index a4a4307..0000000
--- a/apps/openroadm/yangmodel/BUCK
+++ /dev/null
@@ -1,8 +0,0 @@
-yang_osgi_jar(
-  deps = YANG_TOOLS,
-  name = 'onos-apps-openroadm-yangmodel',
-  srcs = glob(['src/main/**/*.yang']),
-  visibility = [
-    'PUBLIC'
-  ],
-)
\ No newline at end of file
diff --git a/apps/openroadm/yangmodel/pom.xml b/apps/openroadm/yangmodel/pom.xml
deleted file mode 100644
index 0ac295d..0000000
--- a/apps/openroadm/yangmodel/pom.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright 2017-present Open Networking Laboratory
-  ~
-  ~ 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.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <artifactId>onos-apps-openroadm</artifactId>
-        <groupId>org.onosproject</groupId>
-        <version>1.2.1-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>onos-apps-openroadm-yangmodel</artifactId>
-    <version>1.2.1-SNAPSHOT</version>
-    <packaging>bundle</packaging>
-    <description>Open ROADM YANG models</description>
-</project>
\ No newline at end of file
diff --git a/apps/openroadm/yangmodel/src/main/yang/iana-afn-safi@2013-07-04.yang b/apps/openroadm/yangmodel/src/main/yang/iana-afn-safi@2013-07-04.yang
deleted file mode 100644
index c076260..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/iana-afn-safi@2013-07-04.yang
+++ /dev/null
@@ -1,526 +0,0 @@
-module iana-afn-safi {
-  namespace "urn:ietf:params:xml:ns:yang:iana-afn-safi";
-  prefix "ianaaf";
-
-  organization
-    "IANA";
-  contact
-    "        Internet Assigned Numbers Authority
-
-     Postal: ICANN
-             4676 Admiralty Way, Suite 330
-             Marina del Rey, CA 90292
-
-     Tel:    +1 310 823 9358
-     E-Mail: iana&iana.org";
-  description
-    "This YANG module provides two typedefs containing YANG
-     definitions for the following IANA-registered enumerations:
-
-     - Address Family Numbers (AFN)
-
-     - Subsequent Address Family Identifiers (SAFI)
-
-     The latest revision of this YANG module can be obtained from the
-     IANA web site.
-
-     Copyright (c) 2012 IETF Trust and the persons identified as
-     authors of the code. All rights reserved.
-
-     Redistribution and use in source and binary forms, with or
-     without modification, is permitted pursuant to, and subject to
-     the license terms contained in, the Simplified BSD License set
-     forth in Section 4.c of the IETF Trust's Legal Provisions
-     Relating to IETF Documents
-     (http://trustee.ietf.org/license-info).
-
-     This version of this YANG module is part of RFC XXXX; see the
-     RFC itself for full legal notices.";
-  // RFC Ed.: replace XXXX with actual RFC number and remove this
-  // note.
-
-  // RFC Ed.: update the date below with the date of RFC publication
-  // and remove this note.
-  revision 2013-07-04 {
-    description
-      "Initial revision.";
-    reference
-      "RFC XXXX: IANA Address Family Numbers and
-                 Subsequent Address Family Identifiers YANG Module";
-  }
-
-  typedef address-family {
-    type enumeration {
-      // value 0 is reserved by IANA
-      enum ipV4 {
-        value "1";
-        description
-          "IP version 4";
-      }
-      enum ipV6 {
-        value "2";
-        description
-          "IP version 6";
-      }
-      enum nsap {
-        value "3";
-        description
-          "NSAP";
-      }
-      enum hdlc {
-        value "4";
-        description
-          "HDLC (8-bit multidrop)";
-      }
-      enum bbn1822 {
-        value "5";
-        description
-          "BBN 1822";
-      }
-      enum all802 {
-        value "6";
-        description
-          "802 (includes all 802 media plus Ethernet 'canonical
-           format')";
-      }
-      enum e163 {
-        value "7";
-        description
-          "E.163";
-      }
-      enum e164 {
-        value "8";
-        description
-          "E.164 (SMDS, FrameRelay, ATM)";
-      }
-      enum f69 {
-        value "9";
-        description
-          "F.69 (Telex)";
-      }
-      enum x121 {
-        value "10";
-        description
-          "X.121 (X.25, Frame Relay)";
-      }
-      enum ipx {
-        value "11";
-        description
-          "IPX (Internetwork Packet Exchange)";
-      }
-      enum appletalk {
-        value "12";
-        description
-          "Appletalk";
-      }
-      enum decnetIV {
-        value "13";
-        description
-          "DECnet IV";
-      }
-      enum banyanVines {
-        value "14";
-        description
-          "Banyan Vines";
-      }
-      enum e164withNsap {
-        value "15";
-        description
-          "E.164 with NSAP format subaddress";
-        reference
-          "ATM Forum UNI 3.1";
-      }
-      enum dns {
-        value "16";
-        description
-          "DNS (Domain Name System)";
-      }
-      enum distinguishedName {
-        value "17";
-        description
-          "Distinguished Name (per X.500)";
-      }
-      enum asNumber {
-        value "18";
-        description
-          "Autonomous System Number";
-      }
-      enum xtpOverIpv4 {
-        value "19";
-        description
-          "XTP over IP version 4";
-      }
-      enum xtpOverIpv6 {
-        value "20";
-        description
-          "XTP over IP version 6";
-      }
-      enum xtpNativeModeXTP {
-        value "21";
-        description
-          "XTP native mode XTP";
-      }
-      enum fibreChannelWWPN {
-        value "22";
-        description
-          "Fibre Channel World-Wide Port Name";
-      }
-      enum fibreChannelWWNN {
-        value "23";
-        description
-          "Fibre Channel World-Wide Node Name";
-      }
-      enum gwid {
-        value "24";
-        description
-          "Gateway Identifier";
-      }
-      // FIXME: This one is actually called "afi" in the MIB, but
-      // that must be a mistake.
-      enum l2vpn {
-        value "25";
-        description
-          "AFI for L2VPN information";
-        reference
-          "RFC 4761: Virtual Private LAN Service (VPLS): Using BGP
-           for Auto-Discovery and Signaling
-
-           RFC 6074: Provisioning, Auto-Discovery, and Signaling in
-           Layer 2 Virtual Private Networks (L2VPNs)";
-      }
-      enum mplsTpSectionEndpointIdentifier {
-        value "26";
-        description
-          "MPLS-TP Section Endpoint Identifier";
-        reference
-          "draft-ietf-mpls-gach-adv";
-      }
-      enum mplsTpLspEndpointIdentifier {
-        value "27";
-        description
-          "MPLS-TP LSP Endpoint Identifier";
-        reference
-          "draft-ietf-mpls-gach-adv";
-      }
-      enum mplsTpPseudowireEndpointIdentifier {
-        value "28";
-        description
-          "MPLS-TP Pseudowire Endpoint Identifier";
-        reference
-          "draft-ietf-mpls-gach-adv";
-      }
-      enum eigrpCommonServiceFamily {
-        value "16384";
-        description
-          "EIGRP Common Service Family";
-      }
-      enum eigrpIpv4ServiceFamily {
-        value "16385";
-        description
-          "EIGRP IPv4 Service Family";
-      }
-      enum eigrpIpv6ServiceFamily {
-        value "16386";
-        description
-          "EIGRP IPv6 Service Family";
-      }
-      enum lispCanonicalAddressFormat {
-        value "16387";
-        description
-          "LISP Canonical Address Format (LCAF)";
-      }
-      enum bgpLs {
-        value "16388";
-        description
-          "BGP-LS";
-        reference
-          "draft-ietf-idr-ls-distribution";
-      }
-      enum 48BitMac {
-        value "16389";
-        description
-          "48-bit MAC";
-        reference
-          "draft-eastlake-rfc5342bis";
-      }
-      enum 64BitMac {
-        value "16390";
-        description
-          "64-bit MAC";
-        reference
-          "draft-eastlake-rfc5342bis";
-      }
-      // value 65535 is reserved by IANA
-    }
-    description
-      "This typedef is a YANG enumeration of IANA-registered address
-       family numbers (AFN).";
-    reference
-      "IANA Address Family Numbers registry.
-       <http://www.iana.org/assignments/address-family-numbers>";
-  }
-
-  typedef subsequent-address-family {
-    type enumeration {
-      // value 0 is reserved by IANA
-      enum nlriUnicast {
-        value "1";
-        description
-          "Network Layer Reachability Information used for unicast
-           forwarding";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum nlriMulticast {
-        value "2";
-        description
-          "Network Layer Reachability Information used for multicast
-           forwarding";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      // value 3 is reserved by IANA
-      enum nlriMpls {
-        value "4";
-        description
-          "Network Layer Reachability Information (NLRI) with MPLS
-           Labels";
-        reference
-          "RFC 3107: Carrying Label Information in BGP-4";
-      }
-      enum mcastVpn {
-        value "5";
-        description
-          "MCAST-VPN";
-        reference
-          "RFC 6514: BGP Encodings and Procedures for Multicast in
-           MPLS/BGP IP VPNs";
-      }
-      enum nlriDynamicMsPw {
-        value "6";
-        status "obsolete";
-        description
-          "Network Layer Reachability Information used for Dynamic
-           Placement of Multi-Segment Pseudowires (TEMPORARY -
-           Expires 2008-08-23)";
-        reference
-          "draft-ietf-pwe3-dynamic-ms-pw: Dynamic Placement of Multi
-           Segment Pseudowires";
-      }
-      enum encapsulation {
-        value "7";
-        description
-          "Encapsulation SAFI";
-        reference
-          "RFC 5512: The BGP Encapsulation Subsequent Address Family
-           Identifier (SAFI) and the BGP Tunnel Encapsulation
-           Attribute";
-      }
-      enum tunnel {
-        value "64";
-        status "obsolete";
-        description
-          "Tunnel SAFI";
-        reference
-          "draft-nalawade-kapoor-tunnel-safi: BGP Tunnel SAFI";
-      }
-      enum vpls {
-        value "65";
-        description
-          "Virtual Private LAN Service (VPLS)";
-        reference
-          "RFC 4761: Virtual Private LAN Service (VPLS): Using BGP
-           for Auto-Discovery and Signaling
-
-           RFC 6074: Provisioning, Auto-Discovery, and Signaling in
-           Layer 2 Virtual Private Networks (L2VPNs)";
-      }
-      enum bgpMdt {
-        value "66";
-        description
-          "BGP MDT SAFI";
-        reference
-          "RFC 6037: Cisco Systems' Solution for Multicast in
-           BGP/MPLS IP VPNs";
-      }
-      enum bgp4over6 {
-        value "67";
-        description
-          "BGP 4over6 SAFI";
-        reference
-          "RFC 5747: 4over6 Transit Solution Using IP Encapsulation
-           and MP-BGP Extensions";
-      }
-      enum bgp6over4 {
-        value "68";
-        description
-          "BGP 6over4 SAFI";
-      }
-      enum l1VpnAutoDiscovery {
-        value "69";
-        description
-          "Layer-1 VPN auto-discovery information";
-        reference
-          "RFC 5195: BGP-Based Auto-Discovery for Layer-1 VPNs";
-      }
-      enum mplsVpn {
-        value "128";
-        description
-          "MPLS-labeled VPN address";
-        reference
-          "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs)";
-      }
-      enum multicastBgpMplsVpn {
-        value "129";
-        description
-          "Multicast for BGP/MPLS IP Virtual Private Networks
-           (VPNs)";
-        reference
-          "RFC 6513: Multicast in MPLS/BGP IP VPNs
-
-           RFC 6514: BGP Encodings and Procedures for Multicast in
-           MPLS/BGP IP VPNs";
-      }
-      // values 130-131 are reserved by IANA
-      enum routeTargetConstraints {
-        value "132";
-        description
-          "Route Target constraints";
-        reference
-          "RFC 4684: Constrained Route Distribution for Border
-           Gateway Protocol/MultiProtocol Label Switching (BGP/MPLS)
-           Internet Protocol (IP) Virtual Private Networks (VPNs)";
-      }
-      enum ipv4DissFlow {
-        value "133";
-        description
-          "IPv4 dissemination of flow specification rules";
-        reference
-          "RFC 5575: Dissemination of Flow Specification Rules";
-      }
-      enum vpnv4DissFlow {
-        value "134";
-        description
-          "VPNv4 dissemination of flow specification rules";
-        reference
-          "RFC 5575: Dissemination of Flow Specification Rules";
-      }
-      // values 135-139 are reserved by IANA
-      enum vpnAutoDiscovery {
-        value "140";
-        status "obsolete";
-        description
-          "VPN auto-discovery";
-        reference
-          "draft-ietf-l3vpn-bgpvpn-auto: Using BGP as an
-           Auto-Discovery Mechanism for VR-based Layer-3 VPNs";
-      }
-      // values 141-240 are reserved by IANA
-      enum private241 {
-        value "241";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum private242 {
-        value "242";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum private243 {
-        value "243";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum private244 {
-        value "244";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum private245 {
-        value "245";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum private246 {
-        value "246";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum private247 {
-        value "247";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum private248 {
-        value "248";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum private249 {
-        value "249";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum private250 {
-        value "250";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum private251 {
-        value "251";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum private252 {
-        value "252";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum private253 {
-        value "253";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      enum private254 {
-        value "254";
-        description
-          "Reserved for Private Use";
-        reference
-          "RFC 4760: Multiprotocol Extensions for BGP-4";
-      }
-      // value 255 is reserved by IANA
-    }
-    description
-      "This typedef is a YANG enumeration of IANA-registered
-       subsequent address family identifiers (SAFI).";
-    reference
-      "IANA SAFI Values registry.
-       <http://www.iana.org/assignments/safi-namespace>";
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/ietf-inet-types@2013-07-15.yang b/apps/openroadm/yangmodel/src/main/yang/ietf-inet-types@2013-07-15.yang
deleted file mode 100644
index 5388b03..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/ietf-inet-types@2013-07-15.yang
+++ /dev/null
@@ -1,461 +0,0 @@
-module ietf-inet-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
-  prefix "inet";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types for Internet addresses and related things.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - ip-address-no-zone
-      - ipv4-address-no-zone
-      - ipv6-address-no-zone";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of types related to protocol fields ***/
-
-  typedef ip-version {
-    type enumeration {
-      enum unknown {
-        value "0";
-        description
-         "An unknown or unspecified version of the Internet
-          protocol.";
-      }
-      enum ipv4 {
-        value "1";
-        description
-         "The IPv4 protocol as defined in RFC 791.";
-      }
-      enum ipv6 {
-        value "2";
-        description
-         "The IPv6 protocol as defined in RFC 2460.";
-      }
-    }
-    description
-     "This value represents the version of the IP protocol.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetVersion textual convention of the SMIv2.";
-    reference
-     "RFC  791: Internet Protocol
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  typedef dscp {
-    type uint8 {
-      range "0..63";
-    }
-    description
-     "The dscp type represents a Differentiated Services Code Point
-      that may be used for marking packets in a traffic stream.
-      In the value set and its semantics, this type is equivalent
-      to the Dscp textual convention of the SMIv2.";
-    reference
-     "RFC 3289: Management Information Base for the Differentiated
-                Services Architecture
-      RFC 2474: Definition of the Differentiated Services Field
-                (DS Field) in the IPv4 and IPv6 Headers
-      RFC 2780: IANA Allocation Guidelines For Values In
-                the Internet Protocol and Related Headers";
-  }
-
-  typedef ipv6-flow-label {
-    type uint32 {
-      range "0..1048575";
-    }
-    description
-     "The ipv6-flow-label type represents the flow identifier or Flow
-      Label in an IPv6 packet header that may be used to
-      discriminate traffic flows.
-
-      In the value set and its semantics, this type is equivalent
-      to the IPv6FlowLabel textual convention of the SMIv2.";
-    reference
-     "RFC 3595: Textual Conventions for IPv6 Flow Label
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
-  }
-
-  typedef port-number {
-    type uint16 {
-      range "0..65535";
-    }
-    description
-     "The port-number type represents a 16-bit port number of an
-      Internet transport-layer protocol such as UDP, TCP, DCCP, or
-      SCTP.  Port numbers are assigned by IANA.  A current list of
-      all assignments is available from <http://www.iana.org/>.
-
-      Note that the port number value zero is reserved by IANA.  In
-      situations where the value zero does not make sense, it can
-      be excluded by subtyping the port-number type.
-      In the value set and its semantics, this type is equivalent
-      to the InetPortNumber textual convention of the SMIv2.";
-    reference
-     "RFC  768: User Datagram Protocol
-      RFC  793: Transmission Control Protocol
-      RFC 4960: Stream Control Transmission Protocol
-      RFC 4340: Datagram Congestion Control Protocol (DCCP)
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  /*** collection of types related to autonomous systems ***/
-
-  typedef as-number {
-    type uint32;
-    description
-     "The as-number type represents autonomous system numbers
-      which identify an Autonomous System (AS).  An AS is a set
-      of routers under a single technical administration, using
-      an interior gateway protocol and common metrics to route
-      packets within the AS, and using an exterior gateway
-      protocol to route packets to other ASes.  IANA maintains
-      the AS number space and has delegated large parts to the
-      regional registries.
-
-      Autonomous system numbers were originally limited to 16
-      bits.  BGP extensions have enlarged the autonomous system
-      number space to 32 bits.  This type therefore uses an uint32
-      base type without a range restriction in order to support
-      a larger autonomous system number space.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetAutonomousSystemNumber textual convention of
-      the SMIv2.";
-    reference
-     "RFC 1930: Guidelines for creation, selection, and registration
-                of an Autonomous System (AS)
-      RFC 4271: A Border Gateway Protocol 4 (BGP-4)
-      RFC 4001: Textual Conventions for Internet Network Addresses
-      RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
-                Number Space";
-  }
-
-  /*** collection of types related to IP addresses and hostnames ***/
-
-  typedef ip-address {
-    type union {
-      type inet:ipv4-address;
-      type inet:ipv6-address;
-    }
-    description
-     "The ip-address type represents an IP address and is IP
-      version neutral.  The format of the textual representation
-      implies the IP version.  This type supports scoped addresses
-      by allowing zone identifiers in the address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-      + '(%[\p{N}\p{L}]+)?';
-    }
-    description
-      "The ipv4-address type represents an IPv4 address in
-       dotted-quad notation.  The IPv4 address may include a zone
-       index, separated by a % sign.
-
-       The zone index is used to disambiguate identical address
-       values.  For link-local addresses, the zone index will
-       typically be the interface index number or the name of an
-       interface.  If the zone index is not present, the default
-       zone of the device will be used.
-
-       The canonical format for the zone index is the numerical
-       format";
-  }
-
-  typedef ipv6-address {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(%[\p{N}\p{L}]+)?';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(%.+)?';
-    }
-    description
-     "The ipv6-address type represents an IPv6 address in full,
-      mixed, shortened, and shortened-mixed notation.  The IPv6
-      address may include a zone index, separated by a % sign.
-
-      The zone index is used to disambiguate identical address
-      values.  For link-local addresses, the zone index will
-      typically be the interface index number or the name of an
-      interface.  If the zone index is not present, the default
-      zone of the device will be used.
-
-
-
-      The canonical format of IPv6 addresses uses the textual
-      representation defined in Section 4 of RFC 5952.  The
-      canonical format for the zone index is the numerical
-      format as described in Section 11.2 of RFC 4007.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-address-no-zone {
-    type union {
-      type inet:ipv4-address-no-zone;
-      type inet:ipv6-address-no-zone;
-    }
-    description
-     "The ip-address-no-zone type represents an IP address and is
-      IP version neutral.  The format of the textual representation
-      implies the IP version.  This type does not support scoped
-      addresses since it does not allow zone identifiers in the
-      address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address-no-zone {
-    type inet:ipv4-address {
-      pattern '[0-9\.]*';
-    }
-    description
-      "An IPv4 address without a zone index.  This type, derived from
-       ipv4-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-  }
-
-  typedef ipv6-address-no-zone {
-    type inet:ipv6-address {
-      pattern '[0-9a-fA-F:\.]*';
-    }
-    description
-      "An IPv6 address without a zone index.  This type, derived from
-       ipv6-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-prefix {
-    type union {
-      type inet:ipv4-prefix;
-      type inet:ipv6-prefix;
-    }
-    description
-     "The ip-prefix type represents an IP prefix and is IP
-      version neutral.  The format of the textual representations
-      implies the IP version.";
-  }
-
-  typedef ipv4-prefix {
-    type string {
-      pattern
-         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-       + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
-    }
-    description
-     "The ipv4-prefix type represents an IPv4 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 32.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The canonical format of an IPv4 prefix has all bits of
-      the IPv4 address set to zero that are not part of the
-      IPv4 prefix.";
-  }
-
-  typedef ipv6-prefix {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(/.+)';
-    }
-
-
-    description
-     "The ipv6-prefix type represents an IPv6 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 128.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The IPv6 address should have all bits that do not belong
-      to the prefix set to zero.
-
-      The canonical format of an IPv6 prefix has all bits of
-      the IPv6 address set to zero that are not part of the
-      IPv6 prefix.  Furthermore, the IPv6 address is represented
-      as defined in Section 4 of RFC 5952.";
-    reference
-     "RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  /*** collection of domain name and URI types ***/
-
-  typedef domain-name {
-    type string {
-      pattern
-        '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
-      + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
-      + '|\.';
-      length "1..253";
-    }
-    description
-     "The domain-name type represents a DNS domain name.  The
-      name SHOULD be fully qualified whenever possible.
-
-      Internet domain names are only loosely specified.  Section
-      3.5 of RFC 1034 recommends a syntax (modified in Section
-      2.1 of RFC 1123).  The pattern above is intended to allow
-      for current practice in domain name use, and some possible
-      future expansion.  It is designed to hold various types of
-      domain names, including names used for A or AAAA records
-      (host names) and other records, such as SRV records.  Note
-      that Internet host names have a stricter syntax (described
-      in RFC 952) than the DNS recommendations in RFCs 1034 and
-      1123, and that systems that want to store host names in
-      schema nodes using the domain-name type are recommended to
-      adhere to this stricter standard to ensure interoperability.
-
-      The encoding of DNS names in the DNS protocol is limited
-      to 255 characters.  Since the encoding consists of labels
-      prefixed by a length bytes and there is a trailing NULL
-      byte, only 253 characters can appear in the textual dotted
-      notation.
-
-      The description clause of schema nodes using the domain-name
-      type MUST describe when and how these names are resolved to
-      IP addresses.  Note that the resolution of a domain-name value
-      may require to query multiple DNS records (e.g., A for IPv4
-      and AAAA for IPv6).  The order of the resolution process and
-      which DNS record takes precedence can either be defined
-      explicitly or may depend on the configuration of the
-      resolver.
-
-      Domain-name values use the US-ASCII encoding.  Their canonical
-      format uses lowercase US-ASCII characters.  Internationalized
-      domain names MUST be A-labels as per RFC 5890.";
-    reference
-     "RFC  952: DoD Internet Host Table Specification
-      RFC 1034: Domain Names - Concepts and Facilities
-      RFC 1123: Requirements for Internet Hosts -- Application
-                and Support
-      RFC 2782: A DNS RR for specifying the location of services
-                (DNS SRV)
-      RFC 5890: Internationalized Domain Names in Applications
-                (IDNA): Definitions and Document Framework";
-  }
-
-  typedef host {
-    type union {
-      type inet:ip-address;
-      type inet:domain-name;
-    }
-    description
-     "The host type represents either an IP address or a DNS
-      domain name.";
-  }
-
-  typedef uri {
-    type string;
-    description
-     "The uri type represents a Uniform Resource Identifier
-      (URI) as defined by STD 66.
-
-      Objects using the uri type MUST be in US-ASCII encoding,
-      and MUST be normalized as described by RFC 3986 Sections
-      6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
-      percent-encoding is removed, and all case-insensitive
-      characters are set to lowercase except for hexadecimal
-      digits, which are normalized to uppercase as described in
-      Section 6.2.2.1.
-
-      The purpose of this normalization is to help provide
-      unique URIs.  Note that this normalization is not
-      sufficient to provide uniqueness.  Two URIs that are
-      textually distinct after this normalization may still be
-      equivalent.
-
-      Objects using the uri type may restrict the schemes that
-      they permit.  For example, 'data:' and 'urn:' schemes
-      might not be appropriate.
-
-      A zero-length URI is not a valid URI.  This can be used to
-      express 'URI absent' where required.
-
-      In the value set and its semantics, this type is equivalent
-      to the Uri SMIv2 textual convention defined in RFC 5017.";
-    reference
-     "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
-      RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
-                Group: Uniform Resource Identifiers (URIs), URLs,
-                and Uniform Resource Names (URNs): Clarifications
-                and Recommendations
-      RFC 5017: MIB Textual Conventions for Uniform Resource
-                Identifiers (URIs)";
-  }
-
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/ietf-netconf-acm@2012-02-22.yang b/apps/openroadm/yangmodel/src/main/yang/ietf-netconf-acm@2012-02-22.yang
deleted file mode 100644
index 397101d..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/ietf-netconf-acm@2012-02-22.yang
+++ /dev/null
@@ -1,450 +0,0 @@
-module ietf-netconf-acm {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-acm";
-
-  prefix "nacm";
-
-  import ietf-yang-types {
-    prefix yang;
-  }
-
-  organization
-    "IETF NETCONF (Network Configuration) Working Group";
-
-  contact
-    "WG Web:   <http://tools.ietf.org/wg/netconf/>
-     WG List:  <mailto:netconf@ietf.org>
-
-     WG Chair: Mehmet Ersue
-               <mailto:mehmet.ersue@nsn.com>
-
-     WG Chair: Bert Wijnen
-               <mailto:bertietf@bwijnen.net>
-
-     Editor:   Andy Bierman
-               <mailto:andy@yumaworks.com>
-
-     Editor:   Martin Bjorklund
-               <mailto:mbj@tail-f.com>";
-
-  description
-    "NETCONF Access Control Model.
-
-     Copyright (c) 2012 IETF Trust and the persons identified as
-     authors of the code.  All rights reserved.
-
-     Redistribution and use in source and binary forms, with or
-     without modification, is permitted pursuant to, and subject
-     to the license terms contained in, the Simplified BSD
-     License set forth in Section 4.c of the IETF Trust's
-     Legal Provisions Relating to IETF Documents
-     (http://trustee.ietf.org/license-info).
-
-     This version of this YANG module is part of RFC 6536; see
-     the RFC itself for full legal notices.";
-
-  revision "2012-02-22" {
-    description
-      "Initial version;
-       Errata ID: 3862 and 3863";
-    reference
-      "RFC 6536: Network Configuration Protocol (NETCONF)
-                 Access Control Model";
-  }
-
-  // /*
-  //  * Extension statements
-  //  */
-
-  // extension default-deny-write {
-  //   description
-  //     "Used to indicate that the data model node
-  //      represents a sensitive security system parameter.
-
-  //      If present, and the NACM module is enabled (i.e.,
-  //      /nacm/enable-nacm object equals 'true'), the NETCONF server
-  //      will only allow the designated 'recovery session' to have
-  //      write access to the node.  An explicit access control rule is
-  //      required for all other users.
-
-  //      The 'default-deny-write' extension MAY appear within a data
-  //      definition statement.  It is ignored otherwise.";
-  // }
-
-  // extension default-deny-all {
-  //   description
-  //     "Used to indicate that the data model node
-  //      controls a very sensitive security system parameter.
-
-  //      If present, and the NACM module is enabled (i.e.,
-  //      /nacm/enable-nacm object equals 'true'), the NETCONF server
-  //      will only allow the designated 'recovery session' to have
-  //      read, write, or execute access to the node.  An explicit
-  //      access control rule is required for all other users.
-
-  //      The 'default-deny-all' extension MAY appear within a data
-  //      definition statement, 'rpc' statement, or 'notification'
-  //      statement.  It is ignored otherwise.";
-  // }
-
-  /*
-   * Derived types
-   */
-
-  typedef user-name-type {
-    type string {
-      length "1..max";
-    }
-    description
-      "General Purpose Username string.";
-  }
-
-  typedef matchall-string-type {
-    type string {
-      pattern '\*';
-    }
-    description
-      "The string containing a single asterisk '*' is used
-       to conceptually represent all possible values
-       for the particular leaf using this data type.";
-  }
-
-  typedef access-operations-type {
-    type bits {
-      bit create {
-        description
-          "Any protocol operation that creates a
-           new data node.";
-      }
-      bit read {
-        description
-          "Any protocol operation or notification that
-           returns the value of a data node.";
-      }
-      bit update {
-        description
-          "Any protocol operation that alters an existing
-           data node.";
-      }
-      bit delete {
-        description
-          "Any protocol operation that removes a data node.";
-      }
-      bit exec {
-        description
-          "Execution access to the specified protocol operation.";
-      }
-    }
-    description
-      "NETCONF Access Operation.";
-  }
-
-  typedef group-name-type {
-    type string {
-      length "1..max";
-      pattern '[^\*].*';
-    }
-    description
-      "Name of administrative group to which
-       users can be assigned.";
-  }
-
-  typedef action-type {
-    type enumeration {
-      enum permit {
-        description
-          "Requested action is permitted.";
-      }
-      enum deny {
-        description
-          "Requested action is denied.";
-      }
-    }
-    description
-      "Action taken by the server when a particular
-       rule matches.";
-  }
-
-  typedef node-instance-identifier {
-    type yang:xpath1.0;
-    description
-      "Path expression used to represent a special
-       data node instance identifier string.
-
-       A node-instance-identifier value is an
-       unrestricted YANG instance-identifier expression.
-       All the same rules as an instance-identifier apply
-       except predicates for keys are optional.  If a key
-       predicate is missing, then the node-instance-identifier
-       represents all possible server instances for that key.
-
-       This XPath expression is evaluated in the following context:
-
-        o  The set of namespace declarations are those in scope on
-           the leaf element where this type is used.
-
-        o  The set of variable bindings contains one variable,
-           'USER', which contains the name of the user of the current
-            session.
-
-        o  The function library is the core function library, but
-           note that due to the syntax restrictions of an
-           instance-identifier, no functions are allowed.
-
-        o  The context node is the root node in the data tree.";
-  }
-
-  /*
-   * Data definition statements
-   */
-
-  container nacm {
-    //    nacm:default-deny-all;
-
-    description
-      "Parameters for NETCONF Access Control Model.";
-
-    leaf enable-nacm {
-      type boolean;
-      default true;
-      description
-        "Enables or disables all NETCONF access control
-         enforcement.  If 'true', then enforcement
-         is enabled.  If 'false', then enforcement
-         is disabled.";
-    }
-
-    leaf read-default {
-      type action-type;
-      default "permit";
-      description
-        "Controls whether read access is granted if
-         no appropriate rule is found for a
-         particular read request.";
-    }
-
-    leaf write-default {
-      type action-type;
-      default "deny";
-      description
-        "Controls whether create, update, or delete access
-         is granted if no appropriate rule is found for a
-         particular write request.";
-    }
-
-    leaf exec-default {
-      type action-type;
-      default "permit";
-      description
-        "Controls whether exec access is granted if no appropriate
-         rule is found for a particular protocol operation request.";
-    }
-
-    leaf enable-external-groups {
-      type boolean;
-      default true;
-      description
-        "Controls whether the server uses the groups reported by the
-         NETCONF transport layer when it assigns the user to a set of
-         NACM groups.  If this leaf has the value 'false', any group
-         names reported by the transport layer are ignored by the
-         server.";
-    }
-
-    leaf denied-operations {
-      type yang:zero-based-counter32;
-      config false;
-      mandatory true;
-      description
-        "Number of times since the server last restarted that a
-         protocol operation request was denied.";
-    }
-
-    leaf denied-data-writes {
-      type yang:zero-based-counter32;
-      config false;
-      mandatory true;
-      description
-        "Number of times since the server last restarted that a
-         protocol operation request to alter
-         a configuration datastore was denied.";
-    }
-
-    leaf denied-notifications {
-      type yang:zero-based-counter32;
-      config false;
-      mandatory true;
-      description
-        "Number of times since the server last restarted that
-         a notification was dropped for a subscription because
-         access to the event type was denied.";
-    }
-
-    container groups {
-      description
-        "NETCONF Access Control Groups.";
-
-      list group {
-        key name;
-
-        description
-          "One NACM Group Entry.  This list will only contain
-           configured entries, not any entries learned from
-           any transport protocols.";
-
-        leaf name {
-          type group-name-type;
-          description
-            "Group name associated with this entry.";
-        }
-
-        leaf-list user-name {
-          type user-name-type;
-          description
-            "Each entry identifies the username of
-             a member of the group associated with
-             this entry.";
-        }
-      }
-    }
-
-    list rule-list {
-      key "name";
-      ordered-by user;
-      description
-        "An ordered collection of access control rules.";
-
-      leaf name {
-        type string {
-          length "1..max";
-        }
-        description
-          "Arbitrary name assigned to the rule-list.";
-      }
-      leaf-list group {
-        type union {
-          type matchall-string-type;
-          type group-name-type;
-        }
-        description
-          "List of administrative groups that will be
-           assigned the associated access rights
-           defined by the 'rule' list.
-
-           The string '*' indicates that all groups apply to the
-           entry.";
-      }
-
-      list rule {
-        key "name";
-        ordered-by user;
-        description
-          "One access control rule.
-
-           Rules are processed in user-defined order until a match is
-           found.  A rule matches if 'module-name', 'rule-type', and
-           'access-operations' match the request.  If a rule
-           matches, the 'action' leaf determines if access is granted
-           or not.";
-
-        leaf name {
-          type string {
-            length "1..max";
-          }
-          description
-            "Arbitrary name assigned to the rule.";
-        }
-
-        leaf module-name {
-          type union {
-            type matchall-string-type;
-            type string;
-          }
-          default "*";
-          description
-            "Name of the module associated with this rule.
-
-             This leaf matches if it has the value '*' or if the
-             object being accessed is defined in the module with the
-             specified module name.";
-        }
-        choice rule-type {
-          description
-            "This choice matches if all leafs present in the rule
-             match the request.  If no leafs are present, the
-             choice matches all requests.";
-          case protocol-operation {
-            leaf rpc-name {
-              type union {
-                type matchall-string-type;
-                type string;
-              }
-              description
-                "This leaf matches if it has the value '*' or if
-                 its value equals the requested protocol operation
-                 name.";
-            }
-          }
-          case notification {
-            leaf notification-name {
-              type union {
-                type matchall-string-type;
-                type string;
-              }
-              description
-                "This leaf matches if it has the value '*' or if its
-                 value equals the requested notification name.";
-            }
-          }
-          case data-node {
-            leaf path {
-              type node-instance-identifier;
-              mandatory true;
-              description
-                "Data Node Instance Identifier associated with the
-                 data node controlled by this rule.
-
-                 Configuration data or state data instance
-                 identifiers start with a top-level data node.  A
-                 complete instance identifier is required for this
-                 type of path value.
-
-                 The special value '/' refers to all possible
-                 datastore contents.";
-            }
-          }
-        }
-
-        leaf access-operations {
-          type union {
-            type matchall-string-type;
-            type access-operations-type;
-          }
-          default "*";
-          description
-            "Access operations associated with this rule.
-
-             This leaf matches if it has the value '*' or if the
-             bit corresponding to the requested operation is set.";
-        }
-
-        leaf action {
-          type action-type;
-          mandatory true;
-          description
-            "The access control action associated with the
-             rule.  If a rule is determined to match a
-             particular request, then this object is used
-             to determine whether to permit or deny the
-             request.";
-        }
-
-        leaf comment {
-          type string;
-          description
-            "A textual description of the access rule.";
-        }
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/ietf-netconf@2011-06-01.yang b/apps/openroadm/yangmodel/src/main/yang/ietf-netconf@2011-06-01.yang
deleted file mode 100644
index 96cf3fa..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/ietf-netconf@2011-06-01.yang
+++ /dev/null
@@ -1,934 +0,0 @@
-module ietf-netconf {
-
-  // the namespace for NETCONF XML definitions is unchanged
-  // from RFC 4741, which this document replaces
-  namespace "urn:ietf:params:xml:ns:netconf:base:1.0";
-
-  prefix nc;
-
-  import ietf-inet-types {
-    prefix inet;
-  }
-
-  import ietf-netconf-acm { prefix nacm; }
-
-  organization
-    "IETF NETCONF (Network Configuration) Working Group";
-
-  contact
-    "WG Web:   <http://tools.ietf.org/wg/netconf/>
-     WG List:  <netconf@ietf.org>
-
-     WG Chair: Bert Wijnen
-               <bertietf@bwijnen.net>
-
-     WG Chair: Mehmet Ersue
-               <mehmet.ersue@nsn.com>
-
-     Editor:   Martin Bjorklund
-               <mbj@tail-f.com>
-
-     Editor:   Juergen Schoenwaelder
-               <j.schoenwaelder@jacobs-university.de>
-
-     Editor:   Andy Bierman
-               <andy.bierman@brocade.com>";
-  description
-    "NETCONF Protocol Data Types and Protocol Operations.
-
-     Copyright (c) 2011 IETF Trust and the persons identified as
-     the document authors.  All rights reserved.
-
-     Redistribution and use in source and binary forms, with or
-     without modification, is permitted pursuant to, and subject
-     to the license terms contained in, the Simplified BSD License
-     set forth in Section 4.c of the IETF Trust's Legal Provisions
-     Relating to IETF Documents
-     (http://trustee.ietf.org/license-info).
-
-     This version of this YANG module is part of RFC 6241; see
-     the RFC itself for full legal notices.";
-
-  revision 2011-06-01 {
-    description
-      "Initial revision;
-       2013-09-29: Updated to include NACM attributes, 
-       as specified in RFC 6536: sec 3.2.5 and 3.2.8";
-    reference
-      "RFC 6241: Network Configuration Protocol";
-  }
-
-  // extension get-filter-element-attributes {
-  //   description
-  //     "If this extension is present within an 'anyxml'
-  //      statement named 'filter', which must be conceptually
-  //      defined within the RPC input section for the <get>
-  //      and <get-config> protocol operations, then the
-  //      following unqualified XML attribute is supported
-  //      within the <filter> element, within a <get> or
-  //      <get-config> protocol operation:
-
-  //        type : optional attribute with allowed
-  //               value strings 'subtree' and 'xpath'.
-  //               If missing, the default value is 'subtree'.
-
-  //      If the 'xpath' feature is supported, then the
-  //      following unqualified XML attribute is
-  //      also supported:
-
-  //        select: optional attribute containing a
-  //                string representing an XPath expression.
-  //                The 'type' attribute must be equal to 'xpath'
-  //                if this attribute is present.";
-  // }
-
-  // NETCONF capabilities defined as features
-  feature writable-running {
-    description
-      "NETCONF :writable-running capability;
-       If the server advertises the :writable-running
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.2";
-  }
-
-  feature candidate {
-    description
-      "NETCONF :candidate capability;
-       If the server advertises the :candidate
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.3";
-  }
-
-  feature confirmed-commit {
-    if-feature candidate;
-    description
-      "NETCONF :confirmed-commit:1.1 capability;
-       If the server advertises the :confirmed-commit:1.1
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-
-    reference "RFC 6241, Section 8.4";
-  }
-
-  feature rollback-on-error {
-    description
-      "NETCONF :rollback-on-error capability;
-       If the server advertises the :rollback-on-error
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.5";
-  }
-
-  feature validate {
-    description
-      "NETCONF :validate:1.1 capability;
-       If the server advertises the :validate:1.1
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.6";
-  }
-
-  feature startup {
-    description
-      "NETCONF :startup capability;
-       If the server advertises the :startup
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.7";
-  }
-
-  feature url {
-    description
-      "NETCONF :url capability;
-       If the server advertises the :url
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.8";
-  }
-
-  feature xpath {
-    description
-      "NETCONF :xpath capability;
-       If the server advertises the :xpath
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.9";
-  }
-
-  // NETCONF Simple Types
-
-  typedef session-id-type {
-    type uint32 {
-      range "1..max";
-    }
-    description
-      "NETCONF Session Id";
-  }
-
-  typedef session-id-or-zero-type {
-    type uint32;
-    description
-      "NETCONF Session Id or Zero to indicate none";
-  }
-  typedef error-tag-type {
-    type enumeration {
-       enum in-use {
-         description
-           "The request requires a resource that
-            already is in use.";
-       }
-       enum invalid-value {
-         description
-           "The request specifies an unacceptable value for one
-            or more parameters.";
-       }
-       enum too-big {
-         description
-           "The request or response (that would be generated) is
-            too large for the implementation to handle.";
-       }
-       enum missing-attribute {
-         description
-           "An expected attribute is missing.";
-       }
-       enum bad-attribute {
-         description
-           "An attribute value is not correct; e.g., wrong type,
-            out of range, pattern mismatch.";
-       }
-       enum unknown-attribute {
-         description
-           "An unexpected attribute is present.";
-       }
-       enum missing-element {
-         description
-           "An expected element is missing.";
-       }
-       enum bad-element {
-         description
-           "An element value is not correct; e.g., wrong type,
-            out of range, pattern mismatch.";
-       }
-       enum unknown-element {
-         description
-           "An unexpected element is present.";
-       }
-       enum unknown-namespace {
-         description
-           "An unexpected namespace is present.";
-       }
-       enum access-denied {
-         description
-           "Access to the requested protocol operation or
-            data model is denied because authorization failed.";
-       }
-       enum lock-denied {
-         description
-           "Access to the requested lock is denied because the
-            lock is currently held by another entity.";
-       }
-       enum resource-denied {
-         description
-           "Request could not be completed because of
-            insufficient resources.";
-       }
-       enum rollback-failed {
-         description
-           "Request to roll back some configuration change (via
-            rollback-on-error or <discard-changes> operations)
-            was not completed for some reason.";
-
-       }
-       enum data-exists {
-         description
-           "Request could not be completed because the relevant
-            data model content already exists.  For example,
-            a 'create' operation was attempted on data that
-            already exists.";
-       }
-       enum data-missing {
-         description
-           "Request could not be completed because the relevant
-            data model content does not exist.  For example,
-            a 'delete' operation was attempted on
-            data that does not exist.";
-       }
-       enum operation-not-supported {
-         description
-           "Request could not be completed because the requested
-            operation is not supported by this implementation.";
-       }
-       enum operation-failed {
-         description
-           "Request could not be completed because the requested
-            operation failed for some reason not covered by
-            any other error condition.";
-       }
-       enum partial-operation {
-         description
-           "This error-tag is obsolete, and SHOULD NOT be sent
-            by servers conforming to this document.";
-       }
-       enum malformed-message {
-         description
-           "A message could not be handled because it failed to
-            be parsed correctly.  For example, the message is not
-            well-formed XML or it uses an invalid character set.";
-       }
-     }
-     description "NETCONF Error Tag";
-     reference "RFC 6241, Appendix A";
-  }
-
-  typedef error-severity-type {
-    type enumeration {
-      enum error {
-        description "Error severity";
-      }
-      enum warning {
-        description "Warning severity";
-      }
-    }
-    description "NETCONF Error Severity";
-    reference "RFC 6241, Section 4.3";
-  }
-
-  typedef edit-operation-type {
-    type enumeration {
-      enum merge {
-        description
-          "The configuration data identified by the
-           element containing this attribute is merged
-           with the configuration at the corresponding
-           level in the configuration datastore identified
-           by the target parameter.";
-      }
-      enum replace {
-        description
-          "The configuration data identified by the element
-           containing this attribute replaces any related
-           configuration in the configuration datastore
-           identified by the target parameter.  If no such
-           configuration data exists in the configuration
-           datastore, it is created.  Unlike a
-           <copy-config> operation, which replaces the
-           entire target configuration, only the configuration
-           actually present in the config parameter is affected.";
-      }
-      enum create {
-        description
-          "The configuration data identified by the element
-           containing this attribute is added to the
-           configuration if and only if the configuration
-           data does not already exist in the configuration
-           datastore.  If the configuration data exists, an
-           <rpc-error> element is returned with an
-           <error-tag> value of 'data-exists'.";
-      }
-      enum delete {
-        description
-          "The configuration data identified by the element
-           containing this attribute is deleted from the
-           configuration if and only if the configuration
-           data currently exists in the configuration
-           datastore.  If the configuration data does not
-           exist, an <rpc-error> element is returned with
-           an <error-tag> value of 'data-missing'.";
-      }
-      enum remove {
-        description
-          "The configuration data identified by the element
-           containing this attribute is deleted from the
-           configuration if the configuration
-           data currently exists in the configuration
-           datastore.  If the configuration data does not
-           exist, the 'remove' operation is silently ignored
-           by the server.";
-      }
-    }
-    default "merge";
-    description "NETCONF 'operation' attribute values";
-    reference "RFC 6241, Section 7.2";
-  }
-
-  // NETCONF Standard Protocol Operations
-
-  rpc get-config {
-    description
-      "Retrieve all or part of a specified configuration.";
-
-    reference "RFC 6241, Section 7.1";
-
-    input {
-      container source {
-        description
-          "Particular configuration to retrieve.";
-
-        choice config-source {
-          mandatory true;
-          description
-            "The configuration to retrieve.";
-          leaf candidate {
-            if-feature candidate;
-            type empty;
-            description
-              "The candidate configuration is the config source.";
-          }
-          leaf running {
-            type empty;
-            description
-              "The running configuration is the config source.";
-          }
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config source.
-               This is optional-to-implement on the server because
-               not all servers will support filtering for this
-               datastore.";
-          }
-        }
-      }
-
-      anyxml filter {
-        description
-          "Subtree or XPath filter to use.";
-	//        nc:get-filter-element-attributes;
-      }
-    }
-
-    output {
-      anyxml data {
-        description
-          "Copy of the source datastore subset that matched
-           the filter criteria (if any).  An empty data container
-           indicates that the request did not produce any results.";
-      }
-    }
-  }
-
-  rpc edit-config {
-    description
-      "The <edit-config> operation loads all or part of a specified
-       configuration to the specified target configuration.";
-
-    reference "RFC 6241, Section 7.2";
-
-    input {
-      container target {
-        description
-          "Particular configuration to edit.";
-
-        choice config-target {
-          mandatory true;
-          description
-            "The configuration target.";
-
-          leaf candidate {
-            if-feature candidate;
-            type empty;
-            description
-              "The candidate configuration is the config target.";
-          }
-          leaf running {
-            if-feature writable-running;
-            type empty;
-            description
-              "The running configuration is the config source.";
-          }
-        }
-      }
-
-      leaf default-operation {
-        type enumeration {
-          enum merge {
-            description
-              "The default operation is merge.";
-          }
-          enum replace {
-            description
-              "The default operation is replace.";
-          }
-          enum none {
-            description
-              "There is no default operation.";
-          }
-        }
-        default "merge";
-        description
-          "The default operation to use.";
-      }
-
-      leaf test-option {
-        if-feature validate;
-        type enumeration {
-          enum test-then-set {
-            description
-              "The server will test and then set if no errors.";
-          }
-          enum set {
-            description
-              "The server will set without a test first.";
-          }
-
-          enum test-only {
-            description
-              "The server will only test and not set, even
-               if there are no errors.";
-          }
-        }
-        default "test-then-set";
-        description
-          "The test option to use.";
-      }
-
-      leaf error-option {
-        type enumeration {
-          enum stop-on-error {
-            description
-              "The server will stop on errors.";
-          }
-          enum continue-on-error {
-            description
-              "The server may continue on errors.";
-          }
-          enum rollback-on-error {
-            description
-              "The server will roll back on errors.
-               This value can only be used if the 'rollback-on-error'
-               feature is supported.";
-          }
-        }
-        default "stop-on-error";
-        description
-          "The error option to use.";
-      }
-
-      choice edit-content {
-        mandatory true;
-        description
-          "The content for the edit operation.";
-
-        anyxml config {
-          description
-            "Inline Config content.";
-        }
-        leaf url {
-          if-feature url;
-          type inet:uri;
-          description
-            "URL-based config content.";
-        }
-      }
-    }
-  }
-
-  rpc copy-config {
-    description
-      "Create or replace an entire configuration datastore with the
-       contents of another complete configuration datastore.";
-
-    reference "RFC 6241, Section 7.3";
-
-    input {
-      container target {
-        description
-          "Particular configuration to copy to.";
-
-        choice config-target {
-          mandatory true;
-          description
-            "The configuration target of the copy operation.";
-
-          leaf candidate {
-            if-feature candidate;
-            type empty;
-            description
-              "The candidate configuration is the config target.";
-          }
-          leaf running {
-            if-feature writable-running;
-            type empty;
-            description
-              "The running configuration is the config target.
-               This is optional-to-implement on the server.";
-          }
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config target.";
-          }
-          leaf url {
-            if-feature url;
-            type inet:uri;
-            description
-              "The URL-based configuration is the config target.";
-          }
-        }
-      }
-
-      container source {
-        description
-          "Particular configuration to copy from.";
-
-        choice config-source {
-          mandatory true;
-          description
-            "The configuration source for the copy operation.";
-
-          leaf candidate {
-            if-feature candidate;
-            type empty;
-            description
-              "The candidate configuration is the config source.";
-          }
-          leaf running {
-            type empty;
-            description
-              "The running configuration is the config source.";
-          }
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config source.";
-          }
-          leaf url {
-            if-feature url;
-            type inet:uri;
-            description
-              "The URL-based configuration is the config source.";
-          }
-          anyxml config {
-            description
-              "Inline Config content: <config> element.  Represents
-               an entire configuration datastore, not
-               a subset of the running datastore.";
-          }
-        }
-      }
-    }
-  }
-
-  rpc delete-config {
-    //    nacm:default-deny-all;
-    description
-      "Delete a configuration datastore.";
-
-    reference "RFC 6241, Section 7.4";
-
-    input {
-      container target {
-        description
-          "Particular configuration to delete.";
-
-        choice config-target {
-          mandatory true;
-          description
-            "The configuration target to delete.";
-
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config target.";
-          }
-          leaf url {
-            if-feature url;
-            type inet:uri;
-            description
-              "The URL-based configuration is the config target.";
-          }
-        }
-      }
-    }
-  }
-
-  rpc lock {
-    description
-      "The lock operation allows the client to lock the configuration
-       system of a device.";
-
-    reference "RFC 6241, Section 7.5";
-
-    input {
-      container target {
-        description
-          "Particular configuration to lock.";
-
-        choice config-target {
-          mandatory true;
-          description
-            "The configuration target to lock.";
-
-          leaf candidate {
-            if-feature candidate;
-            type empty;
-            description
-              "The candidate configuration is the config target.";
-          }
-          leaf running {
-            type empty;
-            description
-              "The running configuration is the config target.";
-          }
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config target.";
-          }
-        }
-      }
-    }
-  }
-
-  rpc unlock {
-    description
-      "The unlock operation is used to release a configuration lock,
-       previously obtained with the 'lock' operation.";
-
-    reference "RFC 6241, Section 7.6";
-
-    input {
-      container target {
-        description
-          "Particular configuration to unlock.";
-
-        choice config-target {
-          mandatory true;
-          description
-            "The configuration target to unlock.";
-
-          leaf candidate {
-            if-feature candidate;
-            type empty;
-            description
-              "The candidate configuration is the config target.";
-          }
-          leaf running {
-            type empty;
-            description
-              "The running configuration is the config target.";
-          }
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config target.";
-          }
-        }
-      }
-    }
-  }
-
-  rpc get {
-    description
-      "Retrieve running configuration and device state information.";
-
-    reference "RFC 6241, Section 7.7";
-
-    input {
-      anyxml filter {
-        description
-          "This parameter specifies the portion of the system
-           configuration and state data to retrieve.";
-	//        nc:get-filter-element-attributes;
-      }
-    }
-
-    output {
-      anyxml data {
-        description
-          "Copy of the running datastore subset and/or state
-           data that matched the filter criteria (if any).
-           An empty data container indicates that the request did not
-           produce any results.";
-      }
-    }
-  }
-
-  rpc close-session {
-    description
-      "Request graceful termination of a NETCONF session.";
-
-    reference "RFC 6241, Section 7.8";
-  }
-
-  rpc kill-session {
-    //    nacm:default-deny-all;
-    description
-      "Force the termination of a NETCONF session.";
-
-    reference "RFC 6241, Section 7.9";
-
-    input {
-      leaf session-id {
-        type session-id-type;
-        mandatory true;
-        description
-          "Particular session to kill.";
-      }
-    }
-  }
-
-  rpc commit {
-    if-feature candidate;
-
-    description
-      "Commit the candidate configuration as the device's new
-       current configuration.";
-
-    reference "RFC 6241, Section 8.3.4.1";
-
-    input {
-      leaf confirmed {
-        if-feature confirmed-commit;
-        type empty;
-        description
-          "Requests a confirmed commit.";
-        reference "RFC 6241, Section 8.3.4.1";
-      }
-
-      leaf confirm-timeout {
-        if-feature confirmed-commit;
-        type uint32 {
-          range "1..max";
-        }
-        units "seconds";
-        default "600";   // 10 minutes
-        description
-          "The timeout interval for a confirmed commit.";
-        reference "RFC 6241, Section 8.3.4.1";
-      }
-
-      leaf persist {
-        if-feature confirmed-commit;
-        type string;
-        description
-          "This parameter is used to make a confirmed commit
-           persistent.  A persistent confirmed commit is not aborted
-           if the NETCONF session terminates.  The only way to abort
-           a persistent confirmed commit is to let the timer expire,
-           or to use the <cancel-commit> operation.
-
-           The value of this parameter is a token that must be given
-           in the 'persist-id' parameter of <commit> or
-           <cancel-commit> operations in order to confirm or cancel
-           the persistent confirmed commit.
-
-           The token should be a random string.";
-        reference "RFC 6241, Section 8.3.4.1";
-      }
-
-      leaf persist-id {
-        if-feature confirmed-commit;
-        type string;
-        description
-          "This parameter is given in order to commit a persistent
-           confirmed commit.  The value must be equal to the value
-           given in the 'persist' parameter to the <commit> operation.
-           If it does not match, the operation fails with an
-          'invalid-value' error.";
-        reference "RFC 6241, Section 8.3.4.1";
-      }
-
-    }
-  }
-
-  rpc discard-changes {
-    if-feature candidate;
-
-    description
-      "Revert the candidate configuration to the current
-       running configuration.";
-    reference "RFC 6241, Section 8.3.4.2";
-  }
-
-  rpc cancel-commit {
-    if-feature confirmed-commit;
-    description
-      "This operation is used to cancel an ongoing confirmed commit.
-       If the confirmed commit is persistent, the parameter
-       'persist-id' must be given, and it must match the value of the
-       'persist' parameter.";
-    reference "RFC 6241, Section 8.4.4.1";
-
-    input {
-      leaf persist-id {
-        type string;
-        description
-          "This parameter is given in order to cancel a persistent
-           confirmed commit.  The value must be equal to the value
-           given in the 'persist' parameter to the <commit> operation.
-           If it does not match, the operation fails with an
-          'invalid-value' error.";
-      }
-    }
-  }
-
-  rpc validate {
-    if-feature validate;
-
-    description
-      "Validates the contents of the specified configuration.";
-
-    reference "RFC 6241, Section 8.6.4.1";
-
-    input {
-      container source {
-        description
-          "Particular configuration to validate.";
-
-        choice config-source {
-          mandatory true;
-          description
-            "The configuration source to validate.";
-
-          leaf candidate {
-            if-feature candidate;
-            type empty;
-            description
-              "The candidate configuration is the config source.";
-          }
-          leaf running {
-            type empty;
-            description
-              "The running configuration is the config source.";
-          }
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config source.";
-          }
-          leaf url {
-            if-feature url;
-            type inet:uri;
-            description
-              "The URL-based configuration is the config source.";
-          }
-          anyxml config {
-            description
-              "Inline Config content: <config> element.  Represents
-               an entire configuration datastore, not
-               a subset of the running datastore.";
-          }
-        }
-      }
-    }
-  }
-
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/ietf-yang-types@2013-07-15.yang b/apps/openroadm/yangmodel/src/main/yang/ietf-yang-types@2013-07-15.yang
deleted file mode 100644
index 371a091..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/ietf-yang-types@2013-07-15.yang
+++ /dev/null
@@ -1,480 +0,0 @@
-module ietf-yang-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
-  prefix "yang";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - yang-identifier
-      - hex-string
-      - uuid
-      - dotted-quad";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of counter and gauge types ***/
-
-  typedef counter32 {
-    type uint32;
-    description
-     "The counter32 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter32 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter32 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter32.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter32 {
-    type yang:counter32;
-    default "0";
-    description
-     "The zero-based-counter32 type represents a counter32
-      that has the defined 'initial' value zero.
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter32 textual convention of the SMIv2.";
-    reference
-      "RFC 4502: Remote Network Monitoring Management Information
-                 Base Version 2";
-  }
-
-  typedef counter64 {
-    type uint64;
-    description
-     "The counter64 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter64 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter64 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter64.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter64 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter64 {
-    type yang:counter64;
-    default "0";
-    description
-     "The zero-based-counter64 type represents a counter64 that
-      has the defined 'initial' value zero.
-
-
-
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter64 textual convention of the SMIv2.";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  typedef gauge32 {
-    type uint32;
-    description
-     "The gauge32 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^32-1 (4294967295 decimal), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge32 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge32 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the Gauge32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef gauge64 {
-    type uint64;
-    description
-     "The gauge64 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^64-1 (18446744073709551615), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge64 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge64 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the CounterBasedGauge64 SMIv2 textual convention defined
-      in RFC 2856";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  /*** collection of identifier-related types ***/
-
-  typedef object-identifier {
-    type string {
-      pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
-            + '(\.(0|([1-9]\d*)))*';
-    }
-    description
-     "The object-identifier type represents administratively
-      assigned names in a registration-hierarchical-name tree.
-
-      Values of this type are denoted as a sequence of numerical
-      non-negative sub-identifier values.  Each sub-identifier
-      value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
-      are separated by single dots and without any intermediate
-      whitespace.
-
-      The ASN.1 standard restricts the value space of the first
-      sub-identifier to 0, 1, or 2.  Furthermore, the value space
-      of the second sub-identifier is restricted to the range
-      0 to 39 if the first sub-identifier is 0 or 1.  Finally,
-      the ASN.1 standard requires that an object identifier
-      has always at least two sub-identifiers.  The pattern
-      captures these restrictions.
-
-      Although the number of sub-identifiers is not limited,
-      module designers should realize that there may be
-      implementations that stick with the SMIv2 limit of 128
-      sub-identifiers.
-
-      This type is a superset of the SMIv2 OBJECT IDENTIFIER type
-      since it is not restricted to 128 sub-identifiers.  Hence,
-      this type SHOULD NOT be used to represent the SMIv2 OBJECT
-      IDENTIFIER type; the object-identifier-128 type SHOULD be
-      used instead.";
-    reference
-     "ISO9834-1: Information technology -- Open Systems
-      Interconnection -- Procedures for the operation of OSI
-      Registration Authorities: General procedures and top
-      arcs of the ASN.1 Object Identifier tree";
-  }
-
-  typedef object-identifier-128 {
-    type object-identifier {
-      pattern '\d*(\.\d*){1,127}';
-    }
-    description
-     "This type represents object-identifiers restricted to 128
-      sub-identifiers.
-
-      In the value set and its semantics, this type is equivalent
-      to the OBJECT IDENTIFIER type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef yang-identifier {
-    type string {
-      length "1..max";
-      pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
-      pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
-    }
-    description
-      "A YANG identifier string as defined by the 'identifier'
-       rule in Section 12 of RFC 6020.  An identifier must
-       start with an alphabetic character or an underscore
-       followed by an arbitrary sequence of alphabetic or
-       numeric characters, underscores, hyphens, or dots.
-
-       A YANG identifier MUST NOT start with any possible
-       combination of the lowercase or uppercase character
-       sequence 'xml'.";
-    reference
-      "RFC 6020: YANG - A Data Modeling Language for the Network
-                 Configuration Protocol (NETCONF)";
-  }
-
-  /*** collection of types related to date and time***/
-
-  typedef date-and-time {
-    type string {
-      pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
-            + '(Z|[\+\-]\d{2}:\d{2})';
-    }
-    description
-     "The date-and-time type is a profile of the ISO 8601
-      standard for representation of dates and times using the
-      Gregorian calendar.  The profile is defined by the
-      date-time production in Section 5.6 of RFC 3339.
-
-      The date-and-time type is compatible with the dateTime XML
-      schema type with the following notable exceptions:
-
-      (a) The date-and-time type does not allow negative years.
-
-      (b) The date-and-time time-offset -00:00 indicates an unknown
-          time zone (see RFC 3339) while -00:00 and +00:00 and Z
-          all represent the same time zone in dateTime.
-
-      (c) The canonical format (see below) of data-and-time values
-          differs from the canonical format used by the dateTime XML
-          schema type, which requires all times to be in UTC using
-          the time-offset 'Z'.
-
-      This type is not equivalent to the DateAndTime textual
-      convention of the SMIv2 since RFC 3339 uses a different
-      separator between full-date and full-time and provides
-      higher resolution of time-secfrac.
-
-      The canonical format for date-and-time values with a known time
-      zone uses a numeric time zone offset that is calculated using
-      the device's configured known offset to UTC time.  A change of
-      the device's offset to UTC time will cause date-and-time values
-      to change accordingly.  Such changes might happen periodically
-      in case a server follows automatically daylight saving time
-      (DST) time zone offset changes.  The canonical format for
-      date-and-time values with an unknown time zone (usually
-      referring to the notion of local time) uses the time-offset
-      -00:00.";
-    reference
-     "RFC 3339: Date and Time on the Internet: Timestamps
-      RFC 2579: Textual Conventions for SMIv2
-      XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
-  }
-
-  typedef timeticks {
-    type uint32;
-    description
-     "The timeticks type represents a non-negative integer that
-      represents the time, modulo 2^32 (4294967296 decimal), in
-      hundredths of a second between two epochs.  When a schema
-      node is defined that uses this type, the description of
-      the schema node identifies both of the reference epochs.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeTicks type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef timestamp {
-    type yang:timeticks;
-    description
-     "The timestamp type represents the value of an associated
-      timeticks schema node at which a specific occurrence
-      happened.  The specific occurrence must be defined in the
-      description of any schema node defined using this type.  When
-      the specific occurrence occurred prior to the last time the
-      associated timeticks attribute was zero, then the timestamp
-      value is zero.  Note that this requires all timestamp values
-      to be reset to zero when the value of the associated timeticks
-      attribute reaches 497+ days and wraps around to zero.
-
-      The associated timeticks schema node must be specified
-      in the description of any schema node using this type.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeStamp textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of generic address types ***/
-
-  typedef phys-address {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-
-
-
-
-    description
-     "Represents media- or physical-level addresses represented
-      as a sequence octets, each octet represented by two hexadecimal
-      numbers.  Octets are separated by colons.  The canonical
-      representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the PhysAddress textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  typedef mac-address {
-    type string {
-      pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
-    }
-    description
-     "The mac-address type represents an IEEE 802 MAC address.
-      The canonical representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the MacAddress textual convention of the SMIv2.";
-    reference
-     "IEEE 802: IEEE Standard for Local and Metropolitan Area
-                Networks: Overview and Architecture
-      RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of XML-specific types ***/
-
-  typedef xpath1.0 {
-    type string;
-    description
-     "This type represents an XPATH 1.0 expression.
-
-      When a schema node is defined that uses this type, the
-      description of the schema node MUST specify the XPath
-      context in which the XPath expression is evaluated.";
-    reference
-     "XPATH: XML Path Language (XPath) Version 1.0";
-  }
-
-  /*** collection of string types ***/
-
-  typedef hex-string {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-    description
-     "A hexadecimal string with octets represented as hex digits
-      separated by colons.  The canonical representation uses
-      lowercase characters.";
-  }
-
-  typedef uuid {
-    type string {
-      pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
-            + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
-    }
-    description
-     "A Universally Unique IDentifier in the string representation
-      defined in RFC 4122.  The canonical representation uses
-      lowercase characters.
-
-      The following is an example of a UUID in string representation:
-      f81d4fae-7dec-11d0-a765-00a0c91e6bf6
-      ";
-    reference
-     "RFC 4122: A Universally Unique IDentifier (UUID) URN
-                Namespace";
-  }
-
-  typedef dotted-quad {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
-    }
-    description
-      "An unsigned 32-bit number expressed in the dotted-quad
-       notation, i.e., four octets written as decimal numbers
-       and separated with the '.' (full stop) character.";
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-common-service-types.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-common-service-types.yang
deleted file mode 100644
index e7568b1..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-common-service-types.yang
+++ /dev/null
@@ -1,508 +0,0 @@
-module org-openroadm-common-service-types {
-  namespace "http://org/openroadm/common/service/types";
-  prefix org-openroadm-common-service-types;
-
-  import ietf-yang-types {
-    prefix yang;
-  }
-  import ietf-inet-types {
-    prefix inet;
-  }
-  import org-openroadm-routing-constraints {
-    prefix org-openroadm-routing-constraints;
-  }
-  import org-openroadm-topology {
-    prefix org-openroadm-topology;
-  }
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }
-  import org-openroadm-resource-types {
-    prefix org-openroadm-resource-types;
-  }
-
-  organization
-    "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions of common service types.
-       
-      Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-      AT&T Intellectual Property.  All other rights reserved.
-      
-      Redistribution and use in source and binary forms, with or without modification, 
-      are permitted provided that the following conditions are met:
-      
-      * Redistributions of source code must retain the above copyright notice, this 
-        list of conditions and the following disclaimer.
-      * Redistributions in binary form must reproduce the above copyright notice, 
-        this list of conditions and the following disclaimer in the documentation and/or 
-        other materials provided with the distribution.
-      * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-        contributors may be used to endorse or promote products derived from this software 
-        without specific prior written permission.
-      
-      THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-      IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-      WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-      POSSIBILITY OF SUCH DAMAGE";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping configuration-response-common {
-    container configuration-response-common {
-      leaf request-id {
-        type string;
-        mandatory true;
-      }
-      leaf response-code {
-        type string;
-        mandatory true;
-      }
-      leaf response-message {
-        type string;
-      }
-      leaf ack-final-indicator {
-        type string;
-        mandatory true;
-      }
-    }
-  }
-
-  grouping response-parameters {
-    container response-parameters {
-      uses org-openroadm-routing-constraints:routing-constraints;
-    }
-  }
-
-  grouping service-endpoint {
-    leaf service-format {
-      type service-format;
-      mandatory true;
-      description
-        "Format of the requested service: Ethernet, OTU, etc.";
-    }
-    leaf service-rate {
-      when "../service-format!='OMS'"{
-        description "service rate not applicable when service 
-        format is roadmline";
-      }
-      type uint32;
-      mandatory true;
-      description
-        "Rate of the requested service in GBps";
-    }
-    leaf clli {
-      type string;
-      mandatory true;
-      description
-        "CLLI";
-    }
-    uses org-openroadm-resource-types:device-id;
-    container site;
-    container tx-direction {
-      uses service-port;
-      uses service-lgx;
-      uses service-tail;
-    }
-    container rx-direction {
-      uses service-port;
-      uses service-lgx;
-      uses service-tail;
-    }
-    leaf optic-type {
-      type org-openroadm-common-types:optic-types;
-    }
-    container router {
-      description
-        "Needed for communication with DWDM pluggable";
-      leaf node-id {
-        type string;
-        description
-          "Node id. This is reported against the service, but may not get reflected in the service in the network.";
-      }
-      leaf ip-address {
-        type inet:ip-address;
-        description
-          "Router IP Address. This is reported against the service, but may not get reflected in the service in the network.";
-      }
-      leaf url {
-        type string;
-        description
-          "URL needed for communication with DWDM pluggable. This is reported against the service, but may not get reflected in the service in the network.";
-      }
-    }
-    leaf user-label {
-      type string;
-      mandatory false;
-      description
-        "Label for service endpoint, defined by the user";
-    }
-  }
-
-  typedef rpc-actions {
-    description "rpc-actions include all the rpc methods";
-    type enumeration {
-      enum service-create {
-        value "1";
-      }
-      enum service-feasibility-check {
-        value "2";
-      }
-      enum service-delete {
-        value "3";
-      }
-      enum equipment-notification {
-        value "4";
-      }
-      enum temp-service-create {
-        value "5";
-      }
-      enum temp-service-delete {
-        value "6";
-      }
-      enum service-roll {
-        value "7";
-      }
-      enum service-reconfigure {
-        value "8";
-      }
-      enum service-restoration {
-        value "9";
-      }
-      enum service-reversion {
-        value "10";
-      }
-      enum service-reroute {
-        value "11";
-      }
-      enum service-reroute-confirm {
-        value "12";
-      }
-      enum network-re-optimization {
-        value "13";
-      }
-    }
-  }
-
-  grouping sdnc-request-header {
-    container sdnc-request-header {
-      leaf request-id {
-        type string;
-      }
-      leaf rpc-action {
-        type rpc-actions;
-      }
-      leaf notification-url {
-        type string;
-      }
-      leaf request-system-id{
-        type string;
-      }
-    }
-  }
-
-  grouping service-port {
-    container port {
-      leaf port-device-name {
-        type string;
-      }
-      leaf port-type {
-        type string;
-      }
-      leaf port-name {
-        type string;
-      }
-      leaf port-rack {
-        type string;
-      }
-      leaf port-shelf {
-        type string;
-      }
-      leaf port-slot {
-        type string;
-      }
-      leaf port-sub-slot {
-        type string;
-      }
-    }
-  }
-
-  grouping service-lgx {
-    container lgx {
-      leaf lgx-device-name {
-        type string;
-      }
-      leaf lgx-port-name {
-        type string;
-      }
-      leaf lgx-port-rack {
-        type string;
-      }
-      leaf lgx-port-shelf {
-        type string;
-      }
-    }
-  }
-
-  grouping service-tail {
-    container tail {
-      container tail-roadm {
-        description
-          "ROADM on which the transponder is connected to (TID, IP Address,
-           or FQDN)";
-        uses org-openroadm-resource-types:device-id;
-      }
-      container xponder-port {
-        description
-          "Muxponder port used in tail, that will get used as a service endpoint.";
-        leaf circuit-pack-name {
-          type string;
-        }
-        leaf port-name {
-          type string;
-        }
-      }
-      leaf tail-roadm-port-aid {
-        type string;
-        description
-          "This will provide the transponder port needed to inter-city ROADM
-           connection";
-      }
-      leaf tail-roadm-port-rack-location {
-        type string;
-        description
-          "Transponder's location";
-      }
-    }
-  }
-
-  grouping service-information {
-    leaf due-date {
-      type yang:date-and-time;
-      description
-        "Date and time service to be turn up. If time is not specified for a given date, default to  midnight. Service turned up immediately if no due date is specified";
-    }
-    leaf end-date {
-      type yang:date-and-time;
-      description
-        "Date and time service to be removed";
-      mandatory false;
-    }
-    leaf nc-code {
-      type string;
-      description
-        "NC code applied to wavelength service only.This is reported against the service, but may not get reflected in the service in the network.";
-    }
-    leaf nci-code {
-      type string;
-      description
-        "NCI code applied to wavelength service only.This is reported against the service, but may not get reflected in the service in the network.";
-    }
-    leaf secondary-nci-code {
-      type string;
-      description
-        "NC code applied to wavelength service only.This is reported against the service, but may not get reflected in the service in the network.";
-    }
-    leaf customer {
-      type string;
-      description
-        "To be included in ticket information.This is reported against the service, but may not get reflected in the service in the network.";
-    }
-    leaf customer-contact {
-      type string;
-      description
-        "Customer contact information To be included in ticket information. This is reported against the service, but may not get reflected in the service in the network.";
-    }
-    leaf operator-contact {
-      type string;
-      description
-        "Operator contact information to be included in ticket information. This is reported against the service, but may not get reflected in the service in the network.";
-    }
-  }
-
-  grouping service {
-    leaf service-name {
-      type string;
-      description
-        "Identifier for the service to be created in
-         the ROADM network, e.g., CLFI, CLCI, etc.";
-      mandatory true;
-    }
-    leaf common-id {
-      type string;
-      description
-        "To be used by the ROADM controller to identify the routing 
-         constraints received from planning application (PED).";
-    }
-    uses sdnc-request-header;
-    leaf connection-type {
-      type connection-type;
-      mandatory true;
-      description
-        "Connection type";
-    }
-    leaf lifecycle-state {
-      type org-openroadm-common-types:lifecycle-state;
-      description
-        "Lifecycle State of service. Whether it is planned, deployed, in maintenance, etc.";
-    }
-    leaf administrative-state {
-      type org-openroadm-common-types:state;
-      description
-        "Administrative State: Intended state of service";
-    }
-    leaf operational-state {
-      type org-openroadm-common-types:state;
-      config false;
-      description
-        "Operational State: Actual state of service";
-    }
-    leaf condition {
-      type service-condition;
-      description
-        "Service Condition: Additional information about the state of the service. Only sent when applicable.";
-    }
-    container service-a-end {
-      uses service-endpoint;
-    }
-    container service-z-end {
-      uses service-endpoint;
-    }
-    uses org-openroadm-routing-constraints:routing-constraints;
-    uses service-information;
-    leaf latency {
-      type uint32;
-      description
-        "Latency on service";
-    }
-    leaf-list fiber-span-srlgs {
-      type string;
-      description
-        "Shared risk link group identifiers";
-    }
-    list equipment-srgs {
-      key "srg-number";
-      uses org-openroadm-resource-types:srg-number;
-    }
-    leaf-list supporting-service-name {
-      description
-        "The service name that this runs over top. If connection-type is service, then this is the related 
-         connection-type = infrastructure service, for example.";
-      type string;
-    }
-    container topology {
-      uses org-openroadm-topology:topology;
-    }
-  }
-
-  grouping service-notification-result {
-    leaf service-name {
-      type string;
-      description
-        "Identifier for the service e.g., CLFI, CLCI, etc.";
-      mandatory true;
-    }
-    leaf actual-date {
-      type yang:date-and-time;
-      description
-        "Actual date and time (if successful)";
-    }
-  }
-
-  typedef service-format {
-    type enumeration {
-      enum "Ethernet" {
-        value 1;
-      }
-      enum "OTU" {
-        value 2;
-      }
-      enum "OC" {
-        value 3;
-      }
-      enum "STM" {
-        value 4;
-      }
-      enum "OMS" {
-        value 5;
-      }
-      enum "ODU" {
-        value 6;
-      }
-      enum "OTM" {
-        value 7;
-      }
-    }
-  }
-
-  typedef service-notification-types {
-    type enumeration {
-      enum "service-create-result" {
-        value 1;
-      }
-      enum "service-reconfigure-result" {
-        value 2;
-      }
-      enum "service-delete-result" {
-        value 3;
-      }
-      enum "service-roll-result" {
-        value 4;
-      }
-      enum "service-revert-result" {
-        value 5;
-      }
-      enum "service-reroute-result" {
-        value 6;
-      }
-      enum "service-restoration-result" {
-        value 7;
-      }
-    }
-  }
-
-  typedef connection-type {
-    type enumeration {
-      enum "service" {
-        value 1;
-      }
-      enum "infrastructure" {
-        value 2;
-      }
-      enum "roadm-line" {
-        value 3;
-      }
-    }
-  }
-
-  typedef service-condition {
-    type enumeration {
-      enum "restored-temporarily" {
-        value 1;
-      }
-      enum "re-routed-temporarily" {
-        value 2;
-      }
-      enum "activated-for-service" {
-        value 3;
-      }
-      enum "activated-for-further-check" {
-        value 4;
-      }
-      enum "activated-for-troubleshooting-failure" {
-        value 5;
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-common-types.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-common-types.yang
deleted file mode 100644
index 35ea26b..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-common-types.yang
+++ /dev/null
@@ -1,282 +0,0 @@
-module org-openroadm-common-types {
-  namespace "http://org/openroadm/common-types";
-  prefix org-openroadm-common-types;
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions of common types.
-       
-      Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-      AT&T Intellectual Property.  All other rights reserved.
-      
-      Redistribution and use in source and binary forms, with or without modification, 
-      are permitted provided that the following conditions are met:
-      
-      * Redistributions of source code must retain the above copyright notice, this 
-        list of conditions and the following disclaimer.
-      * Redistributions in binary form must reproduce the above copyright notice, 
-        this list of conditions and the following disclaimer in the documentation and/or 
-        other materials provided with the distribution.
-      * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-        contributors may be used to endorse or promote products derived from this software 
-        without specific prior written permission.
-      
-      THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-      IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-      WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-      POSSIBILITY OF SUCH DAMAGE";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping physical-location {
-    leaf rack {
-      type string;
-      mandatory false;
-    }
-    leaf shelf {
-      type string;
-      mandatory false;
-    }
-    leaf slot {
-      type string;
-      mandatory false;
-    }
-    leaf subSlot {
-      type string;
-      mandatory false;
-    }
-  }
-
-  typedef node-types {
-    type enumeration {
-      enum "rdm" {
-        value 1;
-      }
-      enum "xpdr" {
-        value 2;
-      }
-    }
-    description
-      "3 digit identifier for node type
-       1. rdm for ROADM
-       2. xpdr for Transponder, Regen";
-  }
-
-  typedef power-dBm {
-    description
-      "Power value in dBm.";
-    type decimal64 {
-      fraction-digits 2;
-    }
-    units "dBm";
-  }
-
-  typedef ratio-dB {
-    description
-      "Power ratio in dB.";
-    type decimal64 {
-      fraction-digits 3;
-    }
-    units "dB";
-  } 
-
-  typedef severity {
-    description
-      "Severity, based on X.733 perceived severity";
-    type enumeration {
-      enum "critical" {
-        value 1;
-      }
-      enum "major" {
-        value 2;
-      }
-      enum "minor" {
-        value 3;
-      }
-      enum "warning" {
-        value 4;
-      }
-      enum "clear" {
-        value 5;
-      }
-      enum "indeterminate" {
-        value 6;
-      }
-    }
-  }
-
-  typedef rpc-status {
-    description
-      "status of RPC ";
-    type enumeration {
-      enum "Successful" {
-        value 1;
-      }
-      enum "Failed" {
-        value 2;
-      }
-    }
-  }
-
-  grouping rpc-response-status {
-    leaf status {
-      type rpc-status;
-      mandatory true;
-      description
-        "Successful or Failed";
-    }
-    leaf status-message {
-      type string;
-      description
-        "Gives a more detailed reason for failure";
-    }
-  }
-
-  typedef lifecycle-state {
-    description
-      "Lifecycle state.";
-    type enumeration {
-      enum "deployed" {
-        value 1;
-      }
-      enum "planned" {
-        value 2;
-      }
-      enum "maintenance" {
-        value 3;
-      }
-      enum "deploying" {
-        value 4;
-      }
-      enum "undeploying" {
-        value 5;
-      }
-    }
-  }
-
-  typedef state {
-    description
-      "State that indicates whether the resource is able to provide fullfill its role - carry traffic, etc.";
-    type enumeration {
-      enum "inService" {
-        value 1;
-      }
-      enum "outOfService" {
-        value 2;
-      }
-      enum "degraded" {
-        value 3;
-      }
-    }
-  }
-
-  typedef optic-types {
-    type enumeration {
-      enum "gray" {
-        value 1;
-      }
-      enum "dwdm" {
-        value 2;
-      }
-    }
-  }
-  grouping equipment-type {
-    leaf type {
-      type equipment-type-enum;
-      mandatory true;
-      config false;
-    }
-    leaf extension {
-      description
-        "Populated with equipment type when enum value is set to vendorExtension";
-      type string;
-      mandatory false;
-      config false;
-    }
-  }
-
-  typedef equipment-type-enum {
-    type enumeration {
-      enum "other" {
-        value 1;
-      }
-      enum "powerSupply" {
-        value 2;
-      }
-      enum "shelfProcessor" {
-        value 3;
-      }
-      enum "crossConnect" {
-        value 4;
-      }
-      enum "fan" {
-        value 5;
-      }
-      enum "accessPanel" {
-        value 6;
-      }
-      enum "circuitPack" {
-        value 7;
-      }
-    }
-  }
-
-  typedef optical-control-mode {
-    description
-      "Optical Control Mode: identifies specific algorithm related to power management and general optical control.";
-    type enumeration {
-      enum "power" {
-        value 1;
-      }
-      enum "gainLoss" {
-        value 2;
-      }
-      enum "off" {
-        value 3;
-      }
-    }
-    reference "openroadm.org: Open ROADM MSA Specification.";
-  }
-
-  typedef direction {
-    type enumeration {
-      enum "tx" {
-        value 1;
-      }
-      enum "rx" {
-        value 2;
-      }
-      enum "bidirectional" {
-        value 3;
-      }
-    }
-  }
-
-  typedef pm-direction {
-    type enumeration {
-      enum "tx" {
-        value 1;
-      }
-      enum "rx" {
-        value 2;
-      }
-      enum "bidirectional" {
-        value 3;
-      }
-      enum "notApplicable" {
-        value 4;
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-database.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-database.yang
deleted file mode 100644
index 7d77c92..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-database.yang
+++ /dev/null
@@ -1,119 +0,0 @@
-module org-openroadm-database {
-  namespace "http://org/openroadm/database";
-  prefix org-openroadm-database;
-
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }        
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "This module contains definitions for System Management.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  rpc db-backup {
-    description
-      "copy  running DB to user provided file to a given path";
-    input {
-      leaf filename {
-        type string {
-          length "10..255";
-        }
-        description
-          "Path and file name is used with back-up.(xxx.DBS)";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;         
-    }
-  }
-  rpc db-restore {
-    description
-      "Restore database ";
-    input {
-      leaf filename {
-        type string {
-          length "10..255";
-        }
-        description
-          "PATH/file name use file name.(xxx.DBS)";
-      }
-      leaf nodeIDCheck {
-        type boolean;
-        default "true";
-        description
-          "Flag to indicate if sysNameCheck is required";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;         
-    }
-  }
-  rpc db-activate {
-    description
-      "activate the database";
-    input {
-      leaf rollBackTimer {
-        type string;
-        description
-          "rollbackTimer ";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;         
-    }
-  }
-  rpc cancel-rollback-timer {
-    description
-      "Cancel roll back timer which user provisioned as part of activate command";
-    input {
-      leaf accept {
-        type boolean;
-        description
-          " TRUE means rollback timer is cancelled and new load is accepted";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;         
-    }
-  }
-  rpc database-init {
-    description
-      "Initialize the database to default DB";
-    output {
-      uses org-openroadm-common-types:rpc-response-status;         
-    } //output       
-  } 
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-de-operations.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-de-operations.yang
deleted file mode 100644
index 7414396..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-de-operations.yang
+++ /dev/null
@@ -1,77 +0,0 @@
-module org-openroadm-de-operations {
-  namespace "http://org/openroadm/de/operations";
-  prefix org-openroadm-de-operations;
-
-  import org-openroadm-resource {
-    prefix org-openroadm-resource;
-  }
-
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }     
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions of operations.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  rpc restart {
-    description
-      "Restart a resource with warm/cold option. If no resource is provided or only the device name is provded, then the device itself will be restarted.
-       Note that resources on the device will not be restartable";
-    input {
-      uses org-openroadm-resource:resource;
-      leaf option{
-        type enumeration{
-          enum "warm"{
-            value 1;
-          }
-          enum "cold"{
-            value 2;
-          }
-        }
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;      
-    }
-  }
-  notification restart-notification {
-    description
-      "This Notification is sent when a resource on a device has completed a restart. This is sent as a result of restarts triggered via the
-       restart RPC and other means.  The resource identified is the from the RPC request or the equivalment if the restart was triggered another way.";
-    uses org-openroadm-resource:resource;
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-degree.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-degree.yang
deleted file mode 100644
index a439963..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-degree.yang
+++ /dev/null
@@ -1,146 +0,0 @@
-module org-openroadm-degree {
-  namespace "http://org/openroadm/degree";
-  prefix org-openroadm-degree;
-
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }       
-  organization
-    "Open ROADM MSA";
-  contact
-    "OpenROADM.org.";
-  description
-    "YANG definitions for a Degree in Network Model
-     
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping roadm-degree {
-    list degrees {
-      key "degree-number";
-      leaf degree-number {
-        type uint16;
-        description
-          "Identifier for each direction/degree";
-      }
-      container external {
-        leaf clli {
-          type string;
-          description
-            "Location CLLI where ROADM resides";
-        }
-        leaf node-number{
-          type uint32;
-          description
-            "Number assigned to a ROADM node in a 
-             given office";
-        }
-        leaf node-id {
-          type string;
-          description
-            "Identifier of the ROADM";
-        }
-        leaf degree-number {
-          type uint16;
-          description
-            "Identifier for direction/degree in far-end ROADM";
-        }
-        leaf oms-clfi {
-          type string;
-          description
-            "Unique facility name given to the OMS tails";
-        }
-        leaf-list facility-routing-subpath {
-          type string;
-          description
-            "";
-        }
-        leaf max-wavelengths {
-          type uint32;
-          description
-            "Numeric value specifies the maximum # of wavelengths supported by the OMS";
-        }
-        leaf-list available-wavelengths {
-          type uint32;
-          description
-            "list of wavelengths that are supported by the degree";
-        }
-        leaf distance {
-          type decimal64 {
-            fraction-digits 1;
-          }
-          description
-            "Span distance measured in km.";
-          units "km";
-        }
-        leaf spanloss-base {
-          description
-            "Baseline ROADM span loss measured and accepted during degree turn-up.";
-          type org-openroadm-common-types:ratio-dB;
-        }
-        leaf spanloss-current {
-          description
-            "Current ROADM span loss captured by the controller.";
-          type org-openroadm-common-types:ratio-dB;
-        }
-        container oms-ttp-tx {
-          leaf-list wavelength-number {
-            type uint32;
-            description
-              "The wavelength # assigned by PCE to a  service/circuit";
-          }
-        }
-        container oms-ttp-rx {
-          leaf-list wavelength-number {
-            type uint32;
-            description
-              "The wavelength # assigned by PCE to a  service/circuit";
-          }
-        }
-      }
-      container ctp-tx {
-        leaf-list wavelength-number {
-          type uint32;
-          description
-            "The wavelength # assigned by PCE to a  service/circuit";
-        }
-      }
-      container ctp-rx {
-        leaf-list wavelength-number {
-          type uint32;
-          description
-            "The wavelength # assigned by PCE to a  service/circuit";
-        }
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-device-resource-types.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-device-resource-types.yang
deleted file mode 100644
index 100de8d..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-device-resource-types.yang
+++ /dev/null
@@ -1,217 +0,0 @@
-module org-openroadm-device-resource-types {
-  namespace "http://org/openroadm/de/device-resource-types";
-  prefix org-openroadm-device-resource-types;
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions of resource types.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-/* Currently not used; if used later, needs to move to org-openroadm-device.yang so leafref can be resolved.
-  grouping device-id {
-    description
-      "Device identifier. Unique within the Controller.";
-    leaf node-id {
-      description
-        "Node Id. Globally unique identifier for a device.";
-      type leafref {
-        path "/org-openroadm-device/info/node-id";
-      }
-      mandatory true;
-    }
-  }
-*/
-
-/* Currently not used; if used later, needs to move to org-openroadm-device.yang so leafref can be resolved.
-  grouping shelf-name {
-    leaf shelf-name {
-      description
-        "Shelf identifier. Unique within the context of a device.";
-      type leafref {
-        path "/org-openroadm-device/shelves/shelf-name";
-      }
-      mandatory true;
-      config false;
-    }
-  }
-*/
-
-/* Currently not used; if used later, needs to move to org-openroadm-device.yang so leafref can be resolved.
-  grouping physical-link-name {
-    leaf physical-link-name {
-      description
-        "Physical Link identifier. Unique within the context of a device.";
-      type leafref {
-        path "/org-openroadm-device/physical-link/physical-link-name";
-      }
-      mandatory true;
-      config false;
-    }
-  }
-*/
-
-/* Currently not used; if used later, needs to move to org-openroadm-device.yang so leafref can be resolved.
-  grouping internal-link-name {
-    uses org-openroadm-device:circuit-pack-name;
-    leaf internal-link-name {
-      description
-        "Internal Link identifier. Unique within the context of a circuit pack.";
-      type leafref {
-        path "/org-openroadm-device/internal-link/internal-link-name";
-      }
-      mandatory true;
-      config false;
-    }
-  }
-*/
-
-/* Currently not used; if used later, needs to move to org-openroadm-device.yang so leafref can be resolved.
-  grouping connection-number {
-    leaf connection-number {
-      description
-        "Connection identifier. Unique within the context of a device.";
-      type leafref {
-        path "/org-openroadm-device/connections/connection-number";
-      }
-    }
-  }
-*/
-
-/* Currently not used; if used later, needs to move to org-openroadm-device.yang so leafref can be resolved.
-  grouping this-will-test-ids {
-    uses device-id;
-    container shelf {
-      uses shelf-name;
-    }
-    container circuit-pack {
-      uses org-openroadm-device:circuit-pack-name;
-    }
-    container port {
-      uses org-openroadm-device:port-name;
-    }
-    uses internal-link-name;
-    uses physical-link-name;
-    uses connection-number;
-    uses org-openroadm-device:srg-number;
-    uses org-openroadm-device:degree-number;
-  }
-*/
-
-/* Currently not used; if used later, needs to move to org-openroadm-device.yang so leafref can be resolved.
-  grouping xponder-device-id {
-    description
-      "Xponder identifier. Unique within the Controller.";
-    leaf node-id {
-      description
-        "Xponder Id. Globally unique identifier for the device";
-      type leafref {
-        path "/org-openroadm-device/info/node-id";
-      }
-      mandatory true;
-    }
-  }
-*/
-
-/* Currently not used; if used later, needs to move to org-openroadm-device.yang so leafref can be resolved.
-  grouping xponder-number {
-    leaf xponder-number {
-      description
-        "Xponder identifier. Unique within the context of a device.";
-      type leafref {
-        path "/org-openroadm-device/xponders/xponder-number";
-      }
-      config false;
-    }
-  }
-*/
-
-/* Currently not used; if used later, needs to move to org-openroadm-device.yang so leafref can be resolved.
-  grouping xponder-shelf-name {
-    uses xponder-number;
-    leaf shelf-name {
-      description
-        "Shelf identifier. Unique within the context of a device.";
-      type leafref {
-        path "/org-openroadm-device/xponders[xponder-number=current()/../xponder-number]/shelves/shelf-name";
-      }
-      mandatory true;
-      config false;
-    }
-  }
-*/
-
-/* Currently not used; if used later, needs to move to org-openroadm-device.yang so leafref can be resolved.
-  grouping xponder-circuit-pack-name {
-    uses xponder-number;
-    leaf circuit-pack-name {
-      description
-        "Circuit Pack identifier. Unique within the context of a xponder.";
-      type leafref {
-        path "/org-openroadm-device/circuit-packs/circuit-pack-name";
-      }
-      config false;
-    }
-  }
-*/
-
-/* Currently not used; if used later, needs to move to org-openroadm-device.yang so leafref can be resolved.
-  grouping xponder-port-name {
-    uses xponder-circuit-pack-name;
-    leaf port-name {
-      description
-        "Port identifier. Unique within the context of a circuit-pack.";
-      type leafref {
-        path "/org-openroadm-device/circuit-packs[circuit-pack-name=current()/../circuit-pack-name]/ports/port-name";
-      }
-      config false;
-    }
-  }
-*/
-
-/* Currently not used; if used later, needs to move to org-openroadm-device.yang so leafref can be resolved.
-  grouping this-will-test-xponder-ids {
-    uses xponder-device-id;
-    container shelf {
-      uses xponder-shelf-name;
-    }
-    container circuit-pack {
-      uses xponder-circuit-pack-name;
-    }
-    container port {
-      uses xponder-port-name;
-    }
-  }
-*/
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-device.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-device.yang
deleted file mode 100644
index 03d9659..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-device.yang
+++ /dev/null
@@ -1,1213 +0,0 @@
-module org-openroadm-device {
-  namespace "http://org/openroadm/device";
-  prefix org-openroadm-device;
-
-  import ietf-yang-types {
-    prefix ietf-yang-types;
-  }
-  import ietf-inet-types {
-    prefix ietf-inet-types;
-  }
-  import ietf-netconf {
-    prefix ietf-nc;
-  }     
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }
-  import org-openroadm-resource-types {
-    prefix org-openroadm-resource-types;
-  }
-  import org-openroadm-wavelength-map {
-    prefix org-openroadm-wavelength-map;
-  }
-  import org-openroadm-physical-types {
-    prefix org-openroadm-physical-types;
-  }
-  import org-openroadm-user-mgmt {
-    prefix org-openroadm-user-mgmt;
-  }
-  import org-openroadm-port-types {
-    prefix org-openroadm-port-types;
-  }
-  import org-openroadm-interfaces {
-    prefix org-openroadm-interfaces;
-  }
-  import org-openroadm-swdl {
-    prefix org-openroadm-swdl;
-  }
-  import org-openroadm-equipment-states-types {
-    prefix org-openroadm-equipment-states-types;
-  }
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions of ROADM device
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.
-
-     Also contains code components extracted from IETF netconf.  These code components 
-     are copyrighted and licensed as follows:
-     
-     Copyright (c) 2016 IETF Trust and the persons identified as the document authors. 
-     All rights reserved. 
-     
-     This document is subject to BCP 78 and the IETF Trust’s Legal Provisions Relating 
-     to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of 
-     publication of this document. Please review these documents carefully, as they 
-     describe your rights and restrictions with respect to this document. Code Components 
-     extracted from this document must include Simplified BSD License text as described in
-     Section 4.e of the Trust Legal Provisions and are provided without warranty as 
-     described in the Simplified BSD License.";
-
-  revision 2017-02-06 {
-    description
-      "Version 1.2.1 - removed pattern for current-datetime in info tree and rpc";
-  }
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  rpc get-connection-port-trail {
-    input {
-      leaf connection-number {
-        type string;
-        mandatory true;
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-      list ports {
-        uses org-openroadm-common-types:physical-location;
-        uses port-name {
-          refine "circuit-pack-name" {
-            mandatory true;
-          }
-          refine "port-name" {
-            mandatory true;
-          }
-        }
-      }
-    }
-  }
-  rpc disable-automatic-shutoff {
-    input {
-      leaf amp {
-        type leafref {
-          path "/org-openroadm-device/shelves/shelf-name";
-        }
-        mandatory true;
-        description
-          "The shelf where amp is located";
-      }
-      leaf degree-number {
-        type uint16;
-        mandatory true;
-      }
-      leaf support-timer {
-        type uint16 {
-          range "1..600";
-        }
-        default "20";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-  }
-  rpc start-scan {
-    input {
-      leaf degree-number {
-        type uint16;
-        mandatory true;
-      }
-      leaf port-direction {
-        type org-openroadm-common-types:direction;
-      }
-      leaf distance {
-        type uint32;
-      }
-      leaf resolution {
-        type uint32;
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-  }
-
-  notification otdr-scan-result {
-    leaf status {
-      type enumeration {
-        enum "Completed" {
-          value 1;
-        }
-        enum "Failed" {
-          value 2;
-        }
-      }
-      mandatory true;
-      description
-        "Completed or Failed for the scan's final status";
-    }
-    leaf result-file {
-      type string;
-    }
-  }                      
- 
-  rpc set-current-datetime {     
-    description
-      "Set the info/current-datetime leaf to the specified value.";
-    input {     
-     leaf current-datetime {
-        type ietf-yang-types:date-and-time; 
-        mandatory true;
-        description
-          "The current system date and time in UTC. Format: YYYY-MM-DDTHH:MM:SS";
-      }
-    }
-
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-  }                   
-
-  grouping device-common {
-    leaf node-id {
-      type string;
-      description
-        "Globally unique identifer for a device.";
-      default "openroadm";
-    }
-    leaf node-number {
-      type uint32;
-      description
-        "Number assigned to a ROADM node at a 
-         given office";
-    }
-    leaf node-type {
-      type org-openroadm-common-types:node-types;
-      description
-        "Identifier for node-type e.g Roadm, xponder";
-      config false;
-      mandatory true;
-    }
-    leaf clli {
-      type string;
-      description
-        "Common Language Location Identifier.";
-    }
-    uses org-openroadm-physical-types:node-info;
-    leaf ipAddress {
-      type ietf-inet-types:ip-address;
-      description
-        "IP Address of device";
-    }
-    leaf prefix-length {
-      type uint8 {
-        range "0..128";
-      }
-      description
-        "The length of the subnet prefix";
-    }
-    leaf defaultGateway {
-      type ietf-inet-types:ip-address;
-      description
-        "Default Gateway";
-    }
-    leaf source {
-      type enumeration {
-        enum "static" {
-          value 1;
-        }
-        enum "dhcp" {
-          value 2;
-        }
-      }
-      config false;
-    }
-    leaf current-ipAddress {
-      type ietf-inet-types:ip-address;
-      config false;
-      description
-        "Current IP Address of device";
-    }
-    leaf current-prefix-length {
-      type uint8 {
-        range "0..128";
-      }
-      config false;
-      description
-        "The current length of the subnet prefix";
-    }
-    leaf current-defaultGateway {
-      type ietf-inet-types:ip-address;
-      config false;
-      description
-        "Current Default Gateway";
-    }
-    leaf macAddress {
-      type ietf-yang-types:mac-address;
-      description
-        "MAC Address of device";
-      config false;
-    }
-    leaf softwareVersion {
-      type string;
-      config false;
-      description
-        "Software version";
-    }
-    leaf template {
-      type string;
-      description
-        "Template information used in the deployment.";
-    }
-    leaf current-datetime {
-      type ietf-yang-types:date-and-time; 
-      config false;
-      description
-        "The current system date and time in UTC. Format: YYYY-MM-DDTHH:MM:SS.mm+ ";
-    }        
-    container geoLocation {
-      description
-        "GPS location";
-      leaf latitude {
-        type decimal64 {
-          fraction-digits 16;
-          range "-90 .. 90";
-        }
-        description
-          "[From wikipedia] Latitude is an angle (defined below)
-           which ranges from 0° at the Equator to 90° (North or                
-           South) at the poles";
-      }
-      leaf longitude {
-        type decimal64 {
-          fraction-digits 16;
-          range "-180 .. 180";
-        }
-        description
-          "[From wikipedia] The longitude is measured as the 
-           angle east or west from the Prime Meridian, ranging
-           from 0° at the Prime Meridian to +180° eastward and
-           −180° westward.";
-      }
-    }
-  }
-
-  grouping slot-info {
-    description
-      "slots information. To be populated by NE during retrieval.";
-    leaf slot-name {
-      type string; 
-      description
-        "The name of this slot.";
-    }
-    leaf label {
-      type string;
-      description
-        "Faceplate label";
-    }
-    leaf provisioned-circuit-pack {
-      type leafref {
-        path "/org-openroadm-device/circuit-packs/circuit-pack-name";
-      }
-      description
-        "The supported circuit-pack. It will be empty if no provision on this slot.";
-    }                
-  }         
-  grouping shelves {
-    list shelves {
-      key "shelf-name";
-      uses shelf;
-    }
-  }                            
-  grouping shelf {
-    leaf shelf-name {
-      description
-        "Unique identifier for this shelf within a device";
-      type string;
-    }
-    leaf shelf-type {
-      description
-        "The shelf type: describe the shelf with a unique string.";
-      type string;
-      mandatory true;
-    }
-    leaf rack {
-      description
-        "Reflect the shelf physical location data including floor, aisle, bay values.";
-      type string;
-    }
-    leaf shelf-position {
-      description
-        "Reflect the shelf vertical position within an equipment bay.";
-      type string;
-    }
-    leaf administrative-state {
-      description
-        "Admin State of the shelf";
-      type org-openroadm-equipment-states-types:admin-states;
-    }
-    uses org-openroadm-physical-types:common-info;
-    leaf equipment-state {
-      type org-openroadm-equipment-states-types:states;
-      description
-        "equipment state for the shelf, used to track the lifecycle state.";
-    }
-    leaf due-date {
-      type ietf-yang-types:date-and-time;
-      description
-        "due date for the shelf.";
-    }
-    list slots {         
-      description
-          "List of slots on this shelf. To be populated by NE during retrieval.";
-      key "slot-name";
-      config false;
-      uses slot-info;
-    }                       
-  }                                    
-
-  grouping circuit-packs {
-    list circuit-packs {
-      description
-        "List of circuit packs. This includes common equipment, like fans, power supplies, etc.";
-      key "circuit-pack-name";
-      leaf circuit-pack-type {
-        description
-          "Type of circuit-pack";
-        type string;
-        mandatory true;
-      }
-      leaf circuit-pack-product-code {
-        description
-          "Product Code for the circuit-pack";
-        type string;
-      }
-      uses circuit-pack;
-    }
-  }
-
-  grouping circuit-pack {
-    leaf circuit-pack-name {
-      description
-        "Unique identifier for this circuit-pack within a device";
-      type string;
-    }
-    leaf administrative-state {
-      description
-        "Administrative state of circuit-pack";
-      type org-openroadm-equipment-states-types:admin-states;
-    }
-    uses org-openroadm-physical-types:common-info;
-    container circuit-pack-category {
-      description
-        "General type of circuit-pack";
-      uses org-openroadm-common-types:equipment-type;
-      config false;
-    }
-    leaf equipment-state {
-      description
-        "Equipment state, which complements operational state.";
-      type org-openroadm-equipment-states-types:states;
-    }
-    leaf circuit-pack-mode {
-      description
-        "Circuit-pack mode allowed. e.g. NORMAL or REGEN";
-      type string;
-      default "NORMAL";
-    }
-    leaf shelf {
-      type leafref {
-        path "/org-openroadm-device/shelves/shelf-name";
-      }
-      mandatory true;
-    }
-    leaf slot {
-      type string;
-      mandatory true;
-    }
-    leaf subSlot {
-      type string;
-      mandatory false;
-    }
-    leaf due-date {
-      type ietf-yang-types:date-and-time;
-      description
-        "due date for this circuit-pack.";
-    }     
-    container parent-circuit-pack {
-      description
-        "In the case of circuit packs that contain other equipment (modules or pluggables), this captures the hierarchy of that equipment.  It is a vendor specific design decision if the ports for single-port pluggables are modeled as children of the parent circuit-pack, or as children of the pluggable circuit-pack contained in the parent circuit-pack.  For modules with multiple ports, it is recommended that ports be children of the module and not the carrier, to help in fault correlation and isolation in the case of a module failure.";
-      uses circuit-pack-name;
-      leaf cp-slot-name {
-        type string;
-        description
-          "Slot name on parent-circuit-pack.";
-      }            
-    }
-    list cp-slots {
-      description
-          "List of circuit-pack slots on this circuit-pack. To be populated by NE during retrieval.";
-      key "slot-name";
-      config false;
-      uses slot-info;
-    }                       
-    list ports {
-      key "port-name";
-      description
-        "List of ports on this circuit-pack.  For single port pluggables, the port may be modeled against the pluggable itself, or against the parent-circuit-pack.  For mulit-port pluggables, it is recommended that ports be modeled against the module itself.  Modeling ports as close to the equipment hierarchy as possible will help in fault correlation and isolation since common failures associated with supporting equipment can be used to help identify symptomatic failures on the contained ports.";
-      uses port;
-      container roadm-port {
-        when "../port-qual='roadm-external'";
-        uses org-openroadm-port-types:roadm-port;
-      }
-      container transponder-port {
-        when "../port-qual='xpdr-network' or ../port-qual='xpdr-client'";
-        uses org-openroadm-port-types:common-port;
-      }
-      container otdr-port {
-        when "../port-qual='otdr'";
-        description
-          "Settings for otdr port.";
-        leaf launch-cable-length {
-          type uint32;
-          default "30";
-          units "m";
-        }                    
-        leaf port-direction {
-          type org-openroadm-common-types:direction;
-        }    
-      }
-    }
-  }
-
-  grouping connection {
-    description
-      "Grouping used to define connections.";
-    leaf connection-number {
-      type string;
-    }
-    leaf wavelength-number {
-      type uint32;
-      mandatory true;
-      description
-        "wavelength-number, can be used to access wavelength-map
-         to get wavelength value in nm.";
-    }
-    leaf opticalControlMode {
-      description
-        "Whether connection is currently in power or gain/loss mode";
-      type org-openroadm-common-types:optical-control-mode;
-      reference "openroadm.org: Open ROADM MSA Specification.";
-      default "off";
-    }
-    leaf target-output-power {
-      type org-openroadm-common-types:power-dBm;
-      description
-        "The output target power for this connection. When set, the ROADM will work to ensure that current-output-power reaches this level.";
-    }
-    container source {
-      leaf src-if {
-        type leafref {
-          path "/org-openroadm-device/interface/name";
-        }
-        mandatory true;
-      }
-    }
-    container destination {
-      leaf dst-if {
-        type leafref {
-          path "/org-openroadm-device/interface/name";
-        }
-        mandatory true;
-      }
-    }
-  }
-
-  grouping degree {
-    leaf degree-number {
-      type uint16;
-      must "not( current() > /org-openroadm-device/info/max-degrees) and current() > 0" {
-        error-message "Degree not supported by device ";
-        description
-          "Validating if the degree is supported by device";
-      }
-    }
-    leaf max-wavelengths {
-      type uint16;
-      description
-        "maximum number of wavelengths";
-      config false;
-      mandatory true;
-    }
-    list circuit-packs {
-      key "index";
-      description
-        "list for Cards associated with a degree";
-      leaf index {
-        type uint32;
-      }
-      uses circuit-pack-name {
-        refine "circuit-pack-name" {
-          mandatory true;
-        }
-      }
-    }
-    list connection-ports {
-      description
-        "Port associated with degree: One if bi-directional; two if uni-directional";
-      key "index";
-      leaf index {
-        type uint32;
-      }
-      uses port-name {
-        refine "circuit-pack-name" {
-          mandatory true;
-        }
-        refine "port-name" {
-          mandatory true;
-        }
-      }
-    }
-    container otdr-port {
-      description
-        "otdr port associated with degree.";
-      uses port-name;
-    }
-  }
-
-  grouping external-links {
-    description
-      "YANG definitions for external links.. 
-       - physical links between ROADMs and between the ROADMs and XPonders, which can be added and removed maually.";
-    list external-link {
-      key "external-link-name";
-      uses external-link;
-    }
-  }
-
-  grouping external-link {
-    leaf external-link-name {
-      type string;
-    }
-    container source {
-      uses org-openroadm-resource-types:device-id {
-        refine "node-id" {
-          mandatory true;
-        }
-      }
-      uses org-openroadm-resource-types:port-name {
-        refine "circuit-pack-name" {
-          mandatory true;
-        }
-        refine "port-name" {
-          mandatory true;
-        }
-      }
-    }
-    container destination {
-      uses org-openroadm-resource-types:device-id {
-        refine "node-id" {
-          mandatory true;
-        }
-      }
-      uses org-openroadm-resource-types:port-name {
-        refine "circuit-pack-name" {
-          mandatory true;
-        }
-        refine "port-name" {
-          mandatory true;
-        }
-      }
-    }
-  }
-
-  grouping internal-links {
-    list internal-link {
-      key "internal-link-name";
-      config false;
-      uses internal-link;
-    }
-  }
-
-  grouping internal-link {
-    leaf internal-link-name {
-      type string;
-    }
-    container source {
-      uses port-name {
-        refine "circuit-pack-name" {
-          mandatory true;
-        }
-        refine "port-name" {
-          mandatory true;
-        }
-      }
-    }
-    container destination {
-      uses port-name {
-        refine "circuit-pack-name" {
-          mandatory true;
-        }
-        refine "port-name" {
-          mandatory true;
-        }
-      }
-    }
-  }
-
-  grouping physical-links {
-    description
-      "YANG definitions for physical links.
-       - phyical links between cards within a ROADM, which are populated by the ROADM and cannot be added or removed manually. ";
-    list physical-link {
-      key "physical-link-name";
-      uses physical-link;
-    }
-  }
-
-  grouping physical-link {
-    leaf physical-link-name {
-      type string;
-    }
-    container source {
-      uses port-name {
-        refine "circuit-pack-name" {
-          mandatory true;
-        }
-        refine "port-name" {
-          mandatory true;
-        }
-      }
-    }
-    container destination {
-      uses port-name {
-        refine "circuit-pack-name" {
-          mandatory true;
-        }
-        refine "port-name" {
-          mandatory true;
-        }
-      }
-    }
-  }
-
-  grouping srg {
-    leaf max-add-drop-ports {
-      type uint16;
-      config false;
-      mandatory true;
-    }
-    leaf srg-number {
-      type uint16;
-      must "not(current()>/org-openroadm-device/info/max-srgs) and current()>0" {
-        error-message "invalid SRG";
-        description
-          "Validating if the srg is supported by add/drop group";
-      }
-    }
-    leaf wavelengthDuplication {
-      description
-        "Whether the SRG can handle duplicate wavelengths and if so to what extent.";
-      config false;
-      mandatory true;
-      type enumeration {
-        enum "onePerSRG" {
-          description
-            "The SRG cannot handle wavelength duplication. Attempting to provision a connection on this SRG that uses the same wavelength as an existing service will result in failure.";
-          value 1;
-        }
-        enum "onePerDegree" {
-          description
-            "The SRG can handle wavelength duplication, but only one per degree. Attempting to provision a connection on this SRG that uses the same wavelength as an existing service will succeed, so long as the connections are not using the same degree.";
-          value 2;
-        }
-      }
-    }
-    list circuit-packs {
-      key "index";
-      description
-        "list for Cards associated with an add/drop group and srg";
-      leaf index {
-        type uint32;
-      }
-      uses circuit-pack-name {
-        refine "circuit-pack-name" {
-          mandatory true;
-        }
-      }
-    }
-  }
-
-  grouping degree-number {
-    leaf degree-number {
-      description
-        "Degree identifier. Unique within the context of a device.";
-      type leafref {
-        path "/org-openroadm-device/degree/degree-number";
-      }
-    }
-  }
-
-  grouping circuit-pack-name {
-    leaf circuit-pack-name {
-      description
-        "Circuit-Pack identifier. Unique within the context of a device.";
-      type leafref {
-        path "/org-openroadm-device/circuit-packs/circuit-pack-name";
-      }
-    }
-  }
-
-  grouping port-name {
-    uses circuit-pack-name;
-    leaf port-name {
-      description
-        "Port identifier. Unique within the context of a circuit-pack.";
-      type leafref {
-        path "/org-openroadm-device/circuit-packs[circuit-pack-name=current()/../circuit-pack-name]/ports/port-name";
-      }
-    }
-  }
-
-  grouping srg-number {
-    leaf srg-number {
-      description
-        "Shared Risk Group identifier. Unique within the context of a device.";
-      type leafref {
-        path "/org-openroadm-device/shared-risk-group/srg-number";
-      }
-    }
-  }
-
-  grouping supporting-port-name {
-    leaf supporting-circuit-pack-name {
-      description
-        "Identifier of the supporting circuit-pack.";
-      type leafref {
-        path "/org-openroadm-device/circuit-packs/circuit-pack-name";
-      }
-      mandatory true;
-    }
-    leaf supporting-port {
-      description
-        "Identifier of the supporting port.";
-      mandatory true;
-      type leafref {
-        path "/org-openroadm-device/circuit-packs[circuit-pack-name=current()/../supporting-circuit-pack-name]/ports/port-name";
-      }
-    }
-  }
-
-  grouping interface-name {
-    leaf interface-name {
-      description
-        "Name of an interface. Unique within the context of a device.";
-      type leafref {
-        path "/org-openroadm-device/interface/name";
-      }
-      config false;
-    }
-  }
-
-  grouping interfaces-grp {
-    description
-      "OpenROADM Interface configuration parameters.";
-    list interface {
-      key "name";
-      description
-        "The list of configured interfaces on the device.";
-      leaf name {
-        type string;
-        description
-          "The name of the interface.";
-      }
-      leaf description {
-        type string;
-        description
-          "A textual description of the interface.";
-      }
-      leaf type {
-        type identityref {
-          base org-openroadm-interfaces:interface-type;
-        }
-        mandatory true;
-        description
-          "The type of the interface.";
-      }
-      leaf administrative-state {
-        type org-openroadm-equipment-states-types:admin-states;
-      }
-      leaf operational-state {
-        type org-openroadm-common-types:state;
-        config false;
-      }
-      leaf circuit-id {
-        type string {
-          length "0..45";
-        }
-        description
-          "circuit identifier/user label,
-           can be used in alarm correlation and/or connection management ";
-      }
-      leaf supporting-interface {
-        type leafref {
-          path "/org-openroadm-device/interface/name";
-        }
-      }
-      uses supporting-port-name;
-    }
-  }
-
-  grouping port {
-    description
-      "Grouping of attributes related to a port object.";
-    leaf port-name {
-      type string;
-      mandatory true;
-      description
-        "Identifier for a port, unique within a circuit pack";
-    }
-    leaf port-type {
-      type string;
-      description
-        "Type of the pluggable or fixed port.";
-    }
-    leaf port-qual {
-      type enumeration {
-        enum "roadm-internal" {
-          value 1;
-        }
-        enum "roadm-external" {
-          value 2;
-        }
-        enum "xpdr-network" {
-          value 3;
-        }
-        enum "xpdr-client" {
-          value 4;
-        }
-        enum "otdr" {
-          value 5;
-        }
-      }
-    }
-    leaf port-wavelength-type {
-      type org-openroadm-port-types:port-wavelength-types;
-      config false;
-      description
-        "Type of port - single, multiple-wavelength, etc.";
-    }
-    leaf port-direction {
-      type org-openroadm-common-types:direction;
-      config false;
-      mandatory true;
-      description
-        "Whether port is uni (tx/rx) or bi-directional and";
-    }
-    leaf label {
-      type string;
-      config false;
-      description
-        "Faceplate label";
-    }
-    leaf circuit-id{
-      type string{
-        length "0..45";
-      }
-      description
-          "circuit identifier/user label,
-           can be used in alarm correlation and/or connection management ";
-
-    }
-    leaf administrative-state {
-      type org-openroadm-equipment-states-types:admin-states;
-      description
-        "Administrative state of port. The value of this field independant of the state of its contained and containing resources.  Setting this a port to administratively down will impact both its operational state, as well the operational state of its contained resources.  If this port is an endpoint to a connection, internal-link, physical-link, etc, then administratevely disabling this port will impact the operational state of those items unless they are using some form of port-protection schema.";
-      default "outOfService";
-    }
-    leaf operational-state {
-      type org-openroadm-common-types:state;
-      config false;
-      mandatory true;
-      description
-        "Operational state of a port";
-    }
-    leaf-list supported-interface-capability {
-      description
-        "Interface types supported on this port";
-      config false;
-      type identityref {
-        base org-openroadm-port-types:supported-if-capability;
-      }
-    }
-    leaf logical-connection-point {
-      type string;
-      description
-        "delete or replace with list logical-ports or connections?";
-    }
-    container partner-port {
-      config false;
-      description
-        "For ports which are not identified as having a direction of bidirectional, this field is used to identify the port which corresponds to the reverse direction. A port pair should include a port for each direction (tx, rx) and report their mate as partner-port.";
-      uses port-name;
-    }
-    container parent-port {
-      config false;
-      description
-        "In the case of port hierarchy, this is the parent port, which is also modeled as port within this circuit-pack. This is used in the case of a port that supports a parallel connector that contains subports.  The parent-port of the subport will be the port that contains this subport.  This can be used to help isolate faults when a single fault on a parallel connector introduces symptomatic failures on the contained subports.";
-      uses port-name;
-    }
-    list interfaces {
-      config false;
-      description
-        "List of the interfaces this port supports.  This is a list of names of instances in the flat instance list";
-      uses interface-name;
-    }
-  }
-
-  uses org-openroadm-device-container;
-
-  grouping org-openroadm-device-container {
-    container org-openroadm-device {
-      container info {
-        uses device-common;
-        leaf max-degrees {
-          type uint16;
-          description
-            "Max. number of degrees supported by device";
-          config false;
-        }
-        leaf max-srgs {
-          type uint16;
-          description
-            "Max. number of SRGs in an add/drop group";
-          config false;
-        }
-      }
-      container users {
-        description
-          "Stores a list of users";
-        uses org-openroadm-user-mgmt:user-profile;
-      }
-      container pending-sw {
-        config false;
-        uses org-openroadm-swdl:sw-bank;
-      }
-      uses shelves;
-      uses circuit-packs;
-      uses interfaces-grp;
-      container protocols {
-        description
-          "Contains the supported protocols";
-      }
-      container wavelength-map {
-        description
-          "The wavelength-number and center frequency, wavelength mapping";
-        config false;
-        uses org-openroadm-wavelength-map:wavelength-map-g;
-      }
-      uses internal-links;
-      uses physical-links;
-      uses external-links;
-      list degree {
-        when "/org-openroadm-device/info/node-type='rdm'";
-        key "degree-number";
-        uses degree;
-      }
-      list shared-risk-group {
-        when "/org-openroadm-device/info/node-type='rdm'";
-        key "srg-number";
-        uses srg;
-      }
-      list roadm-connections {
-        when "/org-openroadm-device/info/node-type='rdm'";
-        key "connection-number";
-        uses connection;
-      }
-      list connection-map {
-        key "connection-map-number";
-        config false;
-        leaf connection-map-number {
-          description
-            "Unique identifier for this connection-map entry";
-          type uint32;
-        }
-        container source {
-          leaf circuit-pack-name {
-            type leafref {
-              path "/org-openroadm-device/circuit-packs/circuit-pack-name";
-            }
-            mandatory true;
-          }
-          leaf port-name {
-            description
-              "Port identifier. Unique within the context of a circuit-pack.";
-            type leafref {
-              path "/org-openroadm-device/circuit-packs[circuit-pack-name=current()/../circuit-pack-name]/ports/port-name";
-            }
-            mandatory true;
-          }
-        }
-        list destination {
-          key "circuit-pack-name port-name";
-          min-elements 1;
-          leaf circuit-pack-name {
-            type leafref {
-              path "/org-openroadm-device/circuit-packs/circuit-pack-name";
-            }
-            mandatory true;
-          }
-          leaf port-name {
-            description
-              "Port identifier. Unique within the context of a circuit-pack.";
-            type leafref {
-              path "/org-openroadm-device/circuit-packs[circuit-pack-name=current()/../circuit-pack-name]/ports/port-name";
-            }
-            mandatory true;
-          }
-        }
-      }
-    }
-  }
-
-  grouping common-session-parms {
-    description
-      "Common session parameters to identify a
-       management session.";
-
-    leaf username {
-      type string;
-      mandatory true;
-      description
-        "Name of the user for the session.";
-    }
-
-    leaf session-id {
-      type ietf-nc:session-id-or-zero-type;
-      mandatory true;
-      description
-        "Identifier of the session.
-         A NETCONF session MUST be identified by a non-zero value.
-         A non-NETCONF session MAY be identified by the value zero.";
-    }
-
-    leaf source-host {
-      type ietf-inet-types:ip-address;
-      description
-        "Address of the remote host for the session.";
-    }
-  }
-  grouping changed-by-parms {
-    description
-      "Common parameters to identify the source
-       of a change event, such as a configuration
-       or capability change.";
-
-     container changed-by {
-       description
-         "Indicates the source of the change.
-          If caused by internal action, then the
-          empty leaf 'server' will be present.
-          If caused by a management session, then
-          the name, remote host address, and session ID
-          of the session that made the change will be reported.";
-       choice server-or-user {
-         leaf server {
-           type empty;
-           description
-             "If present, the change was caused
-              by the server.";
-         }
-
-         case by-user {
-           uses common-session-parms;
-         }
-       } // choice server-or-user
-     } // container changed-by-parms
-  }                                    
-  notification change-notification {
-    description
-      "The Notification that a resource has been added, modified or removed.
-       This notification can be triggered by changes in configuration and operational data.
-       It shall contain the changed field pointed by the xpath. 
-       Typically it is not intended for frequently changing volatile data e.g. PM, power levels";                                        
-
-    leaf change-time {
-      description "The time the change occurs.";
-      type ietf-yang-types:date-and-time;
-    }               
-    uses changed-by-parms;
-
-    leaf datastore {
-      type enumeration {
-        enum running {
-          description "The <running> datastore has changed.";
-        }
-        enum startup {
-          description "The <startup> datastore has changed";
-        }
-      }
-      default "running";
-      description
-        "Indicates which configuration datastore has changed.";
-    }
-    list edit {
-      description
-        "An edit (change) record SHOULD be present for each distinct
-         edit operation that the server has detected on
-         the target datastore.  This list MAY be omitted
-         if the detailed edit operations are not known.
-         The server MAY report entries in this list for
-         changes not made by a NETCONF session.";
-
-      leaf target {
-        type instance-identifier;
-        description
-            "Topmost node associated with the configuration or operationa change.
-             A server SHOULD set this object to the node within
-             the datastore that is being altered.  A server MAY
-             set this object to one of the ancestors of the actual
-             node that was changed, or omit this object, if the
-             exact node is not known.";
-      }
-      leaf operation {
-        type ietf-nc:edit-operation-type;
-        description
-          "Type of edit operation performed.
-         A server MUST set this object to the NETCONF edit
-         operation performed on the target datastore.";
-      }
-    } // list edit
-  } // notification change-notification
-}
\ No newline at end of file
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-equipment-states-types.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-equipment-states-types.yang
deleted file mode 100644
index b1b9936..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-equipment-states-types.yang
+++ /dev/null
@@ -1,130 +0,0 @@
-module org-openroadm-equipment-states-types {
-  namespace "http://org/openroadm/equipment/states/types";
-  prefix org-openroadm-equipment-states-types;
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions for types of states of equipment (slot/subslot).
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  typedef admin-states {
-    type enumeration {
-      enum "inService" {
-        value 1;
-      }
-      enum "outOfService" {
-        value 2;
-      }
-      enum "maintenance" {
-        value 3;
-      }
-    }
-  }
-
-  typedef states {
-    type enumeration {
-      enum "reserved-for-facility-planned" {
-        value 1;
-        description
-          "equipment is planned for use by a service";
-      }
-      enum "not-reserved-planned" {
-        value 2;
-        description
-          "equipment is planned by not reserved for any purpose";
-      }
-      enum "reserved-for-maintenance-planned" {
-        value 3;
-        description
-          "equipment is planned for use as a maintenance spare";
-      }
-      enum "reserved-for-facility-unvalidated" {
-        value 4;
-        description
-          "equipment is reserved for use by a service but not
-           validated against planned equipment";
-      }
-      enum "not-reserved-unvalidated" {
-        value 5;
-        description
-          "equipment is not reserved for any purpose and
-           not validated against planned equipment";
-      }
-      enum "unknown-unvalidated" {
-        value 6;
-        description
-          "unknown equipment not validated against planned equipment";
-      }
-      enum "reserved-for-maintenance-unvalidated" {
-        value 7;
-        description
-          "equipment is to be used for use as a maintenance spare
-           but not validated against planned equipment";
-      }
-      enum "reserved-for-facility-available" {
-        value 8;
-        description
-          "reserved for use by a service and available";
-      }
-      enum "not-reserved-available" {
-        value 9;
-        description
-          "not reserved for use by a service and available";
-      }
-      enum "reserved-for-maintenance-available" {
-        value 10;
-        description
-          "reserved as a maintenance spare and available";
-      }
-      enum "reserved-for-reversion-inuse" {
-        value 11;
-        description
-          "equipiment that is reserved as part of a home path
-           for a service that has been temporarily re-routed";
-      }
-      enum "not-reserved-inuse" {
-        value 12;
-        description
-          "equipment in use for a service";
-      }
-      enum "reserved-for-maintenance-inuse" {
-        value 13;
-        description
-          "maintenance spare equipment that is in use as a
-           maintenance spare";
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-ethernet-interfaces.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-ethernet-interfaces.yang
deleted file mode 100644
index 0a5b9f5..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-ethernet-interfaces.yang
+++ /dev/null
@@ -1,145 +0,0 @@
-module org-openroadm-ethernet-interfaces {
-  namespace "http://org/openroadm/ethernet-interfaces";
-  prefix org-openroadm-eth-interfaces;
-
-  import org-openroadm-device {
-    prefix org-openroadm-device;
-  }
-  import org-openroadm-interfaces {
-    prefix openROADM-if;
-  }
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions for device facility ethernet interfaces.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.
-     
-     Also contains code components extracted from IETF Interfaces.  These code components 
-     are copyrighted and licensed as follows:
-     
-     Copyright (c) 2016 IETF Trust and the persons identified as the document authors. 
-     All rights reserved. 
-     
-     This document is subject to BCP 78 and the IETF Trust’s Legal Provisions Relating 
-     to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of 
-     publication of this document. Please review these documents carefully, as they 
-     describe your rights and restrictions with respect to this document. Code Components 
-     extracted from this document must include Simplified BSD License text as described in
-     Section 4.e of the Trust Legal Provisions and are provided without warranty as 
-     described in the Simplified BSD License.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping eth-attributes {
-    leaf speed {
-      type uint32;
-      description
-        "Set speed of the interface, unit mbps. 
-         This is for ETH facility. ";
-    }
-    leaf fec {
-      type enumeration {
-        enum off;
-        enum rsfec;
-      }
-      description "Forward Error Correction Choices. ";
-    }                                      
-    leaf duplex {
-      type enumeration {
-        enum "half" {
-          value 0;
-          description
-            "half duplex";
-        }
-        enum "full" {
-          value 1;
-          description
-            "full duplex";
-        }
-      }
-      default "full";
-      description
-        "Set duplex selections.";
-    }
-    leaf mtu {
-      type uint32 {
-        range "1518..9000";
-      }
-      default "1522";
-      description
-        "Set Maximum Frame Size.";
-    }
-    leaf auto-negotiation {
-      type enumeration {
-        enum "enabled" {
-          value 1;
-          description
-            "Auto Negotiation enabled";
-        }
-        enum "disabled" {
-          value 0;
-          description
-            "Auto Negotiation disabled";
-        }
-      }
-      default "enabled";
-      description
-        "Set Auto Negotiation: Enabled/Disabled.";
-    }
-    leaf curr-speed {
-      config false;
-      type string;
-      description
-        "speed (UNKNOWN/AUTO/10/100/1000/10000) corresponding to the interface";
-    }
-    leaf curr-duplex {
-      config false;
-      type string;
-      description
-        "duplex (HALF/FULL) corresponding to the interface";
-    }
-  }
-
-  grouping ethernet-container {
-    container ethernet {
-      description
-        "Ethernet Interfaces";
-      uses eth-attributes;
-    }
-  }
-
-  augment "/org-openroadm-device:org-openroadm-device/org-openroadm-device:interface" {
-    when "org-openroadm-device:type = 'openROADM-if:ethernetCsmacd'";
-    uses ethernet-container;
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-external-pluggable.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-external-pluggable.yang
deleted file mode 100644
index 56be62d..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-external-pluggable.yang
+++ /dev/null
@@ -1,138 +0,0 @@
-module org-openroadm-external-pluggable {
-  namespace "http://org/openroadm/external/pluggable";
-  prefix org-openroadm-external-pluggable;
-
-  import org-openroadm-equipment-states-types {
-    prefix org-openroadm-equipment-states-types;
-  }
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }
-
-  organization
-    "OPEN ROADM MSA";
-  contact
-    "OpenROADM.org.";
-  description
-    "YANG definitions for External Pluggable
-     
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping external-pluggable {
-    list pluggables {
-      key "clli";
-      leaf clli {
-        type string;
-        description
-          "Location CLLI where pluggable resides";
-      }
-      list ext-pluggables {
-        key "pluggable-number node-type";
-        leaf pluggable-number {
-          type uint32;
-          description
-            "Identifier of the pluggable in a given
-             office, i.e., 1, 2..N";
-        }
-        leaf node-type {
-          type org-openroadm-common-types:node-types;
-        }
-        leaf pluggable-id {
-          type string;
-          description
-            "Network-wide unique identifier for a pluggable";
-        }
-        leaf vendor {
-          type string;
-          description
-            "Identifier of the supplier for the pluggable";
-        }
-        leaf customer-code {
-          type string;
-          description
-            "Owner of the pluggable";
-        }
-        container external-connection {
-          leaf clli {
-            type string;
-            description
-              "Location of CLLI where ROADM resides";
-          }
-          leaf node-number{
-            type uint32;
-          }
-          leaf node-id {
-            type string;
-            description
-              "Identifier of a ROADM node";
-          }
-          leaf srg-number {
-            type uint16;
-          }
-          leaf pp-number {
-            type uint16;
-          }
-          leaf bit-rate {
-            type uint32;
-          }
-          leaf signal-format {
-            type string;
-          }
-          leaf reach {
-            type string;
-          }
-          leaf optic {
-            type org-openroadm-common-types:optic-types;
-          }
-          leaf state {
-            type org-openroadm-equipment-states-types:states;
-            description
-              "A xponder can be in one of the following
-               states";
-          }
-        }
-        container tail {
-          leaf client-equipment {
-            type string;
-          }
-          leaf client-equipmentId {
-            type string;
-          }
-          leaf clfi {
-            type string;
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-file-transfer.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-file-transfer.yang
deleted file mode 100644
index aa507b3..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-file-transfer.yang
+++ /dev/null
@@ -1,145 +0,0 @@
-module org-openroadm-file-transfer {
-  namespace "http://org/openroadm/file-transfer";
-  prefix org-openroadm-file-txr;
-
-  import ietf-inet-types {
-    prefix inet;
-  }
-
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  } 
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions for file management related rpcs.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  rpc transfer {
-    description
-      "File transfer using FTP/SFTP";
-    input {
-      leaf action {
-        mandatory true;
-        description
-          "Type of action - download/upload.";
-        type enumeration {
-          enum "upload" {
-            description
-              "Specify the upload action. The server sends
-               the file identified by the local-file-path
-               to the remote-file-path.";
-          }
-          enum "download" {
-            description
-              "Specify the download action. The server retrieves
-               the file identified by the remote-file-path
-               to the local-file-path.";
-          }
-        }
-      }
-      leaf local-file-path {
-        type string;
-        mandatory true;
-        description
-          "Local file path.
-           Ex: /var/shared/example.txt";
-      }
-      leaf remote-file-path {
-        type inet:uri;
-        mandatory true;
-        description
-          "Remote file path. 
-           A URI for the remote file path.
-           
-           Format:sftp://user[:password]@host[:port]/path. 
-           Ex: sftp://test:verify@[2001:db8:0:1::10]:22/home/user/sample";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-  }
-  rpc show-file {
-    description
-      "Show one or more files in the specified directory.";
-    input {
-      leaf filename {
-        type string {
-          length "1..255";
-        }
-        description
-          "Specify file(s) to be listed (* is allowed as wild-card). ";
-      }
-    }
-    output {
-      leaf status {
-        type enumeration {
-          enum "Successful" {
-            value 1;
-          }
-          enum "Failed" {
-            value 2;
-          }
-        }
-        mandatory true;
-        description
-          "Successful or Failed";
-      }
-      leaf-list status-message {
-        type string;
-        description
-          "Gives a more detailed reason for success / failure";
-      }
-    }
-  }
-  rpc delete-file {
-    description
-      "Delete one or more files in the specified directory.";
-    input {
-      leaf filename {
-        type string {
-          length "1..255";
-        }
-        mandatory true;
-        description
-          "Specify file(s) to be deleted (* is allowed as wild-card).";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-fwdl.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-fwdl.yang
deleted file mode 100644
index e5f205c..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-fwdl.yang
+++ /dev/null
@@ -1,59 +0,0 @@
-module org-openroadm-fwdl {
-  namespace "http://org/openroadm/fwdl";
-  prefix org-openroadm-fwdl;
-
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }   
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "This module contains definitions for System Management.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  rpc fw-update {
-    description
-      "Fpga data update";
-    input {
-      leaf circuit-pack-name {
-        type string;
-        description
-          "Name of the circuit pack";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-interfaces.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-interfaces.yang
deleted file mode 100644
index 347f963..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-interfaces.yang
+++ /dev/null
@@ -1,108 +0,0 @@
-module org-openroadm-interfaces {
-  namespace "http://org/openroadm/interfaces";
-  prefix openROADM-if;
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions for device facility interfaces. 
-     Reused ietf-interfaces and some interface-type defined in iana-if-type.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.
-     
-     Also contains code components extracted from IETF Interfaces.  These code components 
-     are copyrighted and licensed as follows:
-     
-     Copyright (c) 2016 IETF Trust and the persons identified as the document authors. 
-     All rights reserved. 
-     
-     This document is subject to BCP 78 and the IETF Trust’s Legal Provisions Relating 
-     to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of 
-     publication of this document. Please review these documents carefully, as they 
-     describe your rights and restrictions with respect to this document. Code Components 
-     extracted from this document must include Simplified BSD License text as described in
-     Section 4.e of the Trust Legal Provisions and are provided without warranty as 
-     described in the Simplified BSD License.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  identity interface-type {
-    description
-      "Base identity from which specific interface types are
-       derived.";
-  }
-
-  identity ethernetCsmacd {
-    base interface-type;
-    description
-      "For all Ethernet-like interfaces, regardless of speed,
-       as per RFC 3635.";
-    reference
-      "RFC 3635 - Definitions of Managed Objects for the
-                  Ethernet-like Interface Types";
-  }
-
-  identity ip {
-    base interface-type;
-    description
-      "IP (for APPN HPR in IP networks).";
-  }
-
-  identity opticalChannel {
-    base interface-type;
-    description
-      "Optical Channel.";
-  }
-
-  identity opticalTransport {
-    base interface-type;
-    description
-      "Optical Transport.";
-  }
-
-  identity otnOdu {
-    base interface-type;
-    description
-      "OTN Optical Data Unit.";
-  }
-
-  identity otnOtu {
-    base interface-type;
-    description
-      "OTN Optical channel Transport Unit.";
-  }
-
-  identity openROADMOpticalMultiplex {
-    base interface-type;
-    description
-      "Optical Transport Multiplex type for openROADM";
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-lldp.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-lldp.yang
deleted file mode 100644
index f8ecb1a..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-lldp.yang
+++ /dev/null
@@ -1,302 +0,0 @@
-module org-openroadm-lldp {
-  namespace "http://org/openroadm/lldp";
-  prefix org-openroadm-lldp;
-
-  import ietf-inet-types {
-    prefix inet;
-  }
-  import org-openroadm-device {
-    prefix org-openroadm-device;
-  }
-  import iana-afn-safi {
-    prefix ianaaf;
-  }
-  import org-openroadm-resource-types {
-    prefix org-openroadm-resource-types;
-  }
-  import ietf-yang-types {
-    prefix yang;
-  }
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions for lldp protocol.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-  grouping nbr-info-grp { 
-    description
-      "Display LLDP Neighbour ";
-
-    leaf remoteSysName {
-      type string;
-      description
-        "remote neighbour system name";
-    }
-    leaf remoteMgmtAddressSubType {
-      type ianaaf:address-family;
-      description
-        "remote neighbour Management Address Subtype Enumeration";
-    }
-    leaf remoteMgmtAddress {
-      type inet:ip-address;
-      description
-        "remote neighbour management address";
-    }
-    leaf remotePortIdSubType {
-      type enumeration {
-        enum "other" {
-          value 0;
-          description
-            "reserved";
-        }
-        enum "ifalias" {
-          value 1;
-          description
-            "Interface Alias (IfAlias - IETF RFC 2863) ";
-        }
-        enum "portcomponent" {
-          value 2;
-          description
-            "Port component (EntPhysicalAlias IETF RFC 4133)";
-        }
-        enum "macaddress" {
-          value 3;
-          description
-            "MAC address (IEEE Std 802) ";
-        }
-        enum "networkaddress" {
-          value 4;
-          description
-            "Network Address";
-        }
-        enum "ifname" {
-          value 5;
-          description
-            "Interface Name (ifName - IETF RFC 2863)";
-        }
-        enum "agentcircuitid" {
-          value 6;
-          description
-            "Agent Circuit Id (IETF RFC 3046)";
-        }
-        enum "local" {
-          value 7;
-          description
-            "Locally assigned";
-        }
-      }
-      description
-        "remote neighbour Port ID Subtype Enumeration";
-    }
-    leaf remotePortId {
-      type string;
-      description
-        "remote neighbour port Id";
-    }
-    leaf remoteChassisIdSubType {
-      type enumeration {
-        enum "reserved" {
-          value 0;
-          description
-            "reserved";
-        }
-        enum "chassiscomponent" {
-          value 1;
-          description
-            "Chassis component (EntPhysicalAlias IETF RFC 4133)";
-        }
-        enum "ifalias" {
-          value 2;
-          description
-            "Interface Alias (IfAlias - IETF RFC 2863) ";
-        }
-        enum "portcomponent" {
-          value 3;
-          description
-            "Port component (EntPhysicalAlias IETF RFC 4133)";
-        }
-        enum "macaddress" {
-          value 4;
-          description
-            "MAC address (IEEE Std 802) ";
-        }
-        enum "networkaddress" {
-          value 5;
-          description
-            "Network Address";
-        }
-        enum "ifname" {
-          value 6;
-          description
-            "Interface Name (ifName - IETF RFC 2863)";
-        }
-        enum "local" {
-          value 7;
-          description
-            "Locally assigned";
-        }
-      }
-      description
-        "Chassis ID Subtype Enumeration";
-    }    
-    leaf remoteChassisId {
-      type string;
-      description
-        "remote neighbour Chassis Id";
-    }                                         
-  }           
-
-  grouping lldp-container {
-    container lldp {
-      description
-        "LLDP configurable and retrievable";
-      container global-config {
-        description
-          "LLDP global configurations";
-        leaf adminStatus {
-          type enumeration {
-            enum "disable" {
-              value 0;
-              description
-                "Disable the LLDP feature per NE";
-            }
-            enum "enable" {
-              value 1;
-              description
-                "Enable the LLDP feature per NE";
-            }
-          }
-          description
-            "LLDP feature Enable/Disable per NE";
-          default "enable";
-        }
-        leaf msgTxInterval {
-          type uint16 {
-            range "5..32768";
-          }
-          description
-            "LLDP frame Retransmit Interval in seconds";
-          default "30";
-        }
-        leaf msgTxHoldMultiplier {
-          type uint8 {
-            range "2..10";
-          }
-          description
-            "TTL value for the TLVs transmitter over wire in seconds";
-          default "4";
-        }
-      }
-      list port-config {
-        description
-          "LLDP port configurations";
-        key "ifName";
-        leaf ifName {
-          type leafref {
-            path "/org-openroadm-device:org-openroadm-device/org-openroadm-device:interface/org-openroadm-device:name";
-          }
-          description
-            "Ethernet interface name where LLDP runs";
-        }
-        leaf adminStatus {
-          type enumeration {
-            enum "disable" {
-              value 0;
-              description
-                "Disables the LLDP frames transmit and receive on specific interface";
-            }
-            enum "txandrx" {
-              value 1;
-              description
-                "Enable Transmit and Receive LLDP frames on specific interface";
-            }
-          }
-          description
-            "LLDP enable per port basis";
-          default "txandrx";
-        }
-      }
-      container nbr-list {
-        description
-          "LLDP Oper data - Neighbour List information";
-        config false;
-        list if-name {
-          key "ifName";
-          leaf ifName {
-            type string;
-            description
-              "Ethernet interface name where LLDP runs";
-          }                               
-          uses nbr-info-grp;
-        }                             
-      }
-    }
-  }
-
-  augment "/org-openroadm-device:org-openroadm-device/org-openroadm-device:protocols" {
-    when "/org-openroadm-device:org-openroadm-device/org-openroadm-device:info/org-openroadm-device:node-type='rdm'";
-    uses lldp-container;
-  }
-
-  notification lldp-nbr-info-change {
-    description "LLDP: Neighbor Information Changed
-            remoteSysName
-            remoteSysMgmtAddressSubType
-            remoteSysMgmtAddress
-            remotePortIdSubType
-            remotePortId
-            remoteChassisIdSubType
-            remoteChassisId
-            All of the above attributes are sent in event";
-    leaf notification-type {
-      type org-openroadm-resource-types:resource-notification-type; 
-    }
-    leaf resource-type {
-      type org-openroadm-resource-types:resource-type-enum;
-      description  
-        "resource-type for this notification is interface";  
-    }
-    leaf resource {         
-      type string;
-      description  
-        "resource interface-name";  
-    }
-    container nbr-info {
-      uses nbr-info-grp;
-    }
-    leaf event-time {
-      type yang:date-and-time;
-    }
-  }                    
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-maintenance-loopback.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-maintenance-loopback.yang
deleted file mode 100644
index 519d937..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-maintenance-loopback.yang
+++ /dev/null
@@ -1,75 +0,0 @@
-module org-openroadm-maintenance-loopback {
-  namespace "http://org/openroadm/maintenance-loopback";
-  prefix org-openroadm-maint-loopback;
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions for maintenance loopback.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping maint-loopback {
-    container maint-loopback {
-      leaf enabled {
-        type boolean;
-        default "false";
-        description
-          "loopback operation enable flag";
-      }
-      leaf type {
-        when "../enabled = 'true'";
-        type enumeration {
-          enum "fac" {
-            value 0;
-            description
-              "pre-FEC Loopback in the facility direction";
-          }
-          enum "term" {
-            value 1;
-            description
-              "Loopback in the terminal direction";
-          }
-          enum "fac2" {
-            value 2;
-            description
-              "post-FEC Loopback in the facility direction";
-          }
-        }
-        default "fac";
-        description
-          "Set Loopback type (or direction).";
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-maintenance-testsignal.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-maintenance-testsignal.yang
deleted file mode 100644
index b28cd6b..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-maintenance-testsignal.yang
+++ /dev/null
@@ -1,134 +0,0 @@
-module org-openroadm-maintenance-testsignal {
-  namespace "http://org/openroadm/maintenance-testsignal";
-  prefix org-openroadm-maint-testsignal;
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions for maintenance testsignal.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping maint-testsignal {
-    container maint-testsignal {
-      leaf enabled {
-        type boolean;
-        default "false";
-        description
-          "testsignal enabled flag";
-      }
-      leaf testPattern {
-        when "../enabled = 'true'";
-        type enumeration {
-          enum "PRBS" {
-            value 0;
-            description
-              "Unframed, inverted PN-31 pattern or PRBS31 pattern per IEEE 802.3 clause 50.3.8.2 (inverted PN-31at line rate)";
-          }
-          enum "PRBS31" {
-            value 1;
-            description
-              "PRBS31 with standard mapping per G.709";
-          }
-          enum "PRBS23" {
-            value 2;
-            description
-              "SONET/SDH Framed,inverted PN-23 pattern.";
-          }
-          enum "PRZEROS" {
-            value 3;
-            description
-              "pseudo-random with zeros data pattern per IEEE 802.3 clause 49.2.8";
-          }
-          enum "IDLE" {
-            value 4;
-            description
-              "Scrambled IDLE test-pattern per IEEE 802.3ba";
-          }
-        }
-        description
-          "Set test signal pattern";
-      }
-      leaf type {
-        when "../enabled = 'true'";
-        type enumeration {
-          enum "fac" {
-            value 0;
-            description
-              "test signal in the facility direction";
-          }
-          enum "term" {
-            value 1;
-            description
-              "test signal in the terminal direction";
-          }
-        }
-        default "fac";
-        description
-          "Set test signal type (or direction).";
-      }
-      leaf bitErrors {
-        when "../enabled = 'true' and ../type = 'fac'";
-        type uint32 {
-          range "0..4294967295";
-        }
-        config false;
-        description
-          "bit errors for test signal in facility direction.";
-      }
-      leaf bitErrorsTerminal {
-        when "../enabled = 'true' and ../type = 'term'";
-        type uint32 {
-          range "0..4294967295";
-        }
-        config false;
-        description
-          "bit errors for test signal in terminal direction.";
-      }
-      leaf syncSeconds {
-        when "../enabled = 'true' and ../type = 'fac'";
-        type string;
-        config false;
-        description
-          "number of seconds the received facility test signal is in sync.";
-      }
-      leaf syncSecondsTerminal {
-        when "../enabled = 'true' and ../type = 'term'";
-        type string;
-        config false;
-        description
-          "number of seconds the received terminal test signal is in sync.";
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-network.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-network.yang
deleted file mode 100644
index 7a7263b..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-network.yang
+++ /dev/null
@@ -1,56 +0,0 @@
-module org-openroadm-network {
-  namespace "http://org/openroadm/network";
-  prefix org-openroadm-network;
-
-  import org-openroadm-roadm {
-    prefix org-openroadm-roadm;
-  }
-  import org-openroadm-external-pluggable {
-    prefix org-openroadm-external-pluggable;
-  }
-  import org-openroadm-xponder {
-    prefix org-openroadm-xponder;
-  }
-
-  organization
-    "OPEN ROADM MSA";
-  contact
-    "www.OpenROADM.org.";
-  description
-    "Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  container network {
-    uses org-openroadm-roadm:open-roadm;
-    uses org-openroadm-external-pluggable:external-pluggable;
-    uses org-openroadm-xponder:xponder;
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-optical-channel-interfaces.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-optical-channel-interfaces.yang
deleted file mode 100644
index 37c54f4..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-optical-channel-interfaces.yang
+++ /dev/null
@@ -1,184 +0,0 @@
-module org-openroadm-optical-channel-interfaces {
-  namespace "http://org/openroadm/optical-channel-interfaces";
-  prefix org-openroadm-optical-channel-interfaces;
-
-  import org-openroadm-device {
-    prefix org-openroadm-device;
-  }
-  import org-openroadm-interfaces {
-    prefix openROADM-if;
-  }
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }   
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions for device facility och interfaces.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.
-     
-     Also contains code components extracted from IETF Interfaces.  These code components
-     are copyrighted and licensed as follows:
-     
-     Copyright (c) 2016 IETF Trust and the persons identified as the document authors.
-     All rights reserved.
-     
-     This document is subject to BCP 78 and the IETF Trust’s Legal Provisions Relating
-     to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of
-     publication of this document. Please review these documents carefully, as they
-     describe your rights and restrictions with respect to this document. Code Components
-     extracted from this document must include Simplified BSD License text as described in
-     Section 4.e of the Trust Legal Provisions and are provided without warranty as
-     described in the Simplified BSD License.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  identity rate-identity {
-    description
-      "A unique rate identification";
-  }
-
-  identity R200G {
-    base rate-identity;
-    description
-      "Identity for 200G Rate";
-  }
-
-  identity R100G {
-    base rate-identity;
-    description
-      "Identity for 100G Rate";
-  }
-
-  identity R10.7G {
-    base rate-identity;
-    description
-      "Identity for 10.7G Rate";
-  }
-
-  identity R11.1G {
-    base rate-identity;
-    description
-      "Identity for 11.1G Rate";
-  }
-
-  grouping och-attributes {
-    description
-      "Optical Channel attributes";
-    leaf rate {
-      type identityref {
-        base rate-identity;
-      }
-      description
-        "rate";
-    }
-    leaf wavelength-number {
-      type uint32;
-    }
-    leaf modulation-format {
-      type enumeration {
-        enum "bpsk" {
-          value 0;
-          description
-            "binary phase-shift keying";
-        }
-        enum "dc-dp-bpsk" {
-          value 1;
-          description
-            "DC dual-polarization binary phase-shift keying";
-        }
-        enum "qpsk" {
-          value 2;
-          description
-            "quadrature phase-shift keying";
-        }
-        enum "dp-qpsk" {
-          value 3;
-          description
-            "dual-polarization binary phase-shift keying";
-        }
-        enum "qam16" {
-          value 4;
-          description
-            "quadrature amplitude modulation 16";
-        }
-        enum "dp-qam16" {
-          value 5;
-          description
-            "dual-polarization quadrature amplitude modulation 16";
-        }
-        enum "dc-dp-qam16" {
-          value 6;
-          description
-            "DC dual-polarization quadrature amplitude modulation 16";
-        }
-        enum "qam8" {
-          value 7;
-          description
-            "quadrature amplitude modulation 8";
-        }
-        enum "dp-qam8" {
-          value 8;
-          description
-            "dual-polarization quadrature amplitude modulation 8";
-        }
-        enum "dc-dp-qam8" {
-          value 9;
-          description
-            "DC dual-polarization quadrature amplitude modulation 8";
-        }
-      }
-      description
-        "modulation format";
-    }
-    leaf transmit-power {
-      type org-openroadm-common-types:power-dBm;
-      description
-        "The target transmit power for this channel. When set, the xponder will work to ensure that port-current-power reaches this level. Applicable only to channel on top of xpdr-network port";
-    }     
-  }
-
-  grouping och-container {
-    container och {
-      description
-        "Optical Channel (OCh):
-         Models the optical channel interfaces for an Optical White Box.";
-      uses och-attributes;
-    }
-  }
-
-  augment "/org-openroadm-device:org-openroadm-device/org-openroadm-device:interface" {
-    when "org-openroadm-device:type = 'openROADM-if:opticalChannel'";
-    uses och-container;
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-optical-transport-interfaces.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-optical-transport-interfaces.yang
deleted file mode 100644
index 84ca453..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-optical-transport-interfaces.yang
+++ /dev/null
@@ -1,144 +0,0 @@
-module org-openroadm-optical-transport-interfaces {
-  namespace "http://org/openroadm/optical-transport-interfaces";
-  prefix org-openroadm-optical-transport-interfaces;
-
-  import org-openroadm-device {
-    prefix org-openroadm-device;
-  }
-  import org-openroadm-interfaces {
-    prefix openROADM-if;
-  }
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }       
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "This module contains YANG definitions
-     for the Optical Transport Interfaces.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.
-     
-     Also contains code components extracted from IETF Interfaces.  These code components
-     are copyrighted and licensed as follows:
-     
-     Copyright (c) 2016 IETF Trust and the persons identified as the document authors.
-     All rights reserved.
-     
-     This document is subject to BCP 78 and the IETF Trust’s Legal Provisions Relating
-     to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of
-     publication of this document. Please review these documents carefully, as they
-     describe your rights and restrictions with respect to this document. Code Components
-     extracted from this document must include Simplified BSD License text as described in
-     Section 4.e of the Trust Legal Provisions and are provided without warranty as
-     described in the Simplified BSD License.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping ots-attributes {
-    description
-      "Optical Transport Section (OTS) attributes";
-    leaf fiber-type {
-      type enumeration {
-        enum "smf" {
-          value 0;
-          description
-            "Single Mode Fiber";
-        }
-        enum "eleaf" {
-          value 1;
-          description
-            "ELEAF";
-        }
-        enum "oleaf" {
-          value 2;
-          description
-            "OLEAF";
-        }
-        enum "dsf" {
-          value 3;
-          description
-            "DSF";
-        }
-        enum "truewave" {
-          value 4;
-          description
-            "TRUEWAVE Reduced Slope";
-        }
-        enum "truewavec" {
-          value 5;
-          description
-            "TRUEWAVE Classic";
-        }
-        enum "nz-dsf" {
-          value 6;
-          description
-            "NZ-DSF";
-        }
-        enum "ull" {
-          value 7;
-          description
-            "Ultra Low Loss (ULL)";
-        }
-      }
-      default "smf";
-      description
-        "fiber type
-         Default    : SMF ";
-    }
-    leaf span-loss-receive {
-      description
-        "Span loss on the receiver side. Set by the controller and used by device to set AMP gain.";
-      type org-openroadm-common-types:ratio-dB;
-    }
-    leaf span-loss-transmit {
-      description
-        "Span loss on the transmitter side. Set by the controller and used by device to configure MSA compliant channel launch power";
-      type org-openroadm-common-types:ratio-dB;
-    }                                   
-  }
-
-  grouping ots-container {
-    container ots {
-      description
-        "Optical Transport Section (OTS):
-          Models the optical interfaces for an Optical White Box.
-          The network side is represented by the OTS/OMS.";
-      uses ots-attributes;
-    }
-  }
-
-  augment "/org-openroadm-device:org-openroadm-device/org-openroadm-device:interface" {
-    when "org-openroadm-device:type = 'openROADM-if:opticalTransport'";
-    uses ots-container;
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-otn-odu-interfaces.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-otn-odu-interfaces.yang
deleted file mode 100644
index 44e2d0d..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-otn-odu-interfaces.yang
+++ /dev/null
@@ -1,387 +0,0 @@
-module org-openroadm-otn-odu-interfaces {
-  namespace "http://org/openroadm/otn-odu-interfaces";
-  prefix org-openroadm-otn-odu-interfaces;
-
-  import org-openroadm-device {
-    prefix org-openroadm-device;
-  }
-  import org-openroadm-interfaces {
-    prefix openROADM-if;
-  }
-  import org-openroadm-maintenance-testsignal {
-    prefix org-openroadm-maint-testsignal;
-  }
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions for device facility otnodu interfaces.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.
-     
-     Also contains code components extracted from IETF Interfaces.  These code components
-     are copyrighted and licensed as follows:
-     
-     Copyright (c) 2016 IETF Trust and the persons identified as the document authors.
-     All rights reserved.
-     
-     This document is subject to BCP 78 and the IETF Trust’s Legal Provisions Relating
-     to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of
-     publication of this document. Please review these documents carefully, as they
-     describe your rights and restrictions with respect to this document. Code Components
-     extracted from this document must include Simplified BSD License text as described in
-     Section 4.e of the Trust Legal Provisions and are provided without warranty as
-     described in the Simplified BSD License.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  identity odu-rate-identity {
-    description
-      "A unique rate identification of the ODUk.";
-  }
-
-  identity ODU4 {
-    base odu-rate-identity;
-    description
-      "Identity for an ODU4";
-  }
-
-  identity ODU3 {
-    base odu-rate-identity;
-    description
-      "Identity for an ODU3";
-  }
-
-  identity ODU2 {
-    base odu-rate-identity;
-    description
-      "Identity for an ODU2";
-  }
-
-  identity ODU2e {
-    base odu-rate-identity;
-    description
-      "Identity for an ODU2e";
-  }
-
-  identity ODU1 {
-    base odu-rate-identity;
-    description
-      "Identity for an ODU1";
-  }
-
-  identity ODU0 {
-    base odu-rate-identity;
-    description
-      "Identity for an ODU0";
-  }
-
-  identity ODUflex {
-    base odu-rate-identity;
-    description
-      "Identity for an ODUflex";
-  }
-
-  identity odtu-type-identity {
-    description
-      "A unique identification for the MSI odtu type.";
-  }
-
-  identity ODTU4.ts-Allocated {
-    base odtu-type-identity;
-    description
-      "OPU4 MSI - ODTU4.ts, TS is occupied/allocated";
-  }
-  
-  identity ODTU4.1 {
-    base odtu-type-identity;
-    description
-      "ODTU4.1 MSI type";
-  }
-  
-  identity ODTU4.2 {
-    base odtu-type-identity;
-    description
-      "ODTU4.2 MSI type";
-  }
-  
-  identity ODTU4.8 {
-    base odtu-type-identity;
-    description
-      "ODTU4.8 MSI type";
-  }
-  
-  identity ODTU4.31 {
-    base odtu-type-identity;
-    description
-      "ODTU4.31 MSI type";
-  }
-  
-  identity ODTU01 {
-    base odtu-type-identity;
-    description
-      "ODTU01 MSI type";
-  }
-
-  identity ODTU12 {
-    base odtu-type-identity;
-    description
-      "ODTU12 MSI type";
-  }
-
-  identity ODTU13 {
-    base odtu-type-identity;
-    description
-      "ODTU13 MSI type";
-  }
-
-  identity ODTU23 {
-    base odtu-type-identity;
-    description
-      "ODTU23 MSI type";
-  }
-
-  identity ODTU2.ts {
-    base odtu-type-identity;
-    description
-      "ODTU2.ts MSI type";
-  }
-
-  identity ODTU3.ts {
-    base odtu-type-identity;
-    description
-      "ODTU3.ts MSI type";
-  }
-
-  identity unallocated {
-    base odtu-type-identity;
-    description
-      "Unallocated MSI type";
-  }
-
-  grouping msi-entry {
-    leaf trib-slot {
-      type uint16;
-      description
-        "tributary slot (TS)";
-    }
-    leaf odtu-type {
-      type identityref {
-        base odtu-type-identity;
-      }
-      description
-        "ODTU type, part of the MSI (Multiplex Structure Identifier)";
-    }
-    leaf trib-port {
-      type uint8;
-      description
-        "Tributray Port Number (0-based), part of the MSI";
-    }
-    leaf trib-port-payload {
-      type string;
-      description
-        "interface name being mapped to trib-port";
-    }
-  }
-
-  grouping odu-attributes {
-    description
-      "ODU attributes";
-    leaf rate {
-      type identityref {
-        base odu-rate-identity;
-      }
-      description
-        "rate identity of the ODU. 'identityref' is used
-         to allow to extend for future higher rates";
-    }
-    leaf monitoring-mode {
-      type enumeration {
-        enum "not-terminated" {
-          description
-            "Not Terminated: no detection or generation.
-             Overhead is passed through the interface transparently in receive direction";
-        }
-        enum "terminated" {
-          description
-            "Terminated: detection and generation enabled.
-             Overhead is erased (replaced with all zeros) in receive direction";
-        }
-        enum "monitored" {
-          description
-            "Monitored: detection enabled.
-             Overhead is passed through the interface transparently in receive direction";
-        }
-      }
-      description
-        "Monitoring mode of the ODU Overhead";
-    }
-    leaf proactive-delay-measurement-enabled {
-      type boolean;
-      description
-        "enable/disable proactive Delay Measurement";
-    }
-    list tcm {
-      key "layer";
-      uses tcm-attributes;
-      max-elements "6";
-      description
-        "Tandem Connection Management";
-    }
-    uses opu;
-  }
-
-  grouping opu {
-    container opu {
-      when "../monitoring-mode = 'terminated' or ../monitoring-mode = 'monitored'";
-      description
-        "Optical Channel Payload Unit (OPU)";
-      leaf payload-type {
-        type string {
-          length "2";
-          pattern "[0-9a-fA-F]*";
-        }
-        description
-          "Payload Type";
-      }
-      leaf rx-payload-type {
-        type string {
-          length "2";
-          pattern "[0-9a-fA-F]*";
-        }
-        description
-          "Received Payload Type";
-      }
-      leaf exp-payload-type {
-        type string {
-          length "2";
-          pattern "[0-9a-fA-F]*";
-        }
-        description
-          "Expected Payload Type";
-      }
-      leaf payload-interface {
-        type string;
-        description
-          "Expected Payload of OPU. It designates client interface name";
-      }
-      container msi {
-        when "../payload-type = '20' or ../payload-type = '21'";
-        list tx-msi {
-          key "trib-slot";
-          uses msi-entry;
-          description
-            "Transmit MSI";
-        }
-        list rx-msi {
-          key "trib-slot";
-          uses msi-entry;
-          description
-            "Receive MSI";
-        }
-        list exp-msi {
-          key "trib-slot";
-          uses msi-entry;
-          description
-            "Expected MSI";
-        }
-      }
-    }
-  }
-
-  grouping tcm-attributes {
-    description
-      "Tandem Connection Monitoring (TCM) attributes";
-    leaf layer {
-      type uint8 {
-        range "1..6";
-      }
-      description
-        "TCM layer";
-    }
-    leaf monitoring-mode {
-      type enumeration {
-        enum "not-terminated" {
-          description
-            "Not Terminated: no detection or generation.
-             Overhead is passed through the interface transparently in receive direction 
-             unless extension is set for erase";
-        }
-        enum "terminated" {
-          description
-            "Terminated: detection and generation enabled.
-             Overhead is erased (replaced with all zeros) in receive direction, unless
-             extension is set to passthrough";
-        }
-        enum "monitored" {
-          description
-            "Monitored: detection enabled.
-             Overhead is passed through the interface transparently in receive direction 
-             unless extension is set for erase";
-        }
-      }
-      description
-        "Monitoring mode of the TCM layer";
-    }
-    leaf ltc-act-enabled {
-      type boolean;
-      description
-        "enable/disable alarm transfer on detection of Loss of Tandem Connection (LTC)";
-    }
-    leaf proactive-delay-measurement-enabled {
-      type boolean;
-      description
-        "enable/disable proactive Delay Measurement";
-    }
-  }
-
-  grouping odu-container {
-    container odu {
-      presence "Attribute Nodes for Optical Data Unit (ODU)";
-      description
-        "Optical Channel Data Unit (ODU)";
-      uses odu-attributes {
-        refine "opu/rx-payload-type" {
-          config false;
-        }
-        refine "opu/msi" {
-          config false;
-        }
-      }
-      uses org-openroadm-maint-testsignal:maint-testsignal;
-    }
-  }
-
-  augment "/org-openroadm-device:org-openroadm-device/org-openroadm-device:interface" {
-    when "org-openroadm-device:type = 'openROADM-if:otnOdu'";
-    uses odu-container;
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-otn-otu-interfaces.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-otn-otu-interfaces.yang
deleted file mode 100644
index d3b5069..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-otn-otu-interfaces.yang
+++ /dev/null
@@ -1,185 +0,0 @@
-module org-openroadm-otn-otu-interfaces {
-  namespace "http://org/openroadm/otn-otu-interfaces";
-  prefix org-openroadm-otn-otu-interfaces;
-
-  import org-openroadm-device {
-    prefix org-openroadm-device;
-  }
-  import org-openroadm-interfaces {
-    prefix openROADM-if;
-  }
-  import org-openroadm-maintenance-loopback {
-    prefix org-openroadm-maint-loopback;
-  }
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions for device facility otnotu interfaces.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.
-     
-     Also contains code components extracted from IETF Interfaces.  These code components
-     are copyrighted and licensed as follows:
-     
-     Copyright (c) 2016 IETF Trust and the persons identified as the document authors.
-     All rights reserved.
-     
-     This document is subject to BCP 78 and the IETF Trust’s Legal Provisions Relating
-     to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of
-     publication of this document. Please review these documents carefully, as they
-     describe your rights and restrictions with respect to this document. Code Components
-     extracted from this document must include Simplified BSD License text as described in
-     Section 4.e of the Trust Legal Provisions and are provided without warranty as
-     described in the Simplified BSD License.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  identity otu-rate-identity {
-    description
-      "A unique rate identification of the OTU.";
-  }
-
-  identity OTU4 {
-    base otu-rate-identity;
-    description
-      "Identity for an OTU4";
-  }
-
-  identity OTU3 {
-    base otu-rate-identity;
-    description
-      "Identity for an OTU3";
-  }
-
-  identity OTU2 {
-    base otu-rate-identity;
-    description
-      "Identity for an OTU2";
-  }
-
-  identity OTU2e {
-    base otu-rate-identity;
-    description
-      "Identity for an OTU2e";
-  }
-
-  identity OTU1 {
-    base otu-rate-identity;
-    description
-      "Identity for an OTU1";
-  }
-
-  identity OTU0 {
-    base otu-rate-identity;
-    description
-      "Identity for an OTU0";
-  }
-
-  identity OTUflex {
-    base otu-rate-identity;
-    description
-      "Identity for an OTUflex";
-  }
-
-  grouping otu-attributes {
-    description
-      "OTU attributes";
-    leaf rate {
-      type identityref {
-        base otu-rate-identity;
-      }
-      description
-        "rate identity of the OTU. 'identityref' is used
-         to allow to extend for future higher rates";
-    }
-    leaf fec {
-      type enumeration {
-        enum "off" {
-          value 0;
-          description
-            "fec off";
-        }
-        enum "rsfec" {
-          value 1;
-          description
-            "rsfec";
-        }
-        enum "sdfeca1" {
-          value 2;
-          description
-            "Clariphy SDFEC";
-        }
-        enum "efec" {
-          value 3;
-          description
-            "G.975.1 I.4";
-        }
-        enum "ufec" {
-          value 4;
-          description
-            "G.975.1 I.7";
-        }
-        enum "sdfec" {
-          value 5;
-          description
-            "Soft decision FEC";
-        }
-        enum "sdfecb1" {
-          value 6;
-          description
-            "SDFEC with SCFEC";
-        }
-        enum "scfec" {
-          value 7;
-          description
-            "Stair case FEC";
-        }
-      }
-      description
-        "Forward Error Correction";
-    }
-  }
-
-  grouping otu-container {
-    container otu {
-      description
-        "Optical Channel Transport Unit (OTU)";
-      uses otu-attributes;
-      uses org-openroadm-maint-loopback:maint-loopback;
-    }
-  }
-
-  augment "/org-openroadm-device:org-openroadm-device/org-openroadm-device:interface" {
-    when "org-openroadm-device:type = 'openROADM-if:otnOtu'";
-    uses otu-container;
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-physical-types.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-physical-types.yang
deleted file mode 100644
index 100a443..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-physical-types.yang
+++ /dev/null
@@ -1,117 +0,0 @@
-module org-openroadm-physical-types {
-  namespace "http://org/openroadm/physical/types";
-  prefix org-openroadm-physical-types;
-
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }
-  import ietf-yang-types {
-    prefix yang;
-  }
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions of physical types.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping node-info {
-    description
-      "Physical inventory data used by the node";
-    leaf vendor {
-      description
-        "Vendor of the equipment";
-      type string;
-      config false;
-      mandatory true;
-    }
-    leaf model {
-      type string;
-      description
-        "Physical resource model information.";
-      config false;
-      mandatory true;
-    }
-    leaf serial-id {
-      description
-        "Product Code for this physical resource";
-      type string;
-      config false;
-      mandatory true;
-    }
-  }
-
-  grouping common-info {
-    description
-      "Physical inventory data used by all other entities";
-    uses node-info;
-    leaf type {
-      description
-        "The specific type of this physical resource - ie the type of
-         shelf, type of circuit-pack, etc.";
-      type string;
-      config false;
-    }
-    leaf product-code {
-      description
-        "Product Code for this physical resource";
-      type string;
-      config false;
-    }
-    leaf manufacture-date {
-      description
-        "Manufactor date of physical resource";
-      type yang:date-and-time;
-      config false;
-    }
-    leaf clei {
-      description
-        "CLEI for this physical resource";
-      type string;
-      config false;
-    }
-    leaf hardware-version {
-      description
-        "The version of the hardware.";
-      type string;
-      config false;
-    }
-    leaf operational-state {
-      description
-        "Operational state of the physical resource";
-      type org-openroadm-common-types:state;
-      config false;
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-port-types.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-port-types.yang
deleted file mode 100644
index 3299b81..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-port-types.yang
+++ /dev/null
@@ -1,150 +0,0 @@
-module org-openroadm-port-types {
-  namespace "http://org/openroadm/port/types";
-  prefix org-openroadm-port-types;
-
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions for port types.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  identity supported-if-capability {
-    description
-      "Base identity from which specific supported interfaces are derived";
-  }
-
-  identity if-100GE {
-    base supported-if-capability;
-  }
-
-  identity if-OMS {
-    base supported-if-capability;
-  }
-
-  identity if-OTS {
-    base supported-if-capability;
-  }
-
-  identity if-OCH {
-    base supported-if-capability;
-  }
-
-  identity supported-xpdr-capability {
-    description
-      "Base identity from which specific supported xponder are derived";
-  }
-
-  identity Transponder {
-    base supported-xpdr-capability;
-  }
-
-  identity Regen {
-    base supported-xpdr-capability;
-  }
-
-  typedef port-wavelength-types {
-    type enumeration {
-      enum "wavelength" {
-        value 1;
-        description
-          "Port on a transponder.";
-      }
-      enum "multi-wavelegnth" {
-        value 2;
-        description
-          "Port on a ROADM.";
-      }
-    }
-    description
-      "Port types.";
-  }
-
-  grouping common-port {
-    leaf port-power-capability-min-rx {
-      type org-openroadm-common-types:power-dBm;
-      config false;
-      description
-        "Based on port capabilities, the minimum power in the system spec for this port to
-         provide optimum function in rx direction";
-    }
-    leaf port-power-capability-min-tx {
-      type org-openroadm-common-types:power-dBm;
-      config false;
-      description
-        "Based on port capabilities, the minimum power in the system spec for this port to
-         provide optimum function in tx direction.";
-    }         
-    leaf port-power-capability-max-rx {
-      type org-openroadm-common-types:power-dBm;
-      config false;
-      description
-        "Based on port capabilities, the maximum power in the system spec for this port to
-         provide optimum function in rx direction.";
-    }
-    leaf port-power-capability-max-tx {
-      type org-openroadm-common-types:power-dBm;
-      config false;
-      description
-        "Based on port capabilities, the maximum power in the system spec for this port to
-         provide optimum function in tx direction.";
-    }                                             
-    leaf-list capable-wavelengths {
-      type uint32;
-      config false;
-      description
-        "List of wavelengths this port is capable of supporting.
-         can be used to access wavelength-map to get the wavelength value in nm";
-    }
-  }
-  grouping roadm-port {
-    uses common-port;
-    leaf-list available-wavelengths {
-      type uint32;
-      config false;
-      description
-        "List of available (capable and unused) wavelengths on this port. 
-         can be used to access wavelength-map to get the wavelength value in nm";
-    }
-    leaf-list used-wavelengths {
-      type uint32;
-      config false;
-      description
-        "List of used available wavelength-numbers on this port.";
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-resource-types.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-resource-types.yang
deleted file mode 100644
index e1031aa..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-resource-types.yang
+++ /dev/null
@@ -1,252 +0,0 @@
-module org-openroadm-resource-types {
-  namespace "http://org/openroadm/resource/types";
-  prefix org-openroadm-resource-types;
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions of common resource types.
-       
-      Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-      AT&T Intellectual Property.  All other rights reserved.
-      
-      Redistribution and use in source and binary forms, with or without modification, 
-      are permitted provided that the following conditions are met:
-      
-      * Redistributions of source code must retain the above copyright notice, this 
-        list of conditions and the following disclaimer.
-      * Redistributions in binary form must reproduce the above copyright notice, 
-        this list of conditions and the following disclaimer in the documentation and/or 
-        other materials provided with the distribution.
-      * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-        contributors may be used to endorse or promote products derived from this software 
-        without specific prior written permission.
-      
-      THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-      IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-      WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-      POSSIBILITY OF SUCH DAMAGE";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping resource-type {
-    leaf type {
-      type resource-type-enum;
-      mandatory true;
-    }
-    leaf extension {
-      type string;
-      mandatory false;
-    }
-  }
-
-  typedef resource-type-enum {
-    type enumeration {
-      enum "other" {
-        value 1;
-        description
-          "Resource of type not found in list.";
-      }
-      enum "device" {
-        value 2;
-        description
-          "device - ROAMD, Xponder, etc";
-      }
-      enum "degree" {
-        value 3;
-        description
-          "degree";
-      }
-      enum "shared-risk-group" {
-        value 4;
-        description
-          "shared-risk-group";
-      }
-      enum "connection" {
-        value 5;
-        description
-          "connection";
-      }
-      enum "connection-map" {
-        value 6;
-        description
-          "connection-map";
-      }
-      enum "port" {
-        value 7;
-        description
-          "port";
-      }
-      enum "circuit-pack" {
-        value 8;
-        description
-          "circuit pack";
-      }
-      enum "internal-link" {
-        value 9;
-        description
-          "internal-link";
-      }
-      enum "physical-link" {
-        value 10;
-        description
-          "physical-link";
-      }
-      enum "interface" {
-        value 11;
-        description
-          "interface";
-      }
-      enum "shelf" {
-        value 12;
-        description
-          "shelf";
-      }
-      enum "service" {
-        value 13;
-        description
-          "service";
-      }
-    }
-  }
-
-  grouping device-id {
-    description
-      "Device identifier. Unique within the Controller.";
-    leaf node-id {
-      description
-        "Node Id is a globally unique identifier for a device. 
-         Same as leafref value in model, if applicable.";
-      type string;
-    }
-  }
-
-  grouping circuit-pack-name {
-    leaf circuit-pack-name {
-      description
-        "Circuit-Pack identifier. Unique within the context of a device.
-         Same as leafref value in model, if applicable.";
-      type string;
-      mandatory true;
-    }
-  }
-
-  grouping port-name {
-    uses circuit-pack-name;
-    leaf port-name {
-      description
-        "Port identifier. Unique within the context of a circuit-pack. 
-         Same as leafref value in model, if applicable.";
-      type string;
-    }
-  }
-
-  grouping physical-link-name {
-    leaf physical-link-name {
-      description
-        "Physical Link identifier. Unique within the context of a device. 
-         Same as leafref value in model, if applicable.";
-      type string;
-      mandatory true;
-    }
-  }
-
-  grouping internal-link-name {
-    leaf internal-link-name {
-      description
-        "Internal Link identifier. Unique within the context of a device. 
-         Same as leafref value in model, if applicable.";
-      type string;
-      mandatory true;
-    }
-  }
-
-  grouping connection-number {
-    leaf connection-number {
-      description
-        "Connection identifier. Unique within the context of a device. 
-         Same as leafref value in model, if applicable.";
-      type string;
-    }
-  }
-
-  grouping degree-number {
-    leaf degree-number {
-      description
-        "Degree identifier. Unique within the context of a device. 
-         Same as leafref value in model, if applicable.";
-      type uint16;
-    }
-  }
-
-  grouping srg-number {
-    leaf srg-number {
-      description
-        "Shared Risk Group identifier. Unique within the context of a device. 
-         Same as leafref value in model, if applicable.";
-      type uint16;
-    }
-  }
-
-  grouping shelf-name {
-    leaf shelf-name {
-      description
-        "Shelf-id identifier. Unique within the context of a device.  
-         Same as leafref value in model, if applicable.";
-      type string;
-      mandatory true;
-    }
-  }
-
-  grouping service-name {
-    leaf service-name {
-      description
-        "Service identifier. Unique within the context of a network.  
-         Same as leafref value in model, if applicable.";
-      type string;
-      mandatory true;
-    }
-  }
-
-  grouping interface-name {
-    leaf interface-name {
-      description
-        "Interface identifier.";
-      type string;
-      mandatory true;
-    }
-  }
-
-  typedef resource-notification-type {
-    description
-      "Type of notification about a resource";
-    type enumeration {
-      enum "resourceCreation" {
-        value 1;
-        description
-          "A new instance of a resource has been created.";
-      }
-      enum "resourceModification" {
-        value 2;
-        description
-          "An exhisting instance of a resource has been modified. This shall be triggered by changes in configuration, state, status etc.
-           It shall not be triggered by changes in performance measurements, power and temperature readings or any other data that is highlyvolatile. ";
-      }
-      enum "resourceDeletion" {
-        value 3;
-        description
-          "An exhisting instance of a resource has been removed.";
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-resource.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-resource.yang
deleted file mode 100644
index 6547a6b..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-resource.yang
+++ /dev/null
@@ -1,109 +0,0 @@
-module org-openroadm-resource {
-  namespace "http://org/openroadm/resource";
-  prefix org-openroadm-resource;
-
-  import org-openroadm-resource-types {
-    prefix org-openroadm-resource-types;
-  }
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions of resources.
-       
-      Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-      AT&T Intellectual Property.  All other rights reserved.
-      
-      Redistribution and use in source and binary forms, with or without modification, 
-      are permitted provided that the following conditions are met:
-      
-      * Redistributions of source code must retain the above copyright notice, this 
-        list of conditions and the following disclaimer.
-      * Redistributions in binary form must reproduce the above copyright notice, 
-        this list of conditions and the following disclaimer in the documentation and/or 
-        other materials provided with the distribution.
-      * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-        contributors may be used to endorse or promote products derived from this software 
-        without specific prior written permission.
-      
-      THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-      IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-      WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-      POSSIBILITY OF SUCH DAMAGE";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping resource {
-    description
-      "This resource identifier is intended to provide a generic identifer
-       for any resource that can be used without specific knowledge of
-       the resource.";
-    container device {
-      description
-        "Device of the resource, used only when the system using this
-         model report on more than one device. ";
-      uses org-openroadm-resource-types:device-id;
-    }
-    container resource {
-      choice resource {
-        case circuit-pack {
-          uses org-openroadm-resource-types:circuit-pack-name;
-        }
-        case port {
-          container port {
-            uses org-openroadm-resource-types:port-name;
-          }
-        }
-        case connection {
-          uses org-openroadm-resource-types:connection-number {
-            refine connection-number {
-              mandatory true;
-            }
-          }
-        }
-        case physical-link {
-          uses org-openroadm-resource-types:physical-link-name;
-        }
-        case internal-link {
-          uses org-openroadm-resource-types:internal-link-name;
-        }
-        case shelf {
-          uses org-openroadm-resource-types:shelf-name;
-        }
-        case srg {
-          uses org-openroadm-resource-types:srg-number {
-            refine srg-number {
-              mandatory true;
-            }
-          }
-        }
-        case degree {
-          uses org-openroadm-resource-types:degree-number {
-            refine degree-number {
-              mandatory true;
-            }
-          }
-        }
-        case service {
-          uses org-openroadm-resource-types:service-name;
-        }
-        case interface {
-          uses org-openroadm-resource-types:interface-name;
-        }
-      }
-    }
-    container resourceType {
-      uses org-openroadm-resource-types:resource-type;
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-roadm.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-roadm.yang
deleted file mode 100644
index 8dacc58..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-roadm.yang
+++ /dev/null
@@ -1,179 +0,0 @@
-module org-openroadm-roadm {
-  namespace "http://org/openroadm/roadm";
-  prefix org-openroadm-roadm;
-
-  import org-openroadm-srg {
-    prefix org-openroadm-srg;
-  }
-  import org-openroadm-degree {
-    prefix org-openroadm-degree;
-  }
-  import ietf-inet-types {
-    prefix inet;
-  }
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }
-  
-  organization
-    "OPEN ROADM MSA";
-  contact
-    "OpenROADM.org.";
-  description
-    "YANG definitions for network view of a ROADM
-         
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping open-roadm {
-    list nodes {
-      key "clli";
-      leaf clli {
-        type string;
-        description
-          "Location of CLLI where ROADM resides";
-      }
-      list ids {
-        key "node-number node-type";
-        leaf node-number {
-          type uint32;
-          description
-            "Number assigned to a ROADM node in a 
-             given office";
-        }
-        leaf node-id {
-          type string;
-          description
-            "Network-wide unique identifier for
-             a ROADM node";
-        }
-        leaf node-type {
-          type org-openroadm-common-types:node-types;
-          description
-            "Identifier for the node type";
-        }
-        leaf vendor {
-          type string;
-          description
-            "Identifier of the supplier
-             for the ROADM equipment";
-        }
-        leaf model {
-          type string;
-          description
-            "Identifier of the supplier's ROADM equipment";
-        }
-        leaf domain-subnetwork {
-          type string;
-          description
-            "Specific Domain-Subnetwork in which the ROADM node resides";
-        }
-        leaf ip {
-          type inet:ip-address;
-          description
-            "IP address assigned to the ROADM node";
-        }
-        leaf relay-rack {
-          type string;
-          description
-            "Frame Identification Code (FIC)";
-        }
-        leaf shelf {
-          type uint32;
-        }
-        leaf degree-supported {
-          type uint16;
-          description
-            "No. of degrees supported by the node";
-        }
-        leaf srg-supported {
-          type uint16;
-          description
-            "No. of SRGs supported by the node";
-        }
-        list connectivity-map {
-          key "logical-link-name";
-          leaf logical-link-name {
-            type string;
-          }
-          leaf logical-link-type{
-            type enumeration{
-              enum "Express-link"{
-                value 1;
-              }
-              enum "Add-link"{
-                value 2;
-              }
-              enum "Drop-link"{
-                value 3;
-              }
-            }
-          }
-          container source{
-            choice resource{
-              case degree{
-                leaf degree-number{
-                  type uint16;
-                }
-              }
-              case srg{
-                leaf srg-number{
-                  type uint16;
-                }
-              }
-            }
-          }
-          container destination{
-            choice resource{
-              case degree{
-                leaf degree-number{
-                  type uint16;
-                }
-              }
-              case srg{
-                leaf srg-number{
-                  type uint16;
-                }
-              }
-            }
-          }
-          description
-            "List of logical links to represent
-             1. Express traffic between ROADM degrees
-             2. Drop traffic from ROADM degrees and SRGs
-             3. Add traffic from SRGs to ROADM degrees";
-        }
-        uses org-openroadm-degree:roadm-degree;
-        uses org-openroadm-srg:shared-risk-group;
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-routing-constraints.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-routing-constraints.yang
deleted file mode 100644
index 229726b..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-routing-constraints.yang
+++ /dev/null
@@ -1,128 +0,0 @@
-module org-openroadm-routing-constraints {
-  namespace "http://org/openroadm/routing/constrains";
-  prefix org-openroadm-routing-constraints;
-
-  organization
-    "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions of routing constraints.
-      
-      Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-      AT&T Intellectual Property.  All other rights reserved.
-      
-      Redistribution and use in source and binary forms, with or without modification, 
-      are permitted provided that the following conditions are met:
-      
-      * Redistributions of source code must retain the above copyright notice, this 
-        list of conditions and the following disclaimer.
-      * Redistributions in binary form must reproduce the above copyright notice, 
-        this list of conditions and the following disclaimer in the documentation and/or 
-        other materials provided with the distribution.
-      * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-        contributors may be used to endorse or promote products derived from this software 
-        without specific prior written permission.
-      
-      THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-      IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-      WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-      POSSIBILITY OF SUCH DAMAGE";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping routing-constraints {
-    container hard-constraints {
-      uses constraints;
-    }
-    container soft-constraints {
-      uses constraints;
-    }
-  }
-
-  grouping constraints {
-    leaf-list customer-code {
-      type string;
-    }
-    choice co-routing-or-general {
-      case general {
-        container diversity {
-          uses diversity-existing-service-contraints;
-        }
-        container exclude {
-          uses common-constraints;
-          leaf-list supporting-service-name {
-            description
-              "Supporting service(s) to exclude from this route.";
-            type string;
-          }
-        }
-        container include {
-          uses common-constraints;
-          leaf-list supporting-service-name {
-            description
-              "Supporting service(s) to include in this route.";
-            type string;
-          }
-        }
-        container latency {
-          description
-            "Maximum latency allowed";
-          leaf max-latency {
-            type uint32;
-            units "ms";
-          }
-        }
-      }
-      case co-routing {
-        container co-routing {
-          leaf-list existing-service {
-            type string;
-            description
-              "Diverse from existing services identified by facility CLFI";
-          }
-        }
-      }
-    }
-  }
-
-  grouping common-constraints {
-    leaf-list fiber-bundle {
-      type string;
-    }
-    leaf-list site {
-      type string;
-    }
-    leaf-list node-id {
-      type string;
-    }
-  }
-
-  grouping diversity-existing-service-contraints {
-    leaf-list existing-service {
-      type string;
-      description
-        "Diverse from existing services identified by facility CLFI";
-    }
-    container existing-service-applicability {
-      leaf site {
-        type boolean;
-      }
-      leaf node {
-        type boolean;
-      }
-      leaf srlg {
-        type boolean;
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-rstp.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-rstp.yang
deleted file mode 100644
index 9cedd5c..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-rstp.yang
+++ /dev/null
@@ -1,310 +0,0 @@
-module org-openroadm-rstp {
-  namespace "http://org/openroadm/rstp";
-  prefix org-openroadm-rstp;
-
-  import org-openroadm-device {
-    prefix org-openroadm-device;
-  }
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions for rstp protocol. 
-     
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  typedef bridge-id-type {
-    type string;
-    description
-      "Unique Bridge Identifier";
-  }
-
-  grouping rstp-common-bridge-config {
-    leaf bridge-priority {
-      description
-        "Bridge Priority Value";
-      type uint32 {
-        range "0..61440";
-      }
-      default "32768";
-    }
-    leaf shutdown {
-      description
-        "Bridge admin state";
-      type empty;
-    }
-    leaf hold-time {
-      description
-        "The time interval during which no more than two
-            BPDUs transmitted by this node in seconds - not used in rstp mode (in seconds)";
-      type uint32 {
-        range "1..10";
-      }
-      default "2";
-    }
-    leaf hello-time {
-      description
-        "The time between the transmission of BPDU's by this node on any
-            port, when role is rooti (in seconds)";
-      type uint32 {
-        range "1..10";
-      }
-      default "2";
-    }
-    leaf max-age {
-      description
-        "The value that all bridges use for MaxAge when this bridge
-            is acting as the root";
-      type uint32 {
-        range "6..40";
-      }
-      default "20";
-    }
-    leaf forward-delay {
-      description
-        "The port on the Switch spends this time in the listening
-            state while moving from the blocking state to the forwarding state (in seconds)";
-      type uint32 {
-        range "4..30";
-      }
-      default "15";
-    }
-    leaf transmit-hold-count {
-      description
-        "Maximum BPDU transmission rate";
-      type uint32 {
-        range "1..10";
-      }
-      default "2";
-    }
-  }
-
-  grouping rstp-root-bridge-attr {
-    leaf root-bridge-port {
-      description
-        "Port id of the root port";
-      type uint32;
-    }
-    leaf root-path-cost {
-      description
-        "The cost of the path to the root as
-               seen from this bridge";
-      type uint32;
-    }
-    leaf root-bridge-priority {
-      description
-        "Root Bridge Priority Value";
-      type uint32;
-    }
-    leaf root-bridge-id {
-      description
-        "Root Bridge identifier";
-      type bridge-id-type;
-    }
-    leaf root-hold-time {
-      description
-        "The time interval during which no more than two
-               BPDUs transmitted by this node in seconds at root node (in seconds)";
-      type uint32;
-    }
-    leaf root-hello-time {
-      description
-        "The time between the transmission of BPDU's used at root node (in seconds)";
-      type uint32;
-    }
-    leaf root-max-age {
-      description
-        "The value that all bridges use for MaxAge used at root node";
-      type uint32;
-    }
-    leaf root-forward-delay {
-      description
-        "The time in seconds spent on the listening state used at root node (in seconds)";
-      type uint32;
-    }
-  }
-
-  grouping rstp-bridge-port-state-attr {
-    list rstp-bridge-port-table {
-      max-elements "15";
-      description
-        "This table contains port-specific information for rstp state attributes";
-      key "ifname";
-      leaf ifname {
-        description
-          "Interface name of the port";
-        type string {
-          length "1..255";
-        }
-      }
-      leaf bridge-port-state {
-        description
-          "The port's current state";
-        type enumeration {
-          enum "discarding";
-          enum "blocked";
-          enum "learning";
-          enum "forwarding";
-          enum "unknown";
-        }
-      }
-      leaf bridge-port-role {
-        description
-          "The role payed by this port in the bridge";
-        type enumeration {
-          enum "designated";
-          enum "root";
-          enum "alternate";
-          enum "disabled";
-          enum "backup";
-          enum "unknown";
-        }
-      }
-      leaf bridge-port-id {
-        description
-          "Unique port id of this port";
-        type uint32;
-      }
-      leaf oper-edge-bridge-port {
-        description
-          "The operational value of the Edge Port parameter";
-        type empty;
-      }
-      leaf designated-bridge-port {
-        description
-          "Port id of the designated port";
-        type uint32;
-      }
-      leaf designated-bridgeid {
-        description
-          "The Bridge Identifier of the bridge that this port considers 
-           to be the Designated Bridge for this port's segment";
-        type bridge-id-type;
-      }
-    }
-  }
-
-  grouping rstp-bridge-port-attr {
-    list rstp-bridge-port-table {
-      max-elements "15";
-      description
-        "Table contains port-specific information for rstp config";
-      key "ifname";
-      leaf ifname {
-        description
-          "Interface name of the port";
-        type leafref {
-          path "/org-openroadm-device:org-openroadm-device/org-openroadm-device:interface/org-openroadm-device:name";
-        }
-      }
-      leaf cost {
-        description
-          "The contribution of this port to the path cost of
-                 paths towards the spanning tree root which include this port also";
-        type uint32 {
-          range "2000..200000";
-        }
-        default "20000";
-      }
-      leaf priority {
-        description
-          "The value of the priority field";
-        type uint32 {
-          range "0..240";
-        }
-      }
-    }
-  }
-
-  grouping rstp-container {
-    container rstp {
-      description
-        "Open ROADM RSTP top level";
-      list rstp-bridge-instance {
-        max-elements "1";
-        description
-          "rstp bridge instance, max instance = 1";
-        key "bridge-name";
-        leaf bridge-name {
-          description
-            "unique name of the bridge";
-          type string {
-            length "1..255";
-          }
-        }
-        container rstp-config {
-          description
-            "Collection of rstp configuration attributes";
-          uses rstp-common-bridge-config;
-          uses rstp-bridge-port-attr;
-        }
-        container rstp-state {
-          description
-            "Collection of rstp operational attributes";
-          config false;
-          container rstp-bridge-attr {
-            description
-              "Collection of operational rstp bridge attributes";
-            uses rstp-root-bridge-attr;
-            leaf bridge-id {
-              description
-                "Bridge identifier of the bridge";
-              type bridge-id-type;
-            }
-            leaf topo-change-count {
-              description
-                "The total number of topology changes";
-              type uint32;
-            }
-            leaf time-since-topo-change {
-              description
-                "Time since last topology changes occured (in seconds)";
-              type uint32;
-            }
-          }
-          container rstp-bridge-port-attr {
-            description
-              "Collection of operational rstp port related attributes";
-            uses rstp-bridge-port-state-attr;
-          }
-        }
-      }
-    }
-  }
-
-  augment "/org-openroadm-device:org-openroadm-device/org-openroadm-device:protocols" {
-    when "/org-openroadm-device:org-openroadm-device/org-openroadm-device:info/org-openroadm-device:node-type='rdm'";
-    uses rstp-container;
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-service.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-service.yang
deleted file mode 100644
index 63dfa8a..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-service.yang
+++ /dev/null
@@ -1,547 +0,0 @@
-module org-openroadm-service {
-  namespace "http://org/openroadm/service";
-  prefix org-openroadm-service;
-
-  import ietf-yang-types {
-    prefix yang;
-  }
-  import org-openroadm-routing-constraints {
-    prefix org-openroadm-routing-constraints;
-  }
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }
-  import org-openroadm-resource-types {
-    prefix org-openroadm-resource-types;
-  }
-  import org-openroadm-common-service-types {
-    prefix org-openroadm-common-service-types;
-  }
-
-  organization
-    "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions of services.
-       
-      Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-      AT&T Intellectual Property.  All other rights reserved.
-      
-      Redistribution and use in source and binary forms, with or without modification, 
-      are permitted provided that the following conditions are met:
-      
-      * Redistributions of source code must retain the above copyright notice, this 
-        list of conditions and the following disclaimer.
-      * Redistributions in binary form must reproduce the above copyright notice, 
-        this list of conditions and the following disclaimer in the documentation and/or 
-        other materials provided with the distribution.
-      * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-        contributors may be used to endorse or promote products derived from this software 
-        without specific prior written permission.
-      
-      THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-      IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-      WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-      POSSIBILITY OF SUCH DAMAGE";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  rpc service-create {
-    input {
-      leaf service-name {
-        type string;
-        description
-          "Identifier for the service to be created in
-           the ROADM network, e.g., CLFI, CLCI, etc. This is reported against the service, but may not get reflected in the service in the network.";
-        mandatory true;
-      }
-      leaf common-id {
-        type string;
-        description
-          "To be used by the ROADM controller to identify the routing constraints received from planning application (PED).";
-      }
-      uses org-openroadm-common-service-types:sdnc-request-header;
-      leaf connection-type {
-        type org-openroadm-common-service-types:connection-type;
-        mandatory true;
-      }
-      container service-a-end {
-        uses org-openroadm-common-service-types:service-endpoint;
-      }
-      container service-z-end {
-        uses org-openroadm-common-service-types:service-endpoint;
-      }
-      uses org-openroadm-routing-constraints:routing-constraints;
-      uses org-openroadm-common-service-types:service-information;
-    }
-    output {
-      uses org-openroadm-common-service-types:configuration-response-common;
-      uses org-openroadm-common-service-types:response-parameters;
-    }
-    description
-      "Whether this request passed initial validation and was accepted for processing. Once the request completes processing, a
-       service-rpc-result Notification shall be sent.";
-  }
-  rpc service-feasibility-check {
-    input {
-      leaf common-id {
-        type string;
-        mandatory true;
-        description
-          "To be used by the ROADM controller to identify the routing 
-           constraints received from planning application (PED).";
-      }
-      uses org-openroadm-common-service-types:sdnc-request-header;
-      leaf connection-type {
-        type org-openroadm-common-service-types:connection-type;
-      }
-      container service-a-end {
-        uses org-openroadm-common-service-types:service-endpoint;
-      }
-      container service-z-end {
-        uses org-openroadm-common-service-types:service-endpoint;
-      }
-      uses org-openroadm-routing-constraints:routing-constraints;
-      uses org-openroadm-common-service-types:service-information;
-    }
-    output {
-      uses org-openroadm-common-service-types:configuration-response-common;
-      uses org-openroadm-common-service-types:response-parameters;
-      container service-a-end {
-        uses org-openroadm-common-service-types:service-endpoint;
-        list equipment-required {
-          description
-            "List of required equipment, including equipment type and quantity";
-          key "eqipment-identifier";
-          leaf eqipment-identifier {
-            type string;
-          }
-          leaf equipment-type {
-            type string;
-          }
-          leaf equipment-quantity {
-            type uint32;
-          }
-        }
-      }
-      container service-z-end {
-        uses org-openroadm-common-service-types:service-endpoint;
-        list equipment-required {
-          description
-            "List of required equipment, including equipment type and quantity";
-          key "eqipment-identifier";
-          leaf eqipment-identifier {
-            type string;
-          }
-          leaf equipment-type {
-            type string;
-          }
-          leaf equipment-quantity {
-            type uint32;
-          }
-        }
-      }
-      list intermediate-sites {
-        key "clli";
-        uses org-openroadm-common-service-types:service-endpoint;
-        list equipment-required {
-          description
-            "List of required equipment, including equipment type and quantity";
-          key "eqipment-identifier";
-          leaf eqipment-identifier {
-            type string;
-          }
-          leaf equipment-type {
-            type string;
-          }
-          leaf equipment-quantity {
-            type uint32;
-          }
-        }
-      }
-    }
-    description
-      "Whether a service was possible to be created, and if so
-       the routing constraints match and the a and z end connection that have
-       to match";
-  }
-  rpc service-delete {
-    input {
-      uses org-openroadm-common-service-types:sdnc-request-header;
-      container service-delete-req-info {
-        leaf service-name {
-          type string;
-          description
-            "Identifier for the service to be deleted in
-             the ROADM network, e.g., CLFI, CLCI, etc.";
-          mandatory true;
-        }
-        leaf due-date {
-          type yang:date-and-time;
-          description
-            "date and time service to be turned down. If missing, now.";
-        }
-        leaf tail-retention {
-          type enumeration {
-            enum "yes" {
-              value 1;
-              description
-                "tails are left intact ";
-            }
-            enum "no" {
-              value 2;
-              description
-                "tails are deleted";
-            }
-          }
-          mandatory true;
-        }
-      }
-    }
-    output {
-      uses org-openroadm-common-service-types:configuration-response-common;
-    }
-    description
-      "Whether this request passed initial validation and was accepted for processing. Once the request completes processing, a
-       service-rpc-result Notification shall be sent. Once the service has been deleted, it no longer will appear in the service list";
-  }
-  rpc equipment-notification {
-    input {
-      uses org-openroadm-common-service-types:sdnc-request-header;
-      leaf equiptment-id {
-        type string;
-        mandatory true;
-      }
-      leaf equipment-name {
-        type string;
-      }
-      leaf equipemt-type {
-        type string;
-        mandatory true;
-      }
-      leaf equipment-vendor {
-        type string;
-        mandatory true;
-      }
-      leaf equipment-customer {
-        type string;
-      }
-      leaf equipment-clli {
-        type string;
-        mandatory true;
-      }
-      leaf equipment-ip {
-        type string;
-      }
-      leaf controller-id {
-        type string;
-        mandatory true;
-      }
-    }
-    output {
-      uses org-openroadm-common-service-types:configuration-response-common;
-    }
-  }
-  rpc temp-service-create {
-    input {
-      leaf common-id {
-        type string;
-        description
-          "To be used by the ROADM controller to identify the routing constraints received from planning application (PED).";
-        mandatory true;
-      }
-      uses org-openroadm-common-service-types:sdnc-request-header;
-      leaf connection-type {
-        type org-openroadm-common-service-types:connection-type;
-        mandatory true;
-      }
-      container service-a-end {
-        uses org-openroadm-common-service-types:service-endpoint;
-      }
-      container service-z-end {
-        uses org-openroadm-common-service-types:service-endpoint;
-      }
-      uses org-openroadm-routing-constraints:routing-constraints;
-      uses org-openroadm-common-service-types:service-information;
-    }
-    output {
-      uses org-openroadm-common-service-types:configuration-response-common;
-      uses org-openroadm-common-service-types:response-parameters;
-    }
-  }
-  rpc temp-service-delete {
-    input {
-      leaf common-id {
-        type string;
-        mandatory true;
-      }
-    }
-    output {
-      uses org-openroadm-common-service-types:configuration-response-common;
-    }
-  }
-  rpc service-roll {
-    input {
-      leaf service-name {
-        type string;
-        mandatory true;
-        description
-          "Identifier for the service to be rolled in
-           the ROADM network, e.g., CLFI, CLCI, etc.";
-      }
-      leaf due-date {
-        type yang:date-and-time;
-        description
-          "date and time service to be rolled";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-  }
-  rpc service-reconfigure {
-    input {
-      leaf service-name {
-        type string;
-        mandatory true;
-        description
-          "Existing identifier for the service to be
-           reconfigured in the ROADM network, e.g., CLFI, CLCI, etc.";
-      }
-      leaf new-service-name {
-        type string;
-        description
-          "New identifier for the service to be
-           reconfigured in the ROADM network, e.g., CLFI, CLCI, etc.";
-      }
-      leaf common-id {
-        type string;
-        description
-          "To be used by the ROADM controller to identify the routing 
-           constraints received from planning application (PED).";
-      }
-      leaf connection-type {
-        type org-openroadm-common-service-types:connection-type;
-      }
-      container service-a-end {
-        uses org-openroadm-common-service-types:service-endpoint;
-      }
-      container service-z-end {
-        uses org-openroadm-common-service-types:service-endpoint;
-      }
-      uses org-openroadm-routing-constraints:routing-constraints;
-      uses org-openroadm-common-service-types:service-information;
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-    description
-      "Whether this request passed initial validation and was accepted for processing. Once the request completes processing, a
-       service-rpc-result Notification shall be sent.";
-  }
-  rpc service-restoration {
-    input {
-      leaf service-name {
-        type string;
-        mandatory true;
-        description
-          "Identifier for the service to be restored in
-           the ROADM network, e.g., CLFI, CLCI, etc.";
-      }
-      leaf option {
-        type enumeration {
-          enum "permanent" {
-            value 1;
-            description
-              "A spare regen can be used to restore the
-               service permanently without reverting back to the
-               original regen";
-          }
-          enum "temporary" {
-            value 2;
-            description
-              "a spare regen can be used to restore the
-               service temporarily.   The service needs to be reverted
-               back to the original regen transponder";
-          }
-        }
-        mandatory true;
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-    description
-      "Whether this request passed initial validation and was accepted for processing. Once the request completes processing, a
-       service-rpc-result Notification shall be sent.";
-  }
-  rpc service-reversion {
-    input {
-      leaf service-name {
-        type string;
-        mandatory true;
-        description
-          "Identifier for the service to be reverted
-           in the ROADM network, e.g., CLFI, CLCI, etc. ";
-      }
-      leaf due-date {
-        type yang:date-and-time;
-        description
-          "date and time service to be reverted";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-    description
-      "Whether this request passed initial validation and was accepted for processing. Once the request completes processing, a
-       service-rpc-result Notification shall be sent.";
-  }
-  rpc service-reroute {
-    input {
-      leaf service-name {
-        type string;
-        mandatory true;
-        description
-          "Identifier for the service to be re-routed in
-           the ROADM network, e.g., CLFI, CLCI, etc.";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-      uses org-openroadm-routing-constraints:routing-constraints;
-    }
-    description
-      "Whether this request was validated and processed correct. If sucessful, it return the proposed new route.
-       If acceptable, this request should be followed by a service-reroute-confirm to complete the reroute operation.";
-  }
-  rpc service-reroute-confirm {
-    input {
-      leaf service-name {
-        type string;
-        mandatory true;
-        description
-          "Identifier for the service to be re-routed in
-           the ROADM network, e.g., CLFI, CLCI, etc.";
-      }
-      uses org-openroadm-routing-constraints:routing-constraints;
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-    description
-      "Whether this request passed initial validation and was accepted for processing. Once the request completes processing, a
-       service-rpc-result Notification shall be sent.";
-  }
-  rpc network-re-optimization {
-    input {
-      leaf service-name {
-        type string;
-        description
-          "Identifier for the service in the ROADM network,
-           e.g., CLFI, CLCI, etc. whose path is to be checked by the RNC
-           for re-optimization";
-      }
-      leaf a-end {
-        type string;
-        description
-          "Services whose A-ends are terminated at the
-           specified office location are to be checked by the RNC for
-           re-optimization";
-      }
-      leaf z-end {
-        type string;
-        description
-          "Services whose Z-ends are terminated at the
-           specified office location are to be checked by the RNC for
-           re-optimization ";
-      }
-      leaf pass-through {
-        type string;
-        description
-          "Services that are pass-through (either via
-           regen or express) at the specified office location are to
-           be checked by the RNC for re-optimization";
-      }
-      leaf customer-code {
-        type string;
-        description
-          "Services that belong to the specified customer
-           are to be checked by the RNC for re-optimization ";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-      leaf optimization-candidate {
-        type string;
-      }
-    }
-  }
-  container service-list {
-    description
-      "List of service. Can only be created, deleted, modified, etc. using special RPCs.";
-    list services {
-      key "service-name";
-      uses org-openroadm-common-service-types:service;
-    }
-  }
-  container temp-service-list {
-    description
-      "List of temporary services Can only be created, deleted, modified, etc. using special RPCs.";
-    list services {
-      key "common-id";
-      uses org-openroadm-common-service-types:service {
-        refine "service-name" {
-          mandatory false;
-        }
-      }
-    }
-  }
-  notification service-rpc-result {
-    description
-      "This Notification indicates result of  service RPC";
-    leaf notification-type {
-      type org-openroadm-common-service-types:service-notification-types;
-    }
-    uses org-openroadm-common-types:rpc-response-status;
-    uses org-openroadm-common-service-types:service-notification-result;
-  }
-  notification service-traffic-flow {
-    description
-      "This Notification indicates that traffic is flowing again on the service after an administrative action has completed";
-    leaf service-name {
-      type string;
-      description
-        "Identifier for the service being reported on";
-      mandatory true;
-    }
-    leaf actual-date {
-      type yang:date-and-time;
-      description
-        "Actual date and time traffic started flowing";
-    }
-  }
-  notification service-notification {
-    description
-      "This Notification that a service has been added, modified or removed.
-       A resourceCreation notification shall contain the created service in its entirety.
-       A resourceMofified notification shall contain just the modified field, plus the service identifier
-       A resourceDeleted notification shall just contain the service identifier";
-    leaf notificationType {
-      type org-openroadm-resource-types:resource-notification-type;
-      description
-        "Whether this notification indicates a service creation, service modification or service deletion.";
-    }
-    uses org-openroadm-common-service-types:service;
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-srg.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-srg.yang
deleted file mode 100644
index 66e5a124..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-srg.yang
+++ /dev/null
@@ -1,102 +0,0 @@
-module org-openroadm-srg {
-  namespace "http://org/openroadm/srg";
-  prefix org-openroadm-srg;
-
-  organization
-    "OPEN ROADM MSA";
-  contact
-    "OpenROADM.org.";
-  description
-    "YANG definitions for an Add/Drop group in Network Model
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping shared-risk-group {
-    list srgs {
-      key "srg-number";
-      leaf srg-number {
-        type uint16;
-        description
-          "Identifier for each SRG";
-      }
-      leaf max-pp {
-        type uint32;
-        description
-          "Maximum number  of add/drop port pairs in an SRG";
-      }
-      leaf-list available-wavelengths {
-        type uint32;
-        description
-          "List of available wavelengths that are supported
-           by the srg";
-      }
-      leaf wavelength-duplication {
-        type enumeration {
-          enum "one-per-srg" {
-            value 1;
-          }
-          enum "one-per-degree" {
-            value 2;
-          }
-        }
-        description
-          "One per srg is applied to C/D add/drop group
-           one per degree is applied to C/D/C add drop group";
-      }
-      container cp-tx {
-        leaf-list pp-number {
-          type uint32;
-          description
-            "The port pair # used for a tail or assigned by PCE to a  service/circuit ";
-        }
-      }
-      container cp-rx {
-        leaf-list pp-number {
-          type uint32;
-          description
-            "The port pair # used for a tail or assigned by PCE to a  service/circuit ";
-        }
-      }
-      list port-pair {
-        key "pp-number";
-        leaf pp-number {
-          type uint16;
-          description
-            "The port pair # used for tail or assigned by PCE to a service/circuit";
-        }
-        leaf wavelength-number {
-          type uint32;
-        }
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-swdl.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-swdl.yang
deleted file mode 100644
index 1a86412..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-swdl.yang
+++ /dev/null
@@ -1,120 +0,0 @@
-module org-openroadm-swdl {
-  namespace "http://org/openroadm/de/swdl";
-  prefix org-openroadm-swdl;
-
-  import ietf-yang-types {
-    prefix yang;
-  }
-
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "Yang definitions for System Management.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping sw-bank {
-    leaf sw-version {
-      type string;
-      description
-        "Gissue of the SW in this bank";
-    }
-    leaf sw-validation-timer {
-      type string {
-        pattern "(([0-1][0-9]|2[0-3])-([0-5][0-9])-([0-5][0-9]))";
-      }
-      description
-        "value of validation timer in hh-mm-ss";
-    }
-    leaf activation-date-time {
-      type yang:date-and-time;
-      description
-        "activation date and time: The date load was activated";
-    }
-  }
-
-  rpc sw-stage {
-    description
-      "SW stage - copies the SW from repo to staging bank";
-    input {
-      leaf filename {
-        type string {
-          length "10..255";
-        }
-        description
-          "file name which has the load";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-  }
-  rpc sw-activate {
-    description
-      "Activate new load";
-    input {
-      leaf version {
-        type string;
-        description
-          " software version of the new load which is being activated";
-      }
-      leaf validationTimer {
-        type string;
-        description
-          "validation timer hh-mm-ss";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-  }
-  rpc cancel-validation-timer {
-    description
-      "Cancel validation timer which user provisioned as part of activate command";
-    input {
-      leaf accept {
-        type boolean;
-        default "true";
-        description
-          " TRUE means  validation timer is cancelled and new load is accepted";
-      }
-    }
-    output {
-      uses org-openroadm-common-types:rpc-response-status;
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-syslog.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-syslog.yang
deleted file mode 100644
index b0d7709..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-syslog.yang
+++ /dev/null
@@ -1,334 +0,0 @@
-module org-openroadm-syslog {
-  namespace "http://org/openroadm/syslog";
-  prefix org-openroadm-syslog;
-
-  import ietf-inet-types {
-    prefix inet;
-  }
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "This module contains a collection of YANG definitions 
-     for Syslog configuration.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.
-     
-     Also contains code components extracted from IETF Interfaces.  These code components
-     are copyrighted and licensed as follows:
-     
-     Copyright (c) 2016 IETF Trust and the persons identified as the document authors.
-     All rights reserved.
-     
-     This document is subject to BCP 78 and the IETF Trust’s Legal Provisions Relating
-     to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of
-     publication of this document. Please review these documents carefully, as they
-     describe your rights and restrictions with respect to this document. Code Components
-     extracted from this document must include Simplified BSD License text as described in
-     Section 4.e of the Trust Legal Provisions and are provided without warranty as
-     described in the Simplified BSD License.";
-  reference "RFC 5424: The Syslog Protocol";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  feature selector-sevop-config {
-    description
-      "This feature represents the ability to select messages 
-       using the additional operators equal to, or not equal to 
-       when comparing the Syslog message severity.";
-  }
-
-  feature selector-match-config {
-    description
-      "This feature represents the ability to select messages based
-       on a Posix 1003.2 regular expression pattern match.";
-  }
-
-  // copied from draft of ietf-ietf-syslog-types.yang
-  identity syslog-facility {
-    description
-      "The base identity to represent syslog facilities";
-  }
-
-  // copied from draft of ietf-ietf-syslog-types.yang;
-  // extended the enum set to include all and none
-  typedef severity {
-    type enumeration {
-      enum "emergency" {
-        value 0;
-        description
-          "Emergency Level Msg";
-      }
-      enum "alert" {
-        value 1;
-        description
-          "Alert Level Msg";
-      }
-      enum "critical" {
-        value 2;
-        description
-          "Critical Level Msg";
-      }
-      enum "error" {
-        value 3;
-        description
-          "Error Level Msg";
-      }
-      enum "warning" {
-        value 4;
-        description
-          "Warning Level Msg";
-      }
-      enum "notice" {
-        value 5;
-        description
-          "Notification Level Msg";
-      }
-      enum "info" {
-        value 6;
-        description
-          "Informational Level Msg";
-      }
-      enum "debug" {
-        value 7;
-        description
-          "Debugging Level Msg";
-      }
-      enum "all" {
-        value 8;
-        description
-          "This enum describes the case where all severities 
-           are selected.";
-      }
-      enum "none" {
-        value 9;
-        description
-          "This enum describes the case where no severities 
-           are selected.";
-      }
-    }
-    description
-      "The definitions for Syslog message severity as per RFC 5424.
-       Extended the RFC definition with enums for all and none";
-  }
-
-  grouping syslog-severity {
-    description
-      "This grouping defines the Syslog severity which is used to 
-       select log messages.";
-    leaf severity {
-      type severity;
-      mandatory true;
-      description
-        "This leaf specifies the Syslog message severity. When 
-         severity is specified, the default severity comparison 
-         is all messages of the specified severity and greater are 
-         selected. 'all' is a special case which means all severities
-         are selected. 'none' is a special case which means that
-         no selection should occur or disable this filter.";
-    }
-    leaf severity-operator {
-      when
-        "../severity != 'all' and
-                    ../severity != 'none'" {
-        description
-          "The severity-operator is not applicable for severity 'all' or 
-           severity 'none'";
-      }
-      if-feature selector-sevop-config;
-      type enumeration {
-        enum "equals-or-higher" {
-          description
-            "This enum specifies all messages of the specified 
-             severity and higher are logged according to the 
-             given log-action";
-        }
-        enum "equals" {
-          description
-            "This enum specifies all messages that are for 
-             the specified severity are logged according to the 
-             given log-action";
-        }
-        enum "not-equals" {
-          description
-            "This enum specifies all messages that are not for 
-             the specified severity are logged according to the 
-             given log-action";
-        }
-      }
-      default "equals-or-higher";
-      description
-        "This leaf describes the option to specify how the 
-         severity comparison is performed.";
-    }
-  }
-
-  grouping syslog-selector {
-    description
-      "This grouping defines a Syslog selector which is used to 
-       select log messages for the log-action (buffer, file, 
-       etc). Choose one of the following:
-         no-log-facility
-         log-facility [<facility> <severity>...]";
-    container log-selector {
-      description
-        "This container describes the log selector parameters 
-         for Syslog.";
-      choice selector-facility {
-        mandatory true;
-        description
-          "This choice describes the option to specify no 
-           facilities, or a specific facility which can be
-           all for all facilities.";
-        case no-log-facility {
-          description
-            "This case specifies no facilities will match when 
-             comparing the Syslog message facility. This is a 
-             method that can be used to effectively disable a 
-             particular log-action (buffer, file, etc).";
-          leaf no-facilities {
-            type empty;
-            description
-              "This leaf specifies that no facilities are selected 
-               for this log-action.";
-          }
-        }
-        case log-facility {
-          description
-            "This case specifies one or more specified facilities 
-             will match when comparing the Syslog message facility.";
-          list log-facility {
-            key "facility";
-            description
-              "This list describes a collection of Syslog 
-               facilities and severities.";
-            leaf facility {
-              type union {
-                type identityref {
-                  base syslog-facility;
-                }
-                type enumeration {
-                  enum "all" {
-                    description
-                      "This enum describes the case where all 
-                       facilities are requested.";
-                  }
-                }
-              }
-              description
-                "The leaf uniquely identifies a Syslog facility.";
-            }
-            uses syslog-severity;
-          }
-        }
-      }
-    }
-  }
-
-  container syslog {
-    description
-      "This container describes the configuration parameters for 
-       Syslog.";
-    container log-actions {
-      description
-        "This container describes the log-action parameters 
-         for Syslog.";
-      container remote {
-        description
-          "This container describes the configuration parameters for 
-           remote logging.";
-        list destination {
-          key "name";
-          description
-            "This list describes a collection of remote logging 
-             destinations.";
-          leaf name {
-            type string;
-            description
-              "An arbitrary name for the endpoint to connect to.";
-          }
-          choice transport {
-            mandatory true;
-            description
-              "This choice describes the transport option.";
-            case tcp {
-              container tcp {
-                description
-                  "This container describes the TCP transport
-                   options.";
-                reference "RFC 6587: Transmission of Syslog Messages over TCP";
-                leaf address {
-                  type inet:host;
-                  description
-                    "The leaf uniquely specifies the address of 
-                     the remote host. One of the following must 
-                     be specified: an ipv4 address, an ipv6 
-                     address, or a host name.";
-                }
-                leaf port {
-                  type inet:port-number;
-                  default "514";
-                  description
-                    "This leaf specifies the port number used to 
-                     deliver messages to the remote server.";
-                }
-              }
-            }
-            case udp {
-              container udp {
-                description
-                  "This container describes the UDP transport
-                   options.";
-                reference "RFC 5426: Transmission of Syslog Messages over UDP";
-                leaf address {
-                  type inet:host;
-                  description
-                    "The leaf uniquely specifies the address of 
-                     the remote host. One of the following must be 
-                     specified: an ipv4 address, an ipv6 address, 
-                     or a host name.";
-                }
-                leaf port {
-                  type inet:port-number;
-                  default "514";
-                  description
-                    "This leaf specifies the port number used to 
-                     deliver messages to the remote server.";
-                }
-              }
-            }
-          }
-          uses syslog-selector;
-        }
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-topology.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-topology.yang
deleted file mode 100644
index 93c965b..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-topology.yang
+++ /dev/null
@@ -1,91 +0,0 @@
-module org-openroadm-topology {
-  namespace "http://org/openroadm/topology";
-  prefix org-openroadm-topology;
-
-  import org-openroadm-resource {
-    prefix org-openroadm-resource;
-  }
-
-  organization
-    "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions of topology.
-       
-      Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-      AT&T Intellectual Property.  All other rights reserved.
-      
-      Redistribution and use in source and binary forms, with or without modification, 
-      are permitted provided that the following conditions are met:
-      
-      * Redistributions of source code must retain the above copyright notice, this 
-        list of conditions and the following disclaimer.
-      * Redistributions in binary form must reproduce the above copyright notice, 
-        this list of conditions and the following disclaimer in the documentation and/or 
-        other materials provided with the distribution.
-      * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-        contributors may be used to endorse or promote products derived from this software 
-        without specific prior written permission.
-      
-      THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-      IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-      WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-      POSSIBILITY OF SUCH DAMAGE";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping topology {
-    description
-      "Topology reports the individual hops along the service in the A to Z direction and Z to A directions.  This includes both ports internal to a device and those
-       at its edge that are available for externally connections. It includes both physical and logical ports.
-       Physical ports are ordered with the logical ports that run over them as follows:
-       a.\tOn ingress to a node/card, physical then logical
-       b.\tOn egress to a node/card, logical then physical";
-    list aToZ {
-      key "id";
-      leaf id {
-        description
-          "Unigue identifier for this topology component within this service";
-        type string;
-      }
-      uses hop;
-    }
-    list zToA {
-      key "id";
-      leaf id {
-        description
-          "Unigue identifier for this topology component within this service";
-        type string;
-      }
-      uses hop;
-    }
-  }
-
-  grouping hop {
-    leaf hop-type {
-      type enumeration {
-        enum "node-external" {
-          description
-            "The given resource is on the edge of the node, and used in relationships to resources outside of the node.";
-          value 1;
-        }
-        enum "node-internal" {
-          description
-            "The given resource is internally to the node";
-          value 2;
-        }
-      }
-    }
-    uses org-openroadm-resource:resource;
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-user-mgmt.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-user-mgmt.yang
deleted file mode 100644
index 4bf5edb..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-user-mgmt.yang
+++ /dev/null
@@ -1,109 +0,0 @@
-module org-openroadm-user-mgmt {
-  namespace "http://org/openroadm/user-mgmt";
-  prefix org-openroadm-user-mgmt;
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions of user managements.
-       
-      Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-      AT&T Intellectual Property.  All other rights reserved.
-      
-      Redistribution and use in source and binary forms, with or without modification, 
-      are permitted provided that the following conditions are met:
-      
-      * Redistributions of source code must retain the above copyright notice, this 
-        list of conditions and the following disclaimer.
-      * Redistributions in binary form must reproduce the above copyright notice, 
-        this list of conditions and the following disclaimer in the documentation and/or 
-        other materials provided with the distribution.
-      * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-        contributors may be used to endorse or promote products derived from this software 
-        without specific prior written permission.
-      
-      THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-      IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-      WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-      POSSIBILITY OF SUCH DAMAGE";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping user-profile {
-    list user {
-      key "name";
-      description
-        "The list of local users configured on this device.";
-      leaf name {
-        type string;
-        description
-          "The user name string identifying this entry.";
-      }
-      leaf password {
-        type string;
-        description
-          "The password for this entry. This shouldn't be in clear text";
-      }
-      leaf group {
-        type enumeration {
-          enum "sudo";
-        }
-        description
-          "The group to which the user is associated to.";
-      }
-    }
-  }
-
-  rpc chg-password {
-    input {
-      leaf currentPassword {
-        type string;
-        description
-          "provide the current password";
-        mandatory true;
-      }
-      leaf newPassword {
-        type string;
-        description
-          "provide a new password";
-        mandatory true;
-      }
-      leaf newPasswordConfirm {
-        type string;
-        description
-          "re-enter the new password ";
-        mandatory true;
-      }
-    }
-    output {
-      leaf status {
-        type enumeration {
-          enum "Successful" {
-            value 1;
-          }
-          enum "Failed" {
-            value 2;
-          }
-        }
-        mandatory true;
-        description
-          "Successful or Failed";
-      }
-      leaf status-message {
-        type string;
-        description
-          "Gives a more detailed reason for success / failure";
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-wavelength-map.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-wavelength-map.yang
deleted file mode 100644
index 0d2a63a..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-wavelength-map.yang
+++ /dev/null
@@ -1,71 +0,0 @@
-module org-openroadm-wavelength-map {
-  namespace "http://org/openroadm/wavelength-map";
-  prefix org-openroadm-wavelength-map;
-
-  organization "Open ROADM MSA";
-  contact
-    "OpenROADM.org";
-  description
-    "YANG definitions for mapping wavelength-number to center frequency and wavelength value.
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping wavelength-map-g {
-    list wavelengths {
-      key "wavelength-number";
-      leaf wavelength-number {
-        type uint32;
-      }
-      config false;
-      leaf center-frequency {
-        type decimal64 {
-          fraction-digits 3;
-          range "191.350..196.100";
-        }
-        units "THz";
-        description
-          "Frequency of the transmit optical channel
-           Domain range:  191.350THz .. 196.100THz ";
-      }
-      leaf wavelength {
-        type decimal64 {
-          fraction-digits 2;
-          range "1528.77..1566.72";
-        }
-        units "nm";
-        description
-          "Lambda corresponding to transmit frequency
-           Domain range:  1528.72nm .. 1566.72nm ";
-      }
-    }
-  }
-}
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-xponder.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-xponder.yang
deleted file mode 100644
index a786acc..0000000
--- a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-xponder.yang
+++ /dev/null
@@ -1,221 +0,0 @@
-module org-openroadm-xponder {
-  namespace "http://org/openroadm/xponder";
-  prefix org-openroadm-xponder;
-
-  import org-openroadm-equipment-states-types {
-    prefix org-openroadm-equipment-states-types;
-  }
-  import org-openroadm-common-types {
-    prefix org-openroadm-common-types;
-  }
-  import ietf-inet-types {
-    prefix inet;
-  }
-
-  organization
-    "OPEN ROADM MSA";
-  contact
-    "OpenROADM.org.";
-  description
-    "YANG definitions for xponder
-     
-     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
-     AT&T Intellectual Property.  All other rights reserved.
-     
-     Redistribution and use in source and binary forms, with or without modification, 
-     are permitted provided that the following conditions are met:
-     
-     * Redistributions of source code must retain the above copyright notice, this 
-       list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above copyright notice, 
-       this list of conditions and the following disclaimer in the documentation and/or 
-       other materials provided with the distribution.
-     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
-       contributors may be used to endorse or promote products derived from this software 
-       without specific prior written permission.
-     
-     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
-     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
-     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
-     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
-     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-     POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2016-10-14 {
-    description
-      "Version 1.2";
-  }
-
-  grouping xponder {
-    list xponders {
-      key "clli";
-      leaf clli {
-        type string;
-        description
-          "Location CLLI where the Xponder resides";
-      }
-      list ids {
-        key "node-number node-type";
-        leaf node-number {
-          type uint32;
-          description
-            "Number assigned to an Xponder base unit in a given
-             office, i.e., 1, 2..N";
-        }
-        leaf node-type {
-          type org-openroadm-common-types:node-types;
-        }
-        leaf node-id {
-          type string;
-          description
-            "Network-wide unique identifier for an Xponder";
-        }
-        leaf vendor {
-          type string;
-          description
-            "Identifier of the supplier for the xponder";
-        }
-        leaf customer-code {
-          type string;
-          description
-            "Owner of the xponder";
-        }
-        leaf domain-subnetwork {
-          type string;
-          description
-            "Specific Domain-Subnetwork in which the ROADM node resides";
-        }
-        leaf ip {
-          type inet:ip-address;
-          description
-            "IP address assigned to the ROADM node";
-        }
-        leaf relay-rack {
-          type string;
-          description
-            "Frame Identification Code (FIC)";
-        }
-        leaf shelf {
-          type uint32;
-        }
-        container input-connection {
-          leaf accumulated-bitrate {
-            type uint32;
-          }
-          list port {
-            key "port-name";
-            leaf port-name {
-              type string;
-            }
-            leaf customer-code {
-              type string;
-              description
-                "Owner of the input module";
-            }
-            leaf vendor {
-              type string;
-              description
-                "Supplier of the input module";
-            }
-            leaf local-lgx {
-              type string;
-            }
-            leaf bit-rate {
-              type uint32;
-            }
-            leaf signal-format {
-              type string;
-            }
-            leaf reach {
-              type string;
-            }
-            leaf optic {
-              type org-openroadm-common-types:optic-types;
-            }
-            leaf state {
-              type org-openroadm-equipment-states-types:states;
-              description
-                "A xponder can be in one of the following
-                 states";
-            }
-            leaf tail-client-equipment {
-              type string;
-            }
-            leaf tail-client-equipmentId {
-              type string;
-            }
-            leaf tail-clfi {
-              type string;
-            }
-          }
-        }
-        container output-connection {
-          leaf clli {
-            type string;
-          }
-          leaf node-number{
-            type uint32;
-          }
-          leaf node-id {
-            type string;
-            description
-              "ROADM node ID";
-          }
-          leaf accumulated-bitrate {
-            type uint32;
-          }
-          list port {
-            key "port-name";
-            leaf port-name {
-              type string;
-            }
-            leaf vendor {
-              type string;
-              description
-                "Supplier of the output module";
-            }
-            leaf srg-number {
-              type uint16;
-              description
-                "Output module is connected to";
-            }
-            leaf pp-number {
-              type uint16;
-            }
-            leaf wavelength-number{
-              type uint32;
-            }
-            leaf local-lgx {
-              type string;
-            }
-            leaf tail-clfi{
-              type string;
-            }
-            leaf bit-rate {
-              type uint32;
-            }
-            leaf signal-format {
-              type string;
-            }
-            leaf reach {
-              type string;
-            }
-            leaf optic {
-              type org-openroadm-common-types:optic-types;
-            }
-            leaf state {
-              type org-openroadm-equipment-states-types:states;
-              description
-                "A xponder can be in one of the following
-                 states";
-            }
-          }
-        }
-      }
-    }
-  }
-}
