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;
+                }
+            }
+        }
 
 }
