diff --git a/appc-provider/appc-provider-model/pom.xml b/appc-provider/appc-provider-model/pom.xml
index 492c305..2368572 100644
--- a/appc-provider/appc-provider-model/pom.xml
+++ b/appc-provider/appc-provider-model/pom.xml
@@ -1,88 +1,118 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <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>appc-provider</artifactId>
-		<groupId>org.openecomp.appc</groupId>
-		<version>1.1.0-SNAPSHOT</version>
-	</parent>
-	<artifactId>appc-provider-model</artifactId>
-	<packaging>bundle</packaging>
+    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>appc-provider</artifactId>
+        <groupId>org.openecomp.appc</groupId>
+        <version>1.1.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>appc-provider-model</artifactId>
+    <packaging>bundle</packaging>
 
-	<build>
+    <build>
 
-		<plugins>
-			<plugin>
-				<groupId>org.apache.felix</groupId>
-				<artifactId>maven-bundle-plugin</artifactId>
-				<extensions>true</extensions>
-				<configuration>
-					<instructions>
-						<Import-Package>*</Import-Package>
-					</instructions>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.opendaylight.yangtools</groupId>
-				<artifactId>yang-maven-plugin</artifactId>
-				<version>${odl.yangtools.version}</version>
-				<dependencies>
-					<dependency>
-						<groupId>org.opendaylight.mdsal</groupId>
-						<artifactId>maven-sal-api-gen-plugin</artifactId>
-						<version>${odl.sal.api.gen.plugin.version}</version>
-						<type>jar</type>
-					</dependency>
-				</dependencies>
-				<executions>
-					<execution>
-						<goals>
-							<goal>generate-sources</goal>
-						</goals>
-						<configuration>
-							<yangFilesRootDir>${yang.file.directory}</yangFilesRootDir>
-							<codeGenerators>
-								<generator>
-									<codeGeneratorClass>org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
-									<outputBaseDir>${salGeneratorPath}</outputBaseDir>
-								</generator>
-							</codeGenerators>
-							<inspectDependencies>true</inspectDependencies>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>build-helper-maven-plugin</artifactId>
-				<version>1.12</version>
-				<executions>
-					<execution>
-						<id>add-generated-source</id>
-						<phase>generate-sources</phase>
-						<goals>
-							<goal>add-source</goal>
-						</goals>
-						<configuration>
-							<sources>
-								<!-- project.build.directory defaults to be the "target" folder -->
-								<source>${project.build.directory}/generated-sources/yang-gen-sal</source>
-							</sources>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-	<dependencies>
-		<dependency>
-			<groupId>org.opendaylight.mdsal</groupId>
-			<artifactId>yang-binding</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.opendaylight.yangtools</groupId>
-			<artifactId>yang-common</artifactId>
-		</dependency>
-	</dependencies>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Import-Package>*</Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.opendaylight.yangtools</groupId>
+                <artifactId>yang-maven-plugin</artifactId>
+                <version>${odl.yangtools.version}</version>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.opendaylight.mdsal</groupId>
+                        <artifactId>maven-sal-api-gen-plugin</artifactId>
+                        <version>${odl.sal.api.gen.plugin.version}</version>
+                        <type>jar</type>
+                    </dependency>
+                </dependencies>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>generate-sources</goal>
+                        </goals>
+                        <configuration>
+                            <yangFilesRootDir>${yang.file.directory}</yangFilesRootDir>
+                            <codeGenerators>
+                                <generator>
+                                    <codeGeneratorClass>org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
+                                    <outputBaseDir>${salGeneratorPath}</outputBaseDir>
+                                </generator>
+                            </codeGenerators>
+                            <inspectDependencies>true</inspectDependencies>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <!-- <plugin> -->
+            <!-- <groupId>org.codehaus.mojo</groupId> -->
+            <!-- <artifactId>build-helper-maven-plugin</artifactId> -->
+            <!-- <version>1.12</version> -->
+            <!-- <executions> -->
+            <!-- <execution> -->
+            <!-- <id>add-generated-source</id> -->
+            <!-- <phase>generate-sources</phase> -->
+            <!-- <goals> -->
+            <!-- <goal>add-source</goal> -->
+            <!-- </goals> -->
+            <!-- <configuration> -->
+            <!-- <sources> -->
+            <!-- project.build.directory defaults to be the "target" folder -->
+            <!-- <source>${project.build.directory}/generated-sources/yang-gen-sal</source> -->
+            <!-- </sources> -->
+            <!-- </configuration> -->
+            <!-- </execution> -->
+            <!-- </executions> -->
+            <!-- </plugin> -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-install-plugin</artifactId>
+                <version>2.5.2</version>
+                <executions>
+                    <execution>
+                        <id>yang</id>
+                        <phase>initialize</phase>
+                        <goals>
+                            <goal>install-file</goal>
+                        </goals>
+                        <configuration>
+                            <file>${project.basedir}/src/main/yang/appc-provider-lcm.yang</file>
+                            <groupId>${project.groupId}</groupId>
+                            <artifactId>${project.artifactId}</artifactId>
+                            <version>${project.version}</version>
+                            <packaging>yang</packaging>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>yang-binding</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.model</groupId>
+            <artifactId>ietf-inet-types</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.model</groupId>
+            <artifactId>ietf-yang-types</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/appc-provider/appc-provider-model/src/main/yang/appc-provider-lcm.yang b/appc-provider/appc-provider-model/src/main/yang/appc-provider-lcm.yang
index 6f2d0b4..422b319 100644
--- a/appc-provider/appc-provider-model/src/main/yang/appc-provider-lcm.yang
+++ b/appc-provider/appc-provider-model/src/main/yang/appc-provider-lcm.yang
@@ -19,7 +19,7 @@
 module appc-provider-lcm {
 
     yang-version 1;
-    namespace "org:openecomp:appc";
+    namespace "org:openecomp:appc:lcm";
     prefix appc-provider-lcm;
     organization "Copyright 2017 AT&T Intellectual Property.";
 
@@ -43,47 +43,11 @@
      * APP-C controller functions.
      **********************************************************************************/
 
-    /*
-     * Define a common definition of a UUID
-     */
-    typedef UUID {
-        type string {
-            length "1..255";
-        }
-        description "Universally Unique ID";
-    }
-
-    /*
-     * Define the name of the provider region/LCP to connect to
-     */
-    typedef LCP {
-        type string {
-            length "1..255";
-        }
-        description "The local control plane name (OpenStack region name) of the provider";
-    }
-
-    /*
-     * Define a common definition of a time stamp (expressed as a formatted string) as follows
-     *
-     * yyyy-MM-dd HH:mm:ss.SSSSSSSS
-     *
-     * yyyy ...... exactly 4 digit year, e.g., 2015
-     * MM ........ 1 or 2 digit month of year, e.g., 7
-     * dd ........ 1 or 2 digit day of month, e.g., 29
-     * HH ........ 1 or 2 digit hour of day (24-hour clock) in UTC, e.g., 17
-     * mm ........ 1 or 2 digit minute of the hour, e.g. 31
-     * ss ........ 1 or 2 digit seconds of the minute, e.g., 28
-     * SSSSSS .... 1-6 digit microseconds
-     */
-    typedef TIMESTAMP {
-        type string {
-            length "16..28";
-            pattern "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}.[0-9]{1,6}";
-        }
-    }
+   
 
     typedef ZULU {
+        description "Define a common definition of a time stamp (expressed as a formatted
+                string) as follows yyyy-MM-ddTHH:mm:ss.SSSSSSSSZ";
         type string {
             length "16..28";
             pattern "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}.[0-9]{1,6}Z";
@@ -96,27 +60,34 @@
     }
 
     typedef action {
-         type enumeration {
-             enum "Restart";
-             enum "Rebuild";
-             enum "Migrate";
-             enum "Evacuate";
-             enum "Snapshot";
-             enum "Rollback";
-             enum "Sync";
-             enum "Audit";
-             enum "Stop";
-             enum "Terminate";
-             enum "SoftwareUpload";
-             enum "HealthCheck";
-             enum "LiveUpgrade";
-             enum "ModifyConfig";
-             enum "Lock";
-             enum "Unlock";
-             enum "Test";
-             enum "CheckLock";
-         }
-         description "The action to be taken by APP-C, e.g. Restart, Rebuild, Migrate";
+        type enumeration {
+            enum "Restart";
+            enum "Rebuild";
+            enum "Migrate";
+            enum "Evacuate";
+            enum "Snapshot";
+            enum "Rollback";
+            enum "Sync";
+            enum "Audit";
+            enum "Stop";
+            enum "Start";
+            enum "Terminate";
+            enum "SoftwareUpload";
+            enum "HealthCheck";
+            enum "LiveUpgrade";
+            enum "Lock";
+            enum "Unlock";
+            enum "Test";
+            enum "CheckLock";
+            enum "Configure";
+            enum "ConfigModify";
+            enum "ConfigScaleOut";
+            enum "ConfigRestore";
+            enum "ConfigBackup";
+            enum "ConfigBackupDelete";
+            enum "ConfigExport";
+        }
+        description "The action to be taken by APP-C, e.g. Restart, Rebuild, Migrate";
     }
 
     /**********************************************************************************
@@ -127,27 +98,7 @@
      * (called the service-request-id) is meaningful to the caller and is included on
      * all responses from the services.
      **********************************************************************************/
-    grouping common-request-header {
-        description "A common header for all requests";
-        container common-request-header {
-            leaf service-request-id {
-                description "An identifier meaningful to the caller to correlate all responses";
-                type string;
-                mandatory true;
-            }
-
-            leaf time-to-live {
-                description "The alloted time to perform the operation, in seconds.  If the
-                    operation cannot be completed in this amount of time, the operation is
-                    aborted.  If set to zero, no timeout exists and the operation will continue
-                    until it completes or fails.  If omitted, the default value of 0 is used.";
-                type uint32 {
-                    range "0..86400";
-                }
-                mandatory false;
-            }
-        }
-    }
+    
 
     /**********************************************************************************
      * Basic manipulation of a VNF (or VM) will typically include querying the current
@@ -157,27 +108,7 @@
      * information is used across all of these services, so it has been defined as a
      * common structure here and is referenced in the appropriate RPC definitions.
      **********************************************************************************/
-    grouping vnf-resource {
-        description "The data that uniquely identifies a virtual network function (or vm)";
-        container vnf-resource {
-            leaf vm-id {
-                description "The UUID of the resource.  For backwards compatibility, this can be
-                    the self-link URL of the VM.";
-                type UUID;
-                mandatory true;
-            }
-            leaf identity-url {
-                description "The identity url used to access the resource";
-                type UUID;
-                mandatory false;
-            }
-            leaf tenant-id {
-                description "The id of the provider tenant that owns the resource";
-                type string;
-                mandatory false;
-            }
-        }
-    }
+    
 
     /**********************************************************************************
      * All responses will include this standard header
@@ -185,32 +116,7 @@
      * The standard response header includes the time of completion as well as a
      * success|failure indication
      **********************************************************************************/
-    grouping common-response-header {
-        description "A common header for all responses defining success or failure
-            and the time stamp when completed";
-        container common-response-header {
-            leaf service-request-id {
-                description "An identifier meaningful to the caller to correlate all responses";
-                type string;
-            }
-            leaf success {
-                description "True indicates the request was successful";
-                type boolean;
-            }
-            leaf reason {
-                description "If success=false, the failure reason.  Otherwise, undefined.";
-                type string;
-            }
-            leaf completed {
-                description "The formatted time stamp when the operation was completed.";
-                type TIMESTAMP;
-            }
-            leaf duration {
-                description "The amount of time used (in seconds) to process the request";
-                type uint32;
-            }
-        }
-    }
+    
 
 
        /**********************************************************************************
@@ -219,43 +125,55 @@
          * The standard common header is used to define a correlation identification for
          * the request that is returned on all responses.
          **********************************************************************************/
-        grouping common-header {
+    
+    
+    
+    grouping common-header {
+        description "A common header for all APP-C requests";
+        container common-header {
             description "A common header for all APP-C requests";
-            container common-header {
-                description "A common header for all APP-C requests";
-                leaf timestamp {
-                    description "timestamp is in ISO 8601 timestamp format ZULU offset";
-                    type ZULU;
-                    mandatory true;
-                }
+            leaf timestamp {
+                description "timestamp is in ISO 8601 timestamp format ZULU offset";
+                type ZULU;
+                mandatory true;
+            }
 
-                leaf api-ver {
-                    description "api-ver is the API version identifier. A given release of APPC should support all previous versions of APPC API (correlate with general requirements)";
-                    type string {
-                        pattern "[2]\.\d\d"{
-                            error-message "API Version 2.XX is supported at this end point";
-                        }
+            leaf api-ver {
+                description "api-ver is the API version identifier. A given release of APPC
+                                should support all previous versions of APPC API (correlate with
+                                general requirements)";
+                type string {
+                    pattern "[2]\.\d\d" {
+                        error-message "API Version 2.XX is supported at this end point";
                     }
-                    mandatory true;
                 }
+                mandatory true;
+            }
 
-                leaf originator-id {
-                    description "originator-id an identifier of the calling system which can be used addressing purposes, i.e. returning asynchronous response to the proper destination over DMaaP (especially in case of multiple consumers of APP-C APIs)";
-                    type string;
-                    mandatory true;
-                }
+            leaf originator-id {
+                description "originator-id an identifier of the calling system which can be
+                                used addressing purposes, i.e. returning asynchronous response
+                                to the proper destination over DMaaP (especially in case of multiple
+                                consumers of APP-C APIs)";
+                type string;
+                mandatory true;
+            }
 
-                leaf request-id {
-                    description "UUID for the request ID. An OSS/BSS identifier for the request that caused the current action. Multiple API calls may be made with the same request-id The request-id shall be recorded throughout the operations on a single request";
-                    type string;
-                    mandatory true;
-                }
+            leaf request-id {
+                description "UUID for the request ID. An OSS/BSS identifier for the request
+                                that caused the current action. Multiple API calls may be made
+                                with the same request-id The request-id shall be recorded throughout
+                                the operations on a single request";
+                type string;
+                mandatory true;
+            }
 
-                leaf sub-request-id {
-                    description "Uniquely identifies a specific LCM action. It is persistent over the life-cycle of a single request";
-                    type string;
-                    mandatory false;
-                }
+            leaf sub-request-id {
+                description "Uniquely identifies a specific LCM action. It is persistent over
+                                the life-cycle of a single request";
+                type string;
+                mandatory false;
+            }
 
 
                 /**********************************************************************************
@@ -271,60 +189,79 @@
                  *          * Optionally resume command acceptance and processing
                  *        - NORMAL - Obverse of EXCLUSIVE, the default one.
                  **********************************************************************************/
-                container flags {
-                    description "Flags are generic flags that apply to any and all commands, all are optional";
-                    leaf mode {
-                        type enumeration {
-                                         enum "EXCLUSIVE";
-                                         enum "NORMAL";
-                                     }
-                        description "EXCLUSIVE (accept no queued requests on this VNF while processing) or NORMAL (queue other requests until complete)";
-                        mandatory false;
+            container flags {
+                description "Flags are generic flags that apply to any and all commands, all
+                                are optional";
+                leaf mode {
+                    type enumeration {
+                        enum "EXCLUSIVE";
+                        enum "NORMAL";
                     }
-                    leaf force {
-                        type enumeration {
-                                    enum "TRUE";
-                                    enum "FALSE";
-                               }
-                        description "TRUE/FALSE - Execute action even if target is in unstable (i.e. locked, transiting, etc.) state";
-                        mandatory false;
+                    description "EXCLUSIVE (accept no queued requests on this VNF while processing)
+                                        or NORMAL (queue other requests until complete)";
+                    mandatory false;
+                }
+                leaf force {
+                    type enumeration {
+                        enum "TRUE";
+                        enum "FALSE";
                     }
-                    leaf ttl {
-                        description "<0....N> - The timeout value (expressed in seconds) for action execution, between action being received by APPC and action initiation";
-                        type uint16;
-                        mandatory false;
-                    }
+                    description "TRUE/FALSE - Execute action even if target is in unstable (i.e.
+                                        locked, transiting, etc.) state";
+                    mandatory false;
+                }
+                leaf ttl {
+                    description "<0....N> - The timeout value (expressed in seconds) for action
+                                        execution, between action being received by APPC and action initiation";
+                    type uint16;
+                    mandatory false;
+                }
                 }
             }
         }
 
 
-     grouping action-identifiers {
-            description "A block containing the action arguments. These are used to specify the object upon which APP-C LCM command is to operate";
-            container action-identifiers {
-                description "A block containing the action arguments. These are used to specify the object upon which APP-C LCM command is to operate";
-                leaf service-instance-id {
-                    description "identifies a specific service the command refers to. When multiple APP-C instances are used and applied to a subset of services, this will become significant . The field is mandatory when the vnf-id is empty";
-                    type string;
-                    mandatory false;
-                }
-                leaf vnf-id {
-                    description "identifies the VNF to which this action is to be applied(vnf-id uniquely identifies the service-instance referred to).  Note that some actions  are applied to multiple VNFs in the same service. When this is the case, vnf-id may be left out, but service-instance-id must appear. The field is mandatory when service-instance-id is empty";
-                    type string;
-                    mandatory false;
-                }
-                leaf vnfc-name {
-                    description "identifies the VNFC to which this action is to be applied. Some actions apply only to a component within a VNF (e.g. RESTART is sometimes applied to on VM only).  In such a case, the name of the VNFC is used to search for the component within the VNF";
-                    type string;
-                    mandatory false;
-                }
-                leaf vserver-id {
-                    description "identifies a specific VM within the given service/vnf to which this action is to be applied";
-                    type string;
-                    mandatory false;
-                }
+    grouping action-identifiers {
+        description "A block containing the action arguments. These are used to specify
+                the object upon which APP-C LCM command is to operate";
+        container action-identifiers {
+            description "A block containing the action arguments. These are used to specify
+                        the object upon which APP-C LCM command is to operate";
+            leaf service-instance-id {
+                description "identifies a specific service the command refers to. When multiple
+                                APP-C instances are used and applied to a subset of services,
+                                this will become significant . The field is mandatory when the
+                                vnf-id is empty";
+                type string;
+                mandatory false;
+            }
+            leaf vnf-id {
+                description "identifies the VNF to which this action is to be applied(vnf-id
+                                uniquely identifies the service-instance referred to). Note that
+                                some actions are applied to multiple VNFs in the same service.
+                                When this is the case, vnf-id may be left out, but service-instance-id
+                                must appear. The field is mandatory when service-instance-id is
+                                empty";
+                type string;
+                mandatory false;
+            }
+            leaf vnfc-name {
+                description "identifies the VNFC to which this action is to be applied. Some
+                                actions apply only to a component within a VNF (e.g. RESTART is
+                                sometimes applied to on VM only). In such a case, the name of
+                                the VNFC is used to search for the component within the VNF";
+                type string;
+                mandatory false;
+            }
+            leaf vserver-id {
+                description "identifies a specific VM within the given service/vnf to which
+                                this action is to be applied";
+                type string;
+                mandatory false;
             }
         }
+    }
+
 
      grouping status {
             description "The specific response codes are to be aligned with ASDC reference doc (main table removed to avoid duplication and digression from main table). See ASDC and ECOMP Distribution Consumer Interface Agreement";
@@ -344,163 +281,6 @@
       }
 
 
-      /**********************************************************************************
-     * NEW API ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-     * All requests will include this standard header
-     *
-     * The standard request header is used to define a correlation identification for
-     * the request that is returned on all responses.  This correlation identifier
-     * (called the service-request-id) is meaningful to the caller and is included on
-     * all responses from the services.
-     **********************************************************************************/
-    grouping RequestHeader {
-        container RequestHeader {
-            description "A common header for all APP-C requests";
-            leaf TimeStamp {
-                description "TimeStamp is in ISO 8601 timestamp format ZULU offset";
-                type TIMESTAMP;
-                mandatory true;
-            }
-
-            leaf APIver {
-                description "APIver is the API version identifier. A given release of APPC should support all previous versions of APPC API (correlate with general requirements)";
-                type string;
-                mandatory true;
-            }
-
-            leaf OriginatorID {
-                description "OriginatorID an identifier of the calling system which can be used addressing purposes, i.e. returning asynchronous response to the proper destination over DMaaP (especially in case of multiple consumers of APP-C APIs)";
-                type string;
-                mandatory true;
-            }
-
-            leaf TransactionID {
-                description "Identifiers that may be generated when multiple responses or handling passes are needed for a given request, allowing the request itself to be tracked";
-                type string;
-                mandatory true;
-            }
-
-            leaf-list RequestTrack {
-                description "Identifiers that may be generated when multiple responses or handling passes are needed for a given request, allowing the request itself to be tracked";
-                type string;
-            }
-
-            /**********************************************************************************
-             * Flags are generic flags that apply to any and all commands, all are optional
-             *  FORCE = TRUE/FALSE - Execute command even if target is in unstable (i.e. locked, transiting, etc) state. Specific behaviour of forced commands varies, but implies cancellation of previous command and an override by the new command. The FALSE value is used by default.
-             *  TTL = <0....N> - The timeout value for command execution, expressed in seconds
-             *  MODE = EXCLUSIVE/NORMAL - defines execution mode as follows:
-             *        - EXCLUSIVE � on encountering an exclusive command, the APP-C will:
-             *          * Cease accepting additional command requests
-
-             * Complete execution of outstanding commands
-             *          * Execute the exclusive command to completion
-             *          * Optionally report the result of the command
-             *          * Optionally resume command acceptance and processing
-             *        - NORMAL - Obverse of EXCLUSIVE, the default one.
-             **********************************************************************************/
-            container Flags {
-                description "Flags are generic flags that apply to any and all commands, all are optional";
-                leaf FORCE {
-                    description "TRUE/FALSE - Execute action even if target is in unstable (i.e. locked, transiting, etc) state.";
-                    type string;
-                    mandatory false;
-                }
-                leaf TTL {
-                    description "<0....N> - The timeout value for action execution, expressed in seconds";
-                    type string;
-                    mandatory false;
-                }
-                leaf MODE {
-                    description "EXCLUSIVE/NORMAL - defines execution mode";
-                    type string;
-                    mandatory false;
-                }
-            }
-        }
-    }
-
-    grouping RequestParameters {
-        description "The request contains the entry of command-specific and is opaque to the APP-C handler";
-        leaf Action {
-            description "The actual action to be taken";
-            type string;
-            mandatory true;
-        }
-        leaf TargetID {
-            description "The specific VF a component of which is to be affected";
-            type string;
-            mandatory true;
-        }
-        leaf ObjectID {
-            description "The specific VFC within a VF to be affected";
-            type string;
-            mandatory true;
-        }
-        leaf Payload {
-            description "An action-specific value opaque to the APPC handler.
-                         The value can be any valid JSON type (primitive, object, collection of those two).
-                         APPC will pass the value as raw JSON string to the executing LCM action.";
-            type string;
-            mandatory true;
-        }
-    }
-
-    grouping ResponseHeader {
-        description "The response to an APP-C command or control is, likewise, encoded in a JSON object. ";
-        container ResponseHeader {
-            description "The response to an APP-C command or control is, likewise, encoded in a JSON object. ";
-            leaf TimeStamp {
-                description "TimeStamp is in ISO 8601 timestamp format ZULU offset";
-                type TIMESTAMP;
-                mandatory true;
-            }
-
-            leaf APIver {
-                description "APIver is the API version identifier. A given release of APPC should support all previous versions of APPC API (correlate with general requirements)";
-                type string;
-                mandatory true;
-            }
-
-            leaf ResponseID {
-                description "ResponseID an identifier of the calling system which can be used addressing purposes, i.e. returning asynchronous response to the proper destination over DMaaP (especially in case of multiple consumers of APP-C APIs)";
-                type string;
-                mandatory true;
-            }
-
-            leaf-list SubResponseID {
-                description "Identifiers that may be generated when multiple responses or handling passes are needed for a given request, allowing the request itself to be tracked";
-                type string;
-            }
-        }
-    }
-
-    grouping ResponseAttributes {
-        description "The response contains the status of executed functionality";
-        container Status {
-            description "The specific response codes are to be aligned with ASDC reference doc (main table removed to avoid duplication and digression from main table). See ASDC and ECOMP Distribution Consumer Interface Agreement";
-            leaf Code {
-                description "Response code value";
-                type uint32;
-                mandatory true;
-            }
-            leaf Value {
-                description "Response code description";
-                type string;
-                mandatory true;
-            }
-        }
-        leaf Payload {
-            description "Payload - the entry is command-specific and is opaque to the APP-C handler.
-                         The value can be any valid JSON type (primitive, object, collection of those two).
-                         APP-C will pass the value as raw JSON string to appropriate addressee";
-            type string;
-            mandatory false;
-        }
-    }
-
-
-
 
 
 
@@ -677,10 +457,18 @@
                        mandatory true;
             }
             uses action-identifiers;
+            leaf payload {
+                type payload;
+                mandatory false;
+            }
         }
         output {
             uses common-header;
             uses status;
+            leaf payload {
+                type payload;
+                mandatory false;
+           }
         }
     }
 
@@ -707,26 +495,103 @@
         }
     }
 
-    /**********************************************************************************
-     * Define the modify-config service
-     **********************************************************************************/
-    rpc modify-config {
-        description "An operation to modify-config the configurations of a virtual network function (or VM)";
+
+    rpc configure {
+        description "An operation to configure the configurations of a virtual network
+                function (or VM)";
         input {
             uses common-header;
             leaf action {
-                       type action;
-                       mandatory true;
+                type action;
+                mandatory true;
             }
             uses action-identifiers;
             leaf payload {
-                        type payload;
-                        mandatory false;
+                type payload;
+                mandatory false;
             }
         }
         output {
             uses common-header;
             uses status;
+            leaf payload {
+                 type payload;
+                 mandatory false;
+            }
+        }
+    }
+
+    rpc config-modify {
+        description "Use the ModifyConfig command when a full configuration cycle is either not required or is considered too costly. The ModifyConfig LCM action affects only a subset of the total configuration data of a VNF. The set of configuration parameters to be affected is a subset of the total configuration data of the target VNF type. The payload block must contain the configuration parameters to be modified and their values. A successful modify returns a success response. A failed modify returns a failure response and the specific failure messages in the response payload block";
+        input {
+            uses common-header;
+            leaf action {
+                type action;
+                mandatory true;
+            }
+            uses action-identifiers;
+            leaf payload {
+                type payload;
+                mandatory false;
+            }
+        }
+        output {
+            uses common-header;
+            uses status;
+            leaf payload {
+                 type payload;
+                 mandatory false;
+            }
+        }
+    }
+
+    rpc config-scaleout {
+        description "An operation to scaleout the configurations of a virtual network
+                function (or VM)";
+        input {
+            uses common-header;
+            leaf action {
+                type action;
+                mandatory true;
+            }
+            uses action-identifiers;
+            leaf payload {
+                type payload;
+                mandatory false;
+            }
+        }
+        output {
+            uses common-header;
+            uses status;
+            leaf payload {
+                 type payload;
+                 mandatory false;
+            }
+        }
+    }
+
+    rpc config-restore {
+        description "An operation to restore the configurations of a virtual network
+                function (or VM)";
+        input {
+            uses common-header;
+            leaf action {
+                type action;
+                mandatory true;
+            }
+            uses action-identifiers;
+            leaf payload {
+                type payload;
+                mandatory false;
+            }
+        }
+        output {
+            uses common-header;
+            uses status;
+            leaf payload {
+                 type payload;
+                 mandatory false;
+            }
         }
     }
 
@@ -776,6 +641,26 @@
             }
         }
 
+        rpc start {
+            description "An operation to start a virtual network function (or VM)";
+            input {
+                uses common-header;
+                leaf action {
+                    type action;
+                    mandatory true;
+                }
+                uses action-identifiers;
+                leaf payload {
+                    type payload;
+                    mandatory false;
+                }
+            }
+            output {
+                uses common-header;
+                uses status;
+            }
+        }
+
        /**********************************************************************************
         * Define the audit service
         **********************************************************************************/
@@ -788,10 +673,18 @@
                           mandatory true;
                }
                uses action-identifiers;
+               leaf payload {
+                   type payload;
+                   mandatory false;
+               }
            }
            output {
                uses common-header;
                uses status;
+               leaf payload {
+                   type payload;
+                   mandatory false;
+              }
            }
        }
 
