diff --git a/murano-apps/CiCdEnvironment/package/Classes/CiCdEnvironment.yaml b/murano-apps/CiCdEnvironment/package/Classes/CiCdEnvironment.yaml
index efd88cb..e43efc1 100644
--- a/murano-apps/CiCdEnvironment/package/Classes/CiCdEnvironment.yaml
+++ b/murano-apps/CiCdEnvironment/package/Classes/CiCdEnvironment.yaml
@@ -26,6 +26,9 @@ Properties:
     Contract: $.class(ci_cd_pipeline_murano_app:Nodepool)
     Usage: Out
 
+  systemConfigRepo:
+    Contract: $.class(puppet:SystemConfig)
+
   zuulNodepoolHelper:
     Contract: $.class(ci_cd_pipeline_murano_app:ZuulNodepoolHelper)
   ldapRootUser:
@@ -104,7 +107,8 @@ Methods:
               name => 'Gerrit',
               instance => $gerritInstance,
               ldap => $this.ldap,
-              userSSH => $this.userSSH)
+              userSSH => $this.userSSH,
+              systemConfigRepo => $.systemConfigRepo)
 
       # Jenkins
       # set user and mail for accessing to Gerrit from Jenkins
@@ -128,7 +132,8 @@ Methods:
               gerrit => $this.gerrit,
               cfplugin => false,
               gitUser => $.ldapUser,
-              gitEmail => $.ldapEmail)
+              gitEmail => $.ldapEmail,
+              systemConfigRepo => $.systemConfigRepo)
 
       # Zuul
       - If: $this.zuul = null and $this.zuulNodepoolHelper != null
@@ -144,7 +149,8 @@ Methods:
           - $this.zuul: new(ci_cd_pipeline_murano_app:Zuul, $._environment,
               name => 'Zuul',
               instance => $zuulInstance,
-              gerrit => $this.gerrit)
+              gerrit => $this.gerrit,
+              systemConfigRepo => $.systemConfigRepo)
 
       # Nodepool
       - If: $this.nodepool = null and $this.zuulNodepoolHelper != null
@@ -165,7 +171,8 @@ Methods:
               authUrl => $this.zuulNodepoolHelper.authUrl,
               username => $this.zuulNodepoolHelper.username,
               tenant => $this.zuulNodepoolHelper.tenant,
-              password => $this.zuulNodepoolHelper.password)
+              password => $this.zuulNodepoolHelper.password,
+              systemConfigRepo => $.systemConfigRepo)
 
       # Deploy all
       - $applications:
diff --git a/murano-apps/CiCdEnvironment/package/UI/ui.yaml b/murano-apps/CiCdEnvironment/package/UI/ui.yaml
index edbcbe5..2973575 100644
--- a/murano-apps/CiCdEnvironment/package/UI/ui.yaml
+++ b/murano-apps/CiCdEnvironment/package/UI/ui.yaml
@@ -18,6 +18,7 @@ Application:
   keyname: $.instanceConfiguration.keyPair
   availabilityZone: $.instanceConfiguration.availabilityZone
   assignFloatingIp: true
+  systemConfigRepo: $.appConfiguration.systemConfigRepo
 
 Forms:
   - appConfiguration:
@@ -81,6 +82,13 @@ Forms:
           descriptionTitle: User public ssh key
           description: >
             Please, provide user public ssh key.
+        - name: systemConfigRepo
+          type: org.openstack.ci_cd_pipeline_murano_app.puppet.SystemConfig
+          label: system-config Url
+          required: false
+          descriptionTitle: system-config Url
+          description: >
+            Please, provide url for system-config repository.
         - name: zuulNodepoolHelper
           type: org.openstack.ci_cd_pipeline_murano_app.ZuulNodepoolHelper
           label: Zuul and Nodepool
@@ -88,6 +96,7 @@ Forms:
           descriptionTitle: Zuul and Nodepool
           description: >
             Specify Zuul and Nodepool parameters if needed.
+
   - instanceConfiguration:
       fields:
         - name: title
diff --git a/murano-apps/CiCdEnvironment/package/manifest.yaml b/murano-apps/CiCdEnvironment/package/manifest.yaml
index 56426ff..6cd1c3c 100644
--- a/murano-apps/CiCdEnvironment/package/manifest.yaml
+++ b/murano-apps/CiCdEnvironment/package/manifest.yaml
@@ -16,6 +16,7 @@ Require:
   org.openstack.ci_cd_pipeline_murano_app.Jenkins:
   org.openstack.ci_cd_pipeline_murano_app.Gerrit:
   org.openstack.ci_cd_pipeline_murano_app.puppet.Puppet:
