diff --git a/packer-image-buid.groovy b/packer-image-buid.groovy
index 87ef652..ebf0924 100644
--- a/packer-image-buid.groovy
+++ b/packer-image-buid.groovy
@@ -30,7 +30,7 @@
  *  OS_URL             = Keystone auth endpoint of the OpenStack.
  *  OS_PROJECT         =
  *
- *  PUBLISH_BACKEND = local|glance|http
+ *  PUBLISH_BACKEND = local,glance,http
  *  UPLOAD_URL      = URL of an WebDAV used to upload the image after creating.(Only in case PUBLISH_BACKEND == http)
  */
 
@@ -61,6 +61,7 @@
 job_env['CLEANUP_AFTER'] = job_env.CLEANUP_AFTER.toBoolean()
 job_env['BUILD_ONLY'] = job_env.BUILD_ONLY.toLowerCase()
 job_env['PUBLISH_BACKEND'] = job_env.PUBLISH_BACKEND.toLowerCase()
+publishBackends = job_env['PUBLISH_BACKEND'].split(',')
 //
 defaultGitRef = job_env.get('REFSPEC', 'HEAD')
 defaultGitUrl = job_env.get('DEFAULT_GIT_URL', null)
@@ -89,11 +90,9 @@
 timeout(time: 6, unit: 'HOURS') {
     node(slaveNode) {
         def workspace = common.getWorkspace()
+        def openstackEnv = "${workspace}/venv"
+        def rcFile = ''
         creds = common.getPasswordCredentials(job_env.CREDENTIALS_ID)
-        if (job_env.BUILD_ONLY == 'openstack' || job_env.PUBLISH_BACKEND == 'glance') {
-            rcFile = openstack.createOpenstackEnv(workspace, os_openrc.OS_AUTH_URL, job_env.OS_TENANT_ID, job_env.OS_TENANT_NAME, "default", "", "default", "2", "")
-            def openstackEnv = "${workspace}/venv"
-        }
 
         stage("checkout") {
             if (defaultGitRef && defaultGitUrl) {
@@ -103,6 +102,10 @@
             }
         }
 
+        if (job_env.BUILD_ONLY == 'openstack' || 'glance' in publishBackends) {
+            rcFile = openstack.createOpenstackEnv(workspace, os_openrc['OS_AUTH_URL'], os_openrc['OS_CREDENTIALS_ID'], os_openrc['OS_PROJECT_NAME'], "default", "", "default", "3", "")
+        }
+
         try {
             def _artifact_dir = "${workspace}/artifacts"
             def _artifact_list = []
@@ -261,13 +264,14 @@
 
             stage("Publish artifacts") {
                 dir(_artifact_dir) {
+                    def published = false
                     common.infoMsg("Processing md5 for artifacts")
                     for (String x : _artifact_list) {
                         _md5 = sh(script: "md5sum ${x} > ${x}.md5; cat ${x}.md5", returnStdout: true).trim()
                         _size = sh(script: "ls -alh ${x}", returnStdout: true).trim()
                         common.infoMsg("Artifact file: ${_size}\n${_md5}")
                     }
-                    if (job_env.PUBLISH_BACKEND == 'local') {
+                    if ('local' in publishBackends) {
                         common.infoMsg("Uploading to: local")
                         common.infoMsg("For local publish target - nothing to do, all files in: ${_artifact_dir}")
                         if (job_env.get('CLEANUP_AFTER', false)) {
@@ -275,30 +279,30 @@
                             common.warningMsg("Disabling CLEANUP_AFTER option, to save you'r data ;) ")
                             job_env.CLEANUP_AFTER = false
                         }
-                    } else if (job_env.PUBLISH_BACKEND == 'glance') {
+                        published = true
+                    }
+                    if ('glance' in publishBackends) {
                         common.infoMsg("Uploading to: glance-openstack")
                         if (fileExists("${workspace}/venv")) {
                             common.infoMsg("cleaning virtualenv at:${workspace}/venv")
                             sh(script: "rm -rf ${workspace}/venv", returnStatus: true)
                         }
-                        openstack.setupOpenstackVirtualenv(openstackEnv, job_env.OS_VERSION)
+                        openstack.setupOpenstackVirtualenv(openstackEnv)
                         for (String x : findFiles(glob: "*.*")) {
-                            if (x.endsWith('.md5')) {
-                                common.warningMsg("Skipping:${x} from openstack upload!")
-                                _md5sum = sh(script: "cat ${x}", returnStdout: true).trim().split()[0]
-                                continue
+                            if (x.getName().endsWith('.qcow2')) {
+                                _md5sum = sh(script: "cat ${x}.md5", returnStdout: true).trim().split()[0]
+                                _property = "--property data=${dateTime} --property md5sum=${_md5sum}"
+                                _cmdline = String.format("glance image-create --visibility " +
+                                        "public %s --name '%s' --file %s", _property, imageName, x)
+                                openstack.runOpenstackCommand(_cmdline, rcFile, openstackEnv)
                             }
-                            _property = "--property data=${dateTime} --property md5sum=${_md5sum}"
-                            _cmdline = String.format("glance image-create --visibility " +
-                                    "public %s --name '%s' %s --file %s", _property, imageShortName, glanceRunArgs, imageName)
-                            openstack.runOpenstackCommand(_cmdline, rcFile, openstackEnv)
                         }
-                        // TODO
-                        currentBuild.description = "${imageName}.qcow2 uploaded tenant: "
-
-                    } else if (job_env.PUBLISH_BACKEND == 'http') {
+                        currentBuild.description = "${imageName}.qcow2 uploaded tenant: ${job_env['OS_PROJECT_NAME']}"
+                        published = true
+                    }
+                    if ('http' in publishBackends) {
                         for (String u_file : findFiles(glob: '*.*')) {
-                            common.infoMsg("Uploading image ${imageName}")
+                            common.infoMsg("Uploading image ${u_file}")
                             def uploadImageStatus = ''
                             common.retry(3, 5) {
                                 uploadImageStatus = sh(script: "curl -f -T ${u_file} ${job_env.UPLOAD_URL}", returnStatus: true)
@@ -309,9 +313,10 @@
                             // Fixme for correct path ?
                             currentBuild.description = "<a href='http://images.mcp.mirantis.net/${imageName}.qcow2'>${imageName}.qcow2</a>"
                         }
-
-                    } else {
-                        throw new Exception("Unsupported publish backend:${job_env.PUBLISH_BACKEND}")
+                        published = true
+                    }
+                    if (! published) {
+                        throw new Exception("Unsupported publish backend: ${publishBackends}")
                     }
 
                 }
