diff --git a/day01-image/scripts/cleanup_day01.sh b/day01-image/scripts/cleanup_day01.sh
index 89cd6e7..b12cbb6 100644
--- a/day01-image/scripts/cleanup_day01.sh
+++ b/day01-image/scripts/cleanup_day01.sh
@@ -2,7 +2,7 @@
 
 # stop and disable services, for healthy zerodisk
 # They should be enabled after cfg01 init
-stop_services="postgresql.service salt-api salt-master salt-minion jenkins maas-rackd.service maas-regiond.service bind9"
+stop_services="postgresql.service salt-api salt-master salt-minion jenkins maas-rackd.service maas-regiond.service maas-dhcpd.service maas-dhcpd6.service bind9"
 for s in ${stop_services} ; do
   systemctl stop ${s} || true
   systemctl disable ${s} || true
diff --git a/packer-image-buid.groovy b/packer-image-buid.groovy
index 87ef652..8d6c2c5 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} --property build='${env.BUILD_URL}' --container-format bare --disk-format qcow2"
+                                _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}")
                     }
 
                 }