+  org.openstack.ci_cd_pipeline_murano_app.puppet.SystemConfig:
   org.openstack.ci_cd_pipeline_murano_app.utils.CiCdUtils:
   org.openstack.ci_cd_pipeline_murano_app.ZuulNodepoolHelper:
   org.openstack.ci_cd_pipeline_murano_app.Zuul:
diff --git a/murano-apps/Gerrit/package/Classes/Gerrit.yaml b/murano-apps/Gerrit/package/Classes/Gerrit.yaml
index 54ede09..0f5e1b6 100644
--- a/murano-apps/Gerrit/package/Classes/Gerrit.yaml
+++ b/murano-apps/Gerrit/package/Classes/Gerrit.yaml
@@ -22,6 +22,8 @@ Properties:
     Contract: $.class(ci_cd_pipeline_murano_app:OpenLDAP)
   userSSH:
     Contract: $.string()
+  systemConfigRepo:
+    Contract: $.class(puppet:SystemConfig)
 
 Methods:
   initialize:
@@ -60,7 +62,12 @@ Methods:
 
       - $._environment.reporter.report($this, 'Installing puppet modules...')
 
-      - $this.systemConfig: new(puppet:SystemConfig)
+       # initialize System Config
+      - If: $.systemConfigRepo = null
+        Then:
+          - $this.systemConfig: new(puppet:SystemConfig)
+        Else:
+          - $this.systemConfig: $.systemConfigRepo
       - $this.systemConfig.installOnTheNode($this.instance)
 
       - If: $.ldap != null
diff --git a/murano-apps/Gerrit/package/UI/ui.yaml b/murano-apps/Gerrit/package/UI/ui.yaml
index a692bb3..e4931ff 100644
--- a/murano-apps/Gerrit/package/UI/ui.yaml
+++ b/murano-apps/Gerrit/package/UI/ui.yaml
@@ -7,6 +7,7 @@ Application:
   warUrl: $.appConfiguration.warUrl
   ldap: $.appConfiguration.OpenLDAP
   userSSH: $.appConfiguration.userSSH
+  systemConfigRepo: $.appConfiguration.systemConfigRepo
   instance:
     ?:
       type: org.openstack.ci_cd_pipeline_murano_app.puppet.PuppetInstance
@@ -54,6 +55,13 @@ Forms:
           descriptionTitle: User public ssh key
           description: >-
             Please, provide user public ssh key
+        - name: systemConfigRepo
+          type: org.openstack.ci_cd_pipeline_murano_app.puppet.SystemConfig
+          label: system-config Url
+          required: false
+          descriptionTitle: system-config Url
+          description: >
+            Please, provide url for system-config repository.
   - instanceConfiguration:
       fields:
         - name: title
diff --git a/murano-apps/Jenkins/package/Classes/Jenkins.yaml b/murano-apps/Jenkins/package/Classes/Jenkins.yaml
index 0e72732..ac91e11 100644
--- a/murano-apps/Jenkins/package/Classes/Jenkins.yaml
+++ b/murano-apps/Jenkins/package/Classes/Jenkins.yaml
@@ -29,6 +29,8 @@ Properties:
     Contract: $.string()
   gitEmail:
     Contract: $.string()
+  systemConfigRepo:
+    Contract: $.class(puppet:SystemConfig)
 
 Methods:
   initialize:
@@ -52,7 +54,12 @@ Methods:
           - $.instance.deploy()
           - $._environment.reporter.report($this, 'Jenkins VM "{0}" with id {1} created'.format($.instance.name, $.instance.openstackId))
 
-          - $this.systemConfig: new(puppet:SystemConfig)
+           # initialize System Config
+          - If: $.systemConfigRepo = null
+            Then:
+              - $this.systemConfig: new(puppet:SystemConfig)
+            Else:
+              - $this.systemConfig: $.systemConfigRepo
           - $this.systemConfig.installOnTheNode($this.instance)
 
           - $resources: new(sys:Resources)
