diff --git a/change-config.groovy b/change-config.groovy
new file mode 100644
index 0000000..69f7519
--- /dev/null
+++ b/change-config.groovy
@@ -0,0 +1,93 @@
+/**
+ * Make change to the node(s) configuration
+ *
+ * Expected parameters:
+ *   SALT_MASTER_CREDENTIALS    Credentials to the Salt API.
+ *   SALT_MASTER_URL            Full Salt API address [https://10.10.10.1:8000].
+ *   TARGET_SERVERS             Salt compound target to match nodes to be updated [*, G@osfamily:debian].
+ *   TARGET_STATES              States to be applied, empty string means running highstate [linux, linux,openssh, salt.minion.grains].
+ *   TARGET_SUBSET_TEST         Number of nodes to test config changes, empty string means all targetted nodes.
+ *   TARGET_SUBSET_LIVE         Number of selected noded to live apply selected config changes.
+ *   TARGET_BATCH_LIVE          Batch size for the complete live config changes on all nodes, empty string means apply to all targetted nodes.
+ *
+**/
+
+def common = new com.mirantis.mk.Common()
+def salt = new com.mirantis.mk.Salt()
+
+def saltMaster
+def targetAll = ['expression': TARGET_SERVERS, 'type': 'compound']
+def targetTestSubset
+def targetLiveSubset
+def targetLiveAll
+def minions
+def result
+def states
+
+node() {
+    try {
+
+        if (TARGET_STATES != "") {
+            states = TARGET_STATES
+        }
+        else {
+            states = null
+        }
+
+        stage('Connect to Salt master') {
+            saltMaster = salt.connection(SALT_MASTER_URL, SALT_MASTER_CREDENTIALS)
+        }
+
+        stage('List target servers') {
+            minions = salt.getMinions(saltMaster, targetAll)
+            if (TARGET_SUBSET_TEST != "") {
+                targetTestSubset = ['expression': minions.subList(0, Integer.valueOf(TARGET_SUBSET_TEST)).join(' or '), 'type': 'compound']
+            }
+            else {
+                targetTestSubset = ['expression': minions.join(' or '), 'type': 'compound']
+            }
+            targetLiveSubset = ['expression': minions.subList(0, Integer.valueOf(TARGET_SUBSET_LIVE)).join(' or '), 'type': 'compound']
+            targetLiveAll = ['expression': minions.join(' or '), 'type': 'compound']
+            common.infoMsg("Found nodes: ${targetLiveAll.expression}")
+            common.infoMsg("Selected test nodes: ${targetTestSubset.expression}")
+            common.infoMsg("Selected sample nodes: ${targetLiveSubset.expression}")
+        }
+
+        stage('Test config changes') {
+            def kwargs = [
+                'test': true
+            ]
+            result = salt.runSaltCommand(saltMaster, 'local', targetTestSubset, 'state.apply', null, states, kwargs)
+            salt.printSaltStateResult(result)
+        }
+
+        stage('Confirm live changes on sample') {
+            timeout(time: 2, unit: 'HOURS') {
+               input message: "Approve live config change on ${targetLiveSubset.expression} nodes?"
+            }
+        }
+
+        stage('Apply config changes on sample') {
+            result = salt.runSaltCommand(saltMaster, 'local', targetLiveSubset, 'state.apply', null, states)
+            salt.printSaltStateResult(result)
+        }
+
+        stage('Confirm live changes on all nodes') {
+            timeout(time: 2, unit: 'HOURS') {
+               input message: "Approve live config change on ${targetLiveAll.expression} nodes?"
+            }
+        }
+
+        stage('Apply config changes on all nodes') {
+            result = salt.runSaltCommand(saltMaster, 'local', targetLiveAll, 'state.apply', null, states)
+            salt.printSaltStateResult(result)
+        }
+
+    } catch (Throwable e) {
+        currentBuild.result = 'FAILURE'
+        throw e
+    } finally {
+        // send notification
+        //common.sendNotification(currentBuild.result,HEAT_STACK_NAME,["slack"])
+    }
+}
diff --git a/update-package.groovy b/update-package.groovy
index e2ce9e4..5457718 100644
--- a/update-package.groovy
+++ b/update-package.groovy
@@ -1,48 +1,88 @@
 /**
- * Update packages pipeline script
+ * Update packages on given nodes
  *
  * Expected parameters:
- * SALT_MASTER_CREDENTIALS     Credentials to the Salt API (str)
- * SALT_MASTER_URL             URL of Salt-API (str)
- *
- * UPDATE_SERVERS              Salt target for updated servers (str)
- * UPDATE_COMMIT               Confirm update should be performed (boot)
- * UPDATE_PACKAGES             List of packages to update
+ *   SALT_MASTER_CREDENTIALS    Credentials to the Salt API.
+ *   SALT_MASTER_URL            Full Salt API address [https://10.10.10.1:8000].
+ *   TARGET_SERVERS             Salt compound target to match nodes to be updated [*, G@osfamily:debian].
+ *   TARGET_PACKAGES            Space delimited list of packages to be updates [package1=version package2=version], empty string means all updating all packages to the latest version.
+ *   TARGET_SIZE_TEST           Number of nodes to list package updates, empty string means all targetted nodes.
+ *   TARGET_SIZE_SAMPLE         Number of selected noded to live apply selected package update.
+ *   TARGET_SIZE_BATCH          Batch size for the complete live package update on all nodes, empty string means apply to all targetted nodes.
  *
 **/
 
