diff --git a/src/com/mirantis/mcp/SlackNotification.groovy b/src/com/mirantis/mcp/SlackNotification.groovy
index d78d63a..6cc73bc 100644
--- a/src/com/mirantis/mcp/SlackNotification.groovy
+++ b/src/com/mirantis/mcp/SlackNotification.groovy
@@ -29,11 +29,13 @@
  * @param buildUrl build url param, if empty env.BUILD_URL will be used
  * @param channel param, default is '#mk-ci'
  * @param credentialsId slack hook url credential, default is 'SLACK_WEBHOOK_URL'
+ * @param description Additional text related to Job result
  */
 def jobResultNotification(String buildStatusParam, String channel = "#mk-ci",
                           String jobName=null,
                           Number buildNumber=null, String buildUrl=null,
-                          String credentialsId="SLACK_WEBHOOK_URL") {
+                          String credentialsId="SLACK_WEBHOOK_URL",
+                          String description='') {
     def jobNameParam = jobName != null && jobName != "" ? jobName : env.JOB_NAME
     def buildUrlParam = buildUrl != null && buildUrl != "" ? buildUrl : env.BUILD_URL
     def buildNumberParam = buildNumber != null && buildNumber != "" ? buildNumber : env.BUILD_NUMBER
@@ -54,7 +56,7 @@
     }
 
     queryString = 'payload={' +
-            "'text':'${buildStatusParam.toUpperCase()}: Job <${buildUrlParam}|${jobNameParam} [${buildNumberParam}]>', " +
+            "'text':'${buildStatusParam.toUpperCase()}: Job <${buildUrlParam}|${jobNameParam} [${buildNumberParam}]>\\n ${description}', " +
             "'color':'${colorCode}'," +
             "'pretext': '', " +
             '"icon_url": "https://cfr.slack-edge.com/ae7f/img/services/jenkins-ci_192.png",' +
diff --git a/src/com/mirantis/mk/Salt.groovy b/src/com/mirantis/mk/Salt.groovy
index 7688c0e..ca4587e 100644
--- a/src/com/mirantis/mk/Salt.groovy
+++ b/src/com/mirantis/mk/Salt.groovy
@@ -508,7 +508,7 @@
         if (checkAvailability) {
             minionsReachable(saltId, 'I@salt:master', target_reachable)
         }
-        def running = salt.runSaltProcessStep(saltId, target, 'saltutil.running', [], null, true, timeout)
+        def running = runSaltProcessStep(saltId, target, 'saltutil.running', [], null, true, timeout)
         for (value in running.get("return")[0].values()) {
             if (value != []) {
                 throw new Exception("Not all salt-minions are ready for execution")
diff --git a/src/com/mirantis/mk/SaltModelTesting.groovy b/src/com/mirantis/mk/SaltModelTesting.groovy
index 585cb8b..0e49a42 100644
--- a/src/com/mirantis/mk/SaltModelTesting.groovy
+++ b/src/com/mirantis/mk/SaltModelTesting.groovy
@@ -50,17 +50,21 @@
     if (baseRepoPreConfig) {
         // extra repo on mirror.mirantis.net, which is not supported before 2018.11.0 release
         def extraRepoSource = "deb [arch=amd64] http://mirror.mirantis.com/${distribRevision}/extra/xenial xenial main"
+        def releaseVersionQ4 = '2018.11.0'
+        def oldRelease = false
         try {
             def releaseNaming = 'yyyy.MM.dd'
             def repoDateUsed = new Date().parse(releaseNaming, distribRevision)
-            def extraAvailableFrom = new Date().parse(releaseNaming, '2018.11.0')
+            def extraAvailableFrom = new Date().parse(releaseNaming, releaseVersionQ4)
             if (repoDateUsed < extraAvailableFrom) {
                 extraRepoSource = "deb http://apt.mcp.mirantis.net/xenial ${distribRevision} extra"
+                oldRelease = true
             }
         } catch (Exception e) {
             common.warningMsg(e)
             if (!(distribRevision in ['nightly', 'proposed', 'testing'])) {
                 extraRepoSource = "deb [arch=amd64] http://apt.mcp.mirantis.net/xenial ${distribRevision} extra"
+                oldRelease = true
             }
         }
 
@@ -96,6 +100,12 @@
         def extraRepoMergeStrategy = config.get('extraRepoMergeStrategy', 'override')
         def extraRepos = config.get('extraRepos', [:])
         def defaultRepos = readYaml text: defaultExtraReposYaml
+        if (! oldRelease && distribRevision != releaseVersionQ4) {
+            defaultRepos['repo']['mcp_saltformulas_update'] = [
+                'source': "deb [arch=amd64]  http://mirror.mirantis.com/update/${distribRevision}/salt-formulas/xenial xenial main",
+                'repo_key': "http://mirror.mirantis.com/update/${distribRevision}/salt-formulas/xenial/archive-salt-formulas.key"
+            ]
+        }
         if (extraRepoMergeStrategy == 'merge') {
             extraReposConfig = common.mergeMaps(defaultRepos, extraRepos)
         } else {