diff --git a/murano-apps/Jenkins/package/UI/ui.yaml b/murano-apps/Jenkins/package/UI/ui.yaml
index 97da0c9..1c387a8 100644
--- a/murano-apps/Jenkins/package/UI/ui.yaml
+++ b/murano-apps/Jenkins/package/UI/ui.yaml
@@ -10,6 +10,7 @@ Application:
   dockerplugin: $.appConfiguration.dockerplugin
   gitUser: $.appConfiguration.gitUser
   gitEmail: $.appConfiguration.gitEmail
+  systemConfigRepo: $.appConfiguration.systemConfigRepo
   instance:
     ?:
       type: org.openstack.ci_cd_pipeline_murano_app.puppet.PuppetInstance
@@ -56,6 +57,13 @@ Forms:
           required: false
           description: >-
             Specify OpenLDAP domain for authentication
+        - name: systemConfigRepo
+          type: org.openstack.ci_cd_pipeline_murano_app.puppet.SystemConfig
+          label: system-config Url
+          required: false
+          descriptionTitle: system-config Url
+          description: >
+            Please, provide url for system-config repository.
         - name: Gerrit
           type: org.openstack.ci_cd_pipeline_murano_app.Gerrit
           required: false
diff --git a/murano-apps/Nodepool/package/Classes/Nodepool.yaml b/murano-apps/Nodepool/package/Classes/Nodepool.yaml
index 4f8bc4a..0ddf6e2 100644
--- a/murano-apps/Nodepool/package/Classes/Nodepool.yaml
+++ b/murano-apps/Nodepool/package/Classes/Nodepool.yaml
@@ -29,6 +29,8 @@ Properties:
     Contract: $.string().notNull()
   password:
     Contract: $.string().notNull()
+  systemConfigRepo:
+    Contract: $.class(puppet:SystemConfig)
 
 Methods:
   .init:
@@ -54,7 +56,12 @@ Methods:
 
       - $._environment.reporter.report($this, 'Installing needed puppets for Nodepool...')
 
-      - $this.systemConfig: new(puppet:SystemConfig)
+       # initialize System Config
+      - If: $.systemConfigRepo = null
+        Then:
+          - $this.systemConfig: new(puppet:SystemConfig)
+        Else:
+          - $this.systemConfig: $.systemConfigRepo
       - $this.systemConfig.installOnTheNode($this.instance)
 
       - $._environment.reporter.report($this, 'Waiting while Jenkins is being deployed...')
diff --git a/murano-apps/Nodepool/package/UI/ui.yaml b/murano-apps/Nodepool/package/UI/ui.yaml
index b6981c1..3f86703 100644
--- a/murano-apps/Nodepool/package/UI/ui.yaml
+++ b/murano-apps/Nodepool/package/UI/ui.yaml
@@ -10,6 +10,7 @@ Application:
   username: $.openstackConfiguration.username
   tenant: $.openstackConfiguration.tenant
   password: $.openstackConfiguration.password
+  systemConfigRepo: $.appConfiguration.systemConfigRepo
   instance:
     ?:
       type: org.openstack.ci_cd_pipeline_murano_app.puppet.PuppetInstance
@@ -37,6 +38,13 @@ Forms:
              Select to true to assign floating IP automatically
           initial: true
           required: false
+        - name: systemConfigRepo
+          type: org.openstack.ci_cd_pipeline_murano_app.puppet.SystemConfig
+          label: system-config Url
+          required: false
+          descriptionTitle: system-config Url
+          description: >
+            Please, provide url for system-config repository.
         - name: Jenkins
           type: org.openstack.ci_cd_pipeline_murano_app.Jenkins
           label: Jenkins
diff --git a/murano-apps/SystemConfig/package/Classes/SystemConfig.yaml b/murano-apps/SystemConfig/package/Classes/SystemConfig.yaml
index 5bb7477..9b30872 100644
--- a/murano-apps/SystemConfig/package/Classes/SystemConfig.yaml
+++ b/murano-apps/SystemConfig/package/Classes/SystemConfig.yaml
@@ -1,13 +1,26 @@
 Namespaces:
   =: org.openstack.ci_cd_pipeline_murano_app.puppet
+  std: io.murano
   sys: io.murano.system
   puppet: org.openstack.ci_cd_pipeline_murano_app.puppet
 
+Extends: std:Application
+
 Name: SystemConfig
 Properties:
-  projectConfigRepo:
+  name:
+    Contract: $.string().notNull()
+    Default: 'System Config'
+  projectConfigUrl:
     Contract: $.string().notNull()
     Default: 'https://review.fuel-infra.org/open-paas/project-config'
+  systemConfigUrl:
+    Contract: $.string().notNull()
+    Default: 'https://review.fuel-infra.org/open-paas/system-config'
+  branchName:
+    Contract: $.string()
+  patchId:
+    Contract: $.string()
 Methods:
   installOnTheNode:
     Arguments:
@@ -15,7 +28,10 @@ Methods:
         Contract: $.class(puppet:PuppetInstance)
     Body:
       - $resources: new(sys:Resources)
-      - $template: $resources.yaml('SystemConfig.template')
+      - $template: $resources.yaml('SystemConfig.template').bind(dict(
+            url => $this.systemConfigUrl,
+            branch => $this.branchName,
+            patch_id => $this.patchId))
       - $instance.agent.call($template, $resources)
-      - $instance.putHieraData({'project_config_repo' => $this.projectConfigRepo})
+      - $instance.putHieraData({'project_config_repo' => $this.projectConfigUrl})
       - $instance.installPuppetModule('reidmv/yamlfile')
diff --git a/murano-apps/SystemConfig/package/Resources/SystemConfig.template b/murano-apps/SystemConfig/package/Resources/SystemConfig.template
index 9a57e36..02fc1dc 100644
--- a/murano-apps/SystemConfig/package/Resources/SystemConfig.template
+++ b/murano-apps/SystemConfig/package/Resources/SystemConfig.template
@@ -2,8 +2,17 @@ FormatVersion: 2.1.0
 Version: 1.0.0
 Name: Deploy Project Config
 
+Parameters:
+  url: $url
+  branch: $branch
+  patch_id: $patch_id
+
 Body: |
-  return deploy().stdout
+  return deploy(
+      '"{0}" "{1}" "{2}"'.format(
+          args.url,
+          args.branch,
+          args.patch_id)).stdout
 
 Scripts:
   deploy:
diff --git a/murano-apps/SystemConfig/package/Resources/scripts/deploy.sh b/murano-apps/SystemConfig/package/Resources/scripts/deploy.sh
index 6f8f543..2906f09 100644
--- a/murano-apps/SystemConfig/package/Resources/scripts/deploy.sh
+++ b/murano-apps/SystemConfig/package/Resources/scripts/deploy.sh
@@ -1,16 +1,37 @@
 #!/bin/bash
 
+URL="$1"
+BRANCH="$2"
+PATCH_ID="$3"
+
 logger Cloning openstack-ci system-config
 
-git clone https://review.fuel-infra.org/open-paas/system-config
+repository_name="$(basename "$URL")"
+
+if [ -n "$PATCH_ID" ] ; then
+   git clone $URL
+   pushd $repository_name
+       patch_ref=`git ls-remote | grep $PATCH_ID | tail -1 | awk '{print $2}'`
+       if [ -z "$patch_ref" ] ; then
+           echo "Patch id $PATCH_ID is not correct."
+           exit 1
+       fi
+       git fetch $URL $patch_ref && git checkout "FETCH_HEAD"
+   popd
+elif [ -n "$BRANCH" ] ; then
+  git clone $URL --branch $BRANCH
+else
+  git clone $URL
+fi
 
 logger Installing openstack-ci system-config
 
-cd system-config
-./install_modules.sh
+pushd $repository_name
+    ./install_modules.sh
 
-cp -r modules/ /etc/puppet/
+    cp -r modules/ /etc/puppet/
 