-
-
 def common = new com.mirantis.mk.Common()
 def salt = new com.mirantis.mk.Salt()
-timestamps {
-    node() {
-      try {
 
-        stage("Connect to Salt master") {
-          saltMaster = salt.connection(SALT_MASTER_URL, SALT_MASTER_CREDENTIALS)
+def saltMaster
+def targetAll = ['expression': TARGET_SERVERS, 'type': 'compound']
+def targetTestSubset
+def targetLiveSubset
+def targetLiveAll
+def minions
+def result
+def packages
+
+node() {
+    try {
+
+        if (TARGET_PACKAGES != "") {
+            packages = TARGET_PACKAGES.split(' ')
+        }
+        else {
+            packages = []
         }
 
-        stage("Get package versions") {
-          salt.runSaltProcessStep(saltMaster, UPDATE_SERVERS, 'pkg.list_upgrades', [], null, true)
+        stage('Connect to Salt master') {
+            saltMaster = salt.connection(SALT_MASTER_URL, SALT_MASTER_CREDENTIALS)
         }
 
-        if (UPDATE_COMMIT.toBoolean() == true) {
-          stage("Update packages") {
-            if (UPDATE_PACKAGES == "") {
-              salt.runSaltProcessStep(saltMaster, UPDATE_SERVERS, 'pkg.install', [], null, true)
-            } else {
-              salt.runSaltProcessStep(saltMaster, UPDATE_SERVERS, 'pkg.install', UPDATE_PACKAGES.split(' '), null, true)
+        stage('List target servers') {
+            minions = salt.getMinions(saltMaster, targetAll)
+            if (TARGET_SUBSET_TEST != "") {
+                targetTestSubset = minions.subList(0, Integer.valueOf(TARGET_SUBSET_TEST)).join(' or ')
             }
-          }
+            else {
+                targetTestSubset = minions.join(' or ')
+            }
+            targetLiveSubset = minions.subList(0, Integer.valueOf(TARGET_SUBSET_LIVE)).join(' or ')
+            targetLiveAll = minions.join(' or ')
+            common.infoMsg("Found nodes: ${targetLiveAll}")
+            common.infoMsg("Selected test nodes: ${targetTestSubset}")
+            common.infoMsg("Selected sample nodes: ${targetLiveSubset}")
         }
 
-      } catch (Throwable e) {
-         // If there was an error or exception thrown, the build failed
-         currentBuild.result = "FAILURE"
-         throw e
-      } finally {
-         // common.sendNotification(currentBuild.result,"",["slack"])
-      }
+        stage("List package upgrades") {
+            salt.runSaltProcessStep(saltMaster, targetTestSubset, 'pkg.list_upgrades', [], null, true)
+        }
+
+        stage('Confirm live package upgrades on sample') {
+            timeout(time: 2, unit: 'HOURS') {
+               input message: "Approve live package upgrades on ${targetLiveSubset} nodes?"
+            }
+        }
+
+        stage('Apply package upgrades on sample') {
+            salt.runSaltProcessStep(saltMaster, targetLiveSubset, 'pkg.install', packages, null, true)
+
+        }
+
+        stage('Confirm package upgrades on all nodes') {
+            timeout(time: 2, unit: 'HOURS') {
+               input message: "Approve live package upgrades on ${targetLiveAll} nodes?"
+            }
+        }
+
+        stage('Apply package upgrades on all nodes') {
+            salt.runSaltProcessStep(saltMaster, targetLiveAll, 'pkg.install', packages, null, true)
+        }
+
+    } catch (Throwable e) {
+        // If there was an error or exception thrown, the build failed
+        currentBuild.result = "FAILURE"
+        throw e
+    } finally {
+        // common.sendNotification(currentBuild.result,"",["slack"])
     }
 }