@@ -893,8 +786,8 @@
                     }
 
         /**********************************************************************************
-                         * Define the VNF unlock service
-                         **********************************************************************************/
+         * Define the VNF unlock service
+         **********************************************************************************/
                         rpc unlock {
                             description "An operation to perform VNF unlock operation";
                             input {
@@ -943,6 +836,65 @@
     }
 
 
+    rpc config-backup {
+        description "An operation to Backup configurations of a virtual network function
+                (or VM)";
+        input {
+            uses common-header;
+            leaf action {
+                type action;
+                mandatory true;
+            }
+            uses action-identifiers;
+        }
+        output {
+            uses common-header;
+            uses status;
+            leaf payload {
+                 type payload;
+                 mandatory false;
+            }
+        }
+    }
+
+    rpc config-backup-delete {
+        description "An operation to Delete backup configurations of a virtual network
+                function (or VM)";
+        input {
+            uses common-header;
+            leaf action {
+                type action;
+                mandatory true;
+            }
+            uses action-identifiers;
+        }
+        output {
+            uses common-header;
+            uses status;
+            leaf payload {
+                 type payload;
+                 mandatory false;
+            }
+        }
+    }
+
+    rpc config-export {
+        description "An operation to Export configurations of a virtual network function
+                (or VM)";
+        input {
+            uses common-header;
+            leaf action {
+                type action;
+                mandatory true;
+            }
+            uses action-identifiers;
+        }
+        output {
+            uses common-header;
+            uses status;
+        }
+    }  
+    
     /**********************************************************************************
      * Additional RPCs added here...
      **********************************************************************************/
diff --git a/appc-provider/appc-provider-model/src/main/yang/appc-provider.yang b/appc-provider/appc-provider-model/src/main/yang/appc-provider.yang
index 6bdccf4..5430c96 100644
--- a/appc-provider/appc-provider-model/src/main/yang/appc-provider.yang
+++ b/appc-provider/appc-provider-model/src/main/yang/appc-provider.yang
@@ -392,7 +392,7 @@
              *  FORCE = TRUE/FALSE - Execute command even if target is in unstable (i.e. locked, transiting, etc) state. Specific behaviour of forced commands varies, but implies cancellation of previous command and an override by the new command. The FALSE value is used by default.
              *  TTL = <0....N> - The timeout value for command execution, expressed in seconds
              *  MODE = EXCLUSIVE/NORMAL - defines execution mode as follows:
-             *        - EXCLUSIVE ï¿½ on encountering an exclusive command, the APP-C will:
+             *        - EXCLUSIVE � on encountering an exclusive command, the APP-C will:
              *          * Cease accepting additional command requests
 
              * Complete execution of outstanding commands
@@ -616,5 +616,19 @@
         }
     }
     
+        rpc vmstatuscheck {
+            description "An operation to check status of a VM";
+            input {
+                uses common-request-header;
+                uses vnf-resource;
+            }
+            output {
+                uses common-response-header;
+                leaf stat-msg {
+                    description "The status of the VM requested";
+                    type string;
+                }
+            }
+        }
 
 }