-# Should be installed on the each node to use
-# domain2dn function
-puppet module install datacentred-ldap
\ No newline at end of file
+    # Should be installed on the each node to use
+    # domain2dn function
+    puppet module install datacentred-ldap
+popd
diff --git a/murano-apps/SystemConfig/package/UI/ui.yaml b/murano-apps/SystemConfig/package/UI/ui.yaml
new file mode 100644
index 0000000..b33bc54
--- /dev/null
+++ b/murano-apps/SystemConfig/package/UI/ui.yaml
@@ -0,0 +1,43 @@
+Version: 2
+
+Application:
+  ?:
+    type: org.openstack.ci_cd_pipeline_murano_app.puppet.SystemConfig
+  name: $.appConfiguration.name
+  projectConfigUrl: $.appConfiguration.projectConfigUrl
+  systemConfigUrl: $.appConfiguration.systemConfigUrl
+  branchName: $.appConfiguration.branchName
+  patchId: $.appConfiguration.patchId
+
+Forms:
+  - appConfiguration:
+      fields:
+        - name: name
+          type: string
+          label: Application Name
+          initial: System Config
+          description: >
+            Enter a desired name for the application. Just A-Z, a-z, 0-9, dash and
+            underline are allowed
+        - name: systemConfigUrl
+          type: string
+          label: Url for System Config Repository
+          description: Provide URL for system config repository.
+          initial: https://review.fuel-infra.org/open-paas/system-config
+          required: true
+        - name: projectConfigUrl
+          type: string
+          label: Url for Project Config Repository
+          description: Provide URL for project config repository.
+          initial: https://review.fuel-infra.org/open-paas/project-config
+          required: true
+        - name: branchName
+          type: string
+          label: Branch Name
+          description: Provide branch, which should be used for for system-config repo.
+          required: false
+        - name: patchId
+          type: string
+          label: Patch Id
+          description: Provide Id of patchset, which will be used for system-config repo.
+          required: false
diff --git a/murano-apps/SystemConfig/package/manifest.yaml b/murano-apps/SystemConfig/package/manifest.yaml
index d0df736..dfaf668 100644
--- a/murano-apps/SystemConfig/package/manifest.yaml
+++ b/murano-apps/SystemConfig/package/manifest.yaml
@@ -9,6 +9,7 @@ Author: 'Mirantis, Inc'
 Tags: [CI]
 Classes:
  org.openstack.ci_cd_pipeline_murano_app.puppet.SystemConfig: SystemConfig.yaml
+UI: ui.yaml
 Logo: logo.png
 Require:
   org.openstack.ci_cd_pipeline_murano_app.puppet.Puppet:
diff --git a/murano-apps/Zuul/package/Classes/Zuul.yaml b/murano-apps/Zuul/package/Classes/Zuul.yaml
index 6446274..9cded52 100644
--- a/murano-apps/Zuul/package/Classes/Zuul.yaml
+++ b/murano-apps/Zuul/package/Classes/Zuul.yaml
@@ -17,6 +17,8 @@ Properties:
     Contract: $.class(puppet:PuppetInstance).notNull()
   gerrit:
     Contract: $.class(Gerrit)
+  systemConfigRepo:
+    Contract: $.class(puppet:SystemConfig)
 Methods:
   .init:
     Body:
@@ -47,7 +49,12 @@ Methods:
           - $.instance.deploy()
           - $._environment.reporter.report($this, 'Zuul VM "{0}" with id {1} created'.format($.instance.name, $.instance.openstackId))
 
-          - $this.systemConfig: new(puppet:SystemConfig)
+           # initialize System Config
+          - If: $.systemConfigRepo = null
+            Then:
+              - $this.systemConfig: new(puppet:SystemConfig)
+            Else:
+              - $this.systemConfig: $.systemConfigRepo
           - $this.systemConfig.installOnTheNode($this.instance)
 
           - $._environment.reporter.report($this, 'Zuul is waiting while Gerrit is being deployed...')
diff --git a/murano-apps/Zuul/package/UI/ui.yaml b/murano-apps/Zuul/package/UI/ui.yaml
index 78588fb..b6e664b 100644
--- a/murano-apps/Zuul/package/UI/ui.yaml
+++ b/murano-apps/Zuul/package/UI/ui.yaml
@@ -5,6 +5,7 @@ Application:
     type: org.openstack.ci_cd_pipeline_murano_app.Zuul
   name: $.appConfiguration.name
   gerrit: $.appConfiguration.Gerrit
+  systemConfigRepo: $.appConfiguration.systemConfigRepo
   instance:
     ?:
       type: org.openstack.ci_cd_pipeline_murano_app.puppet.PuppetInstance
@@ -22,6 +23,13 @@ Forms:
           type: string
           label: Application Name
           initial: Zuul
+        - name: systemConfigRepo
+          type: org.openstack.ci_cd_pipeline_murano_app.puppet.SystemConfig
+          label: system-config Url
+          required: false
+          descriptionTitle: system-config Url
+          description: >
+            Please, provide url for system-config repository.
         - name: Gerrit
           type: org.openstack.ci_cd_pipeline_murano_app.Gerrit
           description: Gerrit Server